MySQL —— 基本查詢方法
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 —— 基本查詢方法