zoukankan      html  css  js  c++  java
  • 多表查询

    外键是作为与主表的主键相关联的键值,外键可以有多个,同时有外键的表称作对应主键所在表的从表,那主键所在的表就作主表。图中,tid是教师表中id的外键,也就学生表是教师表的从表,同理,教师表也就是院系表的从表。
      外键的主要作用是保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
     

    思考题:要求查询出每个雇员的编号,姓名,工资,部门名称,工资所在公司的工资等级
    --第一步确定所需要的表,以及表中字段
      --emp,dept,salgrade
      --emp:雇员编号,姓名,工资
      --dept: 部门名称
      --salgrade: 工资等级
    
    --第二步确定表的关联字段
      --emp.deptno=dept.deptno
      --emp.sal between salgrade.losal and salgrade.hisal
    
    --第三步:查询每个雇员的信息
    select e.empno,e.ename,e.sal from emp e
    
    --第四步:为查询引入部门信息,并添加消除笛卡尔积的条件
    
    select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno
    
    --第五步:为查询引入工资等级信息,并添加消除笛卡尔积德条件
    
    select e.empno,e.ename,e.sal,d.dname,s.grade from emp e,dept d,salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal

    交叉连接(cross join):用于产生笛卡尔积(笛卡尔积本身并不是属于无用的内容,在某些情况下还是需要使用的)

       select * from emp cross join dept; 

    b、自然连接(natural join):自动找到匹配的关联字段,消除掉笛卡尔积

       select * from emp natural join detp 

    但是并不是所有的字段都是关联字段,设置关联字段需要通过约束指定;

    c、join using子句:用户自己指定一个消除笛卡尔积的关联字段

       select * from emp join dept using(deptno); 

    d、join ... on子句:用户自己指定一个可以消除笛卡尔积德关联条件

      select * from emp join dept on(emp.deptno=dept.deptno);  

    e、连接方向的改变:

      左(外)连接: left outer join ...on;

      右(外)连接: right outer join ...on;

      全(外)连接: full outer join ...on;

       select * from emp right outer join dept on(emp.deptno=dept.deptno); 

  • 相关阅读:
    Intellijidea建javaWeb以及Servlet简单实现
    PHP关于文件与文件夹(1) 写入文件 文件权限 三、锁定文件
    mysql 时间戳格式化函数from_unixtime使用说明
    Ansible 2.0公布
    如何获取板子上独有的ID号EXYNOS4412/Imx6ul【转】
    2.7 xargs和exec详解【转】
    __setup 在内核中的作用【转】
    Linux __setup解析【转】
    c语言中 %p的含义【转】
    函数 devm_kzalloc()【转】
  • 原文地址:https://www.cnblogs.com/fy02223y/p/7197659.html
Copyright © 2011-2022 走看看