加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

oracle常用的SQL语句

发布时间:2020-12-24 13:09:21 所属栏目:站长百科 来源:网络整理
导读:SQL 的编写顺序: ????????????? select-- from -- where -- group by -- having -- order by ??? SQL 的执行顺序: from--where--group by--having--select--order by 别名查询: ???? 注意:使用as关键字,可以省略,如果别名中有特殊字符或者关键字,就需

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;

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读