首页 > 其他分享 >21.子查询

21.子查询

时间:2024-09-09 17:14:29浏览次数:9  
标签:21 查询 dept employee where select name

SQL语句中嵌套SELECT语句,称谓嵌套查询,又称子查询。

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2);

子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个
根据子查询结果可以分为:

标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)

根据子查询位置可分为:

WHERE 之后
FROM 之后
SELECT 之后

标量子查询
子查询返回的结果是单个值(数字、字符串、日期等)。
常用操作符:- < > > >= < <=
例子:

-- 查询销售部所有员工
select id from dept where name = '销售部';
-- 根据销售部部门ID,查询员工信息
select * from employee where dept = 4;
-- 合并(子查询)
select * from employee where dept = (select id from dept where name = '销售部');

-- 查询xxx入职之后的员工信息
select * from employee where entrydate > (select entrydate from employee where name = 'xxx');

列子查询
返回的结果是一列(可以是多行)。
常用操作符:

| 操作符    | 描述                       |
| ------ | ------------------------ |
| IN     | 在指定的集合范围内,多选一            |
| NOT IN | 不在指定的集合范围内               |
| ANY    | 子查询返回列表中,有任意一个满足即可       |
| SOME   | 与ANY等同,使用SOME的地方都可以使用ANY |
| ALL    | 子查询返回列表的所有值都必须满足         |

例子:

-- 查询销售部和市场部的所有员工信息
select * from employee where dept in (select id from dept where name = '销售部' or name = '市场部');
-- 查询比财务部所有人工资都高的员工信息
select * from employee where salary > all(select salary from employee where dept = (select id from dept where name = '财务部'));
-- 查询比研发部任意一人工资高的员工信息
select * from employee where salary > any (select salary from employee where dept = (select id from dept where name = '研发部'));

行子查询
返回的结果是一行(可以是多列)。
常用操作符:=, <, >, IN, NOT IN
例子:

-- 查询与xxx的薪资及直属领导相同的员工信息
select * from employee where (salary, manager) = (12500, 1);
select * from employee where (salary, manager) = (select salary, manager from employee where name = 'xxx');

表子查询
返回的结果是多行多列
常用操作符:IN
例子:

-- 查询与xxx1,xxx2的职位和薪资相同的员工
select * from employee where (job, salary) in (select job, salary from employee where name = 'xxx1' or name = 'xxx2');
-- 查询入职日期是2006-01-01之后的员工,及其部门信息
select e.*, d.* from (select * from employee where entrydate > '2006-01-01') as e left join dept as d on e.dept = d.id;

标签:21,查询,dept,employee,where,select,name
From: https://www.cnblogs.com/gom-linwei/p/18404882

相关文章

  • Mybatis骚操作-通用查询工具类
    老项目大多都有对JDBC进行了封装,可以直接执行SQL的工具类,在做项目升级改造的时候(这里仅指整合mybatis),要么全部调整成dao-xml的形式(会有改动代码多的问题,而且看代码时需要xml和java来回切换),要么维持原逻辑不改动(跟mybatis基本无关,同样难以用到mybatis的配置)这里实现个可以让工具使......
  • 21.多表查询
    多表关系一对多(多对一)多对多一对一一对多案例:部门与员工关系:一个部门对应多个员工,一个员工对应一个部门实现:在多的一方建立外键,指向一的一方的主键多对多案例:学生与课程关系:一个学生可以选多门课程,一门课程也可以供多个学生选修实现:建立第三张中间表,中间表至少包含两......
  • CS3214 Fall 2024     Exercise
    CS3214Fall2024       Exercise0DueDate: seewebsiteInthisclass,youarerequiredtohavefamiliaritywithUnixcommandsandUnixpro-grammingenvironments.Thefirstpartofthisexerciseisareviewtomakesureyouarecomfortableinou......
  • 设计模式 21 策略模式
    设计模式21创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式(11):责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者......
  • 常见查询日志
    `cataccess.log|grepnginx|awk'{print$1}'|sort|uniq-c|sort-nr-k1|head-n10|awk-F'''{print$2"次数:"$1}'1、查看有多少个IP访问awk'{print$1}'log_file|sort|uniq|wc-l2、查看某一个页面被访问的次数:grep&qu......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十三章 六轴传感器——姿态解算实验
    第二十三章六轴传感器——姿态解算实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK2......
  • day21
    非递减子序列classSolution{public:voidbacktracking(vector&nums,intstart){if(path.size()>1){ret.push_back(path);}if(start==nums.size()){return;}unordered_setuset;for(inti=start;i<nums.size();++i){if((!path.empty()&......
  • nginx查询日志
    #!/bin/bash日志格式:$remote_addr-$remote_user[$time_local]"$request"$status$body_bytes_sent"$http_referer""$http_user_agent""$http_x_forwarded_for"LOG_FILE=$1echo"统计访问最多的10个IP"awk'{a[$1]+......
  • 3.6 MySQL基本查询大全(select、子查询、Distinct、group by分组,order排序、limit限制
    文章目录3.6.1MySQL的基本查询1.SELECT语句基本语法2.DISTINCT3.指定列,去除重复列4.给列设置别名5.使用WHERE子句查询指定条件比较判断范围判断字符串模式匹配错误判断空值判断6.使用ORDER子句对查询结果排序7.使用LIMIT限制查询结果数量3.6.2分组查询1.聚......
  • 11.DQL(数据查询语言)-分组查询
    语法:SELECT字段列表FROM表名[WHERE条件]GROUPBY分组字段名[HAVING分组后的过滤条件];where和having的区别:执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。判断条件不同:where不能对聚合函数进行判断,而having可......