一、內連接和外連接
1、內連接是指只有兩個表都存在相關數據時才返回數據,而外連接則可以返回一個表中所有數據,而另一個表中無相關數據的行則返回 null。內連接的語法如下:
SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name = table2.column_name;
而左外連接的語法如下:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
2、我們來看下面這個例子:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
該例子是一個內連接的例子,它的輸出是所有在Customers表和Orders表中共同存在的 CustomerID 和 OrderID。
而下面這個例子:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
該例子是一個左外連接的例子,它的輸出是Customers表中的所有行和Orders表中與之相關的部分行,但如果在Orders表中沒有與Customers表相關的數據,則 Orders 表中的所有列均為 null。
二、自連接和子查詢
1、自連接是指將一個表作為兩個表來連接的過程,它用於將表中的一行與表中其他行進行比較。語法如下:
SELECT a.column_name, b.column_name... FROM table_name a, table_name b WHERE a.common_field = b.common_field;
這裡需要注意的是,使用自連接時,我們必須使用表別名來區分這兩個相同的表。例如下面這個例子:
SELECT a.EmployeeID, a.LastName, a.FirstName, b.LastName AS ManagerLastName FROM employees a, employees b WHERE a.ReportsTo = b.EmployeeID ORDER BY a.LastName, a.FirstName;
該例子是將一個 Employee 表連接兩次,以便找到員工和他們的經理信息。
2、子查詢是指查詢內嵌在其他查詢中的查詢。在另一個查詢中使用子查詢屬於標準SQL的一部分,語法如下:
SELECT column_name(s) FROM table_name WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);
它使用一個查詢結果作為另一個查詢的條件,例如下面這個例子:
SELECT * FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders);
該例子是用子查詢在 Customers 表中選擇具有匹配訂單(在 Orders 表中)的客戶。
三、多表連接和外連接
1、多表連接是指在 SQL語句中使用多個表進行連接,以便查詢來自不同表的數據。
例如下面這個例子是一個多表連接的例子:
SELECT * FROM Customers, Orders, OrderDetails WHERE Customers.CustomerID=Orders.CustomerID AND Orders.OrderID=OrderDetails.OrderID;
該語句選擇來自 Customers、Orders和 OrderDetails 表的所有行,只有在 Customers 表、Orders 表和 OrderDetails 表同時存在相關行時才會顯示數據。
2、外連接是指在 SQL 語句中使用左右外連接來顯示一個表中的所有行,並顯示與另一個表中存在關聯的行(如果有的話)。左外連接的語法如下:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
右外連接的語法如下:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
3、下面這個例子是一個左外連接的例子:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
該例子是返回了 Customers 表中的所有行和 Orders 表中與之相關的部分行,但是如果在 Orders 表中沒有與 Customers 表相關的數據,則 Orders 表中的所有列均為 null。
原創文章,作者:LYXRN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369573.html