条件查询语句都要加where
一、between …and … 条件查询语句
1.两个值之间,为闭区间<br />** between and 除了可以使用在数字方面之外,还可以使用在字符串中间**<br />**select ename from emp where enname betwen 'A ' and 'C';**
二、is null为 空。不为值。
1.找出那些人没有津贴?
select ename ,sal,comm from emp where comm is null;
不能用=null
2.找出哪些人津贴不为null?
select ename,sal,comm from emp where comm is not null;
3.找出哪些人没有津贴?
select ename,sal,comm from emp where comm is null or comm=0;
三、and 和 or .and优先级高于or
1.找出工作岗位是MANAGER 和SALESMAN的员工?
select ename ,job from emp where job =’MANAGER’ or job = ‘SALESMAN’;
2.找出薪资大于1000的并且部门编号是20或30部门的员工。
select ename,sal,deptno from emp where sal>1000 and (deptno =20 or deptno = 30);
当运算级的优先级不确定的时候加小括号。
四、in 在什么里面。not 不是… 不为….
1.找出工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job in(‘MANAGER’,’SALESAMAN’);
五、like 模糊查询。_ 和%
1.找出名字当中含有O的?
select ename from emp where ename like’%O%’;
2.找出名字中第二个字母为A的?
select ename from emp where ename like’_A%’;
3.找出名字中带下划线的?
select ename from emp where ename like’%_%’;
六、排序(升序,降序)
1.找出工资升序,找出员工名和薪资?
select ename,sal from emp order by sal;
select ename,sal from emp order by sal asc ;升序
select ename,sal from emp order by sal desc; 降序
2.按照工资降序排列,当工资相同时候再按照名字的升序排列。
select ename,sal from emp order by sal desc ,ename asc;
前面字段相等相同时后面字段才用的上。前面字段起主导作用。
3.找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列
select ename,job,sal from emp where job=’SALESMAN’ order by sal desc;
select
* 3
from
tablename 1
where
条件 2
order by
… 4
最后输出 order by.
七、分组函数?多行处理函数,输入多行,输出结果为一行。
sum(**列名**)求和
avg(**列名**)求平均值
min(**列名**)求最小值
max(**列名**)求最大值
coun(**列名**)t计数
记住:所有的分组函数都是对‘某一组‘数据进行操作。
1.找出工资总和?
select sum(sal) from emp;
2.找出工资最大值?
select max(sal) from emp;**
分组自动忽略null.
八、单行处理函数
输入一行,输出一行。
1.计算每个员工的年薪?
select ename,(sal+comm)12 as yearsal from emp; ………错误
select ename,(sal+ifnull(comm,0))12 as yearsal from emp;…..正确
重点:所有数据库都是这样规定的,只要有null参与的运算结果一定是null.
ifnull()空处理函数?
ifnull(可能为null的数据,被当作什么处理):属于单行处理函数<br />**select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;.....正确**<br />**
找出员工高于平均工资的员工?
select ename,sal from emp whre sal > avg(sal); 会报错无效的分组函数;
原因:sql语句当中有一个语法规则,分组函数不可以直接使用在where字句当中;
为什么: 因为group by是在where执行之后才执行的
count() 和count (具体某个字段) 她们有什么区别;
count() 查询的是总记录的条数;
count(字段) 查询的是当前字段不为空的数据总数量
分组函数也能组合起来使用;
select count(*),max(sal),min(sal),avg(sal),
九、group by 和 having
group by: 按照某个字段或者某些字段进行分组;
having: 是对分组之后的数据进行再次过滤;
1.案例:找出每个工作岗位的最高薪资;
select max(sal),job from emp group by job;
注意:分组函数一般会和group by 组合使用,这就是未声明它被称为分组函数的原因;
当语句是用了group by 的时候,select 后面只能使用group by后面的字段和分组函数;
2.案例:每个工作岗位的平均薪资
select job,avg(sal) from emp group by job;
3.案例:找出每个部门不同岗位的最高薪资
select max(sal),job,deptno from emp GROUP BY job,DEPTNO
并且任何一个分组函数(count sun avg max min),都是再group by语句执行结束之后才会执行;
当一条sql语句没有group by的话,整张表的数据会自成一组,会有默认的group by;
4.案例:找出每个部门的最高薪资,要求显示薪资大于2500的数据;
方案一: select max(sal),deptno from emp where sal > 2500 group by DEPTNO
这个效率较高,能使用where 尽量使用where**
方案二:select max(sal),deptno from emp group by DEPTNO having max(sal) >2500 //这种方式效率低
5.案例:找出每个部门的平均薪资,要求显示薪资大于2000的数据;
select avg(sal),deptno from emp group by DEPTNO having avg(sal) >**2000
下列是执行顺序
select 6
..
from 1
..
where 2
..
group by 3
..
having 4
..
order by 5
