【mysql】mysql单表查询、多表查询、分组查询、子查询等案例详细解析

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:MySQL数据库入门,进阶应用实战必备
景天的主页:景天科技苑

文章目录

  • mysql查询操作
    • where 条件的使用
    • 单表查询案例解析
      • 1. 查询部门是sale的所有员工姓名:
      • 2. 部门是teacher , 收入大于10000的所有数据
      • 3. 收入在1万到2万之间的所有员工姓名和收入
      • 4. 收入不在1万到2万之间的所有员工姓名和收入
      • 5. 查看岗位描述为NULL的员工信息
      • 6. 查看岗位描述不为NULL的员工信息
      • 7. 查询收入是3000 ,4000 ,5000,8300 所有员工的姓名和收入
      • 8. 查询收入不是3000 ,4000 ,5000,8300 所有员工的姓名和收入
      • 9. 以on结尾的员工名搜一下
      • 10. 统计员工一年的年薪
      • 11. 查询部门的种类,distinct去重
    • group by 子句 分组分类
    • 聚合函数
      • 一、count
      • 二、count执行效率
      • 三.having
      • 四.order by 排序
      • 五.limit 限制查询条数 (应用在分页)
      • 六.mysql 当中可以使用正则表达式 (不推荐,效率低)
  • mysql多表查询操作
    • 多表查询案例解析
    • 1.内联接 : inner join
    • 2.外联接 : left join左联接 / right join 右联接
      • (1)left join左联接
      • (2)right join右联接
      • (3)全联接 : union
    • 3.子查询

mysql查询操作

where 条件的使用

功能: 对表中的数据进行帅选和过滤
语法:

  • 1.判断的符号
    = (!= <>不等于) > >= < <=
  • 2.拼接不同的条件的关键字
    and or not
  • 3.查询对应的区间值
    between 小值 and 大值 [小值,大值] 查询两者之间的范围值
  • 4.查询具体在哪个范围中
    in(1,21,333,444) 指定范围

between and 与in区别
范围查询:
between and 表示在一个连续的范围内查询

in 可以表示在一个非连续的范围内查询

  • 5.模糊查询 like % 通配符 _ 通配符
    like “%b” 匹配以b结尾的任意长度的字符串
    like “b%” 匹配以b开头的任意长度的字符串
    like “%b%” 匹配字符串中含有b的任意长度的内容
    like “_b" 匹配总长度为3个字符,任意内容的字符串,并且以b结尾
    like "b
    ” 匹配总长度为2个字符,任意内容的字符串,并且以b开头

单表查询案例解析

  • 创建表
create table employee(
id int not null unique auto_increment,
emp_name varchar(20) not null,
sex enum('male','female') not null default 'male', #大部分是男的
age int(3) unsigned not null default 28,
hire_date date not null,
post varchar(50),
post_comment varchar(100),
salary double(15,2),
office int, #一个部门一个屋子
depart_id int
);

#三个部门:教学,销售,运营

insert into employee(emp_name,sex,age,hire_date,post,salary,office,depart_id) values
('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
('alex','male',78,'20150302','teacher',1000000.31,401,1),
('wupeiqi','male',81,'20130305','teacher',8300,401,1),
('yuanhao','male',73,'20140701','teacher',3500,401,1),
('liwenzhou','male',28,'20121101','teacher',2100,401,1),
('jingliyang','female',18,'20110211','teacher',9000,401,1),
('jinxin','male',18,'19000301','teacher',30000,401,1),
('成龙','male',48,'20101111','teacher',10000,401,1),('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
('丫丫','female',38,'20101101','sale',2000.35,402,2),
('丁丁','female',18,'20110312','sale',1000.37,402,2),
('星星','female',18,'20160513','sale',3000.29,402,2),
('格格','female',28,'20170127','sale',4000.33,402,2),('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
('程咬金','male',18,'19970312','operation',20000,403,3),
('程咬银','female',18,'20130311','operation',19000,403,3),
('程咬铜','male',18,'20150411','operation',18000,403,3),
('程咬铁','female',18,'20140512','operation',17000,403,3)
;

查看表结构
在这里插入图片描述

查看表数据
在这里插入图片描述

1. 查询部门是sale的所有员工姓名:

select emp_name from employee where post="sale";

在这里插入图片描述

2. 部门是teacher , 收入大于10000的所有数据

select * from employee where post = "teacher" and salary > 10000;

在这里插入图片描述

3. 收入在1万到2万之间的所有员工姓名和收入

select emp_name,salary from employee where salary between 10000 and 20000;

在这里插入图片描述

4. 收入不在1万到2万之间的所有员工姓名和收入

范围查询:
between and 表示在一个连续的范围内查询

in 表示在一个非连续的范围内查询

select emp_name,salary from employee where salary not between 10000 and 20000;

在这里插入图片描述

5. 查看岗位描述为NULL的员工信息

select emp_name from employee where post_comment = null;
select emp_name from employee where post_comment = '';
select emp_name from employee where post_comment is null;

为空只能是is null ,= null = ‘’ 都不对,null是mysql的关键字,使用is来作比对
在这里插入图片描述

6. 查看岗位描述不为NULL的员工信息

select emp_name from employee where post_comment is not null;

在这里插入图片描述

7. 查询收入是3000 ,4000 ,5000,8300 所有员工的姓名和收入

select emp_name,salary from employee where salary in(3000,4000,5000,8300);
select emp_name,salary from employee where salary = 3000 or salary=4000 or salary=5000 or salary=8300;

在这里插入图片描述

8. 查询收入不是3000 ,4000 ,5000,8300 所有员工的姓名和收入

select emp_name,salary from employee where salary not in(3000,4000,5000,8300);

9. 以on结尾的员工名搜一下

select emp_name from employee where emp_name like "%on";
select emp_name from employee where emp_name like "ji%";
select emp_name from employee where emp_name like "_le_";

在这里插入图片描述

10. 统计员工一年的年薪

select concat(" 姓名: ",emp_name,"  收入:  ",salary) from employee;

在这里插入图片描述

计算年薪,可以在mysql中使用四则运算符 + - * /

select concat(" 姓名: ",emp_name,"  收入:  ",salary * 12) from employee;
select concat_ws("  :  ",emp_name,salary*12 ) from employee;

以 “:” 将字段拼接一起
在这里插入图片描述

select concat_ws("  :  ",emp_name,salary*12 ) from employee;

以 “:” 将字段拼接一起,自己设个单独的拼接符
在这里插入图片描述

11. 查询部门的种类,distinct去重

distinct 返回唯一不同的值,去重,可以去除重复数据行

select distinct(post)  from employee;

在这里插入图片描述

group by 子句 分组分类

group by 字段,对数据进行分类, by后面接什么字段,select后面就搜什么字段
分组查询:

分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组

语法格式:

group by 列名[having 条件表达式][with rollup]

说明:
having条件表达式:用来过滤分组后的数据
在所有记录的最后加上一条数据,显示select查询时聚合函数的统计和计算结果

group by的使用: 只能查询指定分组的字段

select sex from  employee group by sex;

在这里插入图片描述

group_concat 按照分组把对应字段拼在一起;
group_concat(字段名):列出每个分组指定字段的总数集合,每个信息之间用逗号隔开

select group_concat(emp_name),post from  employee group by post;

在这里插入图片描述

聚合函数

聚合函数: 聚合函数不统计空值
聚合函数又叫组函数,通常对表中数据进行统计和计算,一般结合分组group by来使用
用于统计和计算分组数据

常用的聚合函数:
1、count(col)指定列的总行数 当某一列有空值,不做统计 一般统计总行数用count(*)
2、max(col)指定列的最大值
3、min(col)指定列的最小值
4、sum(col)指定列求和
5、avg(col)指定列求平均值

使用group by 时,聚合函数可以直接搜,其他字段不能直接搜,要搜只能按by的字段分组列出来 该分组中指定字段的总和
如下,emp_name没有by,不能直接搜索
在这里插入图片描述

如要搜索,需要结合group_concat()
在这里插入图片描述

聚合函数可以直接搜
在这里插入图片描述

group by 后面如果是 unique唯一索引或主键 其他字段都可以搜

一、count

1、count(1):可以统计表中所有数据,不统计所有的列,用1代表代码行,在统计结果中包含列字段为null的数据;

2、count(字段):只包含列名的列,统计表中出现该字段的次数,并且不统计字段为null的情况;

3、count(*):统计所有的列,相当于行数,统计结果中会包含字段值为null的列;

二、count执行效率

列名为主键,count(列名)比count(1)快;列名不为主键,count(1)会比count(列名)快;
如果表中多个列并且没有主键,则count(1)的执行效率优于count(*);
如果有主键,则select count(主键)的执行效率是最优的;如果表中只有一个字段,则select count(*)最优。
在这里插入图片描述

如果某列字段中个别值是空值,直接计算平均值时,会不准确,它只统计非空值的全部数据的平均数 非空值数据和除以非空值个数
在这里插入图片描述

针对空值设为默认值,可以解决这个问题
在这里插入图片描述

如果遇到某列有空值,avg()是不做统计的,它只统计非空值的全部数据的平均数 非空值数据和除以非空值个数

如果想把空值的个数也算进去,需要用ifnull函数,设个默认值

ave(ifnull(height, 0)),默认空值的数据为0.这样统计出来的就是非空值全部数据的和除以非空值个数加上空值个数

对sum也适用
select sum(ifnull(height, 1.6)) from student;

    # count 统计总数 *所有select count(*) from employee;# max  统计最大值select max(salary) from employee;# min  统计最小值select min(salary) from employee;# avg  统计平均值select avg(salary) from employee;# sum  统计总和select sum(salary) from employee;
  1. 查询部门名以及各部门的平均薪资
select avg(salary),post from employee group by post;
  1. 查询部门名以及各部门的最高薪资
select max(salary),post from employee group by post;
  1. 查询部门名以及各部门的最低薪资
select min(salary),post from employee group by post;

在这里插入图片描述

  1. 查询公司内男员工和女员工的个数
select count(*),sex from employee group by sex;

在这里插入图片描述

  1. 查询部门名以及部门包含的所有员工名字
select group_concat(emp_name),post from employee group by post;

在这里插入图片描述

  1. 可以group by 两个字段,就可以同时搜索两个字段。可以group by 多个字段。by谁 搜谁
select emp_name,post from employee group by post ,emp_name;

在这里插入图片描述

三.having

在数据分类分组之后,对数据进行二次过滤,一般配合group by来使用的;
找出各部门平均薪资,并且大于10000

select post , avg(salary) from  employee group by post having avg(salary) > 10000

在这里插入图片描述

1.查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数

select post , group_concat(emp_name), count(*) from employee group by post having count(*) < 2;

在这里插入图片描述

2.查询各岗位平均薪资小于10000的岗位名、平均工资

select post , avg(salary) from employee group by post having avg(salary) < 10000

在这里插入图片描述

3.查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资

select post, avg(salary) from employee group by post having avg(salary) between 10000 and 20000

在这里插入图片描述

select post, avg(salary) from employee group by post having avg(salary) > 10000 and  avg(salary) < 20000;

四.order by 排序

按照某字段排序。可以接多个字段,前面的排序相同,再按后面字段来排序
order by age asc (升序) order by age desc (降序)
按照年龄从小到大排序,默认升序

select * from employee order by age;

在这里插入图片描述

按照年龄从大到小排序

select * from employee order by age desc;
  1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
select * from employee order by age asc ,  hire_date desc;

在这里插入图片描述

  1. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) asc

在这里插入图片描述

  1. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列
select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) desc

五.limit 限制查询条数 (应用在分页)

limit m,n m代表从第几条数据开始查, n 代表查几条 m=0 代表的是第一条数据,默认m从0开始

select * from employee limit 0,10   # 0代表的是第一条数据开始
select * from employee limit 10,10  # 10代表的是第十一条数据
select * from employee limit 20,10  # 20代表的是第二十一条数据

搜索前10条
在这里插入图片描述

limit + num num => 搜索的条数据

select * from employee limit 1

搜索一条数据
在这里插入图片描述

搜索这个表里面最后一条数据

select * from employee order by id desc limit 1

搜索这个表里面最后五条数据

select * from employee order by id desc limit 5

在这里插入图片描述

六.mysql 当中可以使用正则表达式 (不推荐,效率低)

select * from employee where  emp_name regexp ".*on$";  # mysql中无法识别?

在这里插入图片描述

新版的mysql8.0支持.*?
在这里插入图片描述

select * from employee where  emp_name regexp "^程.*";
select * from employee where  emp_name regexp "^程.*金";

查询姓名以 程 开头的记录
在这里插入图片描述

新版的mysql支持.*?
在这里插入图片描述

mysql多表查询操作

连接查询:
连接查询可以实现多个表的查询,当查询的字段数据来自于不同的表,就可以使用连接查询

连接查询分为:
内连接查询 inner join 取的就是两张表的交集
左连接查询 left join 左外连接:左边的是主表,左表数据全部显示,右表显示符合ON后的条件的数据,不符合的用NULL代替。
右连接查询 right join 右外连接:右边边的是主表,右边表数据全部显示,左边表显示符合ON后的条件的数据,不符合的用NULL代替。
全连接查询 union 全连接查询的是 左表所有的数据 加上 右表所有的数据 并去重。

多表查询案例解析

建表

create table department(
id int,
name varchar(20) 
);create table employee(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
);

插入数据

insert into department values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');insert into employee(name,sex,age,dep_id) values
('egon','male',18,200),
('alex','female',48,201),
('wupeiqi','male',38,201),
('yuanhao','female',28,202),
('liwenzhou','male',18,200),
('jingliyang','female',18,204)
;
# 查询:
# 一.找出平均年龄大于25岁以上的部门
# 二.查看技术部门员工姓名
# 三.查看哪个部门没员工
# 四.查询大于平均年龄的员工名与年龄
# 五.把大于其本部门平均年龄的员工名和姓名查出来
# 六.查询每个部门最新入职的那位员工  # 利用上一套数据表进行查询;
# 七.带EXISTS关键字的子查询

1.内联接 : inner join

两表或者多表之间,把满足条件的所有数据查询出来 (多表之间共同拥有的数据会被查询出来)
两表联查
select 字段 from 表1 inner join 表2 on 必要的关联条件
多表联查
select 字段 from 表1 inner join 表2 on 必要的关联条件1 inner join 表3 on 必要的关联条件2

select * from employee inner join department on employee.dep_id = department.id;

在这里插入图片描述

内连接查询:查询的是的就是两张表的交集
在这里插入图片描述

as 起别名

select * from employee as e inner join department as d on e.dep_id = d.id;

也可以省略as (不推荐)

select * from employee e inner join department d on e.dep_id = d.id;

where 写法默写是内联接( 等同于inner join )

select * from employee,department where employee.dep_id = department.id;
select * from employee as e ,department as d where e.dep_id = d.id;

在这里插入图片描述

2.外联接 : left join左联接 / right join 右联接

(1)left join左联接

以左表为主,右表为辅,完整查询左表所有数据,右表没有的数据补null

select * from employee left join department on employee.dep_id = department.id;

右表department没有id为204的字段,所以以null补充
在这里插入图片描述

(2)right join右联接

以右表为主,左表为辅,完整查询右表所有数据,左表没有的数据补null

select * from employee right join department on employee.dep_id = department.id;

左表没有dep_id为203的字段,右连接查询,所以左边表没有的数据以null填充
在这里插入图片描述

(3)全联接 : union

全连接查询的是 左表所有的数据 加上 右表所有的数据

select * from employee left join department on employee.dep_id = department.id
union
select * from employee right join department on employee.dep_id = department.id;

左连接与右连接的并集
在这里插入图片描述

3.子查询

子查询: 嵌套查询(1) sql语句当中又嵌套了另外一条sql,用括号()进行包裹,表达一个整体(2) 一般用在from子句,where子句... 身后,表达一个条件或者一个表(3) 速度快慢: 单表查询 > 联表查询 > 子查询;

一.找出平均年龄大于25岁以上的部门
(1) where

select d.id,d.name
from employee as e ,department as d
wheree.dep_id = d.id
group by d.id,d.name
havingavg(e.age) > 25

在这里插入图片描述

(2) inner join

select d.id,d.name
from employee as e inner join department as d on e.dep_id = d.id
group by d.id,d.name
havingavg(e.age) > 25

(3) 子查询
1.先找出平均年龄大于25岁的部门id
select dep_id from employee group by employee.dep_id having avg(age)>25; # 201 202
2.通过部门的id找部门的名字
select name from department where id in (201,202);
3.综合拼接:
select id , name from department where id in (select dep_id from employee group by employee.dep_id having avg(age)>25);
在这里插入图片描述

二.查看技术部门员工姓名
(1) 普通的where 查询

select e.id,e.name
fromemployee as e,department as d
wheree.dep_id = d.idandd.name = "技术"

(2) inner join

select e.id,e.name
fromemployee as e inner join department as d on e.dep_id = d.id 
whered.name = "技术"

(3)子查询
(1) 找技术部门对应的id

select id from department where name = "技术";

(2) 通过id找员工姓名

select name from employee where dep_id = 200;

(3) 综合拼接

select id,name from employee where dep_id = (select id from department where name = "技术");

在这里插入图片描述

三.查看哪个部门没员工

联表写法

selectd.id,d.name
fromdepartment as d left join employee as e on d.id = e.dep_id
wheree.dep_id is null    

1.找员工在哪些部门 (200 201 202 204)

select dep_id from employee  group by dep_id

2.把不在该部门的员工找出来

select  id  from department where id not in (200,201,202,204);

3.综合拼接

select  id,name  from department where id not in (select dep_id from employee  group by dep_id);

在这里插入图片描述

四.查询大于平均年龄的员工名与年龄
假设已经知道了平均年龄;

select name,age from employee where age > 30;

计算平均年龄

select avg(age) from employee;

综合拼接

select name,age from employee where age > (select avg(age) from employee);

在这里插入图片描述

五.把大于其本部门平均年龄的员工名和姓名查出来
1.先计算本部门的平均年龄是多少

select dep_id , avg(age) from employee  group by dep_id;    
+--------+----------+
| dep_id | avg(age) |
+--------+----------+
|    200 |  18.0000 |
|    201 |  43.0000 |
|    202 |  28.0000 |
|    204 |  18.0000 |
+--------+----------+

2.把查询的各部门平均年龄和employee进行联表,变成一张大表,最后做单表查询

select *
fromemployee as t1 inner join (1号查询出来的数据) as t2 on t1.dep_id = t2.dep_id

3.综合拼装

select *
fromemployee as t1 inner join (select dep_id , avg(age) as avg_age from employee  group by dep_id) as t2 on t1.dep_id = t2.dep_id

4.最后做一次单表查询,让age > 平均值

select *
fromemployee as t1 inner join (select dep_id , avg(age) as avg_age from employee  group by dep_id) as t2 on t1.dep_id = t2.dep_id
where age >avg_age

使用连接查询,变成一张大表。单表用连接查询,要创建别名,不然查询失败
子查询作为一张表,必须创建别名
在这里插入图片描述

字段也要用别名
在这里插入图片描述

作比较的时候不能用avg(age),小括号是一种特殊的符号,不能作比较
在这里插入图片描述

别名都创建好,可以正常查询
在这里插入图片描述

六.查询每个部门最新入职的那位员工 # 利用上一套数据表进行查询;
employee

+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
| id | emp_name   | sex    | age | hire_date  | post                                    | post_comment | salary     | office | depart_id |    max_date
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+
|  1 | egon       | male   |  18 | 2017-03-01 | 老男孩驻沙河办事处外交大使              |              |    7300.33 |    401 |         1 | 2017-03-01
|  2 | alex       | male   |  78 | 2015-03-02 | teacher                                 | NULL         | 1000000.31 |    401 |         1 | 2015-03-02
|  3 | wupeiqi    | male   |  81 | 2013-03-05 | teacher                                 | NULL         |    8300.00 |    401 |         1 | 2015-03-02 
|  4 | yuanhao    | male   |  73 | 2014-07-01 | teacher                                 | NULL         |    3500.00 |    401 |         1 | 2015-03-02
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher                                 | NULL         |    2100.00 |    401 |         1 | 2015-03-02
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher                                 | NULL         |    9000.00 |    401 |         1 | 2015-03-02
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher                                 | NULL         |   30000.00 |    401 |         1 | 2015-03-02
|  8 | 成龙       | male   |  48 | 2010-11-11 | teacher                                 | NULL         |   10000.00 |    401 |         1 | 2015-03-02
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale                                    | NULL         |    3000.13 |    402 |         2 | 2017-01-27
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale                                    | NULL         |    2000.35 |    402 |         2 | 2017-01-27
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale                                    | NULL         |    1000.37 |    402 |         2 | 2017-01-27
| 12 | 星星       | female |  18 | 2016-05-13 | sale                                    | NULL         |    3000.29 |    402 |         2 | 2017-01-27
| 13 | 格格       | female |  28 | 2017-01-27 | sale                                    | NULL         |    4000.33 |    402 |         2 | 2017-01-27
| 14 | 张野       | male   |  28 | 2016-03-11 | operation                               | NULL         |   10000.13 |    403 |         3 | 2016-03-11
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation                               | NULL         |   20000.00 |    403 |         3 | 2016-03-11
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation                               | NULL         |   19000.00 |    403 |         3 | 2016-03-11
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation                               | NULL         |   18000.00 |    403 |         3 | 2016-03-11
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation                               | NULL         |   17000.00 |    403 |         3 | 2016-03-11
+----+------------+--------+-----+------------+-----------------------------------------+--------------+------------+--------+-----------+

1.找各部门的最新入职的时间

select post,max(hire_date) as max_date from employee group by post+-----------------------------------------+------------+
| post                                    | max_date   |
+-----------------------------------------+------------+
| operation                               | 2016-03-11 |
| sale                                    | 2017-01-27 |
| teacher                                 | 2015-03-02 |
| 老男孩驻沙河办事处外交大使             | 2017-03-01 |
+-----------------------------------------+------------+

2.把子查询搜索出来的结果作为一张表和employee这个表做联表,把max_date拼接在employee这个表中,变成一张大表,最后做一次单表查询

select *
fromemployee as t1 inner join (1号数据) as t2 on t1.post = t2.post
wheret1.hire_date = t2.max_date

3.综合拼装

select emp_name , max_date
fromemployee as t1 inner join (select post,max(hire_date) as max_date from employee group by post) as t2 on t1.post = t2.post
wheret1.hire_date = t2.max_date

在这里插入图片描述

七.带EXISTS关键字的子查询

exists 关键字 , 表达存在 , 应用在子查询中如果内层sql , 能够查到数据, 返回True ,  外层sql执行相应的sql语句如果内层sql , 不能查到数据, 返回False , 外层sql不执行sql语句
select * from employee where exists (select * from employee where id = 1);
select * from employee where exists (select * from employee where id = 100000);

在这里插入图片描述

总结:
子查询可以单独作为临时数据,作为一张表或者一个字段,通过()进行包裹,表达一个整体;
一般用在from,where,select.子句的后面
可以通过查询出来的数据和 另外的表做联表变成更大一张表,
最后做单表查询,达到目的;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3019653.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】

HTMLCSS家乡河南主题网页目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、页面效果Page1 首页Page2 开封游玩Page 3 开封美食Page4 留言 &#x1f308; 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 &#x1f40b;四…

SpringBoot启动时自动执行方法的方式

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 在springBoot中我们…

[华为OD]C卷 运输时间 200 动态规划

题目&#xff1a; M辆车需要在一条不能超车的单行道到达终点&#xff0c;起点到终点的距离为N。速度快的车追上前车 后&#xff0c;只能以前车的速度继续行驶&#xff0c;求最后一车辆到达目的地花费的时间。 注意&#xff1a; 每辆车固定间隔1小时出发&#xff0c;比如第…

antd vue pro (vue 2.x) 多页签详细操作

antd vue pro 多页签配置操作&#xff0c;具体操作如下。 1.引入 tagviews文件 在 store/modules 中创建 tagviews.js &#xff0c;复制一下代码到文件中保存 const state {visitedViews: [],cachedViews: [] }const mutations {ADD_VISITED_VIEW: (state, view) > {if …

三、Redis五种常用数据结构-Hash

Hash是redis中常用的一种无序数据结构。结构类似HashMap。 具体结构如下&#xff1a;key field value 1、优缺点 1.1、优点 同类数据归类整合储存&#xff0c;方便数据管理。相比于string操作消耗内存和CPU更小。分字段存储&#xff0c;节省网络流量。 1.2、缺点 过期时间…

盘点一下近年来常用的电脑监控软件

企业电脑监控软件通常用于监视员工在工作时间内的电脑使用情况&#xff0c;以确保他们的工作效率和安全性。以下是几种常见的企业电脑监控软件&#xff1a; 1、Ping32 Ping32是一款集成多功能的企业级电脑监控软件&#xff0c;包括员工上网行为管理、文件外发审计、屏幕活动监…

Milvus Cloud 的RAG 的广泛应用及其独特优势

一个典型的 RAG 框架可以分为检索器(Retriever)和生成器(Generator)两块,检索过程包括为数据(如 Documents)做切分、嵌入向量(Embedding)、并构建索引(Chunks Vectors),再通过向量检索以召回相关结果,而生成过程则是利用基于检索结果(Context)增强的 Prompt 来激…

使用API有效率地管理Dynadot域名,设置所有域名默认whois信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

WordPress与Joomla有哪些差异

在前不久遇到Hostease的客户在咨询WordPress和Joomla要如何选择。他们之间有哪些区别。Hostease提供的虚拟主机都可以直接安装这2个网站程序。下面针对WordPress和Joomla进行一些分析和比较。 WordPress和Joomla都是流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;…

2024年51cto下载的视频怎么导出

如果你喜欢在51cto上观看各种专业技术视频&#xff0c;那么你可能想将喜欢的视频保存到本地设备中&#xff0c;以便随时随地观看。今天&#xff0c;我们就来探讨一下如何在2024年将51cto下载的视频导出到你的设备中 下载51cto的工具我已经打包好了&#xff0c;有需要的自己下载…

AI换脸原理(4)——人脸对齐(关键点检测)参考文献2DFAN:代码解析

注意,本文属于人脸关键点检测步骤的论文,虽然也在人脸对齐的范畴下。 1、介绍 在本文中,重点介绍了以下几项创新性的成果,旨在为人脸关键点检测领域带来新的突破。 首先,成功构建了一个卓越的2D人脸关键点检测基线模型。这一模型不仅集成了目前最优的关键点检测网络结构,…

信息熵为凹函数-推导

凹函数和凸函数&#xff0c;是凹凸是相对于x轴来说的&#xff0c;对于熵来说&#xff0c;它是凹函数。因为它是-log函数&#xff0c;函数曲线相对于x轴来说是凸的。 Jensen不等式推导 以下是证明熵是凹函数。 引理&#xff1a; ①Jensen不等式&#xff0c;条件&#xff1a;…

SpringBoot框架如何接入RocketMQ?

目录 一、SpringBoot框架介绍 二、RocketMQ介绍 三、RocketMQ的应用场景 四、SpringBoot框架如何接入RocketMQ 一、SpringBoot框架介绍 Spring Boot是一个开源的Java框架,它基于Spring框架,旨在简化Java应用程序的开发。Spring Boot通过自动化配置和约定优于配置的原则,大…

谷歌开源!用 js 编写 Shell 脚本! | 开源日报 No.247

google/zx Stars: 41.4k License: Apache-2.0 zx 是一个用于编写更好脚本的工具。 提供有用的包装器&#xff0c;简化了对 child_process 的操作转义参数并提供合理的默认值使用 JavaScript 编写复杂脚本时比 Bash 更方便可以直接使用 npm 安装 dani-garcia/vaultwarden St…

评估Transitions

Stateflow使用图表中的转换从一种OR状态移动到另一种OR状态。对于图表执行的输入和执行工作流,Stateflow评估转换以确定它们是否有效。有效转换是条件标签为true且路径以状态结束的转换。如果转换有效,则Stateflow将从源状态退出并进入目标状态。 评估Transitions的工作流 T…

图搜索算法 - 拓扑排序

相关文章&#xff1a; 数据结构–图的概念 图搜索算法 - 深度优先搜索法&#xff08;DFS&#xff09; 图搜索算法 - 广度优先搜索法&#xff08;BFS&#xff09; 拓扑排序 概念 几乎所有的工程都可分为若干个称作活动的子工程&#xff0c;而这些子工程之间&#xff0c;通常受…

Debug项目失败Run成功

一&#xff1a;问题 idea中启动服务&#xff0c;服务一直在启动中&#xff0c;最后超时启动失败 重新构建项目也是一样 二&#xff1a;个人分析 debug因为断点太多了项目起不起来&#xff0c;试一下run直接运行&#xff0c;项目可以快速启动 三&#xff1a;解决办法 在控制…

四、Redis五种常用数据类型-List

List是Redis中的列表&#xff0c;按照插入顺序保存数据&#xff0c;插入顺序是什么样的&#xff0c;数据就怎么保存。可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含232-1个元素(4294967295&#xff0c;每个列表超过40亿个元素)。是一种双向列表结构…

uniapp 如何修改 IPA 文件信息页的本地化语言

实现效果&#xff1a; 最终会对应到苹果商店的语言&#xff1a; 例如微信的语言就有多个&#xff1a; 操作&#xff1a; 在 mainfest.json 源码视图中加入&#xff1a; 具体对应的语言key值可以参考Xcode中的语言代码 这个取决于打包后的 lproj 文件 将后缀ipa改成zip打开即…

47. UE5 RPG 实现角色死亡效果

在上一篇文章中&#xff0c;我们实现了敌人受到攻击后会播放受击动画&#xff0c;并且还给角色设置了受击标签。并在角色受击时&#xff0c;在角色身上挂上受击标签&#xff0c;在c里&#xff0c;如果挂载了此标签&#xff0c;速度将降为0 。 受击有了&#xff0c;接下来我们将…