Mysql查询操作 联合查询 子查询

作者 : admin 本文共2263个字,预计阅读时间需要6分钟 发布时间: 2024-06-17 共1人阅读

MySQL联合查询是指在一条SQL语句中使用UNION关键字将多个查询结果合并返回的操作。UNION查询能够将多条SELECT语句的结果合并成一个结果集,每个查询结果集的列数和列类型必须一致。

语法格式如下:

SELECT 列1, 列2, 列3 FROM 表1 WHERE 条件1
UNION
SELECT 列1, 列2, 列3 FROM 表2 WHERE 条件2

联合查询将返回两个或多个查询的结果集,并且会自动去除重复的记录。

UNION ALL关键字与UNION的作用类似,但不会自动去重,会返回所有的记录。

MySQL子查询是指在一个查询内部嵌套了另一个完整的查询语句。子查询可以嵌套在SELECT、FROM、WHERE等子句中,用于获取一组数据用于父查询的条件或结果集。

       子查询是从内到外执行的,即先执行子查询,将其结果作为外层查询的一部分。子查询可以返回单个值、一行或多行数据,具体取决于子查询的语句和位置。

子查询的语法格式如下:

SELECT 列1, 列2, 列3 FROM 表1 WHERE 列A IN (SELECT 列A FROM 表2 WHERE 条件)

  子查询`(SELECT 列A FROM 表2 WHERE 条件)`嵌套在了主查询中的WHERE子句内部,并且主查询的条件使用了子查询的结果。子查询可以用于各种场景,例如作为过滤条件、计算字段、连接其他表等。使用子查询可以使查询语句更加灵活和复杂,能够处理更多的业务需求。

需要注意的是,子查询的性能可能不如联合查询或使用临时表,因此在使用子查询时要注意性能优化的问题。

MySQL的子查询可以分为以下几种类型:

1. 标量子查询(Scalar Subquery):返回的结果集只有一行一列,通常用于作为父查询的条件或计算字段的取值。例如,获取某个表的最大值或最小值作为查询条件。子查询位于主查询的条件部分,并用括号括起来。子查询返回的结果集只能是一行一列,且通常用于比较运算符(如=、>, <等)的右侧。

SELECT column_name
FROM table_name
WHERE column_name = (SELECT column_name FROM table_name WHERE condition);

select * from emp where dept_id=(select id from dept where name='销售部');
SELECT 列1, 列2, ...
FROM 表1
WHERE 列N 表达式 (SELECT 列M FROM 表2 WHERE 表达式);

/*
首先查询 某某 的入职时间
查询指定入职日期之后的入职的员工的信息
*/

select entrydate from emp where name='姓名';

select * from emp where entrydate > '2006-12-05';

select * from emp
        where entrydate > (select entrydate from emp where name='姓名');

2. 列子查询(Row Subquery):返回的结果集有多行一列,通常用于作为父查询的条件使用IN、ANY、SOME等条件运算符。例如,查找在一个表的某个字段中存在于另一个表的某个字段中的所有行。

/*查询比某一个部所有人工资都搞的员工信息*/
/*查询所有财务部人员运功工资*/
select id from dept where name = '具体的部门';

select  salary from emp where dept_id=查询出来的部门ID;

select  salary from emp where dept_id=(select id from dept where name = '具体的部门');

/*比某一个部所有员工工资都高的员工信息  all都需要满足*/

select * from emp
where salary > all (select  salary from emp where dept_id=(select id from dept where name = '具体的部门'));

3. 行子查询(Column Subquery):返回的结果集有一行多列,通常用于查询某个表中的某个字段在另一个表中的多个字段的值。

/*
行子查询
1.查询与某某员工的薪资及直属领导相同的员工信息
*/
/*a  查询张无忌员工的薪资及其直属领导*/

select salary,managerid from emp where name ='某员工';

/*b  查询与某某员工  的薪资及其直属领导相同的员工信息*/
select * from emp
where (salary,managerid)=(62500,1);
/*
内部子查询返回的一行多列  和前面的salary,managerid 匹配
*/
select * from emp
where (salary,managerid)=(select salary,managerid from emp where name ='某员工');

4. 表子查询(Table Subquery):返回的结果集有多行多列,通常用于作为父查询的表来源,可以通过JOIN操作与其他表进行关联查询。

/*表子查询*/
/*查询与  某某员工1     某某员工2职位工资相同的员工*/
/*首先查询   某某员工1    某某员工2的职位和薪资*/
select job,salary from emp where name=' 某某员工1'or name=' 某某员工2';

/*查询与 某某员工1   某某员工2  的职位和薪资相同的员工信息*/

select * from emp where (job,salary)
            in (select job,salary from emp where name='某某员工1'or name=' 某某员工2');

本站无任何商业行为
个人在线分享 » Mysql查询操作 联合查询 子查询
E-->