MySQL:數據查詢
數據查詢
一、基本查詢語句
1、語法:寫一行
select{*<字段列表>}//查詢的字段,多個字段用逗號分開
from<表1>,<表2>…//數據表名
{//可選
[where<表達式>]//限定條件,只能放一個。
2、實例
mysql> select * from publisher;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
二、單表查詢
1、用於查詢的比較運算
操作符 |
含義 |
操作符 |
含義 |
操作符 |
含義 |
= |
等於(不是==) |
<= |
小於、等於 |
in(set) |
等於值列表中的一個 |
> |
大於 |
<>(!=) |
不等於 |
like |
模糊查詢 |
>= |
大於、等於 |
:= |
賦值 |
is (not)null |
(不是)空值 |
< |
小於 |
betwee…and |
在兩值之間 |
|
|
2、比較運算符的優先級
優先級 |
運算符 |
優先級 |
運算符 |
1 |
算術運算符 |
5 |
[NOT] BETWEEN |
2 |
連接符 |
6 |
NOT |
3 |
比較符 |
7 |
AND |
4 |
IS [NOT] NULL, LIKE, [NOT] IN |
8 |
OR |
3、查詢所有字段
語法:
select * from 表名(心號兩邊有空格)
4、查詢指定字段,所有記錄
語法:
select 字段名1…字段名n from 表名 where 條件表達式
5、給顯示的列名重新命名
語法:
select 字段1 as 列名1[字段2 as 列名2……字段n as 列名n] from 表名
6、查詢指定記錄,單個記錄
語法:
select 字段名1…字段n from 表名 where 條件
7、帶IN關鍵字的查詢
作用:用於查詢指定範圍內的條件記錄,只要滿足條件範圍內的一個值即為匹配項
語法:
select 字段 from 數據表 where 指定字段(not)in(取值條件,取值條件1)等於where 指定字段=取值條件 or指定字段=取值條件1(order by 字段//條件可選);
【附】加not代表不在這個範圍的值
實例:
mysql> select bh,cbs from publisher where bh in(01,09) order by cbs;
+----+-----+ bh的值為01,09輸出結果
| bh | cbs |
+----+-----+
| 09 | 10 |
| 01 | 2 |
+----+-----+
8、帶BETWEEN AND的範圍查詢
作用:查詢每個範圍內的值
語法:
select 顯示結果的列 from 數據表名 where 條件的列 between 範圍的開始值 and 範圍的結束值;
字段名>=起始值 and 字段名<=結束值
兩個表達式字段名相同,值不同
實例:
mysql> select bh,cbs from publisher where cbs between 7 and 09;
+----+-----+
| bh | cbs |
+----+-----+
| 06 | 7 |
| 07 | 8 |
| 08 | 9 |
+----+-----+
9、帶LIKE的字符匹配查詢
作用:查詢某個字符,如“apple”“grape”“coconut”中帶“a”的字段
通配符:用於where的特殊字符
(1)、“%”匹配任意長度的字符,甚至包括零字符,最大字段為數據類型的長度
語法:
select 字段from 數據表名 where 字段(類型必須是char或varchar) like ‘條件%‘;
實例:
1)全部值
mysql> select*from publisher;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+
2)取bh列且0在前面的值
mysql> select*from publisher where bh like ‘0%‘;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+
3)取列bh且0在後面的值
mysql> select*from publisher where bh like ‘%0‘;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
| 20 | 21 | 1111 |
+----+-----+------+
4)取例bh且有0在的值
mysql> select*from publisher where bh like ‘%0%‘;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+
(2)“_”一次只能匹配任意一個字符;
作用:基本和“%”類似
語法:
select 字段from 數據表名 where 列 like ‘條件_‘;(後面兩個’條件_ _’)
【例】:
查詢bh列且以“1”開頭,後面接一個任意符
mysql> select*from publisher where bh like ‘1_‘;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
10、查詢空值
空值:一般表示數據未知、不適用或者在將來以後添加數據,它不是空格,或者0.
語法:
select 字段from 數據表名 where 列1 is null and…… and 例n;
11、帶AND的多條件查詢
條件:滿足所有的條件表達式
語法:
select 字段from 數據表名 where 條件表達式1 and 條件表達式2 … and 條件表達式n;
【例】
mysql> select bh,cbs,bz from publisher where bh=10 and cbs=11 and bz=1111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
12、帶0R的多條件查詢
條件:滿足一個條件表達式
語法:語法:
select 字段from 數據表名 where 條件表達式1 or 條件表達式2… or 條件表達式n;
【例】
mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 or bz=111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
【附】and和or聯用
【例】
mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 and bz=111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
mysql> select bh,cbs,bz from publisher where bh=10 and cbs=10 or bz=111;
Empty set (0.00 sec)
mysql> select bh,cbs,bz from publisher where bz=111 or bh=10 and cbs=10;
Empty set (0.00 sec)
說明:and的優先級高於or,因此先對and兩邊的操作數進行操作,再於or的操作數結合。
13、查詢結果不重復
語法:
select distinct 字段名 from 數據表名;
14、對查詢結果排序
(1)單列:
語法:
select 要顯示的字段from 數據表名 order by 排序依據的字段(聚合函數) desc\asc;
註意:desc降序,asc升序,asc為排序的默認方式
(2)多列:
語法:
select 要顯示的字段from 數據表名 order by a desc\asc,b desc\asc ……;
註意:先進行a表的升降序,在進行b表的升降序
15、使用LIMIT限制查詢結果的數量-----分頁查詢
語法:limit [位置偏移量,] 行數
位置偏移量:值從那行開始顯示,是可選,如果不指定,從第一條記錄開始(第一條記錄的位置從0開始,和java的索引相類似)
行數:指示返回的記錄
註意:limit 4 offset 3,意思為獲取從第五條記錄開始後面3條記錄,和limit 4,3返回的結果相同。
【例】select * from dingdan limit 2,3;
二、連接查詢------先內在外
1、內連接查詢(inner join)
語法:
①select 字段名 fromA表表名,B表表名……where【A表表名.】字段名a=【B表表名.】字段名b=……
②select 字段名 fromA表表名 inner join B表表名on【A表表名.】字段名a=【B表表名.】字段名b
註意:字段a、b必須是有相同意義和相同類型
2、外連接查詢
①左外連接:
select 需要的字段名 fromA表表名 left joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被稱為左表 B表被稱為右表
註意:
左外連接,不管連接條件是否滿足。都執行一次
右外連接,是否執行,根據連接條件判斷
②右外連接:
select 需要的字段名 fromA表表名 right joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被稱為左表 B表被稱為右表
註意:
右外連接,不管連接條件是否滿足。都執行一次
左外連接,是否執行,根據連接條件判斷
3、連接條件的特點
(1)內連接:滿足連接條件記錄出現
(2)左外連接:左表記錄至少出現一次
(3)滿足連接條件,滿足出現的記錄
(4)不滿足,左表記錄信息出現,右表信息為空
4、連接查詢思路
1、根據題目要求,確定連接結果
2、根據連接結果,確定連接方式
3、根據語法,寫出語句
4、確定查詢字段
5、確定訪問的表
6、連接條件
三、子查詢
1、帶ANY、SOME關鍵字的子查詢
①定義:只要滿足內層子查詢中的任何一個比較條件,就返回一個結果作為外層查詢的條件
②語法:select 字段名 from 表名 where 字段名 關系運算符 any/some(select 字段 from 表名)
關系運算符:>,<=,<,>=,=
條件:select 字段 from 表名
2、帶ALL關鍵字的子查詢
①定義:只要滿足內層子查詢中的所有比較條件,才返回一個結果作為外層查詢的條件
②語法:select 字段名 from 表名 where 字段名 關系運算符 all(select 字段 from 表名)
關系運算符:>,<=,<,>=,=
條件:select 字段 from 表名
3、帶EXISTS關鍵字的子查詢---------判斷某個字段是否存在
①定義:判斷條件是否滿足,滿足返回true,外層開始查詢,不滿足返回false,外層不查詢。
②語法:select 字段名 from 表名 where exist(條件)
關系運算符:>,<=,<,>=,=
條件:select 字段 from 表名 where 條件
③註意:no exists判斷條件是否滿足,不滿足返回true,外層開始查詢,滿足返回false,外層不查詢。
4、帶IN關鍵字的子查詢
①定義:內層查詢語句僅僅返回一個數據列,這個數據列的裏的值,將提供給外層查詢語句查詢比較
②語法:elect 字段名 from 表名 where 字段名 in(select 字段名 from 表名 where 條件)
5、帶比較運算符關鍵字的子查詢
關鍵字:<,>,>=,<=,!=(不等於),<>(不等於)
四、合並查詢結果
①語法:select 字段名 from 表名 union【all】select 字段名from 表名;
②註意:
1、兩個表對應的列數和數據數量必須相同
2、各個select之間用union或union all關鍵字分開
3、union執行時刪除重復的行,結果唯一
4、union all執行時包含重復的行
五、為表和字段取別名
1、為表取別名:表名 as 表別名
2、為字段取別名:列名 as 列別名
註意,取別名時,別名不能與原有的數據的表名和列名有沖突
六、使用正則表達式查詢
1、語法:select 字段名 from 表名 where 字段名 regexp ‘正則表達式’;
2、常用的正則表達式字符匹配列表
符號 說明 例子 匹配值示例
符號 |
說明 |
例子 |
匹配值示例 |
^ |
匹配文本開始字符 |
‘ ^ b’匹配以字母b開頭的字符串 |
book,big |
$ |
匹配文本結束字符 |
‘st$’匹配以st結尾的字符串 |
test,resist |
. |
匹配任何單個字符 |
‘b.t’匹配任何b和t之間有一個字符 |
bit,bat,but |
* |
匹配零個或多個在它前面的字符 |
‘f*n’匹配字符n前面有任意個字符f |
fn,fan,abcn |
+ |
匹配一次或多次在它前面的字符 |
‘ba+’匹配以b開頭後面緊跟至少有一個a |
ba,bay,bare |
<字符串> |
匹配包含指定的字符串的文本 |
‘fa’指定文本中包含fa的字符 |
fan,afa,faad |
[字符集合] |
匹配字符集合中的任何一個字符 |
‘[xz]’匹配x或z |
dizzy,xebra, |
[ ^ ] |
匹配不在括號中的任何字符 |
‘[ ^ abc]’匹配任何不包含a,b,c的字符串 |
desk,fox,f8ke |
字符串{n,} |
匹配前面的字符串至少n次 |
b{2}匹配至少2個的b |
bbb,bbbb,bb |
字符串{n,m} |
匹配前面的字符串至少n次,至多m次。 |
b{2,4}匹配至少2個,至多4個的b |
bbbb,bbb,bb |
註意:
1)字符串{n,m},如果n為0,此參數為可選參數
2)匹配多個指定字
3)符串,字符串之間用“|”分開
MySQL:數據查詢