MySQL學習(6) - 單表查詢
阿新 • • 發佈:2020-12-15
技術標籤:MySQL
學習目標
- 掌握簡單查詢,會使用SELECT查詢所有欄位和指定的欄位
- 掌握按條件查詢,會使用運算子及不同的關鍵字進行查詢
- 掌握高階查詢,會使用聚合函式查詢、分組查詢等
- 學會為表和欄位起別名
簡單查詢
SELECT語句
基本語法:
SELECT [DISTINCT] * | {欄位名1,欄位名2....}
FROM 表名
[WHERE 條件表示式1]
[GROUP BY 欄位名 [HAVING 條件表示式2]]
[ORDER BY 欄位名 [ASC|DESC]]
[LIMIT [OFFSET] 記錄數]
各個子句的含義:
(1) SELECT [DISTINCT] * | {欄位名1,欄位名2…}:表示要查詢的欄位;*表示所有的欄位;DISTINCT是看可選引數,用來去除重複資料。
(3)WHERE 條件表示式1:where是可選引數,用來指定查詢條件。
(4)GROUP BY 欄位名 [HAVING 條件表示式2]:GROUP BY是可選引數,用來將查詢結果按照指定結果進行分組;HAVING 條件表示式2:對分組後的結果進行過濾。
(5)ORDER BY 欄位名 [ASC|DESC]:對查詢結果按照指定欄位進行排序,預設為升序,ASC表示升序,DESC表示降序。
(6)LIMIT [OFFSET] 記錄數:LIMIT用來限制查詢結果的數量,OFFSET表示偏移量,偏移量為0,從查詢結果的第一條開始記錄;記錄數表示返回查詢記錄的條數。
查詢所有欄位
SELECT * FROM class
結果顯示:
查詢某個特定欄位
SELECT id,stu_name FROM class
結果顯示:
按條件查詢
- 帶關係運算符的查詢
基本語法:
SELECT * FROM student WHERE id=2
SELECT * FROM student WHERE grade > 80
結果顯示:
帶IN的查詢
查詢stu_name在 (‘zhang’,‘zhao’,‘tong’)中的所有記錄;不存在:使用not in
SELECT * FROM student WHERE stu_name IN ('zhang','zhao','tong')
結果:
帶BETWEEN_AND的查詢
判斷某個欄位的值是否在指定的範圍之內。
查詢id在1和2之間的所有記錄不在某個範圍內,使用NOT BETWEEN…AND…
SELECT * FROM student WHERE id BETWEEN 1 AND 2
結果:
空值查詢
SELECT * FROM student WHERE id IS NOT NULL
SELECT * FROM student WHERE id NOT NULL
- 帶like的查詢
使用like對欄位進行模糊匹配
SELECT * FROM student WHERE id (NOT) LIKE "匹配的字串"
萬用字元
%:c% 匹配以c開頭的字串;c%g 以c開頭以g結尾
_:只能匹配單個字元;w_o 以w開頭o結尾且中間只有一個字元
帶and和or的關鍵字
and:同時滿足條件一和條件二
SELECT * FROM student WHERE id=1 AND grade=90
or:滿足條件一或條件二
SELECT * FROM student WHERE id=1 or id=3
複雜查詢
聚合函式
統計某個欄位的最大值、最小值、平均值等的函式。
COUNT():返回某列的行數
SUM():返回某列的和
AVG():返回某列的平均值
MAX()\MIN():返回某列的最大最小值
- 語法格式:
SELECT 函式(*) FROM 表名
對結果進行排序
- 語法格式
# 對成績按照從大到小排列
SELECT * FROM student ORDER BY grade DESC
結果:
分組查詢
按照某個欄位或者多個欄位中的值進行分許,值相同的為一組,通常與聚合函式一起使用才有意義。
計算男女生人數
SELECT count(*),gender FROM student GROUP BY gender
為表和欄位取別名
SELECT * FROM student AS a WHERE a.id=1
SELECT id as stu_id,stu_name FROM student AS a WHERE a.id=1
# 查詢結果中id變為stu_id,但是原表中不變
結果: