卷妹带你学数据库---5天冲刺Day2

330 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

卷妹带你学数据库---5天冲刺Day2

👩‍💻博客主页:京与旧铺的博客主页

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创,csdn首发!

😘系列专栏:java学习

👕参考网课:尚硅谷

💻首发时间:🎞2022年6月2日🎠

🎨你做三四月的事,八九月就会有答案,一起加油吧

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲


图片


🛒导航小助手🎪

卷妹带你学数据库---5天冲刺Day2🛒导航小助手🎪😂排序:order by😋数据处理函数😃单行处理函数😄分组函数(多行处理函数)distinct连接查询外连接: 左外连接(左连接) 右外连接(右连接)


😂排序:order by

 语法格式:
     select 
         ename,sal
     from
         emp
     order by
         sal; // 默认是升序!!
 指定降序: desc
 指定升序: asc
 ​
 以两个字段排序吗?或者说按照多个字段排序?
 查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
 select 
     ename,sal
 from
     emp
 order by
     sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。
 ​
 将之前的关键字全部组合在一起,来看一下他们的执行顺序?
     select
         ...
     from
         ...
     where
         ...
     group by
          ...
     having
         ...
     order by
         ...
 以上关键字的顺序不能颠倒,需要记忆。
 执行顺序是什么?
   1. from
   2. where
   3. group by
   4. having
   5. select
   6. order by
 ​

😋数据处理函数

  • 数据处理函数又被称为单行处理函数

😃单行处理函数

 单行处理函数的特点:一个输入对应一个输出。
 单行处理函数常见:
 lower 转换小写
     mysql> select lower(ename) as ename from emp;
     
 upper 转换大写
     mysql> select upper(name) as name from t_student;
     
 substr 取子串(substr(被截取的字符串, 起始下标,截取的长度))
     mysql> select substr(ename, 1, 1) as ename from emp;
     
 concat函数进行字符串的拼接
     mysql> select concat(empno,ename) from emp;
 length 取长度
     mysql> select length(ename) enamelength from emp;
     
 trim 去空格
     mysql>  select * from emp where ename = trim('   KING');
     
 str_to_date 将字符串转换成日期
 ​
 date_format 格式化日期
     
 format 设置千分位
     
 case..when..then..when..then..else..end
 当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。 (注意:不修改数据库,只是将查询结果显示为工资上调)
 select 
   ename,job, sal as oldsal,
   (case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal 
 from 
   emp;
 ​
 round 四舍五入
 mysql> select round(1236.567, 0) as result from emp; //保留整数位。
 mysql> select round(1236.567, 1) as result from emp; //保留1个小数
 mysql> select round(1236.567, 2) as result from emp; //保留2个小数
 mysql> select round(1236.567, -1) as result from emp; // 保留到十位。
 ​
 rand() 生成随机数
   mysql> select round(rand()*100,0) from emp; // 100以内的随机数
 ​
 ifnull 可以将 null 转换成一个具体值
 ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
 注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。ifnull函数用法:ifnull(数据, 被当做哪个值)。如果“数据”为NULL的时候,把这个数据结构当做哪个值。
 ​
 ​

😄分组函数(多行处理函数)

多行处理函数特点:多个输入,对应1个输出。

 count   # 计数
 sum     # 求和
 avg     # 平均值
 max     # 最大值
 min     # 最小值
 ​
 注意:
     1. 分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
     2. 分组函数自动忽略NULL,你不需要提前对NULL进行处理。
     3. 分组函数中count(*)和count(具体字段)有什么区别?
         count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
         count(*):统计表当中的总行数。(只要有一行数据count则++)
         因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
     4. 分组函数不能够直接使用在where子句中。
     5. 所有的分组函数可以组合起来一起用。
 ​

distinct

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

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

// distinct只能出现在所有字段的最前方。 mysql> select distinct job from emp;

// distinct出现在job,deptno两个字段之前,表示两个字段联合起来去重。 mysql> select distinct job,deptno from emp;

连接查询

多张表联合起来查询数据,被称为连接查询。

根据表连接的方式分类: 内连接: 等值连接 非等值连接 自连接

外连接: 左外连接(左连接) 右外连接(右连接)

内连接:等值连接

 SQL99语法:
   select 
     ...
   from
     a
   inner join
     b
   on
     a和b的连接条件
   where
     筛选条件
 ​
 ###### inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)

内连接:非等值连接

 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; //员工的领导编号 = 领导的员工编号

以上就是内连接中的:自连接,技巧:一张表看做两张表

以上就是内连接中的:自连接,技巧:一张表看做两张表

\