SQL高級教程1
SQL TOP 子句:
TOP 子句
TOP 子句用於規定要返回的記錄的數目。
對於擁有數千條記錄的大型表來說,TOP 子句是非常有用的。
註釋:並非所有的數據庫系統都支持 TOP 子句。
SQL Server 的語法:
SELECT TOP number|percent column_name(s) FROM table_name
選取"Persons" 表中選取頭兩條記錄:SELECT TOP2* FROM Persons / SELECT TOP 50% FROM Persons
SQL LIKE 操作符
LIKE 操作符
LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符語法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
"Persons" 表中選取居住在以 "N" 開始的城市裏的人:SELECT * FROM Persons WHERE City LIKE ‘N%‘
"Persons" 表中選取居住在以 "g" 結尾的城市裏的人:SELECT * FROM PersonsWHERE City LIKE ‘%g‘
"Persons" 表中選取居住在包含 "lon" 的城市裏的人:SELECT * FROM PersonsWHERE City LIKE ‘%lon%‘
從 "Persons" 表中選取居住在不包含 "lon" 的城市裏的人:SELECT * FROM PersonsWHERE City NOT LIKE ‘%lon%‘
註釋:"%" 可用於定義通配符(模式中缺少的字母)
SQL 通配符:
SQL 通配符
在搜索數據庫中的數據時,SQL 通配符可以替代一個或多個字符。
SQL 通配符必須與 LIKE 運算符一起使用。
在 SQL 中,可使用以下通配符:
使用 % 通配符:
"Persons" 表中選取居住在以 "Ne" 開始的城市裏的人:SELECT * FROM Persons WHERE City LIKE ‘Ne%‘
"Persons" 表中選取居住在包含 "lond" 的城市裏的人:SELECT * FROM Persons WHERE City LIKE ‘%lond%‘
使用 _ 通配符:
"Persons" 表中選取名字的第一個字符之後是 "eorge" 的人:SELECT * FROM Persons WHERE FirstName LIKE ‘_eorge‘
從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,然後是一個任意字符,然後是 "r",然後是任意字符,然後是 "er":
SELECT * FROM Persons
WHERE LastName LIKE ‘C_r_er‘
使用 [charlist] 通配符:
"Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人:
SELECT * FROM Persons
WHERE City LIKE ‘[ALN]%‘
"Persons" 表中選取居住的城市不以 "A" 或 "L" 或 "N" 開頭的人:
SELECT * FROM Persons
WHERE City LIKE ‘[!ALN]%‘SQL IN 操作符:
IN 操作符
IN 操作符允許我們在 WHERE 子句中規定多個值。
SQL IN 語法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
從上表中選取姓氏為 Adams 和 Carter 的人:SELECT * FROM Persons WHERE LastName IN (‘Adams‘,‘Carter‘)
SQL BETWEEN 操作符:
BETWEEN 操作符在 WHERE 子句中使用,作用是選取介於兩個值之間的數據範圍。
BETWEEN 操作符
操作符 BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。
SQL BETWEEN 語法
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
以字母順序顯示介於 "Adams"(包括)和 "Carter"(不包括)之間的人:
SELECT * FROM Persons
WHERE LastName
BETWEEN
‘Adams‘ AND
‘Carter‘
SQL Alias(別名):
通過使用 SQL,可以為列名稱和表名稱指定別名(Alias)。
SQL Alias
表的 SQL Alias 語法
SELECT column_name(s) FROM table_name AS alias_name
列的 SQL Alias 語法
SELECT column_name AS alias_name FROM table_name
Alias 實例: 使用表名稱別名
假設我們有兩個表分別是:"Persons" 和 "Product_Orders"。我們分別為它們指定別名 "p" 和 "po"。
現在,我們希望列出 "John Adams" 的所有定單。
我們可以使用下面的 SELECT 語句:
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p
, Product_Orders AS po
WHERE p.LastName=‘Adams‘ AND p.FirstName=‘John‘
不使用別名的 SELECT 語句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName=‘Adams‘ AND Persons.FirstName=‘John‘
Alias 實例: 使用一個列名別名:
SELECT LastName AS Family
, FirstName AS Name
FROM Persons
SQL JOIN
SQL join 用於根據兩個或多個表中的列之間的關系,從這些表中查詢數據。
Join 和 Key
有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。
數據庫中的表可通過鍵將彼此聯系起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數據的情況下,把表間的數據交叉捆綁在一起。
"Id_O" 列是 Orders 表中的的主鍵,同時,"Orders" 表中的 "Id_P" 列用於引用 "Persons" 表中的人,而無需使用他們的確切姓名。
引用兩個表:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
SQL JOIN - 使用 Join:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
不同的 SQL JOIN:
除了我們在上面的例子中使用的 INNER JOIN(內連接),我們還可以使用其他幾種連接。
下面列出了您可以使用的 JOIN 類型,以及它們之間的差異。
-
JOIN: 如果表中有至少一個匹配,則返回行
-
LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
-
RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
-
FULL JOIN: 只要其中一個表中存在匹配,就返回行
SQL INNER JOIN 關鍵字:
SQL INNER JOIN 關鍵字
在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。
INNER JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
註釋:INNER JOIN 與 JOIN 是相同的。
內連接(INNER JOIN)實例
現在,我們希望列出所有人的定購。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。
SQL LEFT JOIN 關鍵字:
SQL LEFT JOIN 關鍵字
LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
LEFT JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
註釋:在某些數據庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。
左連接(LEFT JOIN)實例
現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回所有的行,即使在右表 (Orders) 中沒有匹配的行。
SQL RIGHT JOIN 關鍵字
SQL RIGHT JOIN 關鍵字
RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。
RIGHT JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
註釋:在某些數據庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN。
右連接(RIGHT JOIN)實例
現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
RIGHT JOIN 關鍵字會從右表 (Orders) 那裏返回所有的行,即使在左表 (Persons) 中沒有匹配的行。
SQL FULL JOIN 關鍵字
SQL FULL JOIN 關鍵字
只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。
FULL JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
註釋:在某些數據庫中, FULL JOIN 稱為 FULL OUTER JOIN。
全連接(FULL JOIN)實例
現在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購它們的人。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回所有的行。如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行同樣會列出。
SQL UNION 和 UNION ALL 操作符
SQL UNION 操作符
UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。
請註意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
SQL UNION 語法
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
註釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。
SQL UNION ALL 語法
SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
列出所有在中國和美國的不同的雇員名:
SELECT E_Name FROM Employees_China UNION
SELECT E_Name FROM Employees_USA
註釋:這個命令無法列出在中國和美國的所有雇員。在上面的例子中,我們有兩個名字相同的雇員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。
UNION ALL
UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。
SQL Statement 1 UNION ALL SQL Statement 2
列出在中國和美國的所有的雇員:
SELECT E_Name FROM Employees_China UNION ALL
SELECT E_Name FROM Employees_USA
SQL高級教程1