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.用正則表達式搜索
正則表達式推薦學習鏈接:http://help.locoy.com/Document/Learn_Regex_For_30_Minutes.htm(正則表達式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&6 報錯注入法(上)
※SQL 大法好,退果保平安
※教你怎麼用EXCEL練習SQL