天天看点

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

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

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

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

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

🔮本文由京与旧铺原创

😘系列专栏:java学习

👕参考网课:尚硅谷

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

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

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

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

💬推荐一款模拟面试、刷题神器👉​​​点击进入网站​​

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

🛒导航小助手🎪

文章目录

  • ​​卷妹带你学数据库---5天冲刺Day2​​
  • ​​🛒导航小助手🎪​​
  • ​​@[toc]​​
  • ​​😂排序: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; //员工的领导编号 = 领导的员工编号      

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

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

内连接:自连接