標籤:

MySql必知必會筆記

看的時候就順便邊讀邊梳理下了

1.限制條件

select pro_name

from products

limit 5

limit 5 指示MySQL返回不多於5行

select pro_name

from products

limit 5,5指示MySQL返回從行5開始的5行(limit 開始位置,行數)ps:存在行0

2.完全限定的表名

select products.pro_name

from products

假設products表位於crashhouse資料庫中

select products.pro_name

from crashhouse.products

3.排序

select pro_name

from products

order by pro_name

默認升序排序

如需降序排序+desc

select pro_name

from products

order by pro_name desc

多列排序

select pro_id,pro_price,pro_name

from products

order by pro_price,pro_name

多列組合排序

select pro_id,pro_price,pro_name

from products

order by pro_price desc,pro_name

desc只應用到前面的列名,pro_price降序,pro_name默認升序

ASC表示升序,用處不大,因為排序默認即為升序

注意點.limit 與order by 結合,可找出一個列中最高項與最低項

select pro_name

from products

order by pro_name desc

limit 1;

顯示列中最高值

4.過濾數據

where 用於限制搜索條件

①某個範圍內的數據

select pro_name,pro_price

from products

where pro_price=2.5

強調下between

select pro_name,pro_price

from products

where pro_price between 1.5 and 2.6 (between ...and... 在指定的兩個值之間)

②檢索單個值

select pro_name,pro_price

from products

where pro_name=『xiaoming』 (加單引號是由於該欄位為字元串,所以必須用單引號)

這裡引申下有時可用like

select pro_name,pro_price

from products

where pro_name like 『xiaoming』

③不匹配檢查

select pro_name,pro_price

from products

where pro_price < > 2.5

select pro_name,pro_price

from products

where pro_price != 2.5

④空值檢查

NULL 無值(no value),與欄位包含0、空字元串或僅僅包含空格不同

select pro_name,pro_price

from products

where pro_price is NULL ;

返回沒有價格的所有產品,不是價格為0的產品

⑤組合過濾

select pro_name,pro_price

from products

where pro_name=『xiaoming』

and

pro_price = 2.5

--解釋:and 表示兩個條件都要滿足

select pro_name,pro_price

from products

where pro_name=『xiaoming』

or

pro_price = 2.5

--解釋:or 表示滿足任一條件即可

同時由於and在計算次序中優先順序更高,如將and 與or結合使用時,要適當運用圓括弧

select pro_name,pro_price

from products

where pro_name=『xiaoming』

and

(pro_price =3.6

or

pro_price = 2.5)

⑥IN 操作符

select pro_name,pro_price

from products

where pro_name IN (『xiaoming』,xiaohong)

IN用來指定條件範圍,只要滿足的都能搜索出

⑦not操作符

select pro_name,pro_price

from products

where pro_name not IN (『xiaoming』,xiaohong)

not表示否定後面跟的條件,如上面語句表示的就是不選名字為xiaoming 與 xiaohong

5.通配符

like操作符

上面有寫到like,當需要模糊匹配時,like就十分有用了。

結合%通配符

①找出所有xiao開頭的產品

select pro_id,pro_name

from product

where pro_name like xiao%

%可放在字元串任意位置,替代任意字元

%不能匹配NULL

_ 用法一樣但只能匹配一個字元

PS:通配符會導致搜索的時間較精確搜索慢,所以不要過度使用通配符

6.用正則表達式搜索

正則表達式推薦學習鏈接:help.locoy.com/Document(正則表達式30分鐘入門)

select pro_id,pro_name

from product

where pro_name regexp 1000

regexp是regular express(正則表達式的縮寫),它告訴MySQL:regexp後面跟的東西作為正則表達式

① . 表示匹配任意字元

②進行or匹配,使用 |

select pro_name

from product

where pro_name regexp 1000|2000

order by pro_name

③匹配幾個字元之一

select pro_name

from product

where pro_name regexp [123]Ton

order by pro_name

[123]定義一組字元,它的意思是匹配1或2或3,後面又接了Ton,所以返回的是1Ton,2Ton,3Ton

由此可以看出[]是另一種形式的or語句

[^123]匹配除這些字元外的任意東西,^當然還有另一種用處,後面會講到

④匹配範圍

如想匹配[0123456789],想簡化可寫為[0-9]

當然不限於數值,[a-z]匹配任意字母字元

⑤匹配特殊字元

比如像. |這種想要匹配,前面需要加\,這種處理就是所謂的轉義

select pro_name

from product

where pro_name regexp \|

order by pro_name

⑥匹配字元類

⑦匹配多個實例

例子:

打算匹配連在一起的4個數字

select pro_name

from product

where pro_name regexp [:digit:]{4}

order by pro_name

同時也可寫為

select pro_name

from product

where pro_name regexp [0-9][0-9][0-9][0-9]

order by pro_name

寫法不唯一

⑧定位符

想找一個數(包括以小數點開始的數)開始的產品,只搜索[0-9\.] 或[:digit:]\. 這種是不行的,因為它會在任意位置查找匹配

解決方法是使用^

select pro_name

from product

where pro_name regexp ^[0-9\.]

order by pro_name

^的雙重用法

[^123]在集合中用來否定該集合,否則用來指串的開始處

小貼士:簡單的正則表達式測試,在不適用資料庫的情況下測試正則

select hello from regexp [0-9];

顯然會返回0,因為文本中無數字

7.創建計算欄位(待後續)


推薦閱讀:

sqlzoo練習
MaxCompute Studio使用心得系列2——編譯SQL腳本
Sqli labs系列-less-5&amp;6 報錯注入法(上)
SQL 大法好,退果保平安
教你怎麼用EXCEL練習SQL

TAG:SQL | MySQL |