1. 程式人生 > >MySQL:數據查詢

MySQL:數據查詢

分開 codes 添加 lpad publisher 表名 輸出結果 要求 ali

數據查詢

一、基本查詢語句

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:數據查詢