MySQL的简单整理
1.数据库语言
- DDL:数据定义语言,用来定义数据库对象
- DML:数据操作语言,用来对数据库中表的记录进行更新
- DQL:数据查询语言,用来查询数据库中表的记录
- DCL:数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
2.简单的增删改
- 增:insert into 表名 values()
- 删:delete from 表名 where 条件
- 改:update 表名 set 数据 where 条件
3.查询
- 基础查询:select * from 表名
- 条件查询:select * from 表名 where 条件
- 模糊查询:select * from 表名 where 条件 like ‘通配符’
- 去重查询:select distinct 字段 from 表名
- 排序查询:select * from 表名 order by 列名 asc(默认) desc
4.聚合函数
- count():统计指定列不为null的记录行数;
- max() :计算指定列的最大值,如果是字符串类型,那么使用字符串排序运算;
- min() :计算指定列的最小值,如果是字符串类型,那么使用字符串排序运算;
- sum() :计算指定列的数值和,如果列类型不是数值类型,那么计算结果为 0;
- AVG() :计算指定列的平均值,如果列类型不是数值类型,那么计算结果为 0;
5.分组查询
注:凡和聚合函数同时出现的列名,一定要写在 groupby 之后
select 字段 from 表名 GROUP BY 要分组的字段
- having 与 where 的区别:
1.having 是在分组后对数据进行过滤. where 是在分组前对数据进行过滤
2.having 后面可以使用聚合函数(统计函数) where 后面不可以使用聚合函数
注:WHERE 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那么这 行记录不会参加分组;而 HAVING 是对分组后数据的约束。
6.分页limit
select * from 表名 limit 起始行,行数
- 查询语句书写顺序:select–from-where-group by-having-order by-limit
- 查询语句执行顺序:from-where-group by-having-select-order by-limit
7.多表查询
(一)合并结果集:
- UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
- UNIONALL:不去除重复记录,例如:SELECT * FROMt1 UNIONALL SELECT * FROM t2。
- 注:要求被合并的两个结果:列数、列类型必须相同。
(二)内连接
- 内连接的特点:查询结果必须满足条件。
- 例:SELECT* FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
(三)外连接
- 外连接的特点:查询出的结果存在不满足条件的可能。
a:左查询
- 左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来, 不满足条件的显示 NULL。
- 例:SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;
b:右查询
- 右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示 NULL。
- 例:SELECT * FROM emp e RIGHT OUTER JOIN deptd ON e.deptno=d.deptno;
(四)子查询
- 子查询就是嵌套查询,即 SELECT 中包含 SELECT,如果一条语句中存在两个,或两 个以上 SELECT,那么就是子查询语句
- all any关键字:
例:
查询条件:
工资高于 30 部门所有人工资,其中 30 部门所有人工资是子查询。高于所有 需要使用 all 关键字。
第一步:查询 30 部门所有人工资 SELECT sal FROM emp WHERE deptno=30;
第二步:查询高于 30 部门所有人工资的员工信息 SELECT * FRO M emp WHERE sal>ALL(${第一步})
结果: SELECT * FROM emp WHERE sal>ALL(SELECT sal FROM emp WHERE deptno=30)
8.MySQL和Oracle的区别
- Oracle 中有表空间概念 ,MySQL没有,MySQL就只有一个存防表的地方
- 主键:Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
- 空字符处理:MySQL中字段定义为非空字段后,也可以有空的内容,而oracle中非空字段不可以出现空内容。
- 分页:MySQL中用limit分页,oracle中用rownum
- 单引号的处理:MySQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
- 临时表的区别:在MySQL中,临时表是仅对当前用户会话可见的数据库对象,并且一旦会话结束,这些表将自动删除。Oracle中临时表的定义与MySQL略有不同,因为临时表一旦创建就会存在,直到它们被显式删除,并且对具有适当权限的所有会话都可见。但是,临时表中的数据仅对将数据插入表中的用户会话可见,并且数据可能在事务或用户会话期间持续存在。
- 本质区别:Oracle数据库是一个对象关系数据库管理系统,MySQL是一个开源的关系数据库管理系统
- 安全性:MySQL没有Oracle安全性高