### Select查詢語句分類shell
- 簡單查詢語句
- 從一個表中查詢數據
- 複雜查詢語句
- 多表鏈接查詢 (未來源於多個表的列橫向疊加)
- 內鏈接
- 左鏈接
- 右鏈接
- 全鏈接
- 自鏈接
- 非等值鏈接
- 複合查詢(將查詢結果集上下疊加)
- Union
- Union All
- Intersect
- Minus
- 子查詢
- 非關聯子查詢
- 關聯子查詢
- 多表鏈接查詢 (未來源於多個表的列橫向疊加)
查詢語句語法結構
SELECT select_list #select_list 要顯示的列,列之間用逗號隔開,列也稱做投影 [ INTO new_table ] # 結果集導入新表 FROM [table_source] #表名 [ WHERE search_condition ] #錶行過濾條件 [ GROUP BY group_by_expression ] #按照指定的列將錶行分組 [ HAVING search_condition ] #對分組後的新行進行過濾 [ ORDER BY order_expression [ ASC | DESC ] ] #按照指定的1個或多個列進行排序,ASC增序,DESC降序
select中經常使用運算符
- 算數運算符:
- + 加法運算
- - 減法運算
- * 乘法運算
- /或DIV 除法運算
- % 或MOD 求餘運算
- 邏輯運算符:
- and 並且
- or 或者
- xor 異或
- not或! 非
- 比較運算符:
- = 等於
- != 或<>不等於
- > 大於
- < 小於
- >= 大於等於
- <= 小於等於;
- <=> 嚴格比較兩個NULL值是否相等,同爲NULL時爲真
- is null 爲空值
- is not null 爲非空值;
- in (值列表) 在值列表中
- not in (值列表)不在值列表中;
- between 低值 and 高值 (包含低值和高值)在低值和高值之間;
- not between 低值 and 高值 (包含低值和高值)不在低值和高值範圍內;
- like ‘通配符’ 按照通配符進行匹配;
- % 匹配0個或任意多個字符
- _ 匹配任意1個字符
- 位運算符
- & 按位與
- | 按位或
- ^ 按位異或
- ! 取反
- << 左移
- >> 右移
- 賦值運算符
- := 用於select語句中的賦值,
- 運算符優先級
優先級 | 運算符 |
---|---|
1 | ! |
2 | ^ |
3 | *,/,DIV,%,MOD |
4 | -,+ |
5 | <<,>> |
6 | & |
7 | | |
8 | =,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN |
9 | BETWEEN,CASE,WHEN,THEN,ELSE |
10 | NOT |
11 | &&,AND |
12 | ||,OR,XOR |
13 | := |
select where子句
- stu表數據以下
- 查詢學生表中性別爲'女',體重超過60公斤的學生的全部信息
- 查詢學生表中1班或者2班中,身高超過190的學生
- 查詢學生表中3班學生裏面考分在400和520之間的女生
- 查詢學生表中沒有分配班級並且是女生的學生
- 在學生表體重低於40公斤且身高低於1.65米的學生,列出其姓名,身高,體重,總分以及總分佔750分滿分的百分比
- 在學生表中查找學生姓名,第二個字是‘侯’,或者 第一個字是‘張’且名字只有兩個
函數
-
函數用來處理SQL語句中的數據,能夠嵌入在SQL語句中使用,增長了SQL語句對數據的處理功能數據庫
- 函數能夠有0到多個參數,可是總會有一個返回值
- 函數能夠用來計算、修改、格式化輸出二維表中的各種數據
- 不一樣數據庫的函數的名稱和用法略有不一樣,但都會提供如:字符串處理、數值處理、日期處理、統計等分類的函數、方便用戶處理各種數據
-
經常使用字符串函數express
-
char_length(str) 計算給定字符串長度函數
-
concat(str1,str2...) 字符串拼接編碼
-
substr(str,pos,len) 字符串str從pos位置(1開始)開始截取len個字符spa
-
-
經常使用數值函數3d
-
round(num,n) 數值num對n+1位進行四捨五入運算,正數表示保留的小數位,負數表示對整數位進行四捨五入,0表示四捨五入取整code
-
-
經常使用日期函數blog
-
year(date) 對日期date取年份排序
-
month(date) 對日期date取月份
-
curdate() 獲取當前日期
-
curtime() 獲取當前時間
-
now() 獲取當前時間
-
datediff(date1,date2) 返回date1與date2之間相隔的天數(date1-date2)
也能夠這樣寫
或
-
-
經常使用條件判斷函數
-
if(expr,v1,v2) 若是表達式expr成立返回v1,不成立返回v2
也能夠進行嵌套
select sname,score,if(score>600,'優秀',if(score>500,'良好',if(score>400,'合格','不合格'))) from stu ; select sname,substr(sname,if(sname in('大喬','小喬'),2,1 ),if(substr(sname,1,2) in('諸葛','夏侯','太史'),2,1)) 姓氏 from stu; #substr(sname,if(sname in('大喬','小喬'),2,1 ),if(substr(sname,1,2) in('諸葛','夏侯','太史'),2,1)) 姓氏 表示使用姓氏做爲別名代替原有的列名
-
-
CASE運算
-
能夠添加多個條件判斷,比單個if更加靈活
-
語法格式:case when expr1 then v1 [when expr2 v2 then] …… else vn end
select sname,score,(case when score>600 then '優秀' when score >500 then '良好' when score>400 then '合格' else '不合格' end)level from stu;
-
-
經常使用空值處理函數
-
當表中有空值時,任何運算與函數的返回結果均爲null
-
ifnull(v1,v2) 若是v1爲null則返回v2不然返回v1
顯示出2班與未分班的學生
-
isnull(expr) 若expr爲空返回1不然返回0
顯示全部未分班的學生
-
-
經常使用聚合函數
-
max(col) 返回最大值,列的數據類型能夠是數值、字符、日期型
-
min() 返回最小值,列的數據類型能夠是數值、字符、日期型
-
sum() 列求和,列的數據類型不能是字符型
-
avg() 求平均值,列的數據類型不能是字符型
-
count() 統計,列中的若是有空值不會被統計計數
-
-
DISTINCT關鍵字
-
用於去除重複記錄,須要放在第一個字段前
-
-
別名
-
爲表或列設置代替的名稱顯示
-
列別名語法格式:select sname [as] 別名 from table;as可省略
-
表別名語法格式:select 表別名.字段名,表別名.字段名... from 代表 [as] 表別名;
-
-
order by排序
-
對查詢結果集按照order by後面指定的1列或多列排序
- 分爲升序和降序
- 升序 ASC,默承認以不寫
- 降序 DESC
- 對於數值,升序是從小到大,降序是從大到小
- 對於日期和時間,升序是從遠到近,降序是從近到遠
- 對於英文字符,升序是從a到z,降序是從z到a
- 對於中文字符,升序按照字符集編碼從小到大,降序按照字符集編碼從大到小,若是選擇gbk編碼能夠按照拼音來排序
- 對於排序列的名稱,能夠用如下方式
- 列名
- 列別名
- 列的序號
- 函數
- 表達式
- 分爲升序和降序
-
按照學生成績由高到低排序顯示
-
按照學生年齡由老到幼排序
-
按照姓名首字母排序
注:convert(sname using gbk) 用於轉換所使用的字符集
-
-
limit 區域顯示
-
用於顯示查詢結果中的部份內容
-
LIMIT子句最後執行
-
語法格式:limit N,M 由第N條顯示M條記錄,N從0開始,省略N默認爲0
-