更新或删除操作的数据
发布时间:2025-06-24 18:27:56 作者:北方职教升学中心 阅读量:343
例子:
SELECT name, salary -- 选择查询员工姓名和工资FROM employees -- 从 employees 表中查询数据WHERE (department_id, salary) = ( -- 筛选条件:部门ID和工资匹配子查询的结果 SELECT department_id, MAX(salary) -- 子查询:每个部门的最高工资 FROM employees -- 从 employees 表查询数据 GROUP BY department_id -- 按部门分组,计算每个部门的最高工资);
这个例子中,子查询 (SELECT department_id, MAX(salary) FROM employees GROUP BY department_id)
返回每个部门的最大工资和部门ID,主查询用于查找这些工资最高的员工。
当然子查询一般出现在一下的位置:
- WHERE 子句:在
WHERE
条件中使用子查询,通常用于筛选符合某条件的记录。连接条件:
使用WHERE
子句指定连接条件,例如两个字段相等或满足其他关系。例子:
SELECT name -- 选择查询员工姓名FROM employees -- 从 employees 表中查询数据WHERE salary > ( -- 筛选条件:工资大于子查询结果 SELECT AVG(salary) -- 子查询:计算所有员工的平均工资 FROM employees -- 从 employees 表中计算平均工资);
在这个例子中,子查询
(SELECT AVG(salary) FROM employees)
计算了所有员工的平均工资,主查询返回那些工资高于平均工资的员工。SELECT -- 选择查询的字段 s.name AS 学生姓名, -- 学生表中的姓名字段,别名为 "学生姓名" s.sno AS 学号, -- 学生表中的学号字段,别名为 "学号" c.name AS 班级名称 -- 班级表中的名称字段,别名为 "班级名称"FROM student s -- 从学生表(s)查询数据INNER JOIN class c -- 使用 INNER JOIN 连接班级表(c)ON s.class_id = c.id; -- 学生表的 class_id 与 班级表的 id 匹配
解释:
s.class_id = c.id
指定连接条件,确保学生与其班级正确匹配。UPDATE、内连接的基本语法:
SELECT 字段名FROM 表1 [INNER] JOIN 表2ON 表1.字段名 = 表2.字段名WHERE 其他条件;
了解完了内连接的基本语法之后,让我们使用一个案例来进一步对内连接进行理解:
场景:获取学生及其班级信息
在学校管理系统中,学生的基本信息和班级信息存储在不同的表中,通过内连接,我们可以查询学生的详细信息及其所属班级名称。右外连接,用于返回一张表的所有记录,以及另一张表中与之匹配的数据(如果有的话)。
4.子查询
学习完自连接之后,在让我们学习一下子查询,首先先让我们了解一下子查询的基本概念:
子查询是一个嵌套在主查询(外部查询)中的查询,可以帮助你对复杂查询进行分解,获取主查询所需的数据,子查询的执行通常在主查询之前完成,并且其结果可以被用作主查询的一部分。
至此我们就大致的了解了有关子查询的类型了!希望读者可以根据上述的案例对子查询有自己的理解!
5.合并查询
最后在让我们学习一下合并查询,合并查询允许你将两个或多个查询的结果合并成一个结果集,每个查询的结果必须有相同数量的列,并且列的数据类型应该兼容。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
在正式开始讲解之前,先让我们看一下本文大致的讲解内容:
目录
1.为什么使用联合查询
2.内连接
2.外连接
3. 自连接
4.子查询
子查询的类型:
【1】标量子查询
【2】列子查询
【3】行子查询
【4】表子查询
5.合并查询
1.为什么使用联合查询
在开始学习联合查询之前,先让我们了解一下为什么要使用联合查询,在数据库设计中,为了满足范式的要求,数据通常被拆分存储在多个表中,这样的设计能够提高数据的规范性和可维护性,但也带来了数据分散的问题。
了解完了合并查询的基本概念之后,在让我们学习一下合并查询的语法:
SELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2;
这样我们就大致的了解了什么是联合查询了,那么接下来让我们使用一个案例来讲解一下合并查询该如何去使用:
例子:
假设有两个表:employees_2019
和 employees_2020
,你想查询这两年中所有员工的姓名和职位:
SELECT name, position -- 选择查询员工姓名和职位FROM employees_2019 -- 从 2019 年的员工表中获取数据UNION -- 合并两个查询的结果,并去重SELECT name, position -- 选择查询员工姓名和职位FROM employees_2020; -- 从 2020 年的员工表中获取数据
这段 SQL 查询使用了 UNION
,将两个表 (employees_2019
和 employees_2020
) 中的员工姓名和职位合并成一个结果集。
而联合查询正是为了解决这一问题而存在的,通过将多个表关联起来,联合查询可以将分散存储的数据整合到一个结果集中。
通过上述的讲解,我们就对子查询有了一定的了解了,那么接下来就让我们学习一下子查询的类型,并通过这些类型中的例子,来进一步理解如何去使用子查询。
SELECT -- 选择查询的字段 s1.student_id AS 学生ID, -- 从 score 表 s1 中选取 student_id 字段,别名为 "学生ID" s1.score AS MySQL成绩, -- 从 score 表 s1 中选取 score 字段,别名为 "MySQL成绩" s2.score AS Java成绩 -- 从 score 表 s2 中选取 score 字段,别名为 "Java成绩"FROM score s1, score s2 -- 从同一个 score 表(使用别名 s1 和 s2)查询WHERE s1.student_id = s2.student_id -- 连接条件:选取同一学生的记录 AND s1.course_id = 3 -- MySQL 课程的课程ID为 3 AND s2.course_id = 1 -- Java 课程的课程ID为 1 AND s1.score > s2.score; -- 筛选条件:MySQL 成绩高于 Java 成绩
解释:
s1
和s2
是score
表的两个别名,分别表示 MySQL 和 Java 课程的成绩记录。- INSERT、
s1.student_id = s2.student_id
确保比较的是同一个学生的成绩。它不仅是关联表数据的核心工具,还能高效解决多表协作的问题,是数据库开发中不可或缺的重要技能。这样我们就了解了联合查询的全部内容了!
以上就是本篇文章全部内容~~