一、distinct去重查询
--1、查询去重emp表中comm列所有的数据
select distinct comm from emp
--2、查询去重emp表中comm列和deptno列的组合的所有的数据
select distinct comm,deptno from emp
2、between条件查询
--1、查询工资在1500到3000之间的所有员工信息
select * from emp where sal>=1500 and sal<=300;
等价于
select * from emp where sal between 1500 and 3000;
3、in属于若干个孤立的值
--1、查询emp表中工资为1500、3000、5000的员工信息
select * from emp where sal in(1500,3000,5000);
等价于
select * from emp where sal=1500 or sal=3000 or sal=5000;
4、top查询前几个若干记录
--1、查询emp表中前五个员工信息
select top 5 * from emp;
--2、查询emp表中前15%个员工信息
select top 15 percent * from emp;
5、order by (以某个字段排序)(asc是默认为升序可以不写,desc是降序)
--1、查询emp表中工资在1500到3000之间的员工中,工资最高的前4人
select top 4 * from emp where sal>=1500 and sal<=3000 order by sal desc
--2、宣勋emp表中所有员工信息,按照deptno降序,sal升序
select * from emp order by deptno desc,sal
--1、a和b都是升序(默认asc时升序)
order by a,b
--2、a是升序,b降序
order by a,b
--3、a是降序,b降序
order by a desc ,b desc
6、like模糊查询
- "%" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)。
- "_" 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。
- like操作符:LIKE作用sql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;
- 但如果like后面没出现通配符(%或_),则在SQL执行优化时将 like 默认为 “=”执行
--1、查询员工表emp中,员工姓名中带有A的员工信息
select * from emp where ename like '%A%';
--2、查询员工表emp中,员工姓名中以A开头的员工信息
select * from emp where ename like 'A%';
--3、查询员工表emp中,员工姓名中以A结尾的员工信息
select * from emp where ename like '%A';
--4、查询员工表emp中,员工姓名中以A为结尾的,长度为三个字的数据
select * from emp where ename like '__A';
--5、查询员工表emp中,员工姓名中第二个字母为A的员工信息
select * from emp where ename like '_A%';
[a-f]查询a-f中任意单个字符,只能是其中一个字符
--2、查询员工表中,姓名中第二个字符带有A-F中任意一个的员工信息
select * from emp where ename like '_[a-f]%'
[a,f]查询a或者f中任意单个字符,只能是其中一个字符
--3、查询员工表中,姓名中第二个字符带有A或者F中任意一个的员工信息
select * from emp where ename like '_[a,f]%'
[^a-f]查询取反a或者f中任意单个字符,只能是其中一个字符
--1、查询员工表中,姓名中第二个字符不是A-F中任意一个的员工信息
select * from emp where ename like '_[^a-f]%'
--转义字符 \
--1、查询员工表中,姓名中含有%的员工信息
select * from emp where ename like '%\%%'
--2、查询员工表中,姓名中含有_的员工信息
select * from emp where ename like '%\_%'
7、聚合函数(多行记录返回一个值,用于统计分组信息)
max()求最大值
min()求最小值
avg()求平均值
count()求最个数
--1、查询表中所有记录的个数
select count(*) from emp
--2、查询emp表中deptno记录的个数(包含重复,但是为null的值不会被记录)
select count(deptno) from emp
--2、查询emp表中deptno记录的个数(不含重复)
select count(distinct deptno) from emp
8、as起别名
--1、查询emp表中员工工资大于3000的员工姓名和工作(as可以省略)
select ename as '员工姓名',job as '工作' from emp where sal>=3000
9、group by(分组查询),把表中的记录按照字段分成不同的组
group by 之后的select查询中只能出现分组后整体信息,不能出现组内详细信息
--1、查询不同部门的平均工资
select deptno,avg(sal) as '部门平均工资' from emp group by deptno;
-- 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender ;
--根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender, avg(age) from emp group by gender ;
group by a,b,c
先按照a分组,a相同的按照b分组,b相同的再按照c分组
10、having(对分组之后的信息进行过滤)
- 通常跟在GROUP BY后边作用相当于WHERE
- WHERE 子句只能指定行的条件,而不能指定组的条件
- having是对分组后的的记录进行过滤
- 如果没使用group by分组但是用了having,则把所有查询结果当成一个组
select count(*) from emp having avg(sal)>1000
group by 之后的select查询中只能出现分组后整体信息,不能出现组内详细信息
--1、查询不同部门的平均工资
select deptno,avg(sal) as '部门平均工资' from emp group by deptno having count(*)>3;
having字句中不能出现字段的别名