Mysql常用部分

MYSQL

1.表table

  1. 表是一种结构化的文件,表中有,字段,行,主键

  2. 每一个字段都有: 1. 字段名称, 2. 字段数据类型, 3. 字段约束(空/非空), 4. 字段长度 命令: desc +tablename; 查看表结构 show create table +tablename; 查看建表语句

  3. SQL的分类五

  4. 数据查询语言(DQL-data query language)——操作数据;select

  5. 数据操纵语言(DML-data manipulation language)——操作数据insert,delete,update;

  6. 数据定义语言(DDL-data definition language)——增删改表结构create,drop,alter;

  7. 事物控制语言(TCL-transactional control language)——操作事物commit,rollback

  8. 数据控制语言(DCL-data control language)——控制权限;grant,revoke

  9. 条件查询六

  10. between and用在数字是闭区间,前面是小值后面是大值;应用在字符区间则是前闭后开;

  11. null表示什么都没有,不是值,只能用is/is not查询;

  12. and 优先级比or高,其实无所谓,想让谁优先级高就在哪个条件加括号;

  13. 包含查询,in相当于多个or,注意not in中的数据不能有null,这么用 not in(...is not null)就可以

    1. in(not in)

      select ename from emp where job in(not in) ('manager','SAlesman');

      job是manager和job是salesman

      等价于

      select ename from emp where job = 'manager' or job='salesman';

  14. 模糊查询:%任意字符,_任意一个字符

  15. select distinct... :distinct:去重只能出现在所有字段的最前,只是将结果集去除重复记录

  16. case...when...then...when...then...else...end

    类似于java中的switch...case...

4.排序三

  1. 排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序;降序加desc,升序用asc;

  2. 如果存在where子句那么order by必须放到where语句的后面;

  3. order by后可以加数字表示根据第几个字段排序,但是健壮性不强;

5.数据处理函数/单行处理函数九

  1. lower(字段)/upper():转大/小写

  2. substr(字段,起始位置,截取长度)

  3. length(..):取长度

  4. trim(..):去空格

  5. round(数字/数字字段[,四舍五入到小数点n位]):四舍五入

  6. rand():随机数

  7. ifnull(字段,目标):如果空,那么...

  8. str_to_date (字符串,匹配格式):可以将字符串转换成date日期格式

  9. date_formate select date_format(now(),'%Y-%m-%d %H %i %s'); 2018-10-01 17:39:27

6.分组函数/聚合函数/多行处理函数五

  1. count()

    count(字段),不为空的记录总数

    count(*),满足条件的记录总数

  2. sum()

  3. avg()

  4. max()

  5. min()

    注意:

    1. 多行处理函数自动忽略空值

      2.分组函数不能直接使用在where子句中 :分组函数必须在分组完成之后进行,因为分组需要用到group by,而此时group by还没被执行

      mysql> select ename,sal from emp where sal > avg(sal);

      ERROR 1111 (HY000): Invalid use of group function

7.分组查询

  1. 分组查询涉及到的两个字句是:

    1. group by

    2. having

  2. group by 若sql中含有group by子句,那么select 后面只能跟参与分组的字段和分组函数 1.查询每个部门的平均薪水 select deptno,avg(sal) avgsal from emp group by deptno ;

    2.计算不同部门中中不同工作岗位的最高薪水 select deptno,job,max(sal) maxsal from emp group by deptno,job; 就是deptno和job两个字段联合起来分组

    3.找出每个工作岗位的最高薪水,除了Manager之外 select job,max(sal) from emp where job != 'MANAGER' group by job; 4.找出每个工作岗位的平均薪水,要求显示平均薪水大于1500 select job,avg(sal) from emp group by job having avg(sal)>1500;

  3. having

    having和where功能都是为了完成数据的过滤;where和having 后面都要添加条件;

    但是能在where中过滤的一定要过滤,无法过滤的数据,通常都是需要先分好组的,group by分好组了,又要在having中过滤肯定是不行的;

  4. DQL的执行顺序 select ... from ... where ... group by ... having ... order by ... 执行顺序: 1. from 从某张表中检索数据 2. where 经过某条件进行过滤 3. group by 然后分组 4. having 分组之后不满意再分组 5. select 查询出来 6. order by 排序输出

  5. 连接查询

  6. 什么是连接查询?

    • 查询的时候只从一张表中检索数据,即单表查询

    • 在实际的开发中,数据并不是存储在一张表中的,是同时存储在多张表中,这些表和表之间存在关系,我们在检索的时候通常是需要将多张表联合起来取得有效数据,这种多表查询被称为连接查询或者叫跨表查询。

  7. 连接查询根据出现年代分类:

    • SQL92

    • SQL99

  8. 连接查询根据连接方式可以分为:

    • 内链接:返回链接所满足的链接条件记录

      • 等值连接:是非常常用的一种连接,前提必须是表之间有关联列

        SQL92语法,再想过滤的话用and加条件

        SQL99语法把表连接操作用(inner )join...on...分离出来,再想过滤数据的话用where,结构清晰

      • 非等值连接:..

      • 自连接:同一张表,不常用

    • 外连接:不仅返回满足链接条件的记录,还将返回不满足链接条件的记录

      • 左外连接(左链接):将左表全显示出来

      • 右外连接(右链接):..

  9. 当多张表进行连接查询,若没有任何条件进行限制,会产生笛卡儿积

  10. 案例

    1.找出每一个员工对应的工资等级,要求显示员工名,工资,工资等级

    2.找出每一个员工的上级领导名称,要求显示员工名以及对应的领导名

    3.找出每一个员工对应的部门名称,要求部门名称全部显示

    4.找出每一个员工对应的领导名,要求显示所有的员工

    5.找出每一个员工对应的部门名称,以及该员工对应的工资等级

9.子查询

  1. 什么是子查询?

    • select嵌套select

  2. 子查询可以出现在哪儿?

    • select..(select)

    • from..(select)

    • where..(select)

  3. 案例

    1.找出薪水比公司平均薪水高的员工,要求显示员工名和薪水(在where后使用子查询)

    2.找出每个部门的平均薪水,并且找出相应的薪水等级(在from后使用子查询)

    3.找出员工对应的部门名称(在select后使用子查询)

  4. 其它操作

    1.union,合并结果集

    注意,mysql中只要求结果集的个数相同,Oracle中不仅有以上要求对数据格式也要求相同;

    2.limit

    • limit用来获取一张表中的某部分数据

    • 只在M'ySQL中存在,不通用

    • 大数据下如何做分页:

      MySQL并不是跳过offset行,而是取offset+N行,然后放弃前offset行,返回N行,所以当offset大的时候,效率自然低下;这样要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写:

10.DDL、DML、常用数据类型

  1. 格式 1. DDL create table tableName( columnName dataType(length), ……………….. columnName dataType(length) ); set character_set_results='utf8';#创建表

    2.DML insert into tableName[(column[,column...])] values(value[,value...)]);#增,字段可以省略

  2. 常用数据类型

    Char(长度) 定长字符串,存储空间大小固定,适合作为主键或外键

    Varchar(长度) 变长字符串,存储空间等于实际数据空间

    double(有效数字位数,小数位) 数值型 DOUBLE(7,2),7个有效数字2个小数位

    Float(有效数字位数,小数位) 数值型

    Int( 长度) 整型 int(3)表示最大为999

    bigint(长度) 长整型

    Date 日期型

    BLOB Binary Large OBject(二进制大对象) 图片等,视频太大不建议

    CLOB Character Large OBject(字符大对象) 4G+的大文本

Last updated

Was this helpful?