• 关系代数——连接


    关系代数——连接
    文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://leander.blog.51cto.com/2911819/1094812

    本节主要举例说明连接运算,包括内连接和外连接。 

    连接(或内连接)的结果是由组合两个操作数的匹配元组而形成的元组组成,外连接由这些元组加上通过向一个操作数的未匹配元组扩展上另一个操作数的每个属性的“填充”值而形成的元组组成。

    外连接有三种: 左外连接、右外连接和全外连接。(有时省略“外”字) 

    如果加上又无NULL值,连接和外连接的形式如下图所示:

    下面举例说明各种连接的情况:

    1. mysql> create table Name(id varchar(10), name varchar(10)); 
    2. Query OK, 0 rows affected (0.00 sec) 
    3.  
    4. mysql> create table Address(id varchar(10), address varchar(10)); 
    5. Query OK, 0 rows affected (0.01 sec) 
    6.  
    7. mysql> insert into Name values
    8. -> ('10001','zhangsan'),('10002','lisi'), ('10003','wangwu'); 
    9. Query OK, 3 rows affected (0.00 sec) 
    10. Records: 3  Duplicates: 0  Warnings: 0 
    11.  
    12. mysql> insert into Address values
    13. -> ('10001','Beijing'),('10003','Shanghai'), ('10009','Guangzhou'); 
    14. Query OK, 3 rows affected (0.00 sec) 
    15. Records: 3  Duplicates: 0  Warnings: 0 
    16.  
    17. mysql> select * from Name; 
    18. +-------+----------+ 
    19. | id    | name     | 
    20. +-------+----------+ 
    21. | 10001 | zhangsan | 
    22. | 10002 | lisi     | 
    23. | 10003 | wangwu   | 
    24. +-------+----------+ 
    25. 3 rows in set (0.00 sec) 
    26.  
    27. mysql> select * from Address; 
    28. +-------+-----------+ 
    29. | id    | address   | 
    30. +-------+-----------+ 
    31. | 10001 | Beijing   | 
    32. | 10003 | Shanghai  | 
    33. | 10009 | Guangzhou | 
    34. +-------+-----------+ 
    35. 3 rows in set (0.00 sec)  

    连接或者内连接(inner join)

    1. mysql> select * from Name inner join Address using(id); 
    2. +-------+----------+----------+ 
    3. | id    | name     | address  | 
    4. +-------+----------+----------+ 
    5. | 10001 | zhangsan | Beijing  | 
    6. | 10003 | wangwu   | Shanghai | 
    7. +-------+----------+----------+ 
    8. 2 rows in set (0.00 sec)  

    Left out-join,左外连接

    自然连接∪左侧失配元组(右侧属性补空值)

    1. mysql> select * from Name left join Address using(id); 
    2. +-------+----------+----------+ 
    3. | id    | name     | address  | 
    4. +-------+----------+----------+ 
    5. | 10001 | zhangsan | Beijing  | 
    6. | 10002 | lisi     | NULL     | 
    7. | 10003 | wangwu   | Shanghai | 
    8. +-------+----------+----------+ 
    9. 3 rows in set (0.00 sec) 

    left out-join, B.key is NULL

    1. mysql> select * from Name left join Address using(id) 
    2.     -> where Address.address is NULL; 
    3. +-------+---------+---------+ 
    4. | id    | name    | address | 
    5. +-------+---------+---------+ 
    6. | 10002 | lisi    | NULL    | 
    7. | NULL  | zhaoliu | NULL    | 
    8. +-------+---------+---------+ 
    9. 2 rows in set (0.00 sec) 

    Right out-join ,右外连接

             同左外连接反向

    1. mysql> select * from Name right join Address using(id); 
    2. +-------+-----------+----------+ 
    3. | id    | address   | name     | 
    4. +-------+-----------+----------+ 
    5. | 10001 | Beijing   | zhangsan | 
    6. | 10003 | Shanghai  | wangwu   | 
    7. | 10009 | Guangzhou | NULL     | 
    8. +-------+-----------+----------+ 
    9. 3 rows in set (0.00 sec) 

    Right out-join, A.key is NULL

    1. mysql> select * from Name right join Address using(id) 
    2.     -> where Name.name is NULL; 
    3. +-------+-----------+------+ 
    4. | id    | address   | name | 
    5. +-------+-----------+------+ 
    6. | 10009 | Guangzhou | NULL | 
    7. | NULL  | Wuhan     | NULL | 
    8. +-------+-----------+------+ 
    9. 2 rows in set (0.00 sec) 

    Full out-join,全外连接

             自然连接

             ∪左侧失配元组(右侧属性补空值)

             ∪右侧失配元组(左侧属性补空值) 

    1. mysql> select id, name, address from Name left join Address using(id) 
    2.     -> union 
    3.     -> select id, name, address from Name right join Address using(id); 
    4. +-------+----------+-----------+ 
    5. | id    | name     | address   | 
    6. +-------+----------+-----------+ 
    7. | 10001 | zhangsan | Beijing   | 
    8. | 10002 | lisi     | NULL      | 
    9. | 10003 | wangwu   | Shanghai  | 
    10. | 10009 | NULL     | Guangzhou | 
    11. +-------+----------+-----------+ 
    12. 4 rows in set (0.00 sec)  

    Full join, A.key is NULL or B.key is NULL.

    1. mysql> (select id, name, address from Name left join Address using(id) 
    2.     ->    where Address.address is NULL) 
    3.     -> union 
    4.     -> (select id, name, address from Name right join Address using(id) 
    5.     ->    where Name.name is NULL); 
    6. +-------+---------+-----------+ 
    7. | id    | name    | address   | 
    8. +-------+---------+-----------+ 
    9. | 10002 | lisi    | NULL      | 
    10. | NULL  | zhaoliu | NULL      | 
    11. | 10009 | NULL    | Guangzhou | 
    12. | NULL  | NULL    | Wuhan     | 
    13. +-------+---------+-----------+ 
    14. 4 rows in set (0.00 sec) 

    本文出自 “猫眼看世界” 博客,请务必保留此出处http://leander.blog.51cto.com/2911819/1094812

  • 相关阅读:
    css实现梯形
    CSS3自定义滚动条样式 -webkit-scrollbar
    MySQL-5.6.13免安装版配置方法
    CSS边框长度控制
    The Shapes of CSS(css的形状)
    CSS制作图形速查表
    使用onclick跳转到其他页面/跳转到指定url
    TCP/IP协议
    jQuery实现全选、反选和不选功能
    checkbox在vue中的用法小结
  • 原文地址:https://www.cnblogs.com/hephec/p/4562158.html
Copyright © 2020-2023  润新知