zoukankan      html  css  js  c++  java
  • oracle数据库的连接

    连接是二元运算,可以对两个或多个表进行查询,结果通常是含有参加连接运算的两个或多个表的指点列的表

    在SQL中,连接有两大类表示形式,一是符合SQL标准连接谓词(where)的表达形式,二是oracle扩展的使用关键字JION的表达形式。

    1.连接谓词

    可以在select语句的where子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。

    --查找数据库每个班的学生信息。
    select 
    * 
    from 
    school_students,school_class
    where stu_class=class_id;

    连接谓词中的两个列(字段)称为连接字段,它们必须是可比的,连接谓词的比较符可以是<,<=,=,>,>=,!=和<>,当比较符为=是就是等值连接,若在目标列中去除相同的字段名,则为自然连接。

    --查找选修了100014课程且成绩在70分以上的学生姓名及成绩。
    select
    stu_name 姓名,
    result_number 成绩 
    from
    school_students,
    school_result
    where 
    result_stu=stu_id
    and result_course='100014'
    and result_number>=70;

    连接和子查询可能都要涉及两个或多个表,区别是:连接可以合并两个或多个表,而带子查询的select语句的结果只能来自一个表。子查询的结果是用来作为选择结果数据时进行参照的。

    --查找选修了“数据库技术及应用”课程且成绩在70分以上的学生学号、姓名、---课程名及成绩。
    select
    stu_id 学号,
    stu_name 姓名,
    course_name 课程名,
    result_number 成绩
    from
    school_students,
    school_course,
    school_result
    where
    stu_id=result_stu
    and course_id=result_course
    and course_name='数据库技术及应用'
    and result_number>=70;

    2.以JOIN关键字指定的连接

    oracle的PL/SQL语句扩展以jion关键字指定连接的表示方法,增强了表的连接运算能力。

    内连接:按照On所指定的连接条件合并两个表,返回满足条件的行

    --查找数据库每个班的学生信息。
     select
    *
    from
    school_students
      join school_class
        on class_id=stu_class
    ;

    内连接还可以用于连接多个表的连接

    --查找选修了100014课程且成绩在70分以上的学生姓名及成绩。
     select
    stu_name 姓名,
    result_number 成绩
    from
    SCHOOL_STUDENTS
      join school_result
        on stu_id=result_stu
      where 
      result_course='100014'
      and result_number>=70;

    外连接:外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。

    外连接包括三种:

    1 左外链接:结果表中除了包括满足连接条件的行外,还包括左表的所有行

    --查找所有班级学生情况及,若班级没有学生,也要显示其情况。
    select
    class_name,stu_name
    from
    SCHOOL_CLASS
      left join  school_students
      on stu_class=class_id;

    2 右外链接:结果表中除了包括满足连接条件的行外,还包括右表的所有的行

    --查找所有班级学生情况及,学生没有班级,也要显示其情况。
    select
    class_name,stu_name
    from
    SCHOOL_CLASS
      right join  school_students
      on stu_class=class_id;

    3 完全链接:结果表除了包括满足连接条件的行外,还包括两个表的所有行

    4.交叉连接:交叉连接实际上是将两个表进行笛卡尔积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表行数之积。

    --列出学生所有可能的选课情况。
    select
    class_name,stu_name
    from
    SCHOOL_CLASS
      cross join  school_students
    ;

    注意:交叉连接也可以使用where子句进行条件限定

  • 相关阅读:
    设计模式之策略模式
    设计模式之简单工厂模式
    UML 之关系
    C# delegate (001)
    转: 编写高质量代码改善C#程序的157个建议
    通过配置数据库邮件实现发送邮件
    存储过程学习(004)--象写程序一样的写存储过程及调试
    存储过程学习(003)--象写程序一样的写存储过程及调试
    存储过程学习(002)--循环插入数据
    jQ新的事件绑定方法on()
  • 原文地址:https://www.cnblogs.com/zhangpichun-7/p/13166289.html
Copyright © 2011-2022 走看看