篩選條件 比較運算符 等於: = ( 註意!不是 == ) 不等於: != 或 大於: 大於等於: = 小於: 聚合分組 常用聚合函數 統計個數:COUNT(column) 最大值:MAX(column) 最小值:MIN(column) 求和:SUM(column) 平均值:AVG(column) ...
篩選條件
比較運算符
- 等於: = ( 註意!不是 == )
- 不等於: != 或 <>
- 大於: >
- 大於等於: >=
- 小於: <
- 小於等於: <=
- IS NULL
- IS NOT NULL
邏輯運算符
- 與:and
- 或:or
- 非:not
其它操作
- 排序:order by
- 正序:asc
- 倒序:desc
- 例:select * from students order by age desc ;
- 限制:limit
- 控制顯示m條數據:limit m
- 從下標為m的行數開始顯示n條數據:limit m,n
- 例:select * from students limit 3,2 ;
- 去重:distinct
- 例:select distinct * from students;
- 模糊查詢:like
- 任意一個字元:_
- 任意多個字元:%
- 例:select * from students where name like '%abc_' ;
- 範圍查詢
- 連續範圍: BETWEEN a AND b 相當於a <= value <= b
- 間隔返回: IN
- 例:select * from students where id in(1,3,5,7);
- 別名:as
聚合分組
常用聚合函數
- 統計個數:COUNT(column)
- 最大值:MAX(column)
- 最小值:MIN(column)
- 求和:SUM(column)
- 平均值:AVG(column)
- 列出欄位全部值:GROUP_CONCAT(column)
分組查詢:group by
- 在分組的情況下,只能夠出現分組欄位和聚合欄位
- 其他的欄位沒有意義,會報錯!
- Select 欄位 from 表 group by 欄位;
- Select 欄位,count(*) from 表 group by 欄位;
聚合篩選:having
- 加having條件表達式,可以對輸出的結果做出限制
- Select 欄位1 from 表名 group by 欄位1,欄位2 having 欄位2>=80;
執行順序
- 如果一個查詢語句中同時包含了別名(as),聚合函數, where, having,那麼他們的執行順序是
- 先是執行:where
- 然後執行:聚合函數和別名
- 最後執行:having
子查詢
將一個查詢的結果留下來用於下一次查詢 ( select 中嵌套 select )
要求:
- 1) 嵌套在查詢內部
- 2) 必須始終出現在圓括弧內
例:
- 求出學生的平均年齡
- select avg(age) from students;
- 查找出大於平均年齡的數據
- select * from student where age > 19;
- 將求出的平均年齡的SQL語句用於查找大於平均年齡的語句中
- select * from students where age > (select avg(age) from students);
連接查詢
內連接:inner join
- 無條件內連接:
- 無條件內連接,又名交叉連接/笛卡爾連接
- 第一張表中的每一項會和另一張表的每一項依次組合
- select * from 表1 inner join 表2
- 有條件內連接:
- 在無條件內鏈接的基礎上,加上一個on子句
- 當連接的時候,篩選出那些有實際意義的記錄來進行組合
- select * from 表1 as a inner join 表2 as b on a.id = b.id
外連接:{left | right} join
- 左外連接: (以左表為基準)
- 兩張表做連接的時候,在連接條件不匹配的時候
- 留下左表中的數據,而右表中的數據以NULL填充
- select * from 表1 as a left join 表2 as b on a.id = b.id
- 右外連接: (以右表為基準)
- 對兩張表做連接的時候,在連接條件不匹配的時候
- 留下右表中的數據,而左表中的數據以NULL填充
- select * from 表1 as a right join 表2 as b on a.id = b.id