--查找工资在1500~3000之间(包括)
例子:
select sal from emp
where sal>=1500 and sal<=3000 等价于 where sal between 1500 and 3000
in(属于若干个孤立的值)
select * from emp
where sal in(1500,3000,5000) 等价于 where sal=1500 or sal=3000 or sal=5000
top跟percent(百分比)
例:
select top 5 * from emp; --输出emp表的前5行
select top 15 percent * from emp --输出emp表总行数的15% 输出的是3个不是2
个。如果是个小数2.1那么就会取3
--把工资1500~3000之间(包括)的员工中工资最高的前4个人信息输出
例:
select top 4 sal from emp
where sal between 1500 and 3000
order by sal desc
--输出奖金非空的员工信息**
select comm from emp where comm <> null --输出为空 error
select comm form emp where comm != --输出为空 error
*总结上述:null不能参与<> 和!=和= 运算
null可以参与如下运算:is和not is
null不能参与任何数学运算,否则得出来的值为null
任何数字与null参与数学运算结果永远是null
任何类型的数据都允许为null
order by (已...排序) 升序(asc)为默认可以不写
例: *强烈建议为每一个字段都指定排序的标准
order by a,b --a,b都是升序
order by a,b desc --a升序,b降序
order by a desc,b --a降序,b升序
order by a desc,b desc --a,b都是降序
--模糊查询 **我们匹配的条件必须用单引号引起来
通配符:
% 表示任意0个或多个字符 详见如下
select *
from emp
where ename like '%A%' --ename只要含有字母A就输出
select *
from emp
where ename like 'A%' --ename只要首字母是A就输出
select *
from emp
where ename like '%A' --ename只要尾字母是A就输出
_ 表示任意的单个字符 详见如下
select *
from emp
where ename like '_A%' --ename只要第二个字符是A就输出
select *
from emp
where ename like '_[A-F]%' --ename只要第二个字符是A,B,C,D,E,F中任意一个就
例: select count(*) from emp; --返回emp表的所有记录的个数
select count(deptno) from emp; --返回值是14 重复也会计算
select count(distinct deptno) from emp; --返回值是3
select count(comm) from emp; --返回4个值,null不会计算
注意的问题:
select max(sal),min(sal),count(*) from emp; --ok
select max(sal),lower(ename) from emo; --error 单行函数和多行函数不能混用
group by
--输出每个部门的编号 和 该部门的平均工资
例:
select deptno avg(sal) as "部门平均工资"
from emp
group by deptno
group by
格式: group by 字段的集合
功能: 把表中的记录按照字段分成不同的组
例子:如上
注意:group by a,b,c的用法
先按a分组,如果a相同,再按b分组,如果b相同,再按
c分组,最终统计的是最小分组的信息
一定要明白下列语句为什么是错误:
例1 select deptno,avg(sal) as "部门平均工资",ename
from emp
group by deptno 错误原因ename输出的是14行而分组后的输出是3行
例2 select deptno,ename
from emp
group by deptno 错误原因ename不包含在group by子句当中
例3 select deptno,job,sal
from emp
group by deptno,job 错误原因
记住:使用了group by 之后select 中只能出现分组后的整体信息,
不能出现组内的详细信息
having 【对分组之后的信息进行过滤】因此在使用having前都会使用group by
例:输出部门平均工资大于1500的部门编号 部门平均工资
select deptno,avg(sal)
from emp
group by deptno
having avg(sal)>2000