国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
5-3-4


5.3.4 條件表達式中的比較操作

1.常用的比較運算符

2.算術比較操作
(1)算術比較運算符
  
<,<=,>,>=,=,!=
  
BETWEEN…AND…
(2)查詢學習了課程C2的學生
  SELECT * FROM Sc WHERE Cno='C2'
(3)查詢年齡大于19的學生
  SELECT * FROM Student WHERE Age>19
  SELECT * FROM Student WHERE NOT Age<=19
(4)查詢課程號為C2且成績高于85分以上的學生
  SELECT * FROM Sc WHERE Cno='C2' AND G>85
(5)查詢選修C1或C2且不低于70分的學生
  SELECT * FROM Sc WHERE (Cno='C1' OR Cno='C2') AND G>=70
(6)查詢成績在60至75之間的學生
  SELECT * FROM Sc WHERE G>=60 AND G<=75
  SELECT * FROM Sc WHERE G BETWEEN 60 AND 75

3.字符串的匹配操作
(1)兩個通配符
  
百分號(%):與零個或多個字符組成的字符串匹配
  
下劃線(_):與單個字符匹配
(2)查詢計算機系的學生
  SELECT * FROM Student WHERE Dept = 'CS'
  SELECT * FROM Student WHERE Dept LIKE 'CS'
(3)查詢不以P開頭的課程
  SELECT * FROM Course WHERE Cn NOT LIKE 'P%'
(4)查詢第二個字符為o的課程
  SELECT * FROM Course WHERE Cn LIKE '_o%'
(5)查詢姓趙的學生(漢字?)
  SELECT * FROM Student WHERE Sn LIKE '趙%'
  SELECT * FROM Student WHERE Sn LIKE '趙_'
(6)轉義字符
  
為了使字符串中包含特殊字符(即%和_),SQL允許定義轉義字符。轉義字符緊靠特殊字符并放在它前面,表示該特殊字符將被當成普通字符
  
在LIKE比較中使用ESCAPE關鍵字來定義轉義符
LIKE 'ab\%cd%' ESCAPE '\' 匹配所有以“ab%cd”開頭的字符串
LIKE 'ab\\cd%' ESCAPE '\' 匹配所有以“ad\cd”開頭的字符串

4.空值的比較操作
(1)說明
  
SQL中允許列值為空,空值用保留字NULL表示
  
用IS NULL測試列值是否為空值
  
如果要測試非空值,可用短語IS NOT NULL
  
空值的存在增加了算術操作和比較操作的復雜性。SQL中規(guī)定,涉及到+、-、*、/的算術表達式中有一個值是空值時,表達式的值也是空值。涉及到空值的比較操作的結果認為是false
  
在聚合函數(shù)中遇到空值時,除了COUNT(*)外,都跳過空值而去處理非空值
(2)查詢沒填的課程名
  SELECT * FROM Course WHERE Cn IS NULL
  SELECT * FROM Course WHERE LEN(ALLTRIM(Cn))=0

5.集合成員資格的比較
(1)格式
  <元組> [NOT] IN(<集合>)
(2)說明
  
判斷元組是否在子查詢的結果(即集合)中的操作,稱為“集合成員資格比較”
  
這里的集合可以是一個SELECT查詢語句,或者是元組的集合,但其結構應與前面元組的結構相同
  
IN操作符表示:如果元組在集合內,那么其邏輯值為TRUE,否則為FALSE
(3)查詢選修了課程C1、C2或C3的學號(下面是2種等價方法)
SELECT DISTINCT Sno
FROM Sc
WHERE Cno='C1' OR Cno='C2' OR Cno='C3'

SELECT DISTINCT Sno
FROM Sc
WHERE Cno IN ('C1', 'C2', 'C3')
(4)查詢既不是計算機系,也不是數(shù)學系的學生
  SELECT * FROM Student WHERE Dept NOT IN ('CS','MA')
  SELECT * FROM Student WHERE NOT Dept IN ('CS','MA')
(5)查詢沒有選修C2課程的學生姓名
  SELECT Sname
  FROM Student
  WHERE Sno NOT IN
   (SELECT Sno
   FROM Sc
   WHERE Cno='C2')
(6)查詢每門課程的成績均在80分以上的姓名
  SELECT Sname
  FROM Student
  WHERE Sno NOT In
   (SELECT *
   FROM Sc
   WHERE Grade<80)

6.集合成員的算術比較
(1)形式
  <元組> θ ALL | SOME | ANY(<集合>)

(2)說明
  
這里要求“元組”與集合中“元組”的結構一致
  
θ是算術比較運算符,“θ ALL”操作表示左邊那個元組與右邊集合中每一個元組滿足θ運算,“θ SOME”操作表示左邊那個元組與右邊集合中至少一個元組滿足θ運算。ANY和SOME是同義詞,早期的SQL標準用ANY,為避免與英語中ANY意思混淆,后來的標準都改為SOME
(3)查詢選修了C2的學生姓名(每段代碼最后是查詢結果:學生的編號集合)
SELECT Sname
FROM Student,Sc
WHERE Student.Sno=Sc.Sno AND Cno='C2'
查詢結果{16345}

SELECT Sname
FROM Student
WHERE Sno IN
 (SELECT Sno
 FROM Sc
 WHERE Cno='C2')
查詢結果{13456}

SELECT Sname
FROM Student
WHERE Sno=ANY
 (SELECT Sno
 FROM Sc
 WHERE Cno='C2')
查詢結果{13456}

SELECT Sname
FROM Student
WHERE Sno=SOME
 (SELECT Sno
 FROM Sc
 WHERE Cno='C2')
查詢結果{13456}

(4)查詢選修了C2的學生中成績最高的學號(除錯誤的2種方法外,其余2種為正確的等價方法)
SELECT Sno,MAX(Grade)
FROM Sc
WHERE Sno IN
 (SELECT Sno
 FROM Sc
 WHERE Cno='C2')
錯誤原因:“該語句語義為:選C2的學生,在所有課程中獲得最高分數(shù)的學生”

SELECT Sno
FROM Sc
WHERE Cno='C2' AND Grade >=
 (SELECT MAX(Grade)
 FROM Sc
 WHERE Cno='C2')

SELECT Sno
FROM Sc
WHERE Cno='C2' AND Grade>= ALL
 (SELECT Grade
 FROM Sc
 WHERE Cno='C2')

SELECT X.Sno,MAX(X.Grade)
FROM Sc X,Sc Y
WHERE X.Sno=Y.Sno AND Y.Cno='C2'
錯誤原因:“該語句語義為:所有選課的學生,在所有課程中獲得最高分數(shù)的學生”

(5)查詢沒有選修C6課程的學生姓名(下面是2種等價方法)
SELECT Sname
FROM Student
WHERE Sno NOT in
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

SELECT Sname
FROM Student
WHERE Sno != all
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

(6)檢索平均成績最高的學生學號
SELECT Sno
FROM SC
GROUP BY Sno
HAVING AVG(Grade) >= ALL
 (SELECT AVG(Grade)
 FROM SC
 GROUP BY Sno)

7.集合空否的測試
(1)形式
  [NOT] EXISTS (<集合>)
(2)說明
  
不帶NOT的操作,當集合非空時(即至少存在一個元組),其邏輯值為true,否則為false
  
帶NOT的操作,當集合為空時,其值為true,否則為false
(3)查詢選修了C6的學生姓名(相關子查詢)(除了第4個,其余是等價方法)
SELECT Sname
FROM Student,Sc
WHERE Student.Sno=Sc.Sno AND Cno='C6'

SELECT Sname
FROM Student WHERE Sno=ANY
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

SELECT Sname
FROM Student
WHERE Sno in
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

SELECT Sname
FROM Student
WHERE EXISTS
 (SELECT *
 FROM Sc
 WHERE Cno='C6')
錯誤原因:“該語句語義為:所有選課的學生”

SELECT Sname
FROM Student
WHERE EXISTS
 (SELECT *
 FROM Sc
 WHERE Cno='C6' AND Sno=Student.Sno)

(4)查詢沒有選修C6課程的學生姓名(下面是3種等價方法)
SELECT Sname
FROM Student
WHERE Sno NOT in
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

SELECT Sname
FROM Student
WHERE Sno!=all
 (SELECT Sno
 FROM Sc
 WHERE Cno='C6')

SELECT Sname
FROM Student
WHERE NOT EXISTS
 (SELECT *
 FROM Sc
 WHERE Cno='C6' AND Sno=Student.Sno)

(5)查詢所有學生都選修的課程名稱(查詢這樣的課程名稱,這門課程是沒有一個學生不選的)
SELECT Cname
FROM Course
WHERE NOT EXISTS
 (SELECT *
 FROM Student
 WHERE NOT EXISTS
  (SELECT * FROM Sc
  WHERE Student.Sno=Sc.Sno And Sc.Cno=Course.Cno))

(6)查詢至少選修了與S4學生選修的全部課程相同的姓名
SELECT sname
FROM student
WHERE NOT EXISTS
 (SELECT *
 FROM sc scx
 WHERE Scx.Sno='S4' and NOT EXISTS
  (SELECT *
  FROM Sc Scy
  WHERE Scy.Sno=Student.Sno and Scy.Cno =Scx.Cno))

(7)查詢至少選修了學生S4選修的全部課程的學號(不存在這樣的課程,學生S4選修了,而其他學生沒有選)
SELECT Distinct Sno
FROM Sc A
WHERE NOT EXISTS
 (SELECT * FROM Sc B
 WHERE B.Sno='S4' And NOT EXISTS
  (SELECT * FROM Sc C
  WHERE C.Sno=A.Sno And C.Cno=B.Cno))

8.集合中重復元組存在否的測試
(1)形式
  [NOT] UNIQUE(<集合>)
(2)說明
  
不帶NOT的操作,當集合中不存在重復元組時,其邏輯值為true,否則為false
  
帶NOT的操作,當集合中存在重復元組時,其邏輯值為true,否則為false
(3)在基本表T和C中檢索只開設了一門課程的教師工號和姓名
SELECT Tno, Tname
FROM Teacher
WHERE UNIQUE
 (SELECT Tno
 FROM Course
 WHERE Course.Tno = Teacher.Tno)
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
數(shù)據(jù)庫筆試題
sql查詢語句select 應用舉例
SQL查詢語句練習題27道
數(shù)據(jù)庫系統(tǒng)教程(何玉潔 李寶安 編著)第5章習題答案
實驗四:查詢語句練習
SQL的簡單查詢
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服