子查询概念
子查询分类:
按子查询出现的位置:select(仅支持标量子查询)、from(支持表子查询)、where或having(重点:标量支持下、列支出现)、exist后面(表子查询)
按结果集的行列数不同:标量子查询(只有一行一列)、列子查询(只有一列多行—)、行子查询(一行多列)、表子查询(多行多列)
一、where或having
1 标量子查询(单行子查询)
2 列子查询(多行子查询)
3 行子查询(多列多行)特点:
1 子查询放在小括号内
2 支持下你一般放在条件的右侧
3 标量子查询,一般搭配着单行操作符使用: < > <= >= = <>
4 列子查询,一般搭配着多行操作符使用:in、any/some、all 5 子查询的止功能型优先于主查询执行,主查询的条件又搞到了子查询的结果
1 标量子查询
a 查询谁的工龄比‘King’大
①‘King’的工龄year多少
select ename, year(hiredate) # year()函数取出date类型的年份、month()、date()
from emp
where ename = 'king';
②查询谁的工龄比①的year大
select ename,year(hiredate)
from emp
where year(hiredate) < (
select year(hiredate) # year()函数取出date类型的年份、month()、date()
from emp
where ename = 'king');
b 查询工资最低的员工的名字和工作
①查询工资最低的员工
select min(sal) from emp;
②查询工资 = min(sal) 的员工姓名和工作
select ename, job
from emp
where sal = (
select min(sal) from emp
);