zoukankan      html  css  js  c++  java
  • Sql Server2008温故而知新系列09:查询-连接查询(join关键字)

    连接,查询的核心;简单的理解就是多表联合查询;

    如:有员工表emp,其中记录了所有员工信息,包含了员工的部门编号,但是没有部门名称;

      有部门表dept,其中记录了所有部门信息,包含部门编号、名称、部门人数、办公地点等;

    现在想查询所有员工姓名及其所有的部门名称,那么仅查询员工表或者仅查询部门表都满足不了;

    这个时候就需要用到多表查询了;

    如上查询简单的查询有两个:

    1 --查询五行记录
    2 select top 5 emp.name,dept.name 
    3     from emp,dept 
    4     where emp.deptid=dept.deptid 
    5     order by emp.name
    6 select top 5 emp.name,dept.name 
    7     from emp
    8     inner join dept on emp.deptid=dept.deptid     --连接依据:过滤掉一些多余的不符合条件的数据(连接产生笛卡尔乘积)
    9     order by emp.name

    这是最基本的内连接:inner join  不过inner通常会略去,直接写成join; 

    当查询语句中有重复的字段名称时,需要用table_name.field_name来区别;也可以用别名来代替表名简化书写。

    上面的查询也可以直接写成:

    select top 5 a.name,b.name from emp a,dept b where a.deptid=b.deptid order by a.name

    select top 5 a.name,b.name from emp a join dept b on a.deptid = b.deptid order by a.name

    结果都是一致的;

     当然了,有内连接,自然有外连接;左连接left outer join,右连接right outer join; 全连接full outer join,outer通常省略;

    不过都大同小异,同时内连接是使用最频繁的;

    附上其它几个连接:

    1、left join :左连接 --> tableA left join tableB [on tableA.field = tableB.field] :查询所得的记录中,如果左表中有不符合(ON条件)的,

      也列举出来,tableB中没有数据以则显示NULL

    2、right join : 右连接 与左连接刚好相反

    3、full join (笛卡尔乘积) 显示左右两个表的所有记录,不符合匹配条件的全部显示NULL,这个用得很少,几乎不怎么用了

    --Ocarina我是一只可爱的小尾巴
  • 相关阅读:
    微信支付之退款
    解决The mysql extension is deprecated and will be removed
    网站域名授权
    PHP 异或 算法
    TCP与UDP的区别
    java基于javaMail实现向QQ邮箱发送邮件
    Servlet的生命周期
    Tomcat容器模型原理
    java转义字符
    web获取URL相关信息
  • 原文地址:https://www.cnblogs.com/azrealer/p/11897346.html
Copyright © 2011-2022 走看看