MySQL笔记(二)

1. distinct把查询结果去除重复记录:

原表数据不会被修改,只是查询结果去重。

select distinct job,deptno from emp;// distinct只能出现在所有字段的最前方。distinct出现在job,deptno两个字段之前,表示两个字段联合起来去重。

统计一下工作岗位的数量:select count(distinct job) from emp;

2.连接查询:

  ▲连接查询的分类:①内连接:等值连接、非等值连接、自连接;②外连接:左外连接(左连接)、右外连接(右连接);③全连接

  查询每个员工所在部门名称,显示员工名和部门名:select e.ename,d.dname from emp e (inner) join dept d on e.deptno = d.deptno where (筛选条件);  // 条件是等量关系,所以被称为等值连接。

  找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级:select e.ename, e.sal, s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。

  查询员工的上级领导,要求显示员工名和对应的领导名:select  a.ename as '员工名', b.ename as '领导名’from emp a join emp b on a.mgr = b.empno; //内连接中的自连接,技巧:一张表看做两张表。

  查询员工的职位:select e.ename,d.dname from emp e right (outer) join dept d on e.deptno = d.deptno;// right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表。在外连接当中,两张表连接,产生了主次关系。(右外连接)

▲带有right的是右外连接,又叫做右连接。带有left的是左外连接,又叫做左连接。任何一个右连接都有左连接的写法。任何一个左连接都有右连接的写法。

▲外连接的查询结果条数一定是 >= 内连接的查询结果条数? √

查询每个员工的上级领导,要求显示所有员工的名字和领导名:select a.ename as '员工名', b.ename as '领导名' from emp a left join emp b on a.mgr = b.empno;

▲三张表,四张表怎么连接:select ...from a join b on a和b的连接条件 join c on a和c的连接条件 right join d on a和d的连接条件;// 一条SQL中内连接和外连接可以混合,都可以出现。

  找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级:select  e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;

3.子查询:

▲select语句中嵌套select语句,被嵌套的select语句称为子查询。

where子句中的子查询:找出比最低工资高的员工姓名和工资:select ename,sal from emp where sal > (select min(sal) from emp);

from子句中的子查询:找出每个岗位的平均工资的薪资等级:select t.*, s.grade from (select job,avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;// from后面的子查询,可以将子查询的查询结果当做一张临时表。

select后面出现的子查询:找出每个员工的部门名称,要求显示员工名,部门名:select e.ename,e.deptno,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;// 对于select后面的子查询来说,这个子查询只能一次返回1条结果,多于1条,就报错了。

4. union合并查询结果集:

查询工作岗位是MANAGER和SALESMAN的员工:select ename,job from emp where job = 'MANAGER' union select ename,job from emp where job = 'SALESMAN';// union在进行结果集合并的时候,要求两个结果集的列数相同;最好结果集合并时列和列的数据类型也一致。

5.limit用法:

▲limit startIndex, length //startIndex是起始下标,length是长度,起始下标从0开始。

按照薪资降序,取出排名在前5名的员工:select ename,sal from emp order by sal desc limit 5; //取前5

▲mysql当中limit在order by之后执行。

取出工资排名在[3-5]名的员工:select ename,sal from emp order by sal desc limit 2, 3;

分页:每页显示pageSize条记录:第pageNo页:limit (pageNo - 1) * pageSize  , pageSize

▲关于DQL语句的大总结  执行顺序:

  from  where  group by  having   select  order by  limit

6. 表的创建(建表):

 ▲建表的语法格式:create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);// 表名:建议以t_ 或者 tbl_开始,可读性强。

 ▲关于mysql中的数据类型:

①varchar(最长255):可变长度的字符串;比较智能,节省空间。会根据实际的数据长度动态分配空间。

②char(最长255):定长字符串;不管实际的数据长度是多少。分配固定长度的空间去存储数据。使用不恰当的时候,可能会导致空间的浪费。//varchar和char我们应该怎么选择:性别固定长度char;名字长度不同varchar。

③int(最长11):数字中的整数型。

④bigint:数字中的长整型。

⑤float:单精度浮点型数据。

⑥double:双精度浮点型数据。

⑦date:短日期类型。只包括年月日信息。%Y-%m-%d

⑧datetime:长日期类型。包括年月日时分秒信息。%Y-%m-%d %h:%i:%s

⑨clob:字符大对象。最多可以存储4G的字符串。比如:存储一篇文章,存储一个说明。超过255个字符的都要采用CLOB字符大对象来存储。

⑩blob:二进制大对象。专门用来存储图片、声音、视频等流媒体数据。

 创建一个学生表(学号、姓名、年龄、性别、邮箱地址):create table t_student(no int,name varchar(32),sex char(1),age int(3),email varchar(255));

 删除表:drop table if exists t_student;

7. 插入数据insert (DML):

 ▲语法格式:insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);// 字段名和值要一一对应;数量要对应,数据类型要对应。

 在学生表中插入学生信息:insert into t_student(no,name,sex,age,email) values(1,'zhangsan','m',20,'zhangsan@123.com');// insert语句但凡是执行成功了,那么必然会多一条记录。没有给其它字段指定值的话,默认值是NULL。

 格式化数字:format(数字, '格式'):select ename,format(sal, '$999,999') as sal from emp;

 ▲str_to_date:将字符串varchar类型转换成date类型。str_to_date('字符串日期', '日期格式')   默认格式:%Y-%m-%d

mysql的日期格式:%Y 年;%m 月;%d 日;%h   时;%i   分;%s  秒。

   date_format:将date类型转换成具有一定格式的varchar字符串类型。

 ▲数据库中的有一条命名规范:所有的标识符都是全部小写,单词和单词之间使用下划线进行衔接。

8. 修改update(DML):

 ▲语法格式:update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;// 没有条件限制会导致所有数据全部更新。

 更新少数:update t_user set name = 'jack', birth = '2000-10-11' where id = 2;

 更新所有:update t_user set name = 'abc';

9. 删除数据 delete (DML):

 ▲语法格式:delete from 表名 where 条件;// 没有条件,整张表的数据会全部删除。

 删除一个:delete from t_user where id = 2; 

 删除所有:delete from t_user;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值