天天看點

mysql 查詢 帶資料庫執行個體_資料庫查詢執行個體(包含所有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 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