1. 程式人生 > >SQL高級教程1

SQL高級教程1

ike sql 希望 sele 指定 教程 匹配 支持 允許

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