SQL裏各種聯合查詢總結

 轉自:http://www.2cto.com/database/201208/149044.html

SQL裏各種聯合查詢總結

 
  1.  create database mytest  
  2. go  www.2cto.com    
  3. use mytest  
  4. go  
  5. create table t_dept  
  6. (  
  7.  d_id int primary key identity(1,1),  
  8.  d_name varchar(20),  
  9.  d_remark varchar(20)  
  10. )  
  11. go  
  12. create table t_emp  
  13. (  
  14.  e_id int primary key identity(1,1),  
  15.  d_id int references t_dept(d_id),  
  16.  e_name varchar(20),  
  17.  e_sex varchar(4)  
  18. )  
  19. go  www.2cto.com    
  20. insert into t_dept values('一部','1111');  
  21. insert into t_dept values('二部','2222');  
  22. insert into t_dept values('三部','3333');  
  23. insert into t_dept values('四部','4444');  
  24. go  
  25. insert into t_emp values(1,'一部A君','男');  
  26. insert into t_emp values(1,'一部B君','男');  
  27. insert into t_emp values(2,'二部C君','女');  
  28. insert into t_emp values(null,'三部D君','男');  
  29. go  
  30. select * from t_dept;  
  31. select * from t_emp;  
  32. go  
  33. --注:聯接查詢,哪個表在前,就以哪個表爲主表  
  34.    
  35. --內聯接(兩表標識號相同的所有行)  
  36. select * from t_dept a inner join t_emp b on a.d_id=b.d_id ;  
  37. 1 一部 1111 1 1 一部A君 男  
  38. 1 一部 1111 2 1 一部B君 男  
  39. 2 二部 2222 3 2 二部C君 女  
  40.    
  41. --外連接(外聯接可以是左向外聯接、右向外聯接或完整外部聯接)  
  42.    
  43. --(1)  
  44. select * from t_dept a left outer join t_emp b on a.d_id=b.d_id ;--"左外連接  等同於  左連接"  
  45. select * from t_dept a left join t_emp b on a.d_id=b.d_id ;--左連接(所有的部門顯示,員工表裏部門id爲null的顯示不出來)  
  46.    
  47. 1 一部 1111 1 1 一部A君 男  
  48. 1 一部 1111 2 1 一部B君 男  
  49. 2 二部 2222 3 2 二部C君 女  
  50. 3 三部 3333 NULL NULL NULL NULL 
  51. 4 四部 4444 NULL NULL NULL NULL 
  52.   www.2cto.com    
  53. --(2)  
  54. select * from t_dept a right outer join t_emp b on a.d_id=b.d_id ;--"右外連接  等同於  右連接"  
  55. select * from t_dept a right join t_emp b on a.d_id=b.d_id ;--右連接,員工表所有員工顯示,"三部"和"四部"沒有員工的部門則該部門不顯示  
  56. 1 一部 1111 1 1 一部A君 男  
  57. 1 一部 1111 2 1 一部B君 男  
  58. 2 二部 2222 3 2 二部C君 女  
  59. NULL NULL NULL 4 NULL 三部D君 男  
  60.    
  61. --(3)  
  62. --完整外部聯接,返回左表和右表中的所有行  
  63. --當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。     
  64. select * from t_dept a full outer join t_emp b on a.d_id=b.d_id ;  
  65. select * from t_dept a full join t_emp b on a.d_id=b.d_id ;  
  66.    
  67. 1 一部 1111 1 1 一部A君 男  
  68. 1 一部 1111 2 1 一部B君 男  
  69. 2 二部 2222 3 2 二部C君 女  
  70. 3 三部 3333 NULL NULL NULL NULL 
  71. 4 四部 4444 NULL NULL NULL NULL 
  72. NULL NULL NULL 4 NULL 三部D君 男  
  73.    
  74. --笛卡爾積  
  75. select * from t_emp,t_dept  
  76. select * from t_dept,t_emp  
  77. --返回16條數據,左表有4條,右表有4條,返回行數爲4*4=16(條),產生笛卡爾積  
  78.   www.2cto.com    
  79. 1 一部 1111 1 1 一部A君 男  
  80. 2 二部 2222 1 1 一部A君 男  
  81. 3 三部 3333 1 1 一部A君 男  
  82. 4 四部 4444 1 1 一部A君 男  
  83. 1 一部 1111 2 1 一部B君 男  
  84. 2 二部 2222 2 1 一部B君 男  
  85. 3 三部 3333 2 1 一部B君 男  
  86. 4 四部 4444 2 1 一部B君 男  
  87. 1 一部 1111 3 2 二部C君 女  
  88. 2 二部 2222 3 2 二部C君 女  
  89. 3 三部 3333 3 2 二部C君 女  
  90. 4 四部 4444 3 2 二部C君 女  
  91. 1 一部 1111 4 NULL 三部D君 男  
  92. 2 二部 2222 4 NULL 三部D君 男  
  93. 3 三部 3333 4 NULL 三部D君 男  
  94. 4 四部 4444 4 NULL 三部D君 男 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章