SQL的编写顺序:
select-->from-->where-->group by-->having-->order by
SQL的执行顺序:
from-->where-->group by-->having-->select-->order by
别名查询: 注意:使用as关键字,可以省略,如果别名中有特殊字符或者关键字,就需要加双引号
SELECT [列名] as [别名] FROM [表名]
SELECT [列名] [别名] FROM [表名]
SELECT [列名] [“别名(带特殊字符)”] FROM [表名]
栗子: SELECT name as 姓名 FROM emp;
SELECT name 姓名, salary 工资 FROM emp;
SELECT name “姓 名”, salary “工资” FROM emp;
去重复数据: 注意:只有每一列都一样才能算重复
(单列)SELECT DISTINCT [列名] FROM [表名]
(多列)SELECT DISTINCT [列名],[列名] FROM [表名]
栗子: SELECT DISTINCT job FROM emp;
SELECT DISTINCT job,deptno FROM emp;
查询中的四则运算
SELECT ([列名]|常量) ([列名]|常量) FROM [表名]
SELECT ([列名]|常量)*([列名]|常量) FROM [表名]
SELECT ([列名]|常量)-([列名]|常量) FROM [表名]
栗子:查询员工的年薪 注意:null值代表不确定的不可预知的内容,无法进行计算
SELECT salary*12 FROM emp
查询员工年薪 奖金
SELECT salary*12 bonus FROM emp
补充一个函数
如果遇到null的情况我们可以使用nvl函数
栗子:SELECT salary*12 nvl(bonus,0) FROM emp
就是可以使用0来替换值为null的bonus
字符串拼接: “||”
SELECT‘字符串’||[列名] FROM [表名] (Oracle专有)
SELECT concat(‘字符串’,[列名]) FROM [表名] (Oracle跟MySQL都可以使用)
栗子:
SELECT ‘姓名’||name FROM emp
条件查询: [WHER后面的写法]
关系运算符:>、>=、=、< 、<=、 != 、 <>
逻辑运算符:AND、OR、NOT
其他运算符:LIKE 模糊查询
INT(SET) 在某个集合之内
BETWEEN...AND.. 在某个区间之间
IS NULL 判断为空
IS NOT NULL 判断不为空
栗子:
查询每个能得到奖金的员工信息
SELECT * FROM emp WHERE bonus IS NOT NULL
查询工资在1500-3000之间员工信息
SELECT * FROM emp WHERE salary BTWEEN 1500 AND 300
SELECT * FROM emp WHERE saslary >=1500 AND salaary
模糊查询:LIKE
SELECT * FROM emp WHERE name LIKE ‘%%%’ sacape ‘’;
排序: ORDER BY
升序:ASC ASCEND (默认)
降序:DESC DESCEND
排序空值问题 NULLS FIRST | LAST
栗子:查询员工信息,按照奖金从高到低排序
SELECT * FROM emp ORDER BY bonus DESC NULLS FIRST;
排序多列:查询部门编号和按照工资 按照部门升序排序,工资降序排序
SELECT deptno,salary FROM emp ORDER BY deptnoasc,salary desc;
分组表达式 GROUP BY
SELECT 分组的条件,分组之后的操作 FROM GROUP BY 分组的条件 HAVING 条件过滤
栗子:分组统计所有部门的平均工资,找出平均工资大于1500的部门
SELECT deptno,AVG(salary) FROM emp GROUP BY deptno
过滤出大于1500的
SELECT deptno ,AVG(salary) FROM emp GROUP BY deptno HAVING AVG(salary)>1500
WHERE和HAVING之间的区别:
WHERE后面不能接聚合函数,可以接单行函数
HAVING是在GROUP之后执行,可以接聚合函数
通用函数:
nvl(参数1,参数2) 如果参数1=null,就返回参数2
nvl2(参数1,参数2,参数3) 如果参数1=null,就返回参数3.否则返回参数2
nullif(参数1,参数2) 如果参数1=参数2就返回null,否则返回参数1
日期函数 (获取的是一个服务器时间)
查询今天的日期
SELECT sysdate FROM dual;
查询三个月后今天的日期
SELECT add_months(sysdate,3) FROM dual;
查询3天后的日期
SELECT sysdate 3 FROM dual;
查询员工的入职月份
SELECT months_beween(sysdate,hiredate) FROM emp
查询员工的入职年份
SELECT months_between(sysdate,hiredate)/12 FROM emp;