在《大聊MySQL查询(1)》中已经介绍了,简单查询、条件查询、分组查询、分组函数。
(本文中用到的数据库下载:https://download.csdn.net/my)
现在,再介绍查询的接下来的几个内容,首先我还是把查询顺序图放在这里:
1、order by 前面提到过 order by 现在详细介绍一下
按照薪水由小到大排序(系统默认由小到大) select * from emp order by sal;
注: select * from emp order by sal asc; (这是系统默认的升序排列方式,所以可以省略asc)
select * from emp order by sal desc; (降序排列方式)
取得job为MANAGER的员工,按照薪水由小到大排序 select * from emp where job='MANAGER' order by sal;
注:如果包含where语句order by必须放到where后面,如果没有where语句order by放到表的后面。其实也就是说,先按照一定的条件进行筛选,然后将结果按照升序或降序显示出来。
按照job和薪水升序 select * from emp order by job,sal;
注:其实也就是说,先按照job的升序排列,在此基础上,如果有多条记录的job相同,则再把同一种的job按照sal的升序排列。
2、数据处理函数/单行处理函数
简单说一下这一部分的内容,(这部分内容,主要是摘录 power node 那个老师讲的)
Lower | 转换小写 |
upper | 转换大写 |
substr | 取子串(substr(被截取的字符串,起始下标,截取的长度)) |
length | 取长度 |
trim | 去空格 |
str_to_date | 将字符串转换成日期 |
date_format | 格式化日期 |
format | 设置千分位 |
round | 四舍五入 |
rand() | 生成随机数 |
Ifnull | 可以将null转换成一个具体值 |
选几个来说一下
a) substr 查询姓名以M开头所有的员工 select * from emp where substr(ename, 1, 1)=upper('m');
b) trim 取得工作岗位为manager的所有员工 select * from emp where job=trim(upper('manager '));
注:trim会去首尾空格,不会去除中间的空格
c) str_to_date 查询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');
d) 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;
e) format 查询员工薪水加入千分位和保留两位小数 select empno, ename, Format(sal, 2) from emp;
f) case … when … then …..else …end 如果job为MANAGERG薪水上涨10%,如果job为SALESMAN工资上涨50%select empno, ename, job, sal, case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 end as newsal from emp;
g) ifnull select ifnull(comm,0) from emp; 如果comm为null 就替换为 0
3、子查询
这个地方我也不说什么,没有什么好说的,多写几个关于子查询的代码
子查询就是嵌套的select语句,可以理解为子查询是一张表
4、limit 的使用
取得前5条数据 select * from emp limit 5;
从第二条开始取两条数据 select * from emp limit 1,2;
limit 起始位置 ,长度
算是完了吧,其实没有太多好写的,多练练可能比较好!!!!!!!!!!!!!