学习一下这个事情——sql基础之多表查询?嵌套查询?
sql基础
连接表时的SQL的工作原理
SQL 连接子句类似于关系代数中的连接操作。它将关系数据库中一个或多个表中的列组合起来,创建一组可以保存为表或按原样使用的集合。JOIN是一种通过使用每个表通用的值来组合来自一个或多个表的列的方法。JOINS是一项关键技能,也是一个常见的面试问题,可帮助您完成复杂数据库的大量工作。能够精确地操作 JOIN 查询将为您带来额外的优势。
有 4 种主要的 JION 可以根据两个或多个表之间的公共字段组合数据或行。不同类型的连接有:
JOIN 是查询的 FROM 子句中的 SQL 指令,用于标识您正在查询的表以及应如何组合它们。但在我们真正开始连接表之前,让我们先了解一下主键和外键。
主键是表中的一列(有时是一组列),是每行的唯一标识符。数据库通常有一个名为 id 的列(customerID、emailID、EmployeeID)作为每个表的主键。
外键是表中的列,指定到另一个表中主键的链接。例如,在上图中,albums 表中的artist_id 列是artists 表中id 的外键。
回到 JOINS,让我们看看下面的数据集以了解它们的工作原理:
为此,您将使用外连接。外连接将在可能的情况下将所有表中的列合并到一个或多个公共维度上,并包括所有表中的所有数据。
这就是内连接发挥作用的地方。如果可能,内联接将组合公共维度(前 N 列)上的列,并且仅包含公共 N 列中共享相同值的列的数据。在上面的示例中,User_ID 将是用于内连接的公共维度。
您可以使用左连接将表连接在一起。如果可能,左连接会组合公共维度上的列(前 N 列),返回第一个表中的所有行以及连续表中的匹配行。当没有匹配时,连续表中的结果为 NULL。在这种情况下,我们将使用户表成为用于左连接的第一个表(左表)。
举一个例子
多表查询是SQL查询中的一个重要环节,用于从两个或更多表中查询相关数据。这是通过两种方式实现的,一种是使用JOIN,另一种是使用子查询。
现在假设我们有两个表:一个是员工表 Employees ,另一个是部门表 Departments。
Employees 表:
EmployeeID | FullName | DepartmentID
-------------|-------------|--------------
1 | John Doe | 1
2 | Jane Smith | 2
3 | Mike Johnson| 3
Departments 表:
DepartmentID | DepartmentName
----------------|-------------------
1 | Human Resources
2 | Finance
3 | IT
JOIN 语句用于结合两个或以上的表,并选取那些满足特定条件的记录。如果我们现在要结合部门名称和员工姓名,则可以使用以下查询:
SELECT Employees.FullName, Departments.DepartmentName
FROM Employees
JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
在该查询中,我们通过 JOIN 命令将两张表结合起来,并设定了一个条件,员工表中的 DepartmentID 必须与部门表中的 DepartmentID 相匹配。
如果我们想要找到某个特定部门(如IT)的所有员工,我们可以使用嵌套查询来实现:
SELECT FullName FROM Employees WHERE DepartmentID IN (
SELECT DepartmentID FROM Departments WHERE DepartmentName = 'IT'
);
在这个例子中,子查询首先查找到名为"IT"的部门的 DepartmentID,然后主查询利用这个结果从 Employees表中查找有相应DepartmentID` 的员工的姓名