前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql基础之多表查询?嵌套查询?

sql基础之多表查询?嵌套查询?

作者头像
一个正经的测试
发布2024-02-05 11:20:29
1110
发布2024-02-05 11:20:29
举报

学习一下这个事情——sql基础之多表查询?嵌套查询?

sql基础

SQL(Structured Query Language)结构化查询语言,是一个用于查询和操作数据库的标准语言。SQL不仅在传统的数据库如Oracle, SQL Server, MySQL中广泛使用,在现代的BigData和NoSQL系统中也扮演着重要角色。

连接表时的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。在这种情况下,我们将使用户表成为用于左连接的第一个表(左表)。

右连接的工作方式与左连接完全相同,唯一的区别在于基表。在左连接中,表 1(左表)被视为基础,而在右连接中,表 2(右表)将被视为基础。右连接尽可能组合公共维度上的列(前 N 列),返回第二个/右表中的所有行以及第一个/左表中的匹配行。

举一个例子

多表查询是SQL查询中的一个重要环节,用于从两个或更多表中查询相关数据。这是通过两种方式实现的,一种是使用JOIN,另一种是使用子查询。

现在假设我们有两个表:一个是员工表 Employees ,另一个是部门表 Departments。

Employees 表:

代码语言:javascript
复制
EmployeeID  | FullName    | DepartmentID  
-------------|-------------|--------------
1         | John Doe    |  1  
2            | Jane Smith  |  2  
3         | Mike Johnson|  3      

Departments 表:

代码语言:javascript
复制
DepartmentID  | DepartmentName
----------------|-------------------
1           | Human Resources   
2                | Finance   
3           | IT  

使用 JOIN

JOIN 语句用于结合两个或以上的表,并选取那些满足特定条件的记录。如果我们现在要结合部门名称和员工姓名,则可以使用以下查询:

代码语言:javascript
复制
SELECT Employees.FullName, Departments.DepartmentName 
FROM Employees
JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

在该查询中,我们通过 JOIN 命令将两张表结合起来,并设定了一个条件,员工表中的 DepartmentID 必须与部门表中的 DepartmentID 相匹配。

使用子查询

如果我们想要找到某个特定部门(如IT)的所有员工,我们可以使用嵌套查询来实现:

代码语言:javascript
复制
SELECT FullName FROM Employees WHERE DepartmentID IN (
  SELECT DepartmentID FROM Departments WHERE DepartmentName = 'IT'
);

在这个例子中,子查询首先查找到名为"IT"的部门的 DepartmentID,然后主查询利用这个结果从 Employees表中查找有相应DepartmentID` 的员工的姓名

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个正经的测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL(Structured Query Language)结构化查询语言,是一个用于查询和操作数据库的标准语言。SQL不仅在传统的数据库如Oracle, SQL Server, MySQL中广泛使用,在现代的BigData和NoSQL系统中也扮演着重要角色。
  • 右连接的工作方式与左连接完全相同,唯一的区别在于基表。在左连接中,表 1(左表)被视为基础,而在右连接中,表 2(右表)将被视为基础。右连接尽可能组合公共维度上的列(前 N 列),返回第二个/右表中的所有行以及第一个/左表中的匹配行。
    • 使用 JOIN
      • 使用子查询
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档