PLSQL:查询语句简述

2019-04-11  本文已影响0人  c0338fe173f7

运算符优先级,算术运算符>比较运算符>not>and>or,()提升优先级。

查询语句,基本语句结构:

SELECT column, group_function

        FROM table

                [WHERE condition]

                        [GROUP BY group_by_expression]

                                [HAVING group_condition]

                                        [ORDER BY column];

联合查询:内连接(N个表内有相同数据列)

        语法:SELECT table.column, table.column FROM table1, table2 WHERE table1.column1 = table2.column2;(或者where其他条件)

        where子句中的连接条件,一般要满足数据类型相符,含义一致。

        如果设置别名,则只能使用别名:

        SELECT 别名.column, 别名.column FROM table1 别名1, table2 别名2 WHERE 别名.column1 = 别名.column2;(或者where其他条件)

——不等值连接(连接条件不是以=连接)(内连接的一种)

        例子:select e.ename,e.sal,s.grade,s.losal,s.hisal from emp e,salgrade s

                            where e.sal between s.losal and s.hisal;--包含边界值

联合查询:外连接

——左外连接

        例子:SELECT table.column, table.column FROM table1, table2 WHERE table1.column(+) = table2.column;

        +在左边,代表左边需要扩展/删除。左边是从表,右边是主表。主表显示全部项目,从表跟随主表扩展/删除。

——右外连接

        例子:SELECTtable.column, table.column FROMtable1, table2 WHEREtable1.column = table2.column(+);

        +在右边,代表右边需要扩展/删除。右边是从表,左边是主表。主表显示全部项目,从表跟随主表扩展/删除。

        左右外连接用起来是一样的,只是表格书写位置的区别。

——自连接

        例子:select w.ename,w.empno,m.ename,m.empno from emp w,emp m

                            where w.mgr=m.empno;

        同一张表,设置两个别名,进行同一张表内的互联,如同一个人既是下属又是上级。

联合查询:另一种写法:join on

——join on内连接

        表1 [inner] join 表2 on 表1.列1=表2.列2。

        例子:select e.empno,e.deptno,d.loc

                            from emp e inner join dept d

                            on e.deptno=d.deptno;

        inner可以省略,效果一样的。

——join on 左外连接,主表在左边

        主表 left outer join 从表 on 主表.列1=从表.列2

        例子:select d.deptno,d.loc,e.empno,e.ename from dept d left outer join emp e

                            on d.deptno=e.deptno;

——join on 右外连接,主表在右边

        从表 right outer join 主表 on 从表.列1=主表.列2

        例子:select e.empno,e.ename,d.deptno,d.loc from emp e right outer join dept d

                            on e.deptno=d.deptno;

子查询

——单行子查询

        例:查询工资高于Jones的员工信息 (也可用自连接查询)

                select * from emp where sal>(select sal from emp where ename='JONES') order by sal;

        注意:子查询要用括号括起来,子查询中不要加ORDER BY子句。

——多行子查询(关键字:not,in,any,all)

        例子:查询哪个部门没有员工 in(列表)

                    select deptno from dept where deptno not in(select distinct deptno from emp);

        例子:查询工资小于任何办事员,且职位不是办事员的员工信息

                    any任意值  >any 大于最小值  <any 小于最大值

                    select ename,sal from emp

                            where sal<any(select sal from emp where job='CLERK')

                                    and job<>'CLERK';

        例子:查询工资大于最高平均工资的员工信息

                    all所有值  >all 大于最大值  <all 小于最小值

                    select ename,sal from emp

                            where sal>all(select avg(sal) from emp group by deptno);

限定分组结果

        语法:SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression]

                    [HAVING group_condition] [ORDER BY column];

        例:查询部门平均工资大于2000的部门信息

                select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

上一篇下一篇

猜你喜欢

热点阅读