当前位置: 首页 > article >正文

(十三)JavaWeb后端开发——MySQL2

目录

1.DQL数据查询语言

1.1基本查询

1.2条件查询 where关键字

 1.3分组查询

1.4排序查询

1.5分页查询

2.多表设计

3.多表查询——联查

4.多表查询——子查询​

5.MySQL 事务 

6.事务管理(事务进阶)

7.MySQL 索引


1.DQL数据查询语言

分为五大基本查询语法

1.1基本查询

-- 查询特定字段
select name,entrydate from tb_emp;
-- 查询所有字段
select * from tb_emp;
-- 查询所有员工的 name,entrydate,并起别名(姓名、入职日期)
select name '姓名',entrydate '入职日期' from tb_emp;
-- 查询已有的员工关联了哪几种职位(不要重复)
select distinct job from tb_emp;

1.2条件查询 where关键字

select * from tb_emp where name = '陈友谅';
select * from tb_emp where job is null;

 1.3分组查询

首先需要知道一个知识点:聚合函数,就是对某一列的数据所作的操作

select count(id) from tb_emp;
select count(job) from tb_emp;
-- 通配符*计算总数据量
select count(*) from tb_emp;
-- 统计最早入职的员工
select min(entrydate) from tb_emp;

例:先査询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位(job)分组 ,获取员工数量大于等于2的职位

select job,count(*) from tb_emp where entrydate <= '2015-01-01' 
group by job having count(*) >= 2;

where与having区别:

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  2. 判断条件不同:where不能对聚合函数进行判断,而having可以

1.4排序查询

排序方式:ASC升序(默认值)、DESC降序

-- 默认升序
select * from tb_emp order by entrydate;
-- 降序
select * from tb_emp order by entrydate desc ;
-- 多个排序字段
select * from tb_emp order by entrydate, update_time desc;

1.5分页查询

-- 从 起始索引0 开始査询员工数据,每页展示5条记录
select * from tb_emp limit 0, 5;

2.多表设计

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

但是目前上述的两张表,在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性,比如说我在部门表中把“教研部”删除,员工表中教研部的员工依然存在,这显然是不合理的,所以就需要“外键约束

3.多表查询——联查

如果单纯执行下面的指令会出现问题——笛卡尔积

-- 多表查询
select * from tb_emp, tb_dept;

要解决这个问题只需要令员工的部门id = 部门主键id即可

select * from tb_emp, tb_dept where  tb_emp.dept_id = tb_dept.id;

左外连接完全包含左表数据,右外连接完全包含右表数据

4.多表查询——子查询

5.MySQL 事务 

-- 事务
-- 删除部门
delete from tb_dept where id = 3;
-- 删除部门下的员工
delete from tb_emp where dept_id = 3;

在上面的代码中,删除部门成功了,但是删除该部门下的员工失败了,就是因为这两个操作分属两个事务,解决办法是把这两个操作控制在一个事务内

-- 开启事务
start transaction ;
-- 删除部门
delete from tb_dept where id = 3;
-- 删除部门下的员工
delete from tb_emp where dept_id = 3;
-- 提交事务
commit ;
-- 回滚事务
rollback ;

6.事务管理(事务进阶)

如果在一个a事务中,需要开启另一个事务,那么这两个事务的关系是怎样的呢?这就涉及到了事务的传播行为

7.MySQL 索引

使用普通的sql查询语言效率很低,比如在600w的数据量里查询数据往往需要十几秒的时间,索引能大幅提高查询效率

索引(index)是帮助数据库高效获取数据的数据结构(底层实现是二叉搜索树)

优点:

  • 提高数据查询的效率,降低数据库的IO成本
  • 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗

缺点:

  • 索引会占用存储空间,
  • 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率


http://www.kler.cn/a/386450.html

相关文章:

  • 【大数据学习 | flume】flume的概述与组件的介绍
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • Spring高手之路26——全方位掌握事务监听器
  • apache2配置多站点
  • 基于碎纸片的拼接复原算法及MATLAB实现
  • 向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法
  • Spring的异步详解(@Async)
  • arkUI:层叠布局(Stack)
  • 测试概念以及测试bug
  • cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_
  • 自动化细胞核分割与特征分析
  • 如何利用动态住宅IP高效抓取亚马逊数据并避开封禁
  • react的创建与书写
  • node.js安装配置(Windows)
  • 我应该如何使用这个API接口来展示商品信息呢
  • 【图像与点云融合教程(五)】海康相机 ROS2 多机分布式实时通信功能包
  • 美的品牌店铺运营全解析:洞察用户行为驱动增长
  • 【excel基本操作-sumif绝对引用和相对引用
  • 《Atomic Picnic》进不去游戏解决方法
  • 呼叫中心外呼主要用于哪些场景?
  • 【ARM Linux 系统稳定性分析入门及渐进 1.9.1 -- Crash 命令 System State 集合】
  • 关于99.9% 达成读码率方案
  • js 下载在线视频等多个文件到一个文件夹导出压缩包下载到本地
  • 棱镜七彩参加“融易行”产融对接南京站项目路演活动 展示供应链安全创新成果
  • 时序数据库之influxdb和倒排索引以及LSM-TREE
  • C++移动语义和lambda表达式