sql第一天笔记

举报
xcc-2022 发表于 2022/11/28 19:11:41 2022/11/28
【摘要】 6、排序数据6.1 、单一字段排序排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升序,如果存在 where 子句那么order by 必须放到where 语句的后面 按照薪水由小到大排序(系统默认由小到大)select * from emp order by sal; 取得 job 为 MANAGER...

6、排序数据

6.1 、单一字段排序
排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升序,如果存在 where 子句那么order by 必须放到where 语句的后面
 按照薪水由小到大排序(系统默认由小到大)
select * from emp order by sal;

 取得 job 为 MANAGER 的员工,按照薪水由小到大排序(系统默认由小到大)
select * from emp where job=‘MANAGER’ order by sal;

如果包含 where 语句order by 必须放到 where 后面,如果没有where 语句 order by 放到表的后面以下写法是错误的:
select * from emp order by sal where job=‘MANAGER’;
 按照多个字段排序,如:首先按照job 排序,再按照sal 排序
select * from emp order by job,sal;

6.2 、手动指定排序顺序
 手动指定按照薪水由小到大排序
select * from emp order by sal asc;

 手动指定按照薪水由大到小排序
select * from emp order by sal desc;

6.3 、多个字段排序
 按照 job 和薪水倒序
select * from emp order by job desc, sal desc;

如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序

6.4 、使用字段的位置来排序
 按照薪水升序
select * from emp order by 6;

不建议使用此种方式,采用数字含义不明确,程序不健壮

7、数据处理函数/单行处理函数

Lower 转换小写
upper 转换大写
substr 取子串(substr(被截取的字符串,起始下标,
截取的长度))
length 取长度
trim 去空格

str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
Ifnull 可以将 null 转换成一个具体值

7.1 、lower
 查询员工,将员工姓名全部转换成小写
select lower(ename) from emp;

7.2 、upper
 查询 job 为 manager 的员工
select * from emp where job=upper(‘manager’);

7.3 、substr
 查询姓名以 M 开头所有的员工
select * from emp where substr(ename, 1, 1)=upper(‘m’);

7.4 、length
 取得员工姓名长度为 5 的
select length(ename), ename from emp where length(ename)=5;

7.5 、trim
trim 会去首尾空格,不会去除中间的空格
 取得工作岗位为 manager 的所有员工
select * from emp where job=trim(upper('manager '));

7.6 、str_to_date (必须严格按照标准输出)
 查询 1981-02-20 入职的员工(第一种方法,与数据库的格式匹配上)
select * from emp where HIREDATE=‘1981-02-20’;

 查询 1981-02-20 入职的员工(第二种方法,将字符串转换成date 类型)
select * from emp where HIREDATE=str_to_date(‘1981-02-20’,’%Y-%m-%d’);
select * from emp where HIREDATE=str_to_date(‘02-20-1981’,’%m-%d-%Y’);

str_to_date 可以将字符串转换成日期,具体格式 str_to_date (字符串,匹配格式)

7.7 、date_format
 查询 1981-02-20 以后入职的员工,将入职日期格式化成yyyy-mm-dd hh:mm:ss
select empno, ename, date_format(hiredate, ‘%Y-%m-%d %H:%i:%s’) as hiredate from emp;

select date_format(now(),’%Y-%m-%d %H %i %s’); now() 获得当前时间
日期格式的说明

7.8 、format

 查询员工薪水加入千分位
select empno, ename, Format(sal, 0) from emp;

 查询员工薪水加入千分位和保留两位小数
select empno, ename, Format(sal, 2) from emp;

7.9 、round
四舍五入
select round(123.56);

7.10 、rand()
生成随机数
select rand();

随机抽取记录数
select * from emp order by rand() limit 2;

order by 必须写上。

7.11 、case … when … then ……else …end
 如果 job 为 MANAGERG 薪水上涨 10%,如果 job 为SALESMAN 工资上涨 50%
select empno, ename, job, sal, case job when ‘MANAGER’ then sal1.1 when ‘SALESMAN’ then
sal
1.5 end as newsal from emp;

其他的工资不动,需要添加 else
select e.,sal ,case job when ‘salesman’ then sal1.1 when ‘clerk’ then sal*1.2 else sal end as new_sal from emp e;

e.*:取 emp 表所有的字段 , emp as e 是表的别名可以省略as emp e

7.12 、ifnull

select ifnull(comm,0) from emp;
如果 comm 为 null 就替换为 0
在 SQL 语句当中若有 NULL 值参与数学运算,计算结果一定是 NULL
为了防止计算结果出现NULL,建议先使用 ifnull 空值处理函数预先处理。以下 SQL 是计算年薪的:
select empno,ename,sal,(sal+ifnull(comm,0))*12 as yearsal from emp;

数据处理函数又被称为单行处理函数,特点:输入一行输出一行

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。