多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 含义:**出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询** * 嵌套在其他语句内部的select语句成为子查询或内查询 * 外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多 * 外面如果为select语句,则此语句称为外查询或主查询 * 分类: * 按子查询出现的位置: * select后面:仅仅支持标量子查询 * from后面:支持表子查询 * where或having后面:支持标量子查询,列子查询,行子查询(较少) * exists后面(相关子查询):支持表子查询 * 按功能、结果集的行列数不同: * 标量子查询(结果集只有一行一列) * 列子查询(结果集只有一列多行) * 行子查询(结果集有一行多列) * 表子查询(结果集一般为多行多列) #### where或having后面 * 标量子查询(单行子查询) * 列子查询(多行子查询) * 行子查询(多列多行) * 特点: * 子查询放在小括号内 * 子查询一般放在条件的右侧,where,having * 标量子查询,一般搭配着单行操作符使用(> = ) * 列子查询,一般搭配着多行操作符使用(IN、ANY/SOME、ALL) * 子查询的执行优选与主查询执行,主查询的条件用到了子查询的结果 ##### 标量子查询 * 案例1:查询Ernst的工资 ```sql SELECT salary from gin_employees WHERE last_name = 'Ernst'; ``` <br> * 案例2:查询大于Ernst的工资的员工信息 ```sql SELECT * FROM gin_employees WHERE salary > ( select salary from gin_employees WHERE last_name = 'Ernst' ); ``` <br> * 案例3: ```sql --查询140号员工的job_id SELECT job_id from gin_employees WHERE employee_id = 140; -- 查询171号员工的salary SELECT salary from gin_employees WHERE employee_id = 171; -- 查询员工的姓名,job_id 和工资 要求job_id = 案例1 并且 salary>案例2 SELECT last_name,job_id,salary from gin_employees WHERE job_id = ( SELECT job_id from gin_employees WHERE employee_id = 140 ) and salary > ( SELECT salary from gin_employees WHERE employee_id = 171 ); ``` <br> * 案例4:返回公司工资最少的last_name,job_id,和salary ```sql -- ① 查询公司最低工资 SELECT min(salary) from gin_employees; -- ② 查询last_name,job_id,salary 要求salary = ① SELECT last_name,job_id,salary from gin_employees WHERE salary = ( SELECT min( salary ) FROM gin_employees ); ```