SQL join 语句

实例数据

id name    id name

-- ----      -- ----

1 Pirate    1 Rutabaga

2 Monkey    2 Pirate

3 Ninja     3 Darth Vader

4 Spaghetti 4 Ninja

 

1、内联合(inner join)

SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

-- ---- -- ----

1 Pirate 2 Pirate

3 Ninja 4 Ninja

   

只生成同时匹配表A和表B的记录集。(如下图)

 

SQL join 语句

2、全外联合(full outer join)

SELECT * FROM TableA

FULL OUTER JOIN TableB

ON TableA.name = TableB.name

 

id name id name

-- ---- -- ----

1 Pirate 2 Pirate

2 Monkey null null

3 Ninja 4 Ninja

4 Spaghetti null null

null null 1 Rutabaga

null null 3 Darth Vader

 

生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。(如下图)

 

SQL join 语句

 

3、左外联合(left outer join)

SELECT * FROM TableA

LEFT OUTER JOIN TableB

ON TableA.name = TableB.name

 

id name id name

-- ---- -- ----

1 Pirate 2 Pirate

2 Monkey null null

3 Ninja 4 Ninja

4 Spaghetti null null

 

生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。(如下图)

 

SQL join 语句

为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。(如下图)

SELECT * FROM TableA

LEFT OUTER JOIN TableB

ON TableA.name = TableB.name

WHERE TableB.id IS null

id name id name

-- ---- -- ----

2 Monkey null null

4 Spaghetti null null

SQL join 语句

4、全外联合

SELECT * FROM TableA

FULL OUTER JOIN TableB

ON TableA.name = TableB.name

WHERE TableA.id IS null

OR TableB.id IS null

 

id name id name

-- ---- -- ----

2 Monkey null null

4 Spaghetti null null

null null 1 Rutabaga

null null 3 Darth Vader

为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。(如下图)

SQL join 语句


SQL join 语句

 

转载于:https://www.cnblogs.com/atwanli/articles/4899151.html