一、基本查询语句
1.SQL编写顺序
select [列名] [*] from 表名 [where 条件] [group by 分组条件] [having 对分组进一步过滤] [order by 排序]
2.SQL执行顺序
from.. where.. group by.. having.. select.. order by..
二、虚表dual(补齐语法结构)
MySQL和Oracle方言是不同的,Oracle必须指定需要操作的表,Oracle为了我们提供了dual虚表(伪表)可以帮助我们做一些语法结构方面的操作
--Oracle必须制定一张表
select 1+1 from dual;
三、别名查询(as关键字,可以省略)
别名中不能有特殊字符和关键字,如果存在,需要加上双引号
select ename 姓名,sal 工资 from emp;
select ename as 姓名,sal 工资 from emp;
select ename "姓 名",sal "$工资" from emp;
四、去除重复数据(distinct)
1.单列去重
select distinct job from emp;
2.多列去重(每一列都一样,才能算作重复)
select distinct job,deptno from emp;
五、查询中的四则运算
1.null值(代表不确定的,不可预知内容,不能直接去做四则运算)
2.乘法(*)
--查询员工年薪 = 月薪 * 12
select sal*12 from emp;
3 .加法(+)
--查询员工年薪 + 奖金
select sal*12 + nvl(comm,0) from emp;
4.字符拼接(||)
select '姓名:'|| ename name from emp;
六、条件查询与排序
1.关系运算符(> >= = < <= <> !=)
--查询工资在1500-3000的员工信息
select * from emp where sal >= 1500 and sal <= 3000;
2.逻辑运算符(and or not)
3.其他运算符(is null, is not null, in(set),between..and.. like)
like匹配规则: %匹配多个字符 _匹配单个字符
--查询每月能得到奖金的员工信息
select * from emp where comm is not null;
--查询工资在1500-3000的员工信息
select * from emp where sal between 1500 and 3000;
--查询名字在某个范围的员工信息
select * from emp where ename in('JONES','SCOTT','FORD');
--查询员工姓名第三个字符是O的员工信息
select * from emp where ename like '__O%'
4.排序(默认升序 asc 降序 desc)
排序中如果有空值null,可以使用nulls first | last使得空值排到末尾或者开头
--查询员工信息按照奖金由高到低排序
select * from emp order by comm desc nulls last;
--查询部门编号和工资,按照部门标号升序排序,工资降序排序
select deptno,sal from emp order by deptno asc,sal desc
七、分组
分组表达式
select 分组条件,分组之后的操作 from 表名 group by 分组条件 having 条件进一步过滤
--分组统计所有部门的平均工资,找出平均工资大于2000的部门
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;