sql筆記——查詢

查詢語句:

SELECT [ALL|DISTINCT]<目標列表達式>[,<目標列表達式>]...

FROM <表名或這視圖名>[,<表名或這視圖名>]...

[WHERE<條件表達式>]

[GROUP BY <列名 1>[HAVING<條件表達式>]]

[ORDER] BY <列名 2>[ASC|DESC]

說明

[ALL|DISTINCT]

若從一關係中查詢出符合條件的元組,但輸出部分屬性值,結果關係中可能有重複元組,選擇DISTINCT,則每組重複元組只輸出一條元組;選擇ALL,則所有重複元組都輸出;缺省值:ALL

<條件表達式>

例子:

1、比較

 Sex="男"

2、確定範圍

grade BETWEEN 70 AND 80

3、確定集合

dept IN("01","02");

4、字符統配

[NOT]LIKE '<匹配串>'[ESCAPE'<轉碼字符>']

其中匹配串可以是一個完整的字符串也可以含有通配符“_”或者“%”。%表示任意長度的字符串;_表示任意單個字符,值得注意的是漢字會佔用兩個“_”

name LIKE '沙%';

5、空值

grade IS NULL,切忌使用 grade = NULL

6、多重條件

多個條件表達式使用AND(且)、OR(或)或者NOT(非)連接

sex = "男" AND dept >11

7、排序,默認升序ASC,在嵌套語句中,ORDER BY 只能用在最終查詢結果

grade ORDER BY id DESC 

8、聚集函數

聚集函數遇到空值的時候,除了COUNT(*)外,都跳過空值只處理非空值。注意WHERE子句不能使用聚集函數

9、將查詢的結果按照某一列或多列的值分組,值相等的爲一組。

grade GROUP BY no

10、連接查詢

[<表名1>.]<列名 1><比較運算符>[<表名 2>.]<列名 2>

SELECT Student.*,SC.* 

FROM Student,SC

WHERE Student.Sno = SC.Sno;

自身連接 需要取別名

SELECT First.Cno,Second.Cpno

FROM Course First,Course Second

WHERE First.Cpno = Second.Cno;

11、嵌套連接,先執行子查詢,再執行父查詢

a)帶IN謂詞的子查詢

SELECT S.Sno, S.Sname, S.Ssex

FROM Student S WHERE Sdept IN

(SELECT Dno FROM Dept WHERE Dname="軟件工程系")

b)比較運算符的子查詢

SELECT S.Sno, S.Sname,S.Ssex

FROM Student S WHERE Sdept=

(SELECT Dno FROM Dept WHERE Dname="軟件工程系")

c)ANY或ALL的子查詢

使用ANY或ALL謂詞時冊必須使用比較運算符。

d)EXISTS的子查詢

帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯‘true’或者‘false’。由EXISTS引出的子查詢,其目標表達式通常是*,因爲帶EXISTS的子查詢只返回真假值,給出列名無實際意義。

12、集合查詢包括並操作(UNION)交操作(INTERSECT)和(EXCEPT)。注意,參加集合操作的查詢結果列必須相同;對應項的數據類型也必須相同。結果會自動去掉重複元組,如果保留重複元組,需要加上ALL,eg:UNION ALL

 

a)並操作(UNION)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章