sql第一天笔记
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
sal1.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;
数据处理函数又被称为单行处理函数,特点:输入一行输出一行
- 点赞
- 收藏
- 关注作者
评论(0)