oracle常用的SQL语句

时间:2022-05-25 03:54:19

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;