7.多表查询
1.查询增强
2.分页查询
3.分组增强
(1)
(2)
里面不管写上面都可以,只要是一个非空值,它就会统计进去
下面这样写同样可以
(3)
mgr是上级编号,但里面有重复的
distinct(不同的)就是去重
(4)
4.多子句查询
having用来对分组的结果进行过滤
5.多表笛卡尔集
emp表中没有部门名称,只有部门编号
部门名称在dept表中
如果两张表直接一起查询
下面一共返回了52条信息
进行一下筛选,记录由52条变为13条
之后进一步确定条件,只显示所需要的内容
deptno需要指定哪个表的deptno,不然会出错
6.多表查询
工资级别来自salgrade表,下面是salgrade的记录,共五条
所以不做任何处理查询两个表的话,会有65条记录(13 * 5)
7.自连接
King这个人没有上级,所以只有12个
8.子查询
1.单行/多行子查询
单行子查询
多行子查询
要加一个distinct,以防有重复的,比如下面的例子就会出现一个重复的
但是上面的还是包含10号部门本身的
或者这样写
2.子查询临时表
不仅需要id相同,最高的价格与商品价格也要相同
3.all 和 any
或者下面这种方法
或者
4.多列子查询
换成ALLEN
5.子查询练习
9.表复制
再执行一次插入语句,my_tab02表的内容变为原来的两倍
下面这条语句执行过后是没有重复记录的
10.合并查询
11.外连接
1.外连接需求
目前我们查出的部门只有三个,但实际上我们的部门表中有四个部门,其中有一个部门没有员工,此时就没有满足题目要求(显示那些没有员工的部门)
因为我们是靠deptno来进行关联的,但是左边的表没有40这个部门,所以就没有匹配到右边表的最后一行
左侧的表即使有没有与右侧的表匹配的记录,左侧表的那些记录的也会显示出来
2.左外连右外连
1.
2.
一样的结果
12.约束
1.主键(primary key)
1.
2.
下面是复合主键
id和name同时相同才会出错
4.
2.not null / unique
3.外键介绍(foreign key)
如果将class_id做成一个外键约束,则此时的sn_003是添加不进去的
此时想要直接删除id为200的那一行也会失败,除非先删除左边表的sn_002那一行,再删除右边表id为200的那一行
4.外键使用细节
主表中被外键所在表中外键锁所指向的必须是主键或者unique,不然的话,出现多个会造成混乱
Innode是引擎
4.这里是可以加进去的,此时我不知道id为3的class_id为100还是200,可以先设为空
5.check
6.练习(商店表设计)
13.自增长
假如此时再加入一个tom
也可以用下面这种写法(注意:如果没有设定自增长的话,下面这种写法是错误的,
因为设定默认值)
而他下面的增长会从666开始增加
14.索引
1.索引优化速度
有一个八百万条记录的索引,我们进行查询,花了4.5秒
2.索引机制
3.创建索引
5.
1.
Non_unique为0表示唯一索引,1表示非唯一索引
2.
第一种方法:添加主键索引,在创建表的时候加一个PRIMARY KEY,此时就已经是主键索引
第二种方法
如果已经创建好了表,此时还想添加主键索引
4.删除/修改/查询索引
删除主键索引时,不用指定哪一列,因为一张表最多一个主键索引
上面Key中的MUL表示是索引
5.创建索引规则
15.事务
1.事务有什么用
2.事务操作
3.事务注意事项
1.
2.
5.
4.四种隔离级别
5.隔离级别演示1
将另一个控制台的隔离级别变为 读未提交
下面创建一个表,在两个控制台分别进行查看,结果都是空表
之后在第一个控制台进行在表中插入数据的操作,但没有提交事务,按道理此时在第二个控制台查看表是看不到这个新插入的数据的,但此时却可以看见
上面这种现象就是脏读
下面在第一个控制台中进行数据的更新和插入,并且提交事务。在第二个控制台中进行查看,发现可以看见改变,这种现象就是不可重复读和幻读
正常情况下,我们在控制台B进行操作且没有提交事务前时,不希望受到其他控制台的影响,比如A的影响,但此时确受到了A的影响。
接着将第二个控制台设为 读已提交
此时我在第一个控制台中在表上添加行数据,但在第二个控制台中并没有看到添加的数据。即未产生脏读。
但是不可重复读和幻读还是存在的
6.隔离级别演示2
可重复读
将第一个控制台的事务提交后也是看不到的
可串行化
加锁就是如果发现有一个表正在操作没有被提交,它会卡在那里,不会进一步操作
在第一个控制台中进行对表的插入更新操作后,且此时没有提交。
在第二个控制台进行查询操作,控制台会卡在那里,不会显示任何结果
第一个控制台一旦执行提交(commit),第二个控制台立马会出现结果。
(这里没有出现不可重复读和幻读,因为第一个控制台没有进行commit读退出来,第二个控制台收不到信息)
7.设置隔离
设置好以后要重新启动mysql才会生效
8.存储引擎1
事务安全性就是支持事务的使用
9.存储引擎2
innodb
myisam
memory
此时关闭并重启mysql
此时我们的表结构还是在的
但是其中的数据已经没了
16.视图
1.视图原理
2.视图使用细节
1.
2.
3.视图应用实例
三表查询至少需要两个过滤条件
17.mysql管理
1.mysql用户管理
上面并没有真正删除
下面我们要登入我们刚刚新创建的用户hsp_edu
2.mysql权限管理
一般是通过root用户给其他用户授权
下面这个就是表示要将这个权限赋给所有数据库的所有对象
先创建一个用户
下面进行登入
下面再root用户下进行操作
之后在shunping用户中发现多了数据看testdb和表news
我们也可以进行一些操作
但不能进行修改
此时在root中给shunping增加update权限
此时操作成功
下面是修改shunping密码的操作
此时必须用新密码进行登入
下面是回收权限
下面两种写法都可以
最后是删除顺平这个用户
此时无法登入
3.mysql管理细节
但Smith不能这样删除