三个常见存储引擎的区别
![](https://img-blog.csdnimg.cn/direct/6f1a60f47e5343a493fd41d08d982d1f.png)
分组函数(sum avg max min count)不能直接使用在
where
关键字后面。下面写法是错误的
mysql> select ename,sal from emp where sal > avg(sal);
查询emp表的所有记录数:
select count(*) from emp;
分组查询主要涉及到两个子句,分别是:
group by
和
having
取得每个工作岗位的工资合计,要求显示岗位名称和工资合计
select job, sum(sal) from emp group by job;
如果想对分组数据再进行过滤需要使用
having
子句
取得每个岗位的平均工资大于
2000
select job, avg(sal) from emp group by job
having avg(sal) >2000;
sql执行顺序
1.
首先执行
where
语句过滤原始数据
2.
执行
group by
进行分组
3.
执行
having
对分组数据进行操作
4.
执行
select
选出数据
5.
执行
order by
排序
原则:能在
where
中过滤的数据,尽量在
where
中过滤,效率较高。
having
的过滤是专门对分组之后的数据进行过滤
的。
内连接与外连接的区别:
- 内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留
-
select e.ename, e.sal, d.dname from emp e join dept d on e.deptno=d.deptno where e.sal>2000
- 外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL
-
左连接以左面的表为准和右边的表比较,和左表相等的不相等都会显示出来,右表符合条件的显示 , 不符合条件的不显示
-
select e.ename, e.sal, d.dname from dept d left outer join emp e on e.deptno=d.deptno;右连接相反约束的作用:保证表中的数据有效性 完整性常见的约束a) 非空约束, not nullb) 唯一约束, uniquec) 主键约束, primary keyd) 外键约束, foreign keye) 自定义检查约束, check (不建议使用) ( 在 mysql 中现在还不支持 )事务具有四个特征 ACIDa) 原子性( Atomicity ) 整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。b) 一致性( Consistency ) 在事务开始之前与结束之后,数据库都保持一致状态。c) 隔离性 (Isolation) 一个事务不会影响其他事务的运行。d) 持久性 (Durability) 在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。InnoDB 实现了四个隔离级别,用以控制事务所做的修改,并将修改通告至其它并发的事务:– 读未提交 ( READ UMCOMMITTED )允许一个事务可以看到其他事务未提交的修改。– 读已提交 ( READ COMMITTED )允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。– 可重复读 ( REPEATABLE READ )确保如果在一个事务中执行两次相同的 SELECT 语句,都能得到相同的结果,不管其他事务是否提交这些修改。(银行总账)该隔离级别为 InnoDB 的缺省设置。– 串行化 ( SERIALIZABLE ) 【序列化】将一个事务与其他事务完全地隔离