JavaWeb开发-08-MySQL(三)

news2024/12/25 9:21:28

一.多表查询

-- ================================多表查询: 数据准备=====================================
-- 部门管理
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 d
         left join category c on d.category_id = c.id
where d.price between 10 and 50
  and 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_id
  and 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_id
  and d.id = sd.dish_id
  and 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.coloradmin.cn/o/1033406.html

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

相关文章

数据治理-重要图

语境关系图 车轮图 六边形图

LLMs之InternLM:InternLM-20B的简介、安装、使用方法之详细攻略

LLMs之InternLM&#xff1a;InternLM-20B的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年09月20日&#xff0c;由上海人工智能实验室等团队发布了InternLM-20B的大模型。它在OpenCompass提出的5个能力维度上(语言、知识、理解、推理、学科)全面领先于同规模开源模型&…

华为数通方向HCIP-DataCom H12-831题库(单选题:121-140)

第121题 在华为交换机上配置RADIUS服务器模板时,下列选项中哪些参数为可选的配置参数? A、认证服务器地址和端口 B、RADIUS自动探测用户 C、计费服务器地址和端口 D、Shared-key 答案: B 解析: 在华为交换机上配置 radius 服务器模板时,需要配置共享秘钥,认证服务器地址…

保研CS/软件工程/通信问题汇总

机器学习 1.TP、TN、FP、FN、F1 2.机器学习和深度学习的区别和联系 模型复杂性&#xff1a;深度学习是机器学习的一个子领域&#xff0c;其主要区别在于使用深层的神经网络模型。深度学习模型通常包含多个隐层&#xff0c;可以学习更加复杂的特征表示&#xff0c;因此在某些任…

datax同步数据翻倍,.hive-staging 导致的问题分析

一、背景 有同事反馈 Datax 从 Hive 表同步数据到 Mysql 数据翻倍了。通过查看 Datax 任务日志发现&#xff0c;翻倍的原因是多读取了 .hive-staging_xx 开头的文件。接下里就是有关 .hive-staging 的分析。 二、环境 Hive 版本 2.1.1 三、分析 3.1 .hive-staging_hive 产…

2023最新SSL证书在线申请系统源码 | 支持API接口

2023最新SSL证书在线申请系统源码 | 支持API接口 SSL证书保证网络安全的基本保障。向您介绍我们的在线生成SSL证书系统 支持在线生成SSL证书系统&#xff0c;用户登录可在线申请SSL&#xff0c;后台对接ssl证书API接口 测试运行环境&#xff1a;NginxPHP8.0MySQL5.7 源码下…

【计算机网络】图解路由器(二)

本系列包含&#xff1a; 图解路由器&#xff08;一&#xff09;图解路由器&#xff08;二&#xff09; 图解路由器&#xff08;二&#xff09; 21、什么是静态路由&#xff1f;22、什么是动态路由&#xff1f;23、动态路由有哪些类型&#xff1f;24、什么是 RIP &#xff1f;2…

【Spring中的设计模式】

文章目录 Spring中的设计模式1.控制反转(IoC)和依赖注入(DI)2.工厂设计模式3.单例设计模式实现方式Spring中的单例模式 4.代理设计模式代理模式在 AOP 中的应用Spring AOP 和 AspectJ AOP 有什么区别? 5.模板方法6.观察者模式Spring 事件驱动模型中的三种角色事件角色事件监听…

3、ARIMA序列预测Matlab代码、可视化(可做算法对比)

1、文件包中程序均收集、整理、汇总自网络。 2、文件包完整内容&#xff1a; 1&#xff09;【ARIMA-功能函数】仅包含一个ARIMA算法函数&#xff0c;需要调用到自己的程序中使用。 函数部分代码及预览图&#xff1a; function [result] ARIMA_algorithm(data, Periodicity,…

实现YOLOv5封装成函数以供其他程序进行调用

import detect detect.UAPI(source"data/images") 通过在YOLOv5中的detect.py的代码中&#xff0c;对检测函数进行封装&#xff0c;之后其他代码通过已经封装好的函数进行调用&#xff0c;从而实现简单便捷的YOLOv5代码调用。 代码的主要修改部分就是如何detect.py…

pytest之parametrize()实现数据驱动

第一个参数是字符串&#xff0c;多个参数中间用逗号隔开 第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组&#xff0c;元组里的每个元素和按参数顺序一一对应 传一个参数 pytest.mark.parametrize(‘参数名’&#xff0c;list)…

《从菜鸟到大师之路 ElasticSearch 篇》

《从菜鸟到大师之路 ElasticSearch 篇》 &#xff08;一&#xff09;&#xff1a;ElasticSearch 基础概念、生态和应用场景 为什么需要学习 ElasticSearch 根据 DB Engine 的排名显示&#xff0c; ElasticSearch 是最受欢迎的 企业级搜索引擎 。下图红色勾选的是我们前面的系…

算法基础之二分查找

原题链接 一 、二分查找中的mid1和mid-1的问题 二分查找中的边界问题处理不好很容易导致死循环和计算错误的问题&#xff0c;以题目 数的范围为例。 题目大意 ​ 二分查找重复数第一次出现的位置和最后一次出现的位置。 数学含义 ​ 第一次位置即 找到 一个长度最大的 >X 区…

[代码解读] A ConvNet for the 2020s

代码地址&#xff1a;https://github.com/facebookresearch/ConvNeXt ConvNeXt/models/convnext.py整体的代码结构如下&#xff1a; 接下来我们一部分一部分来看。 1.Block类&#xff1a; class Block(nn.Module):r""" ConvNeXt Block. There are two equiva…

Redis集群架构搭建——主从、哨兵、集群

上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis&#xff0c;在这篇文章中&#xff0c;将会教大家搭建Redis的几种高可用的架构&#xff1a;主从架构、哨兵集群、Cluster集群。 本篇文章使用的redis版本为6.2.13&#xff0c;不同版本的配置可能有略微的区别&a…

C++:list

目录 List的模拟实现 List节点类 List链表结构 List迭代器类 结构 T& operator*(); T& operator->(); Self& operator(); Self operator(int); Self& operator--(); Self& operator--(int); bool operator!(const Self& l); bool oper…

JDK、JRE 和 JVM 的区别和联系

三者关系 就这三者的关系而言&#xff0c;jvm是jre的子集&#xff0c;jre是jdk的子集&#xff0c;具体关系如下图&#xff1a; Java的执行流程 对于一个Java程序&#xff0c;其执行流程大致如下&#xff1a; 开发人员使用JDK编写和编译Java源代码&#xff0c;生成Java字节码文…

二叉树层序遍历及判断完全二叉树

个人主页:Lei宝啊 愿所有美好如期而遇 目录 二叉树层序遍历&#xff1a; 判断完全二叉树&#xff1a; 二叉树层序遍历&#xff1a; 层序遍历就是一层一层&#xff0c;从上到下遍历&#xff0c;上图遍历结果为&#xff1a;4 2 7 1 3 6 9 思路&#xff1a; 通过队列来实现层序…

lenovo联想笔记本电脑ThinkPad X13 AMD Gen2(20XH,20XJ)原装出厂Windows10系统镜像

联想原厂Win10系统&#xff0c;自带所有驱动、出厂主题壁纸、系统属性联想LOGO专属标志、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dolg 适用于型号&#xff1a;20XL,20XJ,20XG,21A1,20XK,20XH,20XF,21A0 所需要…

1.vue3脚手架在vscode下面建立

一、下载安装node.js Node.js (nodejs.org) 二、安装vue3脚手架 #添加项目脚手架 npm install -g vue/cli 三、建立项目 #项目建立 vue create {appname} 测试项目安装成功&#xff1a;运行npm run serve命令 npm run serve 证明脚手架、项目环境已配置好 四、添加配件&#x…