資料庫 - 資料查詢
資料查詢
語句格式
SELECT [ALL|DISTINCT] <目標列表示式>
[,<目標列表示式>] …
FROM <表名或檢視名>[, <表名或檢視名> ] …
[ WHERE <條件表示式> ]
[ GROUP BY <列名1> [ HAVING <條件表示式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
選擇表中的若干列
查詢指定列
[例1] 查詢全體學生的學號與姓名。
SELECT Sno,Sname
FROM Student;
[例2] 查詢全體學生的姓名、學號、所在系。
SELECT Sname,Sno,Sdept
FROM Student;
全部查詢列
選出所有屬性列:
在SELECT關鍵字後面列出所有列名
將<目標列表示式>指定為 *
[例3] 查詢全體學生的詳細記錄。
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
或
SELECT *
FROM Student;
查詢經過計算的值
[例4] 查全體學生的姓名及其出生年份。
SELECT Sname,2004-Sage /*假定當年的年份為2004年*/
FROM Student;
使用列別名改變查詢結果的列標題:
SELECT Sname NAME,'Year of Birth: ’ BIRTH,
2000-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
比較大小
例7] 查詢電腦科學系全體學生的名單。
SELECT Sname
FROM Student
WHERE Sdept=‘CS’;
[例8] 查詢所有年齡在20歲以下的學生姓名及其年齡。
SELECT Sname,Sage
FROM Student
WHERE Sage < 20;
[例9] 查詢考試成績有不及格的學生的學號。
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
確定範圍
謂詞: BETWEEN … AND …
NOT BETWEEN … AND …
[例10] 查詢年齡在20~23歲(包括20歲和23歲)之間的學生的
姓名、系別和年齡
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
[例11] 查詢年齡不在20~23歲之間的學生姓名、系別和年齡
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
確定集合
謂詞:IN <值表>, NOT IN <值表>
[例12]查詢資訊系(IS)、數學系(MA)和電腦科學系(CS)學生的姓名和性別。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ( 'IS','MA','CS' );
[例13]查詢既不是資訊系、數學系,也不是電腦科學系的學生的姓名和性別。
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN ( 'IS','MA','CS' );
字元匹配
謂詞: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <換碼字元>’]
匹配串為固定字串
[例14] 查詢學號為200215121的學生的詳細情況。
SELECT *
FROM Student
WHERE Sno LIKE ‘200215121';
等價於:
SELECT *
FROM Student
WHERE Sno = ' 200215121 ';
2) 匹配串為含萬用字元的字串
[例15] 查詢所有姓劉學生的姓名、學號和性別。
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE ‘劉%’;
[例16] 查詢姓"歐陽"且全名為三個漢字的學生的姓名。
SELECT Sname
FROM Student
WHERE Sname LIKE '歐陽__';
[例17] 查詢名字中第2個字為"陽"字的學生的姓名和學號。
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE ‘__陽%’;
[例18] 查詢所有不姓劉的學生姓名。
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE '劉%';
3) 使用換碼字元將萬用字元轉義為普通字元
[例19] 查詢DB_Design課程的課程號和學分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\‘;
[例20] 查詢以"DB_"開頭,且倒數第3個字元為 i的課程的詳細情況。
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ‘;
ESCAPE '\' 表示“ \” 為換碼字元
涉及空值的查詢
謂詞: IS NULL 或 IS NOT NULL
“IS” 不能用 “=” 代替
[例21] 某些學生選修課程後沒有參加考試,所以有選課記錄,但沒
有考試成績。查詢缺少成績的學生的學號和相應的課程號。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL
[例22] 查所有有成績的學生學號和課程號。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL;
多重條件查詢
邏輯運算子:AND和 OR來聯結多個查詢條件
AND的優先順序高於OR
可以用括號改變優先順序
可用來實現多種其他謂詞
[NOT] IN
[NOT] BETWEEN … AND …
[例23] 查詢計算機系年齡在20歲以下的學生姓名。
SELECT Sname
FROM Student
WHERE Sdept= 'CS' AND Sage<20;
改寫[例12]
[例12] 查詢資訊系(IS)、數學系(MA)和電腦科學系(CS)學生的姓名和性別。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ( 'IS','MA','CS' )
可改寫為:
SELECT Sname,Ssex
FROM Student
WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ' CS ';
ORDER BY子句
ORDER BY子句
可以按一個或多個屬性列排序
升序:ASC;降序:DESC;預設值為升序
當排序列含空值時
ASC:排序列為空值的元組最後顯示
DESC:排序列為空值的元組最先顯示
[例24] 查詢選修了3號課程的學生的學號及其成績,查詢結果按分數降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno= ' 3 '
ORDER BY Grade DESC;
[例25] 查詢全體學生情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列。
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;
聚集函式
聚集函式:
計數
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
計算總和
SUM([DISTINCT|ALL] <列名>)
計算平均值
AVG([DISTINCT|ALL] <列名>)
最大最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
[例26] 查詢學生總人數。
SELECT COUNT(*)
FROM Student;
[例27] 查詢選修了課程的學生人數。
SELECT COUNT(DISTINCT Sno)
FROM SC;
[例28] 計算1號課程的學生平均成績。
SELECT AVG(Grade)
FROM SC
WHERE Cno= ' 1 ';
[例29] 查詢選修1號課程的學生最高分數。
SELECT MAX(Grade)
FROM SC
WHER Cno= ‘ 1 ’;
[例30]查詢學生200215012選修課程的總學分數。
SELECT SUM(Ccredit)
FROM SC, Course
WHER Sno='200215012' AND SC.Cno=Course.Cno;
GROUP BY
GROUP BY子句分組:
細化聚集函式的作用物件
未對查詢結果分組,聚集函式將作用於整個查詢結果
對查詢結果分組後,聚集函式將分別作用於每個組
作用物件是查詢的中間結果表
按指定的一列或多列值分組,值相等的為一組
[例31] 求各個課程號及相應的選課人數。
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
[例32] 查詢選修了3門以上課程的學生學號。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3;
HAVING短語與WHERE子句的區別:
作用物件不同
WHERE子句作用於基表或檢視,從中選擇滿足條件的元組
HAVING短語作用於組,從中選擇滿足條件的組。
相關文章
- 資料庫資料的查詢----連線查詢資料庫
- 資料庫查詢資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 查詢資料庫大小資料庫
- 資料庫排序查詢資料庫排序
- Jemter查詢資料庫資料庫
- MongoDB資料庫中查詢資料(下)MongoDB資料庫
- 資料庫高階查詢之子查詢資料庫
- Prometheus時序資料庫-資料的查詢Prometheus資料庫
- 在MongoDB資料庫中查詢資料(上)MongoDB資料庫
- 資料庫查詢語句資料庫
- 資料庫查詢優化資料庫優化
- mysql資料庫多表查詢MySql資料庫
- mysql資料庫容量查詢MySql資料庫
- 資料庫查詢步驟資料庫
- 資料庫查詢配置值資料庫
- 資料庫基礎查詢--單表查詢資料庫
- 資料庫查詢優化:巢狀查詢資料庫優化巢狀
- 資料庫 - 連線查詢、巢狀查詢、集合查詢資料庫巢狀
- SQL Server 跨資料庫查詢SQLServer資料庫
- SQLServer查詢所有資料庫大小SQLServer資料庫
- 【資料庫】MySQL查詢優化資料庫MySql優化
- 資料庫查詢慢的原因資料庫
- openguass 資料庫狀態查詢資料庫
- 資料庫中單表查詢資料庫
- 資料庫查詢基本命令資料庫
- 【資料庫】sql連表查詢資料庫SQL
- 查詢資料庫表是否存在資料庫
- 查詢資料庫中表的資訊資料庫
- 資料庫查詢語言(DQL)資料庫
- 查詢資料庫的資料量的大小資料庫
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql
- Python全棧 MongoDB 資料庫(資料的查詢)Python全棧MongoDB資料庫
- Python全棧MongoDB資料庫(資料的查詢)Python全棧MongoDB資料庫
- C#通過ODBC查詢HANA資料庫資料C#資料庫
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫