[关闭]
@AlexWuYh 2019-10-31T09:04:50.000000Z 字数 5318 阅读 93

MySQL Joins的用法

MySQL




  1. Table: Person
  2. +----+-----------+----------+
  3. | Id | FirstName | LastName |
  4. +----+-----------+----------+
  5. | 1 | Zhang | San |
  6. | 2 | Li | Si |
  7. | 3 | Wang | Wu |
  8. +----+-----------+----------+
  9. Table: Address
  10. +--------+------+----------+-----------+
  11. | AddrId | Id | City | Province |
  12. +--------+------+----------+-----------+
  13. | 1 | 1 | Beijing | Beijing |
  14. | 2 | 2 | Shanghai | Shanghai |
  15. | 5 | 5 | Shenzhen | Guangdong |
  16. +--------+------+----------+-----------+

INNER JOIN (简单连接)

  1. SELECT columns
  2. FROM table1
  3. INNER JOIN table2
  4. ON table1.column = table2.column;

inner_join

  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. INNER JOIN Address
  4. ON Person.Id = Address.Id;
  5. // 执行结果如下:
  6. +----+-----------+----------+----------+----------+
  7. | Id | FirstName | LastName | City | Province |
  8. +----+-----------+----------+----------+----------+
  9. | 1 | Zhang | San | Beijing | Beijing |
  10. | 2 | Li | Si | Shanghai | Shanghai |
  11. +----+-----------+----------+----------+----------+
  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person, Address
  3. WHERE Person.Id = Address.Id;

LEFT OUTER JOIN (LEFT 外连接)

  1. SELECT columns
  2. FROM table1
  3. LEFT [OUTER] JOIN table2
  4. ON table1.column = table2.column;

left_outer_join

  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. LEFT OUTER JOIN Address
  4. ON Person.Id = Address.Id;
  5. // 执行结果如下:
  6. +----+-----------+----------+----------+----------+
  7. | Id | FirstName | LastName | City | Province |
  8. +----+-----------+----------+----------+----------+
  9. | 1 | Zhang | San | Beijing | Beijing |
  10. | 2 | Li | Si | Shanghai | Shanghai |
  11. | 3 | Wang | Wu | NULL | NULL |
  12. +----+-----------+----------+----------+----------+

RIGHT OUTER JOIN (RIGHT 外连接)

  1. SELECT columns
  2. FROM table1
  3. RIGHT [OUTER] JOIN table2
  4. ON table1.column = table2.column;

right_outer_join

  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. RIGHT OUTER JOIN Address
  4. ON Person.Id = Address.Id;
  5. // 执行结果如下:
  6. +------+-----------+----------+----------+-----------+
  7. | Id | FirstName | LastName | City | Province |
  8. +------+-----------+----------+----------+-----------+
  9. | 1 | Zhang | San | Beijing | Beijing |
  10. | 2 | Li | Si | Shanghai | Shanghai |
  11. | NULL | NULL | NULL | Shenzhen | Guangdong |
  12. +------+-----------+----------+----------+-----------+

FULL OUTER JOIN (FULL 外连接)

  1. SELECT columns
  2. FROM table1
  3. LEFT OUTER JOIN table2
  4. ON table1.columns = table2.columns
  5. UNION
  6. SELECT columns
  7. FROM table1
  8. RIGHT OUTER JOIN table2
  9. ON table1.columns = table2.columns;

full_outer_join

  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. LEFT OUTER JOIN Address
  4. ON Person.Id = Address.Id
  5. UNION
  6. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  7. FROM Person
  8. RIGHT OUTER JOIN Address
  9. ON Person.Id = Address.Id;
  10. // 执行结果如下:
  11. +------+-----------+----------+----------+-----------+
  12. | Id | FirstName | LastName | City | Province |
  13. +------+-----------+----------+----------+-----------+
  14. | 1 | Zhang | San | Beijing | Beijing |
  15. | 2 | Li | Si | Shanghai | Shanghai |
  16. | 3 | Wang | Wu | NULL | NULL |
  17. | NULL | NULL | NULL | Shenzhen | Guangdong |
  18. +------+-----------+----------+----------+-----------+
  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. LEFT OUTER JOIN Address
  4. ON Person.Id = Address.Id
  5. UNION ALL
  6. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  7. FROM Person
  8. RIGHT OUTER JOIN Address
  9. ON Person.Id = Address.Id;
  10. // 执行结果如下:
  11. +------+-----------+----------+----------+-----------+
  12. | Id | FirstName | LastName | City | Province |
  13. +------+-----------+----------+----------+-----------+
  14. | 1 | Zhang | San | Beijing | Beijing |
  15. | 2 | Li | Si | Shanghai | Shanghai |
  16. | 3 | Wang | Wu | NULL | NULL |
  17. | 1 | Zhang | San | Beijing | Beijing |
  18. | 2 | Li | Si | Shanghai | Shanghai |
  19. | NULL | NULL | NULL | Shenzhen | Guangdong |
  20. +------+-----------+----------+----------+-----------+

CROSS JOIN (笛卡尔积)

  1. SELECT columns
  2. FROM table1
  3. CROSS JOIN table2;
  1. SELECT Person.Id, Person.FirstName, Person.LastName, Address.City, Address.Province
  2. FROM Person
  3. CROSS JOIN Address;
  4. // 执行结果如下:
  5. +----+-----------+----------+----------+-----------+
  6. | Id | FirstName | LastName | City | Province |
  7. +----+-----------+----------+----------+-----------+
  8. | 1 | Zhang | San | Beijing | Beijing |
  9. | 1 | Zhang | San | Shanghai | Shanghai |
  10. | 1 | Zhang | San | Shenzhen | Guangdong |
  11. | 2 | Li | Si | Beijing | Beijing |
  12. | 2 | Li | Si | Shanghai | Shanghai |
  13. | 2 | Li | Si | Shenzhen | Guangdong |
  14. | 3 | Wang | Wu | Beijing | Beijing |
  15. | 3 | Wang | Wu | Shanghai | Shanghai |
  16. | 3 | Wang | Wu | Shenzhen | Guangdong |
  17. +----+-----------+----------+----------+-----------+
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注