Oracle数据库Sql语句相关知识点

Sql语句

            DML数据操纵语言:查询(select)、插入(insert)、删除(delete)、修改(update)

            DDL数据定义语言:创建(create)、修改(alter)、删除(drop)、清空(truncate)

            DCL权限控制语言:赋予权限(grant)、回收权限(revoke)

            TL事务控制语言:提交(commit)、回滚(rollback)

DML数据操纵语言:

        1、查询(select):

                    1):种类

                             简单查询
                                    (1)、 字段查询
                                            查询所有字段:select * from 表名
                                            查询指定字段:select 字段名,字段名,字段名  from 表名
                                     (2)、 获取系统时间:select sysdate from dual
                           多表查询
                                   笛卡尔积:直接查询俩张表产生的结果。

                                   连接查询

                                        1、等值连接:利用一张表中某列的值和另一表中某列的值相等,把俩表连接起来

                                               例如:查询员工的名字、部门编号、部门名字

                                                        select last_name,dept_id,name from s_emp,s_dept where s_emp.dept_id=s_dept.id;

                                               为了语句表述清楚可以用别名

                                                        select se.last_name,se.dept_id,sd.id,sd.name from s_emp se,s_dept sd

                                                        where se.dpt_id=sd.id;

                                        2、不等值连接

                                                例如:

                                        salgrade():表示工资等级表         losal() :表示最低工资     hisal():表示最高工资

                                        查询出员工名字、职位、工资、工资等级名称

                                        select e.last_name,e.title,e.salary,s.gradeNmae

                                        from s_emp e,salgrade s

                                        where e.salray between s.losal and s.hisal

                                        3、外连接:与内连接相比,即使没有匹配行,也会返回一个表的全集

                                                重点:至少有一方保留全集,没有匹配行用null代替

                   左外连接:结果集保留左表的所有行,只保留第二个表与第一个表的行。第二个表相应的空行被放入NULL值。

                                    例如:查询所有员工以及对应的部门的名字,没有部门的员工也要显示出来

                                       select last_name,dept_id,name

                                        from s_emp,s_dept

                                        where s_emp.dept_id=s_dept.id(+);

                                        或者

                                        select last_name,dept_id,name

                                        from s_emp left [outer] join s_dept

                                        on s_emp.dept_id=s_dept.id;

                                        重点:+号要放在所查询数值较小的一方

                                2、右外连接:保留第二个表的所有行

                                            例如:查询所有员工以及对应的部门的名字,没有任何员工的部门也要显示出来

                                                     select last_name,dept_id,name
                                                     from s_emp,s_dept
                                                     where s_emp.dept_id(+)=s_dept.id;
                                 3、 全连接:会把俩个表所有的行显示在结果表中

                          例如:查询所有员工以及对应的部门名字,没有任何员工的部门也要显示出来,没有部门的员工也要显示出来

                            select last_name,dept_id,name

                            from s_emp full [outer] join s_dept

                            on s_emp.dept_id=s_dept.id

                                4、自连接:一张表,自己和自己连接

                                    例如:查询每个员工的名字以及员工对应的管理者的名字

                                    select s1.last_name,s2.last_name manager_naem

                                    from s_emp s1,s_emp s2

                                    where s1.manager_id=s2.id;

                        补充:对查询结果集的操作(对俩条SQL语句进行操作)

                        union          获得俩个结果集的并集

                        union  all     把俩个结果集合在一起显示出来(会自动排序,比union多了排序效果)

                        minus          第一个结果集出去第二个结果集和它相同的部分

                        intersect      获得俩个结果集的交集

                        注意:前提条件,俩个结果集中[查询的列]要完全一致

                         例如:获得俩个结果集的并集(并集、去交集、交集)

                                select last_name,dept_id,name

                                from s_emp,s_dept

                                where s_emp.dept_id=s_dept.id(+)

                                union[union all,minus,intersect]

                                select last_name,dept_id,name

                                from s_emp,s_dept

                                where s_emp.dept_id(+)=s_dept.id

                3、子查询:嵌套查询

                           1)、 单行子查询:子查询的结果集是一行

                                 单行操作符对应单行子查询:> < >= <= = <>      

                      例子 :谁的工资比Abel高?

                              /*

                                分析1:求出Abel的工资

                                分析2:筛选employees表,判断salary>Abel的工资

                              */

                               条件1:

                                select salary from employees where last_name='Abel';

                                  条件2:

                                  select * from employees where salary > 条件1

                                   结果:

                                   select * from employees where salary >(

                                    select salary from employees where last_name='Abel'

                                    );

                            2)、多行子查询:子查询的结果集时多行

                                  多行操作符:in(在...中)、any(任意一个)、all(所有的)、not in

                                 例子 : 返回其他部门中比job_id为'IT_PROG'部门任一工资低的员工的员工号、姓名、job_id以及salary

                                    分析1:先查询job_id为'IT_PROG'部门任一工资

                                    分析2:查询员工号、姓名、job_id以及salary比分析1的任何员工工资低

                                        select employee_id,last_name,job_id,salary from employees

                                        where salary<any(

                                        select salary from employees where job_id = 'IT_PROG'

                                        );

                            总结:嵌套查询中已知条件是子查询,是在操作符右方的,要查询的内容是父查询,是放在左方的。

                       2):其他功能和函数

                        1:其他功能
                                    伪列:

                                

猜你喜欢

转载自blog.csdn.net/pixiulaozu/article/details/80485301