1. 程式人生 > >MySQL —— 基本查詢方法

MySQL —— 基本查詢方法

ike 一個 cdma sele 等於 偏移量 充電 5.6 排序

MySQL —— 簡單查詢與按條件查詢

在MySQL中從數據表中查詢數據的基本語句時select語句。
select語句基本語法格式:
select 查詢內容
from 表名
where 表達式
group by 字段名
having 表達式
order by 字段名
limit 記錄數
每一個select語句由多個子句組成。

1. from 表名 指定是從那張表中查詢


2. select 查詢內容

查詢所有字段 select * from 表名
*通配符:表示所有字段

技術分享圖片
mysql> select * from test;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | A    |    4 |
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
4 rows in set (0.06 sec)
技術分享圖片

查詢部分字段 select 字段名 from 表名;

技術分享圖片
mysql> select name from test;
+------+
| name |
+------+
| A    |
| B    |
| C    |
| D    |
+------+
4 rows in set (0.00 sec)
技術分享圖片

在MySQL表中,每個字段的數據可以當做變量處理
查詢所需的某個字段數據處理後的結果:select 字段處理方式 from 表名

技術分享圖片
mysql> select age-3  from test;
+-------+
| age-3 |
+-------+
|     1 |
|     4 |
|     2 |
|     9 |
+-------+
4 rows in set (0.11 sec)
技術分享圖片

3. where 表達式 (按條件查詢)

在MySQL的表查詢時,往往並不是需要將所有內容全部查出,而是根據實際需求,查詢所需數據
select 查詢內容 from 表名 where 表達式;

在MySQL語句中,條件表達式是指select語句的查詢條件,在where子句中可以使用關系運算符
接操作數作為查詢條件對數據進行選擇。
關系運算符:
= 等於
<> 不等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於

例如查詢年齡大於5的信息

技術分享圖片
mysql> select * from test where age > 5;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.04 sec)
技術分享圖片

in的關鍵字查詢

查詢某個指定集合內的記錄 select 查詢內容 from 表名 where 條件 in(指定內容);

技術分享圖片
mysql> select * from test where age in (5, 12);
+------+------+------+
| id   | name | age  |
+------+------+------+
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.00 sec)
技術分享圖片

帶有between and 關健字查詢

查詢某個在給定範圍內的記錄 select 查詢內容 from 表名 where 條件 between 值1 and 值2

技術分享圖片
mysql> select * from test where age between 5 and 12;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
3 rows in set (0.07 sec)
技術分享圖片

查詢某些為空NULL 或 非空的記錄 select 查詢內容 from 表名 where 條件 is(not) NULL

技術分享圖片
mysql> select * from test where age is NULL;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    6 | F    | NULL |
+------+------+------+
1 row in set (0.00 sec)
技術分享圖片

在查詢時過濾掉重復的值:select distinct 字段名 from 表名;字段名表示要過濾重復記錄的字段

技術分享圖片
mysql> select num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
|   10 |
|   15 |
|    5 |
|   10 |
+------+
7 rows in set (0.00 sec)
mysql> select distinct num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
+------+
3 rows in set (0.00 sec)
技術分享圖片

在使用distinct指定多個字段時,只有被指定的這些字段的值都相同,才會被認為是重復的

在查詢具有一類相同特征的數據時,需要用到模糊查詢,這是就需要使用like關鍵字
select 查詢內容 from 表名 where 內容 (not) like ‘匹配的字符串’
百分號通配符 %:表示匹配任意長度的任意字符串

技術分享圖片
mysql> select name from name;
+------+
| name |
+------+
| 1112 |
| 1122 |
| 1222 |
| 2111 |
+------+
4 rows in set (0.00 sec)
mysql> select name from name where name like ‘11%‘;
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)
技術分享圖片

下劃線通配符 _ :表示匹配任意單個字符,如果需要匹配多個字符,則需要使用多個 _

技術分享圖片
mysql> select name from name where name like ‘11__‘;
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)
技術分享圖片

如果需要查詢帶有 % 或 _ 的數據,由於 % 和 _ 是通配符,則需要使用 \ 進行轉義
\% 表示 %,\_ 表示 _

有時在查詢時為了查詢結果更加精確,需要多個限條件,這時就需要 and(&&) 來連接條件

技術分享圖片
mysql> select cat_id, cat_name, parent_id from category;
+--------+---------------------------+-----------+
| cat_id | cat_name                  | parent_id |
+--------+---------------------------+-----------+
|      1 | 手機類型                  |         0 |
|      2 | CDMA手機                  |         1 |
|      3 | GSM手機                   |         1 |
|      4 | 3G手機                    |         1 |
|      5 | 雙模手機                  |         1 |
|      6 | 手機配件                  |         0 |
|      7 | 充電器                    |         6 |
|      8 | 耳機                      |         6 |
|      9 | 電池                      |         6 |
|     11 | 讀卡器和內存卡            |         6 |
|     12 | 充值卡                    |         0 |
|     13 | 小靈通/固話充值卡         |        12 |
|     14 | 移動手機充值卡            |        12 |
|     15 | 聯通手機充值卡            |        12 |
+--------+---------------------------+-----------+
14 rows in set (0.00 sec)
mysql> select cat_id, cat_name, parent_id from category
    -> where cat_id > 7 and parent_id = 6;
+--------+-----------------------+-----------+
| cat_id | cat_name              | parent_id |
+--------+-----------------------+-----------+
|      8 | 耳機                  |         6 |
|      9 | 電池                  |         6 |
|     11 | 讀卡器和內存卡        |         6 |
+--------+-----------------------+-----------+
3 rows in set (0.05 sec)
技術分享圖片

有時在查詢時,只需要數據滿足某些條件中的某一個,這時就需要使用 or(||) 來連接條件

技術分享圖片
mysql> select cat_id, cat_name, parent_id from category where cat_id = 3 or cat_id = 9;
+--------+-----------+-----------+
| cat_id | cat_name  | parent_id |
+--------+-----------+-----------+
|      3 | GSM手機   |         1 |
|      9 | 電池      |         6 |
+--------+-----------+-----------+
2 rows in set (0.02 sec)
技術分享圖片

註意:在查詢時,and 的優先級高於 or

聚合函數:

count()函數:統計記錄條數 select count(記錄) from 表名

技術分享圖片
mysql> select * from test;
  +------+------+------+
  | id   | name | age  |
  +------+------+------+
  |    1 | A    |    4 |
  |    2 | B    |    7 |
  |    3 | C    |    5 |
  |    4 | D    |   12 |
  |    5 | E    |    0 |
  |    6 | F    | NULL |
  +------+------+------+
  6 rows in set (0.01 sec)
  mysql> select count(name) from test;
  +-------------+
  | count(name) |
  +-------------+
  |           6 |
  +-------------+
  1 row in set (0.09 sec)
技術分享圖片

sum()函數:計算表中某個字段值的總和,select sum(字段名) from 表名

技術分享圖片
mysql> select sum(age) from test;
+----------+
| sum(age) |
+----------+
|       28 |
+----------+
1 row in set (0.00 sec)
技術分享圖片

avg()函數:計算表中某個字段的平均值 select avg(字段名) from 表名

技術分享圖片
  mysql> select avg(age) from test;
  +----------+
  | avg(age) |
  +----------+
  |   5.6000 |
  +----------+
  1 row in set (0.00 sec)
技術分享圖片

max()函數:返回表中某個字段中的最大值

技術分享圖片
  mysql> select max(age) from test;
  +----------+
  | max(age) |
  +----------+
  |       12 |
  +----------+
  1 row in set (0.04 sec)
技術分享圖片

min()函數:返回表中某個字段中的最小值

技術分享圖片
  mysql> select min(age) from test;
  +----------+
  | min(age) |
  +----------+
  |        0 |
  +----------+
  1 row in set (0.00 sec)
技術分享圖片

分組查詢:

在對數據表中的數據進行統計時,需要將數據按照一定的特征分組統計,此時就需
要使用分組查詢 select 查詢內容 from 表名 group by 分組依據 [having表達式條件]

技術分享圖片
  mysql> select * from test;
  +------+------+------+-------+
  | id   | name | age  | class |
  +------+------+------+-------+
  |    1 | A    |    4 |     1 |
  |    2 | B    |    7 |     1 |
  |    3 | C    |    5 |     1 |
  |    4 | D    |   12 |     2 |
  |    5 | E    |    0 |     2 |
  |    6 | F    |    8 |     3 |
  +------+------+------+-------+
  6 rows in set (0.00 sec)
  
  mysql> select max(age) from test group by class;
  +----------+
  | max(age) |
  +----------+
  |        7 |
  |       12 |
  |        8 |
  +----------+
  3 rows in set (0.03 sec)
技術分享圖片


對查詢結果進行排序
select 查詢內容 from 表名 order by 排序條件 asc/desc,asc表示升序 desc表示降序

技術分享圖片
  mysql> select name, age from test order by age asc;
  +------+------+
  | name | age  |
  +------+------+
  | E    |    0 |
  | A    |    4 |
  | C    |    5 |
  | B    |    7 |
  | F    |    8 |
  | D    |   12 |
  +------+------+
  6 rows in set (0.00 sec)
  mysql> select name, age from test order by age desc;
  +------+------+
  | name | age  |
  +------+------+
  | D    |   12 |
  | F    |    8 |
  | B    |    7 |
  | C    |    5 |
  | A    |    4 |
  | E    |    0 |
  +------+------+
技術分享圖片

限制查詢:
在查詢時,可能需要只顯示部分數據,這是需要限制查出來的數據數量
select 查詢內容 from 表名 limit 偏移量m 記錄數n,表示從第m+1個記錄開始查詢出n條記錄

技術分享圖片
  mysql> select name, age from test order by age asc limit 2, 2;
  +------+------+
  | name | age  |
  +------+------+
  | C    |    5 |
  | B    |    7 |
  +------+------+
  2 rows in set (0.00 sec)
技術分享圖片

where 與 having:
where 與 having關鍵字都用於設置條件表達式對查詢結果進行過濾,區別是having後面可以跟聚合
函數,而where不能,通常having關鍵字都與group by 一起使用,表示對分組後的數據進行過濾

MySQL —— 基本查詢方法