1. 程式人生 > 資料庫 >MySQL高階SQL語句_gw

MySQL高階SQL語句_gw

MySQL高階SQL語句

MySQL進階查詢

在 MySQL 中,可以使用 select 語句來查詢資料。
查詢資料是指從資料庫中根據需求,使用不同的查詢方式來獲取不同的資料,是使用頻率最高、最重要的操作。

SELECT * FROM 表名;
SELECT 列名 FROM 表名;

按關鍵字排序

1、使用order by語句來實現排序
2、排序可針對一個或多個欄位
3、ASC:升序,預設排序方式
4、DESC:降序
5、order by的語法結構:select 欄位1,欄位2 from 表名 order by 欄位1 desc|asc,欄位2 desc|asc;

對結果進行分組

1、使用group by語句來實現分組
2、通常結合聚合函式一起使用
3、可以按一個或多個欄位對結果進行分組

限制結果條目

1、只返回select查詢結果的第一行或前幾行
2、使用limit語句限制條目
3、limit語法結構

(1)select 欄位1,欄位2 from 表名 limit [offset,] number;
(2)offset:位置偏移量,從0開始
(3)number:返回記錄行的最大數目

設定別名

1、使用as語句設定別名,關鍵字as可省略
2、設定別名時,保證不能與庫中其他表或欄位名稱衝突
3、別名的語法結構

萬用字元

1、用於替換字串中的部分字元

2、通常配合like一起使用,並協同where完成查詢
3、常用萬用字元

(1)%表示零個、一個或多個即任意字元
(2)_表示單個字元

子查詢

1、也稱作內查詢或者巢狀查詢
2、先於主查詢被執行,其結果將作為外層主查詢的條件
3、在增刪改查中都可以使用子查詢
4、支援多層巢狀
5、in語句用來判斷某個值是否在給定的結果集中

多層巢狀

select、update、delete都支援多層巢狀

exists的用法

select * from 表名 where exists(select * from 表名 where 欄位=值); #exists與if類似,後面的語句執行成功,在執行前面的語句

NULL值

1、表示缺失的值
2、與數字0或者空白(spaces)是不同的
3、使用is null或is not null進行判斷
4、null值和空值(’’)的區別

空值長度為0,不佔空間;null值的長度為null,佔用空間
is null無法判斷空值
空值使用“=”或者“<>”來處理
count()計算時,null會忽略,空值會加入計算
null:真空(什麼都沒有); ‘ ’:空氣(還有空氣)

正則表示式

1、根據指定的匹配模式匹配記錄中符合要求的特殊字元
2、使用regexp關鍵字指定匹配模式
3、常用匹配模式:

^ 匹配文字的開始字元
$ 匹配文字的結束字元
. 匹配任何單個字元
* 匹配前面的字元零次或多次
+ 匹配前面的字元一次或多次
字串 匹配包含指定的字串
p1lp2 匹配p1或p2
[…] 匹配字元集合中任一字元
[^…] 匹配不在括號中的任一字元
{n} 匹配前面的字串n次
{n,m} 匹配前面的字串至少n次,之多m次

運算子

用於對記錄中的欄位值進行運算
MySQL 的運算子共有四種,分別是:算術運算子、比較運算子、邏輯運算子和位運算子

算數運算子

+ 加法
- 減法
* 乘法
/ 除法
% 取餘

比較運算子

= 等於
大於
< 小於
= 大於等於
<= 小於等於
!=或<> 不等於
is null 判斷一個值是否為NULL
is not null 判斷一個值是否不為NULL
between and 兩者之間
in 在集合中
like 萬用字元匹配
greatest 兩個或多個引數時返回最大值
least 兩個或多個引數時返回最小值
regext 正則表示式

等於運算子

1、用來判斷數字、字串和表示式是否相等的,如果相等則返回 1,如果不相等則返回 0。其中字元的比較是根據 ASCII 碼來判斷的。

2、ASCII碼錶轉換:

0-48,1-49,…9-57
A-65,B-66
a-97,b-98

3、比較規則:

如果兩者都是整數,則按照整數值進行比較。
如果一個整數一個字串,則會自動將字串轉換為數字,再進行比較。
如果兩者都是字串,則按照字串進行比較。
如果兩者中至少有一個值是 NULL,則比較的結果是 NULL。

不等於運算子

1、不等於號有兩種寫法,分別是<>或者!=,用於針對數字、字串和表示式不相等的比較。如果不相等則返回 1,如果相等則返回 0。
2、需要注意的是不等於運算子不能用於判斷 NULL。

注意

都不能用於判斷NULL

S NULL、IS NOT NULL

1、IS NULL 判斷一個值是否為 NULL,如果為 NULL 返回 1,否則返回 0。
2、IS NOT NULL 判斷一個值是否不為 NULL,如果不為 NULL 返回 1,否則返回 0。

between and

用於判斷一個值是否落在某兩個值之間
例如,判斷某數字是否在另外兩個數字之間,也可以判斷某英文字母是否在另外兩個字母之間

least、greatest

1、LEAST:當有兩個或者多個引數時,返回其中的最小值。如果其中一個值為 NULL,則返回結果就為 NULL。
2、GREATEST:當有兩個或者多個引數時,返回其中的最大值。如果其中一個值為 NULL, 則返回結果就為 NULL。

in、not in

1、IN 判斷一個值是否在對應的列表中,如果是返回 1,否則返回 0。
2、NOT IN 判斷一個值是否不在對應的列表中,如果不是返回 1,否則返回 0。

like、not like

1、LIKE 用來匹配字串,如果匹配成功則返回 1,反之返回 0;NOT LIKE 正好跟 LIKE 相反。
2、LIKE 支援兩種萬用字元:’%’ 用於匹配任意數目的字元,而’_’只能匹配一個字元。

邏輯運算子

1、又被稱為布林運算子
2、用來判斷表示式的真假
3、運算子————描述

NOT或!————邏輯非
AND或&&————邏輯與
OR或|————邏輯或
XOR————邏輯異或

邏輯非

1、邏輯非將跟在它後面的邏輯測試取反,把真變為假,把假變為真。
2、如果 NOT 後面的運算元為 0 時,所得值為 1;如果運算元為非 0 時,所得值為 0;如果運算元為 NULL 時,所得值為 NULL。
注意:非0值都是1

邏輯與

如果所有值都是真返回 1,否則返回 0。

邏輯或(最好用or)

邏輯或表示包含的運算元,任意一個為非零值並且不是 NULL 值時,返回 1,否則返回0。

邏輯異或

兩個非 NULL 值的運算元,如果兩者都是 0 或者都是非 0,則返回 0;如果一個為 0, 另一個為非 0,則返回結果為 1;
當任意一個值為 NULL 時,返回值為 NULL。

運算總結

and運算,只要碰到0就是0,(非0和null是null)
or運算,只要碰到非0值就是1,(0和null是null)
異或運算,只要碰到null都是null

位運算子

位運算子實際上是對二進位制數進行計算的運算子。
位運算方法:

mysql> select 10&15,10|15,10^15,15&~10;

1、按位與運算
按位與運算(&),是對應的二進位制位都是 1 的,它們的運算結果為 1,否則為 0

101010/
151111
&101010

2、按位或運算
按位或運算(|),是對應的二進位制位只要是 1 的,它們的運算結果就為 1,否則為 0

101010/
151111
1111 15

3、按位異或運算
按位異或運算(^),是對應的二進位制位不相同時,運算結果 1,否則為 0

101010/
151111
^01015

4、按位取反運算
按位取反(~),是對應的二進位制數逐位反轉,即 1 取反後變為 0, 0 取反後變為 1

151111/
101010
&101010
~01015

5、按位左移運算

10001
1<<20100

6、按位右移運算
按位右移2位,多餘的位數直接刪除
按位左移3位,空缺處補0

101010/
10>>200102
10<<201010000080

常用的運算子優先順序

優先順序 運算子

1 !
2 ~
3 ^
4 *,/(DIV),%(MOD)
5 +,-
6 >>,<<
7 &
8 I
9 =,<=>,>=,>,<,<>,!=,IS,LIKE,REGEXP,IN
10 BETWEEN,CASE,WHEN,THEN,ELSE
11 NOT
12 &&,AND
13 II,OR,XOR
14 :=

連線查詢

通常都是將來自兩個或多個表的行結合起來,基於這些表之間的共同欄位,進行資料的拼接。
要先確定一個主表作為結果集,然後將其他表的行有選擇性的連線到選定的主表結果集上。

使用較多的連線查詢包括:

內連線
外連線:

左連線
右連線

內連線

1、在from子句中使用關鍵字 inner join 來連線多張表,並使用 on子句設定連線條件
2、內連線是系統預設的表連線,所以在 FROM 子句後可以省略 INNER 關鍵字,只使用關鍵字 JOIN。同時有多個表時,也可以連續使用 INNER JOIN 來實現多表的內連線,不過為了更好的效能,建議最好不要超過三個表。

外連線

1、左連線,主表在左邊,主表內容會全部顯示出來,在從表中沒匹配到的以NULL顯示出來
2、右連線,主表在右邊,主表內容會全部顯示出來,在從表中沒匹配到的以NULL顯示出來