多表查询
:指从多张表中查询数据
笛卡尔积:笛卡尔乘积是指在数学中,两个集合(A集合和B集合)的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
具体详解:
我们在查询多张表的时候,会产生很多不需要或者说是不存在的数据,这中现象就成为笛卡尔积,这时我们需要在查询表的后面通过where关键字加上对应的条件来筛选出我们真正需要的,合理的数据。比如员工表和部门表之间的对应关系,一个员工对应一个部门,但我们同时查询时,会出现一个员工对应所有部门,这时我们通过where关键字将员工的id字段与部门表的id字段进行对应,这时就完成了筛选。
连接查询:
内连接:

查询两张表的交集部分。
隐式内连接:select 字段列表from 表1,表2 where条件…;
显式内连接:select 字段列表 from 表1[inner]join 表2 on 连接条件…;

给多表起别名

直接在表明后空格起名,用新的名字替代调用。
外连接
左外连接:select 字段列表from 表1 left[outer]join 表2 on 连条件…;
左半部分的全部数据,包括重叠的部分
select e.name,d.name from tb_emp e left join tb_dept d on e.dept_id=d.id;


右外连接:select 字段列表 from 表1 right[outer]join表2 on 连接条件…;

子查询
概述
介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
形式: select * from t1 where columnl = (select columnl from t2 … );子查询外部的语句可以是insert/update/delete/select 的任何一个,最常见的是 select。
分类
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
常用的操作符:= <> > >= < <=
列子查询
子查询返回的结果是一列(可以是多行)
常用的操作符:in、notin等
行子查询
:子查询返回的结果为一行
子查询返回的结果是一行(可以是多列)。常用的操作符:=、<>、in、not in
表子查询
:子查询返回的结果为多行多列
事务:
前言:当整个部门解散时,那么部门底下的员工都会被删除。所以我们执行SQL语句时需要先删除部门,在删除对应部门下的员工,但是如果员工删除因为操作不当失败了,就会造成数据的不一致性。这是我们就可以通过 事务来解决。
概念:
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些
操作要么同时成功,要么同时失败。
注意事项
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。因此我们需要把默认的两个事务组成一个事务,从而实现事务的功能。
操作:
事务控制
开启事务:start transaction;/ begin;
提交事务:commit;
回滚事务:rollback;当只有一个事务执行成功时,而另一个失败时,执行回滚事务,把数据回复原样,从新书写执行。
事务的四大特性:ACID
原子性
事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性
事务完成时,必须使所有的数据都保持一致状态
隔离性
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响
的独立环境下运行
持久性
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
索引:
索引是数据库优化的一种方式,当数据库数据量非常大时,我们通过正常操作查询数据时就会显的非常的低效,而我们通过给数据添加索引,之后通过索引进行查询我们想要的数据,就会显的非常迅速,速度效率成几何的式的增长。
索引是帮助数据库高效获取数据的数据结构
优点
提高数据查询的效率,降低数据库的I0成本。
通过索引列对数据进行排序,降低数据排序的成本,
降低CPU消耗。
缺点
索引会占用存储空间。
索到大大提高了查询效率,同时却也降低了insert、
update、delete的效率。
索引结构:B +Tree
每一个节点,可以存储多个key(有n个key,就有n个指针)
所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。
叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。
语法
创建索引
create[unique]index索引名 on表名(字段名….);
查看索引
show index from 表名;
删除索引
drop index 索名 on 表名;
注意事项
主键字段,在建表时,会自动创建主键索引。
添加唯一约束时,数据库实际上会添加唯一索引。
网硕互联帮助中心







评论前必须登录!
注册