SQL语句之DQL语言(二)(多表查询)

news2025/4/19 9:01:34

准备工作:创建表,添加数据

-- 部门管理
create table tb_dept(
                        id int unsigned primary key auto_increment comment '主键ID',
                        name varchar(10) not null unique comment '部门名称',
                        create_time datetime not null comment '创建时间',
                        update_time datetime not null comment '修改时间'
) comment '部门表';

insert into tb_dept
    (id, name, create_time, update_time) values
        (1,'学工部',now(),now()),
        (2,'教研部',now(),now()),
        (3,'咨询部',now(),now()),
        (4,'就业部',now(),now()),
        (5,'人事部',now(),now());

-- 员工管理
create table tb_emp (
                        id int unsigned primary key auto_increment comment 'ID',
                        username varchar(20) not null unique comment '用户名',
                        password varchar(32) default '123456' comment '密码',
                        name varchar(10) not null comment '姓名',
                        gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
                        image varchar(300) comment '图像',
                        job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
                        entrydate date comment '入职时间',
                        dept_id int unsigned comment '部门ID',
                        create_time datetime not null comment '创建时间',
                        update_time datetime not null comment '修改时间'
) comment '员工表';

insert into tb_emp
    (id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) values
        ('1','sanmao','sm1234','三毛','2','sanmao.jpg','4','2000-01-01','2',now(),now()),
        ('2','dufu','df1234','杜甫','1','dufu.jpg','2','2015-01-01','2',now(),now()),
        ('3','libai','lb1234','李白','1','libai.jpg','2','2008-05-01','2',now(),now()),
        ('4','luxun','lx1234','鲁迅','1','luxun.jpg','2','2007-01-01','2',now(),now()),
        ('5','tuo','tuo123','陀翁','1','tuoweng.jpg','2','2012-12-05','2',now(),now()),
        ('6','maerkesi','ma1234','马尔克斯','1','ma.jpg','3','2013-09-05','1',now(),now()),
        ('7','sate','sa1234','萨特','1','sa.jpg','1','2005-08-01','1',now(),now()),
        ('8','jiamiu','jia123','加缪','1','jia.jpg','1','2014-11-09','1',now(),now()),
        ('9','liqingzhao','li1234','李清照','2','li.jpg','1','2011-03-11','1',now(),now()),
        ('10','tangbohu','tang12','唐伯虎','1','tang.jpg','1','2013-09-05','1',now(),now()),
        ('11','huang','huang123','黄蓉','1','huang.jpg','5','2007-02-01','3',now(),now()),
        ('12','guojing','123456','郭靖','1','guo.jpg','5','2008-08-18','3',now(),now()),
        ('13','zhangfei','123456','张飞','1','zhang.jpg','5','2012-11-01','3',now(),now()),
        ('14','guanyu','123456','关羽','1','guan.jpg','2','2002-08-01','2',now(),now()),
        ('15','zhaoyun','123456','赵云','1','zhao.jpg','2','2011-05-01','2',now(),now()),
        ('16','liubei','123456','刘备','1','liu.jpg','2','2007-01-01','2',now(),now()),
        ('17','sunshangxiang','123456','孙尚香','2','sun.jpg',NULL,'2015-03-21',NULL,now(),now());

直接查询多表,查询的结果是两表记录的组合,叫做笛卡尔积

select * from tb_dept, tb_emp;

在这里插入图片描述

这样的结果显然是没有意义的,查询出来的数据,并不是实际的结果,而是表明了两张表记录组合产生的可能结果,多表查询就是在这些结果中,寻找出自己真正需要的记录。

一、连接查询

连接查询,是用多表之间具有联系的字段,查询出想要的结果,分为内连接和外连接。在上面建立的员工表中的dept_id字段,关联了部门表中的主键,即,tb_emp.dept_id=tb_dept.id。

(1)内连接:字段值的交集

隐式内连接:查询员工的姓名,及所属的部门名称;

select tb_emp.name, tb_dept.name from tb_emp, tb_dept

where tb_emp.dept_id=tb_dept.id;

可给表设置别名,简化SQL语句

select e.name, d.name from tb_emp e, tb_dept d

where e.dept_id=d.id;

在这里插入图片描述

显示内连接(inner可以省略):查询员工的姓名,及所属的部门名称;

select e.name, d.name from tb_emp e

inner join tb_dept d on e.dept_id = d.id

where e.name='张飞';

inner可以省略

select e.name, d.name from tb_emp e

join tb_dept d on e.dept_id = d.id

where e.name='张飞';

在这里插入图片描述

(2)外连接:查询的不仅有交集的数据,还包含左/右表中剩下没有交集的数据,如果没有对应上的,用null来代替;

左外连接:查询员工表所有员工的姓名,和对应的部门名称;

select e.name, d.name from tb_emp e

    left join tb_dept d on e.dept_id = d.id;

在这里插入图片描述

右外连接:查询部门所有部门的名称,和对应的员工名称;

select e.name, d.name from tb_emp e

    right join tb_dept d on e.dept_id = d.id;

在这里插入图片描述在这里插入图片描述

小结

隐式内连接、显示内连接,只是在SQL语句的书写上有区别,会一种就行;

左外连接、右外连接通过更换查询表的顺序,可以做到互换,如左外连接,想达到右外连接的结果,把表的位置互换就行。

二、子查询

根据子查询返回的结果,可分为标量子查询、列子查询、行子查询和表子查询,SQL语句的特点是“嵌套”,可以称之为“嵌套查询”,子查询是指嵌套在查询语句内的select语句,可以理解为完成本次查询需要的条件

在这里插入图片描述

(1)标量子查询:查询 “教研部”的所有员工信息;

select * from tb_emp where dept_id=
	
	# 子查询结果为单个值
    (select id from tb_dept where name='教研部');

在这里插入图片描述

(2)列子查询:查询“教研部”和“学工部”的所有员工信息;

select * from tb_emp where dept_id in

	# 子查询结果为一列
    (select id from tb_dept where name in ('学工部', '教研部'));

在这里插入图片描述

(3)行子查询:查询与“鲁迅”的入职日期及职位都相同的员工信息;

select * from tb_emp where (entrydate, job) = 

	# 子查询结果为单行
	(select entrydate, job from tb_emp where name='鲁迅');

在这里插入图片描述

(4)表子查询:子查询返回的结果为多行多列(表)

select t.name, t.entrydate, d.name 

	# 子查询结果为表
    from (select * from tb_emp where entrydate>'2006-01-01') t, tb_dept d 

        where t.dept_id=d.id;

在这里插入图片描述

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

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

相关文章

新招了个从腾讯拿38K离职的测试大佬,让我见识到了什么才是测试界的天花板

现在招个会几年工作经验还会自动化测试的测试工程师真是难呀,10个里面有8个写了会自动化,但一问就是三不知 5年测试工作经验,技术应该是能达到资深测试的水准,即不仅能熟练地开发业务,而且还能熟悉项目的开发&#xff…

【数据结构每日一题】栈——中心对称链

[数据结构习题]栈——中心对称链 👉知识点导航💎:【数据结构】栈和队列 👉[王道数据结构]习题导航💎: p a g e 70.4 page70.4 page70.4 本节为栈和链表综合练习题 题目描述: 🎇思路…

【论文阅读】dreambooth

简介 目标:subject-driven generation,针对特定物体的图像生成,仅使用少量目标主体图像,dreambooth可以在prompt的指导下生成大量目标主体在不同场景下的图像。例如下图中小狗,我们给定的set就是左侧的input images&a…

Matplotlib - 绘制 高亮显示的饼图 (Highlight Pie Chart) 函数源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131089501 饼图 (Pie Chart) 是一种圆形统计图,被分割成片用于表示数值间的比例关系。每个切片的弧长以及相应的中心角和面积…

【QQ聊天界面-创建自定义Cell Objective-C语言】

一、我们刚才说到这个地方,我们说,用系统的单元格,是不是不够用吧, 1.那么这个时候,我们就要、需要自定义单元格 自定义单元格,我们就新建一个类,继承自UITableViewCell 来,写一下, 那么,这个时候,应该在哪个文件夹下,去新建类啊, 是不是在Views下面吧, 因为…

一文详解!Robot Framework Selenium UI自动化测试入门篇

目录 前言: 自动化框架的选择 测试环境的搭建 导入Selenium2Library包 关键字是什么? 创建测试用例 前言: 自动化测试的重要性越来越受到人们的重视,因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这…

软考A计划-电子商务设计师-模拟试题卷八

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Shiro自定义过滤器会执行两次?看我怎么给你解决

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题。 最近九哥的一个学生在使用自定义ShiroFilter处理JWT校验时,发现自己写的Filter在处理一次请求时会被执行两次。这个问题困扰了他一个下午都没有解决,最后不得不求…

新手小白如何入门学习CTF?【网络安全】

最近有很多新手小白私信我:如何学习CTF?新手小白应该怎么入门CTF?想打CTF,但是没有思路怎么办? 昨天下班之后,花了几个小时,整理了一下CTF学习的思路与方法,分享给大家,如…

用jprofiler来分析 jvm 堆 内存泄露,fullgc

jvm 命令和工具_个人渣记录仅为自己搜索用的博客-CSDN博客 堆太大? 方法1: 重新设置堆后,重启,复现. 方法2: 切割 split -b 1M heap.bin smallfilescp smallfile* usernamemac-host:/Users/username/cat smallfile* > heap.bin官网文档 JProfiler Help - HPROF snapshot…

【逃离】UniAccess

能看到这篇文章,说明你已经是老屁股了(保命要紧) 上面是UniAccess功能 你想要做的事情无非是三种 不顾后果强力卸载UniAccess期望只保留(内网)网络认证禁用UniAccess部分功能 第一种:直接卸载,这里不做说明了&#x…

开发轮子(一):全国省/市/区/街道三、四级联动

概述 本服务提供中国标准行政区划数据查询功能,支持: 1 . 全国省、市、区/县、乡镇/街道 四级行政区划数据; 2 . 支持三级区划(省/市 - 区/县)轮廓数据; 3 . 支持区划查询、省市区列表、查询子级区划等功能…

十六、立方体贴图(天空盒)

第一部分 概念: 1) 引用 OpenGL ES 立方体贴图本质上还是纹理映射,是一种 3D 纹理映射。立方体贴图所使的纹理称为立方图纹理,它是由 6 个单独的 2D 纹理组成,每个 2D 纹理是立方图的一个面。 立方图纹理的采样通过一个 3D 向量…

CodeGeeX 2.0版本重大升级:通过聊天对话的方式直接操作代码

CodeGeeX 2.0版本正式上线!从命名上看这是一次大版本的升级。 上个月,CodeGeeX在VSCode和JetBrains IDEs的插件中,加入了智能问答(Ask CodeGeeX)功能,让用户可以在IDE中通过问答对话的方式解决技术问题。本…

Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过

Selenium 操作被屏蔽 使用selenium自动化网页时,有一定的概率会被目标网站识别,一旦被检测到,目标网站会拦截该客户端做出的网页操作。 比如淘宝和大众点评的登录页,当手工打开浏览器,输入用户名和密码时&#xff0c…

docker 无法将“docker”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

💧 d o c k e r 无法将“ d o c k e r ”项识别为 . . . . . . \color{#FF1493}{docker 无法将“docker”项识别为......} docker无法将“docker”项识别为......💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页…

Elasticsearch:路由 - routing

你是否考虑过 Elasticsearch 如何知道将文档存储在何处? 它如何知道在哪里寻找它们,以及是否检索、更新或删除它们? 这是一个令人兴奋的过程,一切都归结为路由的概念。 路由介绍 路由是确定文档属于哪个分片以便检索它或将其存储在…

新手配learnsite

把下载好的learnsite放在C盘根目录下 改个名 开始,Microsoft SQL Server Tools 19,SQL Server Management studio 19 这里我其实是没看懂,但是我觉得是选个服务器。 点开数据库引擎这里试一下 因为我来回装好几次sql,这里只有ls2有印象好像是…

git statsh、git submodule

文章目录 git stash解决git pull和本地文件的冲突1、先将本地修改存储起来2、pull内容3、还原暂存的内容4、解决文件中冲突的的部分5、删除stash。6 、git stash pop 与 git stash apply <stash{id}> 的区别。 回退后的版本是不追踪的git 还原修改git submodule git stas…

SpringBoot整合达梦数据库的教程(详解)

一、官网下载试用版本 http://www.dameng.com/down.aspx 我是win 11系统下载如下&#xff1a; 二、安装 解压后 双击打开iso文件 然后点击安装 选择创建实例&#xff08;注意记住账号/密码 端口号 默认的是 SYSDBA/SYSDBA 5236&#xff09; 然后一直下一步 到完成&#xff…