您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

mysql-子查询

bubuko 2022/1/25 20:02:02 mysql 字数 9458 阅读 664 来源 http://www.bubuko.com/infolist-5-1.html

mysql-子查询 /* 含义: 出现在其他语句中的 select 语句,称为子查询或内查询 外边的查询语句,称为主查询或外查询 分类: 按子查询出现的位置: select 后面(仅仅支持标量子查询) from 后面(支持表子查询) where 或 having 后面(支持标量子查询【单行】、列子查 ...

mysql-子查询

/*

含义:

出现在其他语句中的 select 语句,称为子查询或内查询

外边的查询语句,称为主查询或外查询

 

分类:

按子查询出现的位置:

                  select 后面(仅仅支持标量子查询)

                  from 后面(支持表子查询)

                  where 或 having 后面(支持标量子查询【单行】、列子查询【多行】、行子查询)

                  exists 后面(相关子查询)(支持表子查询)

按结果集的行列数不同:

                  标量子查询(结果集只有一行一列)

                  列子查询(结果集只有一列多行)

                  行子查询(结果集有一行多列)

                  表子查询(结果集一般为多行多列)

特点:

a.子查询放在小括号内

b.子查询一般放在条件的右侧

c.标量子查询,一般搭配着单行操作符使用(> <  >=  =  <>)

d.子查询执行优先于主查询

*/

1.where 或 having 后面

1.1、标量子查询(单行子查询)

案例1:谁的工资比 Abel 高?

#1.查询 Abel 的工资
SELECT  salary 
FROM employees
WHERE last_name = Abel;

#2.查询员工的信息,满足 salary>1结果
SELECT *
FROM employees
WHERE salary>(
                        SELECT  salary 
                        FROM employees
                        WHERE last_name = Abel

);

案例2:返回 job_id 与141号员工相同,salary 比143号员工姓名、job_id 和工资

#1.查询141号员工的 job_id
SELECT job_id
FROM employees
WHERE employee_id = 141;

#2.查询143号员工的 salary
SELECT salary
FROM employees
WHERE employee_id = 143;

#3.查询员工的姓名、job_id和工资,要求 job_id=1 并且 salary>2
SELECT lact_name,job_id,salary
FROM employees
WHERE job_id = (
                         SELECT job_id
                         FROM employees
                         WHERE employee_id = 141
) AND salary>(
                         SELECT salary
                         FROM employees
                         WHERE employee_id = 143
);

案例3:返回公司工资最少的员工的 last_name,job_id 和 salary

#1.查询公司的最低工资
SELECT MIN(salary)
FROM employees;

#2.查询 last_name,job_id 和 salary,要求 salary=1
SELECT last_name,job_id 和 salary,salary
FROM employees
WHERE salary=(
                    SELECT MIN(salary)
                    FROM employees
);

案例4:查询最低工资大于50号部门最低工资的部门 id 和其最低工资

#1.查询50号部门的最低工资
SELECT MIN(salary)
FROM employees
WHERE departmengt_id = 50;

#2.查询每个部门的最低工资
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id;

#3.在2基础上筛选,满足 min(salary)>1
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
                               SELECT MIN(salary)
                               FROM employees
                               WHERE departmengt_id = 50
);

1.2、列子查询(多行子查询)

列子查询,一般搭配着多行操作符使用(in 、any/ some、all )

1.3、行子查询(多行多列)

mysql-子查询

原文:https://www.cnblogs.com/xiao-yuge/p/12584733.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶