JavaWeb开发-08-MySQL(三)

一.多表查询

-- ================================多表查询: 数据准备=====================================
-- 部门管理
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,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),
(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),
(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),
(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,now(),now()),
(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

 

 消除了无效的笛卡尔积

1.内连接

-- =======================内连接=====================
-- A.查询员工的姓名,及所属的部门名称(隐式内连接)
select tb_emp.name '姓名', tb_dept.name '所属部门' from tb_emp, tb_dept where  tb_emp.dept_id = tb_dept.id;-- 起别名
select e.name '姓名', d.name '所属部门' 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;-- 起别名
select e.name '姓名', d.name '所属部门' from tb_emp e join tb_dept d on e.dept_id = d.id;

 

2.外连接 

-- =======================外连接=====================
-- A.查询所有员工的姓名,及所属的部门名称(左外连接) -- 左边的表所有值列出来(包含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_dept d right join tb_emp e on e.dept_id = d.id;-- B.查询所有员工的姓名,及所属的部门名称(右外连接) -- 右边的表所有值列出来(包含null)
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;

 3.子查询

 

 

-- =======================子查询=========================
-- 标量子查询
-- A.查询 "教研部" 所有员工信息-- a.查询 教研部 的部门id
select id from tb_dept where name = '教研部';-- b.在查询该部门id下的所以员工信息
select * from tb_emp where dept_id = 2;-- 合并
select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');-- B.查询在 "方东白" 入职之后的员工信息-- a.查询方东白的入职信息
select entrydate from tb_emp where name = '方东白';-- b.查询在方东白入职之后的员工信息
select * from tb_emp where entrydate > '2012-11-01'; -- 合并
select * from tb_emp where entrydate > (select entrydate from tb_emp where name = '方东白');

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

-- 行子查询
-- A. 查询与 "韦一笑" 的入职日期 及 职位相同的员工信息
-- a.查询 韦一笑的入职日期和职位
select entrydate,job from tb_emp where name = '韦一笑';-- b.查询与其入职日期和职位相同的员工信息
select * from tb_emp where entrydate = '2007-01-01' and job = 2;-- 合并
select * from tb_emp where (entrydate,job) in (select entrydate,job from tb_emp where name = '韦一笑');

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

 4.案例

 

-- 需求:
# 1.查询价格低于 10元 的菜品的名称 、价格 及其 菜品的分类名称
-- a.# select name,price from dish d where price < 10;
# select c.name,d.price,d.name from (select * from dish where price < 10) d, category c where c.id = d.category_id;select c.name,d.price,d.name from category c, dish d where c.id = d.category_id and d.price < 10;# 2.查询所有价格在 10元(含)到50元(含)之间 且 状态为"起售"的菜品名称、价格及其分类名称 (即使菜品没有分类 , 也要将菜品查询出来)# select name,price from dish where price between 10 and 50 and status = 1;
-- select d.name,d.price,c.name from (select * from dish where price between 10 and 50 and status = 1) d left join category c on c.id = d.category_id;select d.name, d.price, c.name
from dish dleft join category c on d.category_id = c.id
where d.price between 10 and 50and d.status = 1;# 3.查询每个分类下最贵的菜品, 展示出分类的名称、最贵的菜品的价格select category_id,max(price) price from dish group by category_id;# select c.name, d.price
# from (select category_id, max(price) price from dish group by category_id) d,
#      category c
# where c.id = d.category_id;select c.name,max(d.price) from category c, dish d where c.id = d.category_id group by c.name;# 4.查询各个分类下 菜品状态为 "起售" , 并且 该分类下菜品总数量大于等于3 的 分类名称-- select category_id,count(category_id) from dish  group by category_id;-- select category_id,count(category_id) count from dish  group by category_id having count(category_id)>=3;-- select c.name,d.count from category c, (select category_id,count(category_id) count from dish  group by category_id having count(category_id)>=3) d where c.id = d.category_id;select c.name, count(*)
from category c,dish d
where c.id = d.category_idand d.status = 1
group by c.name
having count(*) >= 3;# 5.查询出 "商务套餐A" 中包含了哪些菜品 (展示出套餐名称、价格, 包含的菜品名称、价格、份数)
# select id, name, price from setmeal where name = '商务套餐A';
#
# select s.name,s.price from (select id, name, price from setmeal where name = '商务套餐A') s, setmeal_dish ssd where s.id = ssd.setmeal_id;
#
# select name, price from dish;
# select d.name,d.price from dish d, setmeal_dish dsd where d.id = dsd.dish_id;
#
# select * from setmeal_dish;
# select price from dish group by count(price);
-- 表:   setmeal, dish, setmeal_dish
-- SQL:
select s.name, s.price, d.name, d.price, sd.copies
from setmeal s,dish d,setmeal_dish sd
where s.id = sd.setmeal_idand d.id = sd.dish_idand s.name = '商务套餐A';# 6.查询出低于菜品平均价格的菜品信息 (展示出菜品名称、菜品价格)
-- select avg(price) from dish;select name, price from dish where price <= (select avg(price) from dish);

二.事务

1.介绍 & 操作


2.四大特性

三.索引

1.介绍

 


2.结构


3.语法

 

-- =====================索引=====================
-- 创建: 为tb_emp表的name字段建立一个索引
create index idx_tb_emp on tb_emp(name);-- 查询: 查询tb_emp 表的索引信息
show index from tb_emp;-- 删除: 删除tb_emp 表中name字段的索引
drop index idx_tb_emp on tb_emp;

 

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

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

相关文章

数字赋能 融链发展 ——2023工博会数字化赋能专精特新“小巨人”企业高质量发展论坛顺利举行

编者按&#xff1a;2023年政府工作报告提出“加快传统产业和中小企业数字化转型”要求&#xff0c;按照《“十四五”促进中小企业发展规划》《关于开展中小企业数字化转型城市试点工作的通知》等文件的部署&#xff0c;通过开展城市试点&#xff0c;支持地方政府综合施策&#…

JVM 参数详解

GC有两种类型&#xff1a;Scavenge GC 和Full GC 1、Scavenge GC 一般情况下&#xff0c;当新对象生成&#xff0c;并且在Eden申请空间失败时&#xff0c;就会触发Scavenge GC&#xff0c;堆的Eden区域进行GC&#xff0c;清除非存活对象&#xff0c;并且把尚且存活的对象移动到…

绿色计算产业发展白皮书:2022年OceanBase助力蚂蚁集团减排4392tCO2e

9 月 15 日&#xff0c;绿色计算产业联盟在 2023 世界计算大会期间重磅发布了《绿色计算产业发展白皮书&#xff08;2023 版&#xff09;》。蚂蚁集团作为指导单位之一&#xff0c;联合参与了该白皮书的撰写。 白皮书中指出&#xff0c;落实“双碳”战略&#xff0c;绿色计算已…

LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT

本文将介绍在Lit-GPT上使用LoRA微调LLaMA模型&#xff0c;并介绍如何自定义数据集进行微调其他开源LLM 监督指令微调&#xff08;Supervised Instruction Finetuning&#xff09; 什么是监督指令微调&#xff1f;为什么关注它&#xff1f; 目前大部分LLM都是decoder-only&…

Leetcode 386. 字典序排数

文章目录 题目代码&#xff08;9.22 首刷看解析&#xff09; 题目 Leetcode 386. 字典序排数 代码&#xff08;9.22 首刷看解析&#xff09; 迭代DFS class Solution { public:vector<int> lexicalOrder(int n) {vector<int> ret(n);int number 1;for(int i 0…

stm32之PWM呼吸灯

呼吸灯是灯从渐亮到渐灭周而复始形成的一个效果。由于51没有PWM所以需要定时器模拟PWM才能实现呼吸灯的效果&#xff0c;但是stm32的通用定时器是有PWM模式的&#xff0c;所以不需要再用软件模拟&#xff0c;精准度也高。 本实验用的基于stm32f103C8t6。在PB8引脚上接了一个le…

rabbitMQ (1)

文章目录 1. RabbitMQ 介绍1.1 几个重要概念1.2 RabbitMq 的工作原理 2 RabbitMQ 安装3. RabbitMQ 入门操作3.1 添加依赖3.2 生产者代码3.3 消费者代码 4. Work Queues5. 管理端页面创建队列 1. RabbitMQ 介绍 引用 &#xff1a; RabbitMQ 是一个消息中间件&#xff1a;它接受…

扩展pytest接口自动化框架-MS数据解析功能

【软件测试行业现状】2023年了你还敢学软件测试&#xff1f;未来已寄..测试人该何去何从&#xff1f;【自动化测试、测试开发、性能测试】 开篇 MeterSphere的数据源通过html页面上传后&#xff0c;需要将请求方式进行拆分。 get接口的参数&#xff0c;常以params的方式进行传…

arcgis js 缓冲区分析(GP服务)

arcgis文档中的有提供缓冲区的接口 geometryService&#xff0c;但要4.19后版本才提供 案例中使用的版本为4.16&#xff0c;因此这里的缓冲区分析借助gp工具 新建服务 1、打开arcmap 选择工具将要存放的文件夹&#xff0c;右键> new > Toolbox 对新建好的工具的mode…

343. 整数拆分

题目&#xff1a; 343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

Springboot2 Pandas Pyecharts 量子科技专利课程设计大作业

数据集介绍 1.背景 根据《中国科学&#xff1a;信息科学》期刊上的一篇文章&#xff0c;量子通信包括多种协议与应用类型&#xff1a; 基于量子隐形传态与量子存储中继等技术&#xff0c;可实现量子态信息传输&#xff0c;进而构建量子信息网络&#xff0c;已成为当前科研热点&…

HTTP参数类型中的Query和Body参数

在接口中常见到query参数和body参数&#xff0c;那么它对应的传参方式是&#xff1f; ★ query查询参数 ---> params ---> route.params.参数 ★ body请求体参数 ---> data ---> route.query.参数 总结&#xff1a; GET请求只能传Query参数&#xff0c; POST请…

网络编程day05(IO多路复用)

今日任务&#xff1a; TCP多路复用的客户端、服务端&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> …

【动态规划刷题 17】回文子串 最长回文子串

647. 回文子串 链接: 647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由…

2023华为杯研究生数学建模F题思路分析

更多思路代码查看文末名片 1.如何有效应用双偏振变量改进强对流预报&#xff0c;仍是目前气象预报的重点难点问题。请利用题目提供的数据&#xff0c;建立可提取用于强对流临近预报双偏振雷达资料中微物理特征信息的数学模型。临近预报的输入为前面一小时&#xff08;10帧&…

不再跳票Fedora 26 正式发布!

经过延期和跳票&#xff0c;Fedora 26终于和大家见面了&#xff0c;下面是Fedora 项目负责人Matthew Miller感谢信 大家好&#xff0c;我很高兴地宣布&#xff0c;从即刻起 Fedora 26 正式可用了。你可以从下面了解到具体信息&#xff0c;也可以马上开始下载&#xff1a; •下载…

CentOS在应用程序菜单中创建快捷方式

背景&#xff1a; 在CentOS系统中&#xff0c;安装一些应用软件的时候&#xff0c;我们可能会自定义安装路径&#xff1b;这样在安装完应用程序后&#xff0c;在“Application”下&#xff0c;可能找不到对应的快捷键&#xff1b;这是就需要手动去创建跨界方式。 应用&#xf…

stm32之GPIO库函数点灯分析

stm32官方为了方便开发者&#xff0c;利用CubeMX 生成HAL库有关的C代码。HAL库就是硬件抽象层(hardware abstraction layer)&#xff0c;生成一系列的函数帮助我们快速生成工程&#xff0c;脱离复杂的寄存器配置。stm32相对于51来功能强大&#xff0c;但是寄存器的数量也不是一…

MySQL备份及恢复

目录 MySQL备份 MySQL备份方法 备份策略 mysql的完全备份 mysql的增量备份 MySQL恢复 mysql完全恢复 mysql增量备份的恢复 MySQL备份 MySQL备份是基于对MySQL的日志进行备份&#xff0c;且恢复也是通过日志进行数据恢复。 MySQL备份方法 物理备份&#xff1a;直接对…