首页 > 数据库 >MySQL之多表操作

MySQL之多表操作

时间:2024-03-03 19:23:06浏览次数:26  
标签:join dep 查询 emp MySQL 操作 之多表 id select

第一步:创表

# 建表
create table dep(
	id int primary key auto_increment,
    name varchar(20)
);
create table emp(
	id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female') not null default 'male',
    age int,
    dep_id int
);

# 插入数据
insert into dep values
(200,'技术部'),
(201,'销售'),
(202,'运营'),
(203,'人力资源');

insert into emp(name,sex,age,dep_id) values
('xiao','male',18,200),
('quan','female',78,200),
('zheng','male',58,201),
('zhang','male',48,202),
('xu','female',18,203),
('li','female',18,203),
('chen','male',18,203);

联表查询

笛卡尔积:

笛卡尔积为两个集合(两张表)中的每条数据进行两两组合的结果。

select * from dep,emp; # 结果叫笛卡尔积

在多表查询时会产生笛卡尔积,要通过添加条件消除笛卡尔积。

select * from emp,dep where emp.dep_id = dep.id; 

通过上面添加条件进行查询可以去除笛卡尔积现象,这种查询也叫隐式内连接查询

联表查询的分类

  • inner join 内连接
  • left join 左连接
  • right join 右连接
  • union join 全连接
1. inner join 内连接
select * from emp inner join dep on emp.dep_id = dep.id;
# 内连接特点是只拼接两张表中共有的数据部分

2. left join 左连接
select * from emp left join dep on emp.dep_id = dep.id;
# 左连接特点是左表所有的数据都展示出来,没有对应的项就用NULL

3. right join 右连接
select * from emp right join dep on emp.dep_id = dep.id;
# 右连接特点是右表所有的数据都展示出来,没有对应的项就用NULL

4. union join 全连接
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.id;
# 全连接特点是左右表所有的数据都展示出来,没有对应的项就用NULL

子查询

思路:分步解决问题
将一个查询语句的结果当做另一个查询语句的调节去用

# 查询部门是技术或者人力资源的员工信息
1. 先获取部门的id号
2. 再去员工表里面筛选出对应的员工
select id from dep where name='技术' or name='人力资源';
select name from emp where dep_id in (200,201);
组合:
select name from emp where dep_id in (select id from dep where name='技术' or name='人力资源');

总结:

表的查询结果可以作为其他表的查询条件,

也可以通过起别名的方式把它作为一张虚拟表跟其他表关联。

多表查询就两种方式

1、先拼接表再查询

2、子查询,一步一步来

知识点补充

# 查询平均年龄在25岁以上的部门名称
"""
只要是多表查询,就有两种思路
	联表和子查询
"""
# 联表操作
1. 先拿到部门和员工表,拼接之后的结果
2. 分析语义,得出需要再进行分组
select dep.name from emp inner join dep
	on emp.dep_id = dep.id
	group by dep.name
	having avg(age) > 25;
"""涉及到多表操作的时候一定要加上表的前缀"""

# 子查询
select name from dep where id in
	(select dep_id from emp group by dep_id 
 		having avg(age) > 25);

# 关键字exists(了解)
只返回布尔值 True False
返回True的时候外层查询语句执行
返回False的时候外层查询语句不再执行
select * from emp where exists(select id from emp where id > 3);

select * from emp where exists(select id from emp where id > 30);

标签:join,dep,查询,emp,MySQL,操作,之多表,id,select
From: https://www.cnblogs.com/xiao01/p/18050500

相关文章

  • MySQL之视图、触发器、存储过程、函数和流程控制
    视图什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用其实视图也是表为什么要用视图如果要频繁的操作一张虚拟表(拼表组成的),你就可以制作成视图,后续直接操作如何操作#固定语法createview表名as虚拟表的查询SQL语句#具体操作create......
  • 从零开始学Spring Boot系列-集成MySQL
    在SpringBoot中集成MySQL是为了让开发者能够轻松地与MySQL数据库进行交互。本篇文章将指导你如何在SpringBoot3.2.3项目中使用Gradle来集成MySQL。在此之前,我们需要在Ubuntu22.04上安装MySQL8作为我们的数据库服务器。安装MySQL8本文是在wsl2上的Ubuntu22.04上安装MySQL8.......
  • MySQL之筛选和过滤条件
    开局第一步:创表createdatabaseday03;useday03;createtableemp( idintnotnulluniqueauto_increment,namevarchar(20)notnull,sexenum('male','female')notnulldefault'male',ageint(3)unsignednotnulldefau......
  • MySQL之约束条件
    表完整性约束介绍:约束条件与数据类型的宽度一样,都是可选参数作用:用于保证数据的完整性和一致性主要分为:DEFAULT为该字段设置默认值NOTNULL标识该字段不能为空UNIQUEKEY(UK)标识该字段的值是唯一的AUTO_INCREMENT标识该字段的值自动增长(整数类型,而且为主......
  • Linux安装Docker并搭建MySql、Redis、RabbitMQ
    1.1安装docker(1)删除老版本sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\......
  • MySQL之基本数据类型
    数据类型:类型类型举例整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT浮点类型FLOAT、DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP文本字符串类型CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMT......
  • Docker启动MySQL容器自动停止问题
    可能是mysql使用的内存过多,导致系统杀死了对应的进程mysql启动后设置限制内存在宿主机任意位置下:vimdocker.cnf写入:skip-host-cacheskip-name-resolveperformance_schema_max_table_instances=400table_definition_cache=400table_open_cache=256performance_......
  • MySQL安装
    下载mysql官网地址:https://dev.mysql.com/downloads/mysql/配置解压文件解压下载好的压缩文件解压后目录中可能没有my.ini文件,自己创建一个使用记事本打开my.ini文件[mysqld]port=3306basedir=C:\ProgramFiles\MySQLdatadir=C:\ProgramFiles\MySQL\Datamax......
  • Npoi操作Excel单元格合并
    publicasyncTask<byte[]>ExportNewReportByQuotationId(GuidquotationId){//stringsql=@$"select""Id""asModelId,(q.qq).keyaskey,(q.qq).valueasmyValuefrom(withaas(select""Id"&q......
  • 新电脑装编程配置(jdk、MySQL、navicat、idea、Maven、gitee、环境配置)
    一、JDK(java运行环境,不安装不能在自己电脑上运行java语言)1.打开安装包     2.选择安装目录(建议选择非系统盘)      3.安装JRE(最好和JDK分开文件夹、建议选择非系统盘)     4.提示安装成功     配置环境变量:JAVA......