• 转 SQL连接查询语句(内、外、交叉和合并查询)



     转 http://blog.csdn.net/u010011371/article/details/50596535

    1、内连接 (INNER JOIN)

      内连接也称自然连接,它是根据两个或多个表中的列之间的关系,从这些表中查询数据。
    注意: 内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
    重点:内连接,只查匹配行。
    语法:(INNER可省略)

    [sql] view plain copy
     
    1. select dishname,dishcode,nums,catename from sn_dish_info inner join sn_dish_category     
    2. on sn_dish_info.cateuuid=sn_dish_category.cateuuid  

    菜品类别表:

    菜品表

    结果表

      这样我们就把两张表中我们想要的数据查出来了。但同时招牌菜这个的数据就丢失了!!不过这对于我们好像不影响我们。我们只要菜品类别下有菜品的数据。

    2、外连接(左,右,全连接)

      外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。通常我们省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。

      在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)。

    (1)左连接

         以左表为基准,结果集保留左表的所有行,对于右表只包含左表匹配的行。如果右表不存在与左表相对应的数据,就将查询结果集合对应的数据字段放入NULL值。

    [sql] view plain copy
     
    1. Select  dishname,dishcode,nums,sn_dish_category.catename as carename     
    2. from sn_dish_info  left join sn_dish_info.cateuuid sn_dish_category.cateuuid  

    结果:

    (2)右连接

         与左连接正好相反。

    [sql] view plain copy
     
    1. Select  dishname,dishcode,nums,sn_dish_category.catename as carename     
    2. from sn_dish_info right join sn_dish_category on sn_dish_info.cateuuid=sn_dish_category.cateuui  

    结果:

    (3)全连接

    将左右两个表中的数据都查询出来,如果两个表中没有相对应的数据,就将该字段放入NULL值。

    [sql] view plain copy
     
    1. Select  dishname,dishcode,nums,sn_dish_category.catename as carename     
    2. from sn_dish_info full join sn_dish_category on sn_dish_info.cateuuid=sn_dish_category.cateuuid    

    3、交叉连接(Cross join)

     交叉连接也称笛卡尔积,是将两个表中的每一条数据都进行组合。

    例:a(a,1),b(2,3,4)     交叉连接后c{(a,2) ,(a,3),(a,4)(1,2),(1,3),(1,4)}

    [sql] view plain copy
     
    1. Select  dishname,dishcode,nums,sn_dish_category.catename as     
    2. carename from sn_dish_info cross join sn_dish_category    


    他和用内连接进行查询的结果一样,就是太慢了,因为它得先进行组合,在进行筛选,导致查询的效率很低。

    4、UNION

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。

     ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

     
    SQL UNION 语法  
      
    SELECT column_name(s) FROM table_name1  
    UNION  
    SELECT column_name(s) FROM table_name2  
      
    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。  
      
    SQL UNION ALL 语法  
      
    SELECT column_name(s) FROM table_name1  
    UNION ALL  
    SELECT column_name(s) FROM table_name2 
    

      

     
  • 相关阅读:
    东软中标清华大学一站式服务平台项目
    抢占DevOps制高点,东软UniEAP&SaCa平台强势崛起
    智慧监狱来了!SaCa EMM 助推现代监狱建设迈上新台阶
    移动金融办公威胁不断,这些坑千万别跳!
    比悲伤更悲伤的故事,那就是...
    这还是你见过的大学实验室吗?
    越智能?越危险?技术到底应不应该进步?
    新一代的IT实验室长啥样?
    产品“佩奇”闹元宵,新春点亮新网站
    危机四伏的千亿级金融放贷市场,我们能做什么?
  • 原文地址:https://www.cnblogs.com/dare/p/7131205.html
Copyright © 2020-2023  润新知