oracle常用的SQL语句
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; (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |