Mysql 4

一、简单子查询

定义:(Sub query):

– 查询比员工scott薪水高的员工数据
步骤1:查询scott薪水
select sal from emp where enname=‘scott’
步骤2:查询比步骤1结果大的数据
select* from emp where sal>=20000

(1) c/s 结构 SQL 语句执行过程

(2) 事务控制
四个特性:
(a) 原子性:事务是一个不可继续划分的整体
如果一个事务由多个DML操作构成,这些DML操作看成一个整体
(b) 一致性:组成事务这些DML操作,要么都成功,要么都失败
© 隔离性:不同的事物之间,不能相互影响。
(d) 持久性:事务提交后,数据存入数据库,持久生效。

事物控制: 关闭自动提交

简单子查询只返回单一的一行一列的数据

二、多行子查询

  1. IN 和 not in
    – 多行子查询
    – 子查询返回的数据是多行单列的(多个数据) ,不可以用常规

– 查询与20号部门员工拥有相同职位的其他部门员工
SELECT *
FROM emp
WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=20)
AND deptno != 20;

– 重要:在子查询中使用in或者not in时,需要确保子查询结果中不存在Null值
not in中有 null 值,无法查询任何数据.
select *
from emp
where mgr not in(1001,null)
– 没有任何数据可以符合条件

  1. ANY与ALL
    – any 其中之一
    – all 全部
    – 查询比30号部门全体员工月薪都要高的员工数据
    SELECT *
    FROM emp
    WHERE sal >ALL (SELECT sal FROM emp WHERE deptno=30);

– >all 大于最大值
– <all 小于最小值
– >any 大于最小值
– <any 小于最大值

三、FROM句式中子查询

多行多列子查询 – 临时视图 当成一张表来用
– 查询比自己职位平均薪水低的员工数据
SELECT *
FROM emp e JOIN (
SELECT job,AVG(sal) AS jsal
FROM emp
GROUP BY job ) j ON(e.job=j.job)
WHERE j.jsal>e.sal;

四、相关子查询

子查询不能独立运行,必须依附主查询
拿主查询的和子查询去对,一般会用exist 或着not exist (存在或者不存在)
exist 用于主查询的结果是否存在于子查询中,若存在则留下来.
SELECT *
FROM emp e1
WHERE EXISTS (SELECT 0 FROM emp e2 WHERE e2.mgr=e1.empno);

五、视图

数据库一种对象,关键字是view
它是对数据表中的数据产生的 “透视” ,本身是不存储数据的。
通常做两件事:1.将常用的复杂查询编制成一个视图,直接通过查询视图获取需要的数据。
2.隐藏敏感数据

创建视图
Create or replace view 视图名
as
dql 语句

删除视图
drop view 视图名

六、索引

索引目的是为了提高表的检索速度,但实际不一样
索引建立后,一定会降低插入和删除的执行速度

自动索引:表的主键列和唯一约束列,相应的列会自动添加索引
手动索引:通过人工添加索引

索引关键字: index

create index 索引名 on 表(列) — 为表的列添加索引
drop index 索引名 – 删除索引

索引是自行维护,创建之后不用管理

七、数据库设计

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值