基本語法形式:
Select 【all|distinct】字段或表達式列表 【from 子句】 【where 子句】 【group by 子句】 【having 子句】 【order by 子句】 【limit 子句】;
字段或表達式列表
(1)字段,來源於表,依賴於from子句
(2)表達式是類似這樣的一個內容:8,8+3,now()
示例:select 8,8+3,now(),concat(‘aa’,’bb’);
Concat()函數時mysql中的系統函數,用於連接多個字符串
(3)每個輸出項(字段或表達式列表)都可以設定一個別名。形式爲:
字段或表達式列表 as 別名
All和distinct
用於設定select出來的數據,是否消除“重複行”,默認值是all(不消除)
Distinct:消除重複行
from 子句
表示select部分取得數據的數據源---表
通常,後面接表名,如 from tab 或from tab1,tab2
也可能是一些數據來源
where 子句
(1)對from子句中的數據源的數據進行篩選的條件設定,依賴於from子句
(2)通常都需要使用各種“運算符”。
算術運算符:+ - * / %
比較運算符:> >= < <= = <> == !=
邏輯運算符:and or not
示例:select * from tab where not(sex=‘女’);
(3)where true 表示全部取出。Where false 表示什麼也不取
(4)is運算符:空值與布爾值的判斷
XXis null:判斷某個字段是“null”值----就是沒有值;
XX is not null: 判斷某個字段不是“null”值
XX is true:判斷某個字段爲真(true)
XX is false:判斷某個字段爲假(false):0 0.0 ‘’ null
布爾值是tinyint(1)這個類型的別名,本質上,判斷這個數字是不是爲0
(5)between運算符:範圍判斷
用於判斷某個字段的數據值是否在某個給定的範圍----適用於數字類型
語法:
XX between 值1 and 值2;
含義:XX字段的值在給定“值1”與”值2“之間
(6)in運算符:給定確定數據的範圍判斷
語法:
XX in (值1,值2,值3…);
含義:表示字段XX的值爲所列出的這些值(零散無規律)中的一個。
(7)like運算符:對字符串進行模糊查詢
語法:
XXlike ’要查找的內容‘;
含義:
實現對字符串的某種特徵信息的模糊查找,依賴於2個特殊的符號:
%:代表任何個數的任何字符
_:代表任何一個字符
示例:
namelike ’安%‘;
如果要找到字段中含有%的行,使用轉義。示例:XX like ’%\%%‘; 表示XX中含有百分號這個字符的所有行
group by 子句
形式:group by 字段1 【desc |asc】,字段2【desc|asc】,……
說明:(1)分組是對已經找出的數據進行分組
(2)該分組結果,指定排序方式desc(倒序)asc(升序)
(3)通常就一個字段
(4)分組後,就只有以下幾種可用的組信息(即可出現在select中)
1)分組依據本身的信息,就是該分組依據的字段名
2)每一組的數量信息:用count(*)獲得
示例:selectpinpai,count(*) as 數量 from product group by pinpai;
3)原來數據中的“數值類型字段的聚合信息”,包括如下幾個:
Max(字段名) 最大值 min(字段名) 最小值
Avg(字段名) 平均值 sum(字段名) 總和值
均爲系統內部函數
having 子句
與where完全一樣,對分組的結果進行篩選(分組之後的數據)
示例:select pinpai,count(*) as 數量 from product group by pinpai having count(*)>2;
order by 子句
對查詢到的數據進行排序以輸出結果,多個字段的排序,在前一個排序的基礎上,對相等值以後續字段排序
形式:order by字段1 【desc |asc】,字段2【desc|asc】,……
limit 子句
對查詢到的數據,按指定的行取出來:從第幾行開始取多少行
形式:limit 起始行號,要取出的行數;
簡寫:limit 行數;(相當於起始行號從0開始算起)
總結:
1.在形式上,select很多子句可省略,但是如果出現,其順序不能打亂,必須按照給定的順序寫出
2.where子句依賴於from子句:即沒有from 不能有where
3.having子句依賴於group by 子句:即沒有groupby 不能有having
4.select中的字段依賴於from子句
5.內部執行過程:從from的數據源獲得所有數據,然後where子句對這些數據篩選,之後再使用group by對篩選出的數據進行分組,接下來使用having子句對這些分組進行篩選,然後纔可以order by 和limit