Day08-JavaWeb开发-MySQL(多表查询内外连接子查询事务索引)Mybatis入门

 1. MySQL多表查询

1.1 概述

1.2 内连接


-- ========================================= 内连接 =================================
-- A. 查询员工的姓名, 及所属的部门名称(隐式内连接实现)
select tb_emp.name, tb_dept.name from tb_emp,tb_dept where tb_emp.dept_id = tb_dept.id;-- 起别名
select * from tb_emp e, tb_dept d where e.dept_id = d.id;-- B. 查询员工的姓名, 及所属的部门名称(显式内连接实现)
select tb_emp.name, tb_dept.name from tb_emp join tb_dept on tb_emp.dept_id = tb_dept.id;

1.3 外连接

表1称为左表, 表2称为右表

-- ========================================= 外连接 =================================
-- A. 查询员工表 所有 员工的姓名, 及所属的部门名称(左外连接)
select e.name,d.name from tb_emp e left join tb_dept d on e.dept_id = d.id;-- B. 查询部门表 所有 部门的名称, 和对应的员工名称(右外连接)
select e.name,d.name from tb_emp e right join tb_dept d on e.dept_id = d.id;-- 将上面的右外连接改变为左外连接, 如下:
select e.name,d.name from tb_dept d left join tb_emp e on e.dept_id = d.id;

1.4 子查询

1.4.1 标量子查询

-- ========================================= 子查询 =================================
-- 标量子查询 : 查询的结果是单行单列的结果.
-- A. 查询 "教研部" 的所有员工信息
-- a. 查询 教研部 的部门ID - tb_dept
select id from tb_dept where name = '教研部';  -- 返回2-- b. 再查询该部门ID下的员工信息 - tb_emp
select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');-- B. 查询在 "方东白" 入职之后的员工信息
-- a. 查询 方东白 的入职时间
select entrydate from tb_emp where name = '方东白'; -- 返回2012-11-01-- b. 查询在 "方东白" 入职之后的员工信息
select * from tb_emp where entrydate > (select entrydate from tb_emp where name = '方东白');

A的查询结果:

B的查询结果:

1.4.2 列子查询

-- 列子查询
-- A. 查询 "教研部" 和 "咨询部" 的所有员工信息
-- a. 查询 "教研部" 和 "咨询部" 的部门ID - tb_dept
select id from tb_dept where name = '教研部' or name = '咨询部'; -- (3,2)-- b. 根据部门ID, 查询该部门下的员工信息 - tb_emp
select * from tb_emp where dept_id in (select id from tb_dept where name = '教研部' or name = '咨询部');

A的查询结果:

1.4.3 行子查询

-- 行子查询
-- A. 查询与 "韦一笑" 的入职日期 及 职位都相同的员工信息 ;
-- a. 查询 "韦一笑" 的入职日期 及 职位
select entrydate,job from tb_emp where name = '韦一笑'; -- ('2007-01-01',2)-- b. 查询与其入职日期 及 职位都相同的员工信息  (出现两次子查询)
select * from tb_emp where entrydate = (select entrydate from tb_emp where name = '韦一笑') and job = (select job from tb_emp where name = '韦一笑');-- 性能优化
select * from tb_emp where entrydate = '2007-01-01' and job = 2;-- 以下为只出现一次子查询
select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name = '韦一笑');

A的查询结果:

1.4.4 表子查询

-- 表子查询
-- A. 查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门名称
-- a. 查询入职日期是 "2006-01-01"
select * from tb_emp where entrydate > '2006-01-01'; -- 得到一张表-- b. 查询这部分员工信息及其部门名称 - tb_dept
select e.* , d.name from (select * from tb_emp where entrydate > '2006-01-01') e , tb_dept d where e.dept_id = d.id;

A的结果:

1.5 案例

-- 需求:
-- 1. 查询价格低于 10元 的菜品的名称 、价格 及其 菜品的分类名称 .
-- 表: dish , category (注:若在需求当中没有额外说明需要完全包含哪张表的数据, 则考虑用内连接.)
-- SQL:
select d.name, d.price, c.name
from dish d,category c
where d.category_id = c.idand d.price < 10;-- 2. 查询所有价格在 10元(含)到50元(含)之间 且 状态为'起售'的菜品名称、价格 及其 菜品的分类名称 (即使菜品没有分类 , 也需要将菜品查询出来).
-- 表: dish , category (此题选用外连接, 因需查询菜品的所有信息)
-- SQL:
select d.name, d.price, c.name
from dish dleft join category con d.category_id = c.id
where d.price between 10 and 50and d.status = 1;-- 3. 查询每个分类下最贵的菜品, 展示出分类的名称、最贵的菜品的价格 .
-- 表: dish , category (内连接)
-- SQL:(由每个分类, 按分类分组)
select c.name, max(d.price)
from dish d,category c
where d.category_id = c.id
group by c.name;-- 4. 查询各个分类下 状态为 '起售' , 并且 该分类下菜品总数量大于等于3 的 分类名称 .
-- 表: dish , category (内连接)
-- SQL:(由每个分类, 按分类分组)
select c.name, count(*)
from dish d,category c
where d.category_id = c.idand d.status = 1
group by c.name
having count(*) >= 3;-- 5. 查询出 "商务套餐A" 中包含了哪些菜品 (展示出套餐名称、价格, 包含的菜品名称、价格、份数).
-- 表: dish , setmeal, setmeal_dish
-- SQL:
select s.name, s.price, d.name, d.price, sd.copies
from setmeal s,setmeal_dish sd,dish d
where s.id = sd.setmeal_idand sd.dish_id = d.idand s.name = '商务套餐A';-- 6. 查询出低于菜品平均价格的菜品信息 (展示出菜品名称、菜品价格).
-- 表: dish
-- SQL:
-- a. 计算所有菜品的平均价格
select avg(price)
from dish;-- b. 查询出低于菜品平均价格的菜品信息
select *
from dish
where price < (select avg(price) from dish);

1.6 总结

2. 事务

2.1 介绍 & 操作

2.2 四大特性

3. 数据库的优化-索引

3.1 索引-介绍

3.2 索引-结构

3.3 索引-语法

3.4 索引-总结

4. Mybatis入门

4.1 Mybatis介绍

4.2 配置SQL提示

4.3 JDBC

4.4 数据库连接池

4.5 lombok工具包​​​​​​​

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

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

相关文章

tomcat+maven+java+mysql图书管理系统2-完善项目结构,添加相关依赖

1.创建java目录 接着选择java&#xff0c;回车&#xff0c;则创建成功&#xff0c;成功后在左侧栏能看见 2.修改pom.xml文件,(添加依赖) <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

Thinkphp5 实现 redis 数据缓存

在ThinkPHP 5中&#xff0c;你可以使用Redis作为数据缓存的解决方案。Redis是一个开源的内存数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中介。下面是在ThinkPHP 5中实现Redis数据缓存的基本步骤&#xff1a; 1. 安装 Redis 扩展 首先&#xff0c;你需要在你的…

vs 2022 Xamarin 生成 Android apk

再保存&#xff0c;如果没有生成apk就重启软件 再试一次

Windows内核开发:如何使用STL

前言 大家都知道应用层c的STL非常强大&#xff0c;非常好用&#xff0c;但是在内核下就没法用了。针对这个问题&#xff0c;经过我不懈的寻找&#xff0c;终于找到了解决内核无法使用STL的方法。 使用new/delete关键字 先说一下常用关键字如何在内核中使用。其实只需要在一个全…

广西壮族自治区工程系列住房城乡建设行业高、中、初级职称评审条件

广西壮族自治区工程系列住房城乡建设行业高、中、初级职称评审条件评审文件链接广西壮族自治区人力资源和社会保障厅网站评审工作的通知广西壮族自治区人力资源和社会保障厅网站类别基本条件学术成果备注工程师&#xff08;一&#xff09;具备博士学位&#xff1b;或具备硕士学…

上位机开发PyQt5(三)【布局、单选框和多选框、对话框】

目录 一、布局Layout 1. 布局简介 2. 水平布局QHBoxLayout 3. 竖直布局QVBoxLayout 4. 表单布局QFormLayout 5. 布局嵌套 二、单选框和复选框 1. 单选框 2. 复选框 三、对话框 1. QMessageBox 2. QIputDialog 一、布局Layout 1. 布局简介 一个pyqt窗口中可以有多…

百度文库可直接下载VIP文章

百度文库文件下载 百度文库是百度公司推出的一款在线文档分享平台&#xff0c;它可以让用户免费上传、分享、下载和浏览各类文档资源&#xff0c;包括但不限于文章、论文、报告、PPT、书籍等。 好了&#xff0c;废话不多说&#xff0c;这里推出的新生产的软件&#xff0c;可直…

机器学习的指标评价

之前在学校的小发明制作中&#xff0c;在终期答辩的时候&#xff0c;虽然整个项目的流程都答的很流畅。 在老师提问的过程中&#xff0c;当老师问我recall,precision,accuracy等指标是如何计算的&#xff0c;又能够表示模型的哪方面指标做得好。我听到这个问题的时候&#xff…

内存映射文件

内存映射文件(Memory-Mapped Files)是一种在Windows和其他操作系统中使用的技术,它允许应用程序将文件的内容映射到进程的地址空间中,这样文件就可以像内存一样被直接访问,而无需进行传统的文件读/写操作。这种技术可以提高文件访问的性能,因为内存访问通常比磁盘I/O操作…

图片倾斜矫正处理(Hough Transform)

目录 倾斜矫正原理及实现方式Canny边缘检测非极大值抑制霍夫变换 倾斜矫正原理及实现方式 代码连接&#xff1a;https://github.com/shuyeah2356/Image-Angel-correction/tree/main 倾斜矫正的实现原理&#xff1a; 使用霍夫变换检测图片中的直线&#xff1b; 计算直线与水平方…

【与 Apollo 共创生态:展望自动驾驶全新未来】

1、引言 历经七年的不懈追求与创新&#xff0c;Apollo开放平台已陆续推出了13个版本&#xff0c;汇聚了来自全球170多个国家与地区的16万名开发者及220多家合作伙伴。随着Apollo开放平台的不断创新与发展&#xff0c;Apollo在2024年4月19日迎来了Apollo开放平台的七周年大会&a…

周末总结(2024/05/05)

工作 人际关系核心原则&#xff1a; 要学会随时回应别人的善意。 人际关系的本质是价值交换&#xff08;利益和情绪&#xff09; 接受破烂现状&#xff0c;改变状态 - 这周写了两天代码&#xff0c;总结了node.js的面试题&#xff0c;其他时间都在摸鱼&#xff0c;状态很差&am…

猿人学第七题-动态字体-随风漂移

前言&#xff1a;该题主要是考对fontTools.ttLib.TTFont的操作&#xff0c;另外就是对字典互相映射的操作 一、woff文件存储 from fontTools.ttLib import TTFont #pip install fontTools def save_woff(response):woff response[woff]woff_file base64.b64decode(woff.enc…

.排序总讲.

在这里赘叙一下我对y总前四节所讲排序的分治思想以及递归的深度理解。 就以788.逆序对 这一题来讲&#xff08;我认为这一题对于分治和递归的思想体现的淋淋尽致&#xff09;。 题目&#xff1a; 给定一个长度为 n&#x1d45b; 的整数数列&#xff0c;请你计算数列中的逆序对…

Linux的软件包管理器-yum

文章目录 软件包的概念yum源的配置的原因yum的使用查看软件包安装软件卸载软件 软件包的概念 软件包(SoftWare Package)是指具有特定的功能&#xff0c;用来完成特定任务的一个程序或一组程序。可分为应用软件包和系统软件包两大类 在Linux系统中&#xff0c;下载安装软件的方式…

力扣:100284. 有效单词(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 有效单词 需要满足以下几个条件&#xff1a; 至少 包含 3 个字符。 由数字 0-9 和英文大小写字母组成。&#xff08;不必包含所有这类字符。&#xff09; 至少 包含一个 …

leetcode_46.全排列

46. 全排列 题目描述&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#…

Java学习之集合2

集合&#xff1a; 1.ArrayList集合类 import java.util.ArrayList;public class Demo01ArrayList {public static void main(String[] args) {/*ArrayList类概述底层数据结构是数组&#xff0c;查询快&#xff0c;增删慢TODO 方法插入数据时不会对插入的数据进行自然排序或字…

视频下载器 UC网盘

老王导航 - 复杂问题找老王&#xff0c;简单问题百度搜 神器啊

Spring框架的扩展点

Spring框架是一个非常流行的Java应用程序框架&#xff0c;它提供了一系列的扩展点&#xff0c;使得开发者可以自定义和增强框架的功能。这些扩展点包括&#xff1a; Bean生命周期回调 Spring允许通过实现特定的接口或使用注解来在Bean的生命周期的不同阶段&#xff08;如初始…