SQL基礎語句入門( 二 )


(但是包含主碼聲明的關系中不可以 , 因為這回違背主碼的完整性約束 。例如上方的student關系,它不允許兩個名為Alice的學生的id號碼相同)
我么執行下方語句
SELECT Sname FROM student;結果如下
SnameCairBinBobAliceAlice這在SQL表達式結果中出現重復,如果想要強行去重,則需要用到關鍵字distinct
我們對該語句進行變形
SELECT DISTINCT Sname FROM student;查看結果發現兩個Alice只剩下一個了
select子句中還可含有加減乘除運算符+ - * /
例如查詢每個學生的id,并輸出它們各自乘10的結果
SELECT Sid*10 FROM student;where子句會篩選處那些在from子句所指定關系中滿足特定條件的元組 , 并且where子句允許使用如下邏輯連詞以及運算符
邏輯連詞以及運算符描述and且not非or或<小于<=小于等于>大于>=大于等于=等于<>不等于例如我們要輸出student中id大于1的學生姓名
Select Sname from student where Sid>1;這里應當注意,以下語句是不符合SQL標準的,對于一些數據庫或者它們的早期版本會報錯(例如MySQL,盡管在后來版本進行了支持 , 但是不要這樣做)
SELECT Sname FROM student WHERE 1<Sid;多關系查詢例如我們要輸出course中Sname屬性與student的Sname屬性取值相同的課程名和學生名:
SELECT Cname,student.Sname FROM course,student WHERE course.Sname = student.Sname;更名運算更名運算用到了as子句,它既可以出現在from中也可以出現在select中,作用是重新命名
(由于早期SQL沒有as關鍵字,在像Oracle這樣的數據庫中 , 不允許form出現as關鍵字 , 如果要做別名,則需將oldName as newName改成oldName newName
我們先看看原語句效果
Select Sid from student where Sname = 'Alice';

SQL基礎語句入門

文章插圖
使用as子句
Select Sid as 學號 from student where Sname = 'Alice';
SQL基礎語句入門

文章插圖
當然還有asfrom中的情況,這種情況是為了方便指代關系名
例如
SELECT course.Cname,student.Sname FROM course,student WHERE course.Sname = student.Sname;利用as可以這樣寫
SELECT c.Cname,s.Sname FROM course AS c,student AS s WHERE c.Sname = s.Sname;看到這里可能會有人問,這有什么意義?當然,對于簡短的語句效果不太明顯 , 但是對于下方這種語句你就能看到它的好處了
SELECT s FROM( SELECT Sname AS s, Sid AS id FROM student) AS TWHERE T.id>1;字符串運算SQL標準是對字符串大小寫敏感的,但是在一些數據庫系統如MySQL、SQL Server中是不區分大小寫的 。
SQL還允許對字符串進行函數操作,如upper()將字符串轉大寫 , lower()轉小寫,trim()去掉字符串后面的空格 。不同數據庫系統提供的函數可能會不同 。
在字符串上可使用like運算符來實現模式匹配,模式是大小寫敏感的(但MySQL中 , 或在PostgreSQL中使用ilike時例外)
一般用兩個特殊字符來描述模式,一個是百分號%,另外一個是下劃線_
前者是個通配符,也就是說表示某個字符后面所有的位;后者是個占位符,僅表示某個字符后的一位 , 下面舉例
SELECT Sname FROM student WHERE Sname LIKE 'C%';輸出結果是CairBin
SELECT Sname FROM student WHERE Sname LIKE 'C_';輸出結果是一張空表
前者會查找Sname列所有以C開頭的數據 , 后者會查找Sname列所有以C開頭但C后面僅有一位(也就是說總長度為兩字符)的數據
當然 , SQL允許使用轉義字符來表示特殊字符
SELECT Sname FROM student WHERE Sname LIKE 'C/%%' ESCAPE '/';該語句會用/來表示轉義字符,作用是查找以C和百分號開頭的數據 。在語句中/%%應當分成/%%來看 , 前者是個轉義字符,表示普通的百分號,后者是個通配符表示后面的任意位為任意數字 。
排序SQL為用戶提供了對關系中元組顯示次序的一些控制,

推薦閱讀