您的位置:首页 > 数据库

数据库学习第五篇(对基本表数据的查询3)

2013-11-04 23:33 381 查看
八、连接查询

        前面的查询都只是涉及一个表,如果我们要查询的数据在多个表上进行,我们就要涉及到连接查询。

a)等值连接

             比如我门要查询读者的所有信息即包括借阅信息和其本身信息

             select 读者.*,借阅.*

             from 读者,借阅

            where 读者.借书证号=借阅.借书证号;

      b) 非等值连接(即所谓的连接符不为'=')

      c) 自身连接(即自身与自身连接)

         例如我们有一张表,表上有选修的学科以及先选修课,现在我们要知道间接先选修课,那么我们就要将其尽心自身连接

         select  first.cno,second.cpno

         from course first,course second              //相当于将一个表命名为first 和 second 两个不同的名字

        where first.cpno=second.cno;

      d) 外连接

          例如查询所有借阅信息,包括罚款信息

          select *

          from 借阅 left outer join 罚款分类 on (借阅.罚款分类号=罚款分类.罚款分类号);

          有时候我们希望消去重复属性

          select *

          from 借阅 left outer join 罚款分类 using (罚款分类号);

      e) 复合条件连接 即有多重限制

            例如:我们要查询即借阅过a书也借阅过b书的人

 九、嵌入查询

     a) 普通的嵌入查询即一个父查询包含一个子查询

     b)带有IN 谓词的子查询

            例如:查询与王菲同性别的读者

            select *

            from 读者

            where 读者.性别 in 

                                       (

                                        select 性别

                                        from 读者

                                        where 姓名='王菲'

                                        );

     c) 带有比较运算符的子查询

     d)带有any 或者 all 的子查询

            (< | > | >= | <= | =)any ( 大于 | 小于 | 大于等于 | 小于等于 | 等于)其中的任意值

             (< | > | >= | <= | =)all   (大于 | 小于 | 大于等于 | 小于等于 | 等于)其中的所有值

     e)带有exists 的子查询

          带有exists的子查询不返回任何数据,只是产生逻辑判断'true' 或者 'false';

             

           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle