MySQL —— 簡單查詢與按條件查詢mysql
在MySQL中從數據表中查詢數據的基本語句時select語句。
select語句基本語法格式:
select 查詢內容
from 表名
where 表達式
group by 字段名
having 表達式
order by 字段名
limit 記錄數
每個select語句由多個子句組成。sql
1. from 表名 指定是從那張表中查詢函數
2. select 查詢內容spa
查詢全部字段 select * from 表名;
*通配符:表示全部字段code
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 表名;blog
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子句中可使用關係運算符連
接操做數做爲查詢條件對數據進行選擇。
關係運算符:
= 等於
<> 不等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於it
例如查詢年齡大於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 一塊兒使用,表示對分組後的數據進行過濾