JavaWeb开发之——多表查询(21)

news2025/7/19 16:52:41

一 概述

  • 多表查询—简介
  • 多表查询—内连接&外连接
  • 多表查询—子查询

二 多表查询—简介

2.1 概念

多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据。

2.2 SQL数据准备

DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
# 创建部门表
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(20)
);
# 创建员工表
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), -- 性别
salary DOUBLE, -- 工资
join_date DATE, -- 入职日期
dep_id INT,
FOREIGN KEY (dep_id) REFERENCES dept(did) -- 外键,关联部门表(部门表的主键)
);
-- 添加部门数据
INSERT INTO dept (dNAME) VALUES ('研发部'),('市场部'),('财务部'),('销售部');
-- 添加员工数据
INSERT INTO emp(NAME,gender,salary,join_date,dep_id) VALUES
('孙悟空','男',7200,'2013-02-24',1),
('猪八戒','男',3600,'2010-12-02',2),
('唐僧','男',9000,'2008-08-08',2),
('白骨精','女',5000,'2015-10-07',3),
('蜘蛛精','女',4500,'2011-03-14',1),
('小白龙','男',2500,'2011-02-14',null);

2.3 多表查询

多表查询-所有

查询语句

select * from emp,dept; -- 从emp和dept表中查询所有的字段数据

查询结果


查询结果说明
从上面的结果我们看到有一些无效的数据,如 孙悟空 这个员工属于1号部门,但也同时关联的2、3、4号部门。所以我们要通过限制员工表中的 dep_id 字段的值和部门表 did 字段的值相等来消除这些无效的数据,

多表查询-去除无效数据

查询语句

select * from emp,dept where emp.dep_id = dept.did;

查询结果

查询结果说明

上面语句就是连接查询

2.4 多表查询-总结

连接查询

图示:


分类:

  • 内连接:相当于查询AB交集数据
  • 外连接查询:
    • 左外连接查询:相当于查询A表所有数据和交集部分数据
    • 右外连接查询:相当于查询B表所有数据和交集部分数据

子查询

  • 子查询和连接查询可相互转换

三 多表查询—内连接&外连接

3.1 内连接查询

内连接语法

-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

内连接相当于查询AB交集数据

案例-隐式内连接

隐式内连接-查询所有

select * from emp,dept where emp.dep_id = dept.did;

查询 emp的 name, gender,dept表的dname

select emp.name,emp.gender, dept.dname from emp,dept where emp.dep_id = dept.did;

给表指定别名

select t1.name,t1.gender, t2.dname from emp t1,dept t2 where t1.dep_id = t2.did;

案例-显示内连接

语法

select * from emp inner join dept on emp.dep_id = dept.did;
-- 上面语句中的inner可以省略,可以书写为如下语句
select * from emp join dept on emp.dep_id = dept.did;

查询结果

3.2 外连接查询

外连接语法

-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

说明:

  • 左外连接:相当于查询A表所有数据和交集部分数据
  • 右外连接:相当于查询B表所有数据和交集部分数据

案例-查询emp表所有数据和对应的部门信息(左外连接)

查询语句

select * from emp left join dept on emp.dep_id = dept.did;

查询结果:

结果显示查询到了左表(emp)中所有的数据及两张表能关联的数据。

案例-查询dept表所有数据和对应的员工信息(右外连接)

查询语句

select * from emp right join dept on emp.dep_id = dept.did;

查询结果

结果显示查询到了右表(dept)中所有的数据及两张表能关联的数据。

要查询出部门表中所有的数据,也可以通过左外连接实现,只需要将两个表的位置进行互换:

select * from dept left join emp on emp.dep_id = dept.did;

四 多表查询—子查询

4.1 概念

子查询

查询中嵌套查询,称嵌套查询为子查询。

子查询示例—需求:查询工资高于猪八戒的员工信息。

来实现这个需求,我们就可以通过二步实现,第一步:先查询出来 猪八戒的工资

select salary from emp where name = '猪八戒';

第二步:查询工资高于猪八戒的员工信息

select * from emp where salary > 3600;

第三步中的3600可以通过第一步的sql查询出来,所以将3600用第一步的sql语句进行替换

select * from emp where salary > (select salary from emp where name = '猪八戒');

这就是查询语句中嵌套查询语句。

4.2 子查询根据查询结果不同,作用不同

子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断

select 字段列表 from 表 where 字段名 =(子查询);

子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断

select 字段列表 from 表 where 字段名 in(子查询);

子查询语句结果是多行多列,子查询语句作为虚拟表

select 字段列表 from(子查询) where 条件;

4.3 案例

查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息

-- 查询 '财务部' 或者 '市场部' 所有的员工的部门did
select did from dept where dname = '财务部' or dname = '市场部';
select * from emp where dep_id in (select did from dept where dname = '财务部' or dname =
'市场部');

查询入职日期是 ‘2011-11-11’ 之后的员工信息和部门信息

-- 查询入职日期是 '2011-11-11' 之后的员工信息
select * from emp where join_date > '2011-11-11' ;
-- 将上面语句的结果作为虚拟表和dept表进行内连接查询
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where
t1.dep_id = dept.did;

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

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

相关文章

Word2Vec 实践

Word2Vec 实践 gensim库使用 这里的Word2Vec借助 gensim 库实现&#xff0c;首先安装pip install gensim3.8.3 from gensim.models.word2vec import Word2Vecmodel Word2Vec(sentencesNone, size100, alpha0.025, window5, min_count5,max_vocab_sizeNone, sample1e-3, …

【Java第34期】:Bean的六种作用域

作者&#xff1a;有只小猪飞走啦 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 内容&#xff1a;介绍Bean的六种作用域的效果以及适用场景 文章目录前言一&#xff0c;作用域定义以及Bean的六种作用域是什么&#xff1f;二&#xff0c;singleton&#x…

深度学习(20):nerf论文翻译与学习

目录 1 Introduction 2 Related Work 3 Neural Radiance Field Scene Representation 4 Volume Rendering with Radiance Fields 5 Optimizing a Neural Radiance Field 5.1 Positional encoding 5.2 Hierarchical volume sampling 5.3 Implementation details 6 Resu…

项目问题参考答案

文章目录项目业务的功能&#xff1a;1 完成部门管理模块&#xff08;大致有药剂部门&#xff0c;诊疗部门、护理部门&#xff0c;后勤部门&#xff09;&#xff0c;2.在药品搜索模块&#xff0c;根据业务的需求&#xff0c;我封装了正则实现了模糊搜索&#xff0c;防抖工具函数…

分享105个NET源码ASP源码,总有一款适合您

分享105个NET源码&#xff0c;总有一款适合您 源码下载链接&#xff1a;https://pan.baidu.com/s/1zFMIHX6juXdR2CaHMEr5mQ?pwdf5hz 提取码&#xff1a;f5hz 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后…

力扣(LeetCode)81. 搜索旋转排序数组 II(C++)

线性探测二分查找 本题和 力扣(LeetCode)33. 搜索旋转排序数组(C) 的唯一区别是有重复元素&#xff0c;思考我们之前的二分条件&#xff0c;是根据 nums[0]nums[0]nums[0] 和 nums[mid]nums[mid]nums[mid] 判断 midmidmid 哪一端有序&#xff0c;但是现在可能出现 nums[0]nums…

Metabase学习教程:视图-7

创建数据透视表 了解如何使用Metabase中的不同数据库创建透视表。 什么是透视表&#xff1f;数据透视表是一种汇总和分组数据的表格方式。它们是分析师工具箱中的一个有价值的工具&#xff0c;因为它们是展示和重新安排大量信息的有效方法。它们的工作原理如下&#xff1a; …

中华传统文化题材网页设计主题:基于HTML+CSS设计放飞青春梦想网页【学生网页设计作业源码】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

应用ceph块存储(ceph-13.2.10)

记录&#xff1a;334 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;部署ceph-13.2.10集群。应用ceph块设备(ceph block device)&#xff1b;主要是创建ceph块存储、块存储分区、在线扩容、离线缩容、删除块存储等操作。 版本&#xff1a; 操作系统&#xff1a;CentOS…

gateway网关转发请求到nacos不同namespace和不同group下服务实例源码改造

问题 gateway转发请求到微服务&#xff0c;报错误页面&#xff0c;错误信息如下所示: There was an unexpected error (typeService Unavailable, status503). Unable to find instance xxx 报错信息显示找不到应用实例。即gateway无法在nacos实例中获取到路由配置的对应实例…

2021 XV6 5:Copy-on-Write Fork

目录 1.概述 2.修改uvmcopy 3.修改trap.c 4.引用计数机制 5.修改copyout 6.结果 1.概述 首先&#xff0c;这是一个很有意义的性能优化方案。 提出的背景是&#xff0c;如果我们每次fork的时候&#xff0c;都完整分配一系列物理页把父进程的内容拷贝进来&#xff0c;是一…

【SpringBoot】定制⾃⼰的 Health Indicator

Spring Boot ⾃带的 Health Indicator ⽬的 检查应⽤程序的运⾏状态 状态 DOWN - 503OUT_OF_SERVICE - 503UP - 200UNKNOWN - 200 机制 通过 HealthIndicatorRegistry 收集信息HealthIndicator 实现具体检查逻辑 配置项 management.health.defaults.enabledtrue|falsem…

【学习笔记】Reids的哨兵机制

【学习笔记】Reids的哨兵机制 文章目录【学习笔记】Reids的哨兵机制前言什么是哨兵机制&#xff1f;如何判断主库是否挂掉&#xff1f;主从库的切换和消息的通知前言 什么是哨兵机制&#xff1f; 哨兵机制&#xff08;sentinel&#xff09; 是Redis解决高可用的一种解决方案&a…

视频会议解决方案-最新全套文件

视频会议解决方案-最新全套文件一、建设背景二、建设思路业务挑战三、建设方案四、获取 - 视频会议全套最新解决方案合集一、建设背景 随着中国经济的迅速发展&#xff0c;很多企业的发展也进入快车道&#xff0c;分支机构越来越多&#xff0c;形成了遍布全国范围甚至全球范围…

Echarts:惊艳的Map

大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度&#xff0c;并根据温度的高低显示不同的颜色&#xff0c;又或者看到各个省份的新冠肺炎新增人数&#xff0c;根据不同的新增人数显示不同的颜色之类的图像。这些&#xff0c;使用echarts中的map就可以实…

python实现灰色关联法(GRA)

原文&#xff1a;https://mp.weixin.qq.com/s/Uuri-FqRWk3V5CH7XrjArg 1 灰色关联分析法简介 白色系统是指信息完全明确的系统&#xff0c;黑色系统是指信息不完全明确的系统&#xff0c;而灰色系统是介于白色与黑色系统之间的系统&#xff0c;是指系统内部信息和特征是部分已…

IDEA设置和相关快捷键记录汇总

IDEA设置和相关快捷键 前言 Java 开发 现在基本都是使用 IDEA 作为开发工具&#xff0c;IDEA 有很多设置和常用的快捷键&#xff0c;熟悉之后能更好的提高开发效率&#xff0c;这里总结了下从慕课网的内容 开发工具IDEA从入门到爱不释手-慕课网 (imooc.com)&#xff0c;摘录做…

Kafka - 04 Java客户端实现消息发送和订阅

1. Kafka测试命令行操作 1. 主题命令行操作 在上一节中我们安装了Kafka单机环境和集群环境&#xff0c;这一节来测试下Linux环境安装Kafka后的命令行操作。 我们之前在用Windows环境安装Kafka Kafka应用场景|基础架构|Windows安装|命令行操作 和命令行操作时&#xff0c;讲到…

哪种类型的蓝牙耳机好?超高性价比蓝牙耳机推荐

朋友让我推荐蓝牙耳机的时候&#xff0c;总是喜欢问哪款蓝牙耳机的性能更强&#xff0c;想要直接入手那款性能更强的蓝牙耳机&#xff0c;以此节省对比的时间。但是用户自行进行对比的步骤&#xff0c;显然是不能省的&#xff0c;所以推荐这四款高性价比的蓝牙耳机&#xff0c;…

华为云桌面Workspace,让你的办公更加舒适惬意

在各行各业转型的过程中&#xff0c;企业对于线上办公的需求不断增多&#xff0c;越来越需要一个云办公平台&#xff0c;为企业更好实现数字化网络化办公降本增效。正逢佳节之际&#xff0c;在此为各大企业推荐一个高效的办公神器——华为云桌面Workspace。相信作为企业决策者的…