一、内连接和外连接
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/n/369573.html