數據庫查詢實例(包含所有where條件例子)


查詢指定列

[例1] 查詢全體學生的學號與姓名。

SELECT Sno,Sname

FROM Student;

 

[例2] 查詢全體學生的姓名、學號、所在系。

SELECT Sname,Sno,Sdept

FROM Student;

[例3] 查詢全體學生的詳細記錄。

SELECT Sno,Sname,Ssex,Sage,Sdept

FROM Student;

SELECT *

FROM Student;

[例4] 查全體學生的姓名及其出生年份。

SELECT Sname,2004-Sage /*假定當年的年份為2004年*/ FROM Student;

[例5] 查詢全體學生的姓名、出生年份和所有系,要求用小 寫字母表示所有系名

SELECT Sname,„Year of Birth: ‘,2004-Sage,

ISLOWER(Sdept)

FROM Student;

[例6] 查詢選修了課程的學生學號。

SELECT Sno FROM SC;

等價於:

SELECT ALL Sno FROM SC;

[例7] 查詢計算機科學系全體學生的名單。

SELECT Sname www.111cn.net

FROM Student

WHERE Sdept=„CS‟;

[例8] 查詢所有年齡在20歲以下的學生姓名及其年齡。 SELECT Sname,Sage

FROM Student

WHERE Sage < 20;

[例9] 查詢考試成績有不及格的學生的學號。

SELECT DISTINCT Sno

FROM SC

WHERE Grade<60;

[例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;

[例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’ );

[例14] 查詢學號為200215121的學生的詳細情況。

SELECT *

FROM Student

WHERE Sno LIKE „200215121′;

等價於:

SELECT *

FROM Student

WHERE Sno = ‘ 200215121 ‘;

[例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 ‘劉%’;

[例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 ‘ „;

[例21] 某些學生選修課程后沒有參加考試,所以有選課記錄,但沒 有考試成績。查詢缺少成績的學生的學號和相應的課程號。 SELECT Sno,Cno

FROM SC

WHERE Grade IS NULL

[例22] 查所有有成績的學生學號和課程號。

SELECT Sno,Cno

FROM SC

WHERE Grade IS NOT NULL;

[例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 ‘;

[例24] 查詢選修了3號課程的學生的學號及其成績,查詢結果按分 數降序排列。

SELECT Sno,Grade

FROM SC

WHERE Cno= ‘ 3 ‘

ORDER BY Grade DESC;

[例25] 查詢全體學生情況,查詢結果按所在系的系號升序排 列,同一系中的學生按年齡降序排列。

SELECT *

FROM Student

ORDER BY Sdept,Sage DESC;

[例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;

[例31] 求各個課程號及相應的選課人數。

SELECT Cno,COUNT(Sno)

FROM SC

GROUP BY Cno;

[例32] 查詢選修了3門以上課程的學生學號。

SELECT Sno

FROM SC

GROUP BY Sno

HAVING COUNT(*) >3;

[例33] 查詢每個學生及其選修課程的情況

SELECT Student.*,SC.*

FROM Student,SC

WHERE Student.Sno = SC.Sno;

[例34] 對[例33]用自然連接完成。

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC

WHERE Student.Sno = SC.Sno;

[例35]查詢每一門課的間接先修課(即先修課的先修課)

SELECT FIRST.Cno,SECOND.Cpno

FROM Course FIRST,Course SECOND

WHERE FIRST.Cpno = SECOND.Cno;

[例 36] 改寫[例33]

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);

[例37]查詢選修2號課程且成績在90分以上的所有學生

SELECT Student.Sno, Sname

FROM Student, SC

WHERE Student.Sno = SC.Sno AND

/* 連接謂詞*/

SC.Cno= „2‟ AND SC.Grade > 90; /* 其他限定條件 */

[例38]查詢每個學生的學號、姓名、選修的課程名及成績

SELECT Student.Sno,Sname,Cname,Grade

FROM Student,SC,Course /*多表連接*/

WHERE Student.Sno = SC.Sno

and SC.Cno = Course(www.111cn.net).Cno;

[例39] 查詢與“劉晨”在同一個系學習的學生。

此查詢要求可以分步來完成

① 確定“劉晨”所在系名

SELECT Sdept

FROM Student WHERE Sname= ‘ 劉晨 ‘;

結果為: CS

② 查找所有在IS系學習的學生。

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept= ‘ CS ‘;

將第一步查詢嵌入到第二步查詢的條件中

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept IN

(SELECT Sdept

FROM Student

WHERE Sname= „ 劉晨 ‟);

此查詢為不相關子查詢。

用自身連接完成[例39]查詢要求

SELECT S1.Sno,S1.Sname,S1.Sdept

FROM Student S1,Student S2

WHERE S1.Sdept = S2.Sdept AND

S2.Sname = ‘劉晨’;

[例40]查詢選修了課程名為“信息系統”的學生學號和姓名 SELECT Sno,Sname ③ 最后在Student關系中 FROM Student 取出Sno和Sname WHERE Sno IN

(SELECT Sno ② 然后在SC關系中找出選 FROM SC 修了3號課程的學生學號 WHERE Cno IN

(SELECT Cno ① 首先在Course關系中找出 FROM Course “信息系統”的課程號,為3號 WHERE Cname= „信息系統‟

)

);

用連接查詢實現[例40]

SELECT Sno,Sname

FROM Student,SC,Course

WHERE Student.Sno = SC.Sno AND

SC.Cno = Course.Cno AND

Course.Cname=„信息系統‟;

例:假設一個學生只可能在一個系學習,並且必須屬於一個 系,則在[例39]可以用 = 代替IN :

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept =

(SELECT Sdept

FROM Student

WHERE Sname= „劉晨‟);

[例41]找出每個學生超過他選修課程平均成績的課程

號。

SELECT Sno, Cno

FROM SC x

WHERE Grade >=(SELECT AVG(Grade)

FROM SC y

WHERE y.Sno=x.Sno);

[例42] 查詢其他系中比計算機科學某一學生年齡

小的學生姓名和年齡

SELECT Sname,Sage

FROM Student

WHERE Sage < ANY (SELECT Sage

FROM Student WHERE Sdept= ‘ CS ‘) AND Sdept <> „CS ‘ ; /*父查詢塊中 的條件 */

用聚集函數實現[例42]

SELECT Sname,Sage

FROM Student

WHERE Sage <

(SELECT MAX(Sage)

FROM Student www.111cn.net

WHERE Sdept= „CS ‘)

AND Sdept <> ‘ CS ‟;

[例43] 查詢其他系中比計算機科學系所有學生年齡都小 的學生姓名及年齡。

方法一:用ALL謂詞

SELECT Sname,Sage

FROM Student

WHERE Sage < ALL

(SELECT Sage

FROM Student

WHERE Sdept= ‘ CS ‘)

AND Sdept <> ‘ CS ‟;

方法二:用聚集函數

SELECT Sname,Sage

FROM Student

WHERE Sage <

(SELECT MIN(Sage)

FROM Student

WHERE Sdept= ‘ CS ‘)

AND Sdept <>’ CS ‟;

[例44]查詢所有選修了1號課程的學生姓名。

用嵌套查詢

SELECT Sname

FROM Student

WHERE EXISTS

(SELECT *

FROM SC

WHERE Sno=Student.Sno AND Cno= ‘ 1 ‘);

用連接運算

SELECT Sname

FROM Student, SC

WHERE Student.Sno=SC.Sno AND SC.Cno= ’1′;

[例45] 查詢沒有選修1號課程的學生姓名。

SELECT Sname

FROM Student

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE Sno = Student.Sno AND Cno=’1′);

[例39]查詢與“劉晨”在同一個系學習的學生。

可以用帶EXISTS謂詞的子查詢替換:

SELECT Sno,Sname,Sdept

FROM Student S1

WHERE EXISTS

(SELECT *

FROM Student S2

WHERE S2.Sdept = S1.Sdept AND

S2.Sname = „劉晨‟);

[例46] 查詢選修了全部課程的學生姓名。

SELECT Sname

FROM Student

WHERE NOT EXISTS

(SELECT *

FROM Course

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE Sno= Student.Sno AND Cno= Course.Cno )

);

[例47]查詢至少選修了學生200215122選修的全部課程的學

生號碼。

用NOT EXISTS謂詞表示:

SELECT DISTINCT Sno

FROM SC SCX

WHERE NOT EXISTS

(SELECT *

FROM SC SCY

WHERE SCY.Sno = ‘ 200215122 ‘ AND

NOT EXISTS

(SELECT *

FROM SC SCZ

WHERE SCZ.Sno=SCX.Sno AND

SCZ.Cno=SCY.Cno));

[例48] 查詢計算機科學系的學生及年齡不大於19歲的學生。

方法一:

� SELECT *

� FROM Student

� WHERE Sdept= ‘CS’

� UNION

� SELECT *

� FROM Student

� WHERE Sage<=19;

方法二:

SELECT DISTINCT *

FROM Student

WHERE Sdept= ‘CS’ OR Sage<=19;

[例49] 查詢選修了課程1或者選修了課程2的學生。

SELECT Sno

FROM SC

WHERE Cno=’ 1 ‘

UNION

SELECT Sno

FROM SC

WHERE Cno= ‘ 2 ‘;

[例50] 查詢計算機科學系的學生與年齡不大於19歲

的學生的交集

SELECT *

FROM Student

WHERE Sdept=’CS’

INTERSECT

SELECT *

FROM Student

WHERE Sage<=19

注:sql server 無交運算

[例50] 實際上就是查詢計算機科學系中年齡不大

於19歲的學生

SELECT *

FROM Student

WHERE Sdept= „CS‟ AND Sage<=19;

[例51] 查詢選修課程1的學生集合與選修課程2的學生集

合的交集

SELECT Sno

FROM SC

WHERE Cno=’ 1 ‘

INTERSECT

SELECT Sno

FROM SC

WHERE Cno=’2 ‘;

[例51]實際上是查詢既選修了課程1又選修了課程2

的學生

SELECT Sno

FROM SC

WHERE Cno=’ 1 ‘ AND Sno IN

(SELECT Sno FROM SC

WHERE Cno=’ 2 ‘);

[例52] 查詢計算機科學系的學生與年齡不大於19歲的學

生的差集。

SELECT *

FROM Student

WHERE Sdept=’CS’

EXCEPT

SELECT *

FROM Student

WHERE Sage <=19;

注:sql server 無差運算

[例52]實際上是查詢計算機科學系中年齡大於19歲

的學生

SELECT *

FROM Student

WHERE Sdept= ‘CS’ AND Sage>19;
from:http://www.111cn.net/database/mssqlserver/59038.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM