SQL JOIN

SQL-join käytetään tietojen hakemiseen kahdesta tai useammasta taulusta, jotka ovat yhdistettävissä toisiinsa sarakkeiden välisillä suhteilla.

Join ja avain

Joskus saadaksemme täydellisen tuloksen, meidän täytyy hakea tietoja kahdesta tai useammasta taulusta. Tällöin meidän täytyy suorittaa join.

Tietokannan taulut voidaan yhdistää toisiinsa avaimen avulla. Pääavain (Primary Key) on sarake, jossa jokaisen rivin arvo on yksilöllinen. Taulussa jokaisen pääavain arvo on yksilöllinen. Tämä tehdään siten, että taulujen väliset tiedot voidaan yhdistää ilman, että kaikkia taulujen tietoja tarvitsee toistaa.

Tarkastele "Persons"-taulua:

Id_P LastName FirstName Osoite Kaupunki
1 Adams John Oxford Street Lontoo
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Peking

Huomaa, että "Id_P"-sarakkeessa on Persons-taulun pääavain. Tämä tarkoittaa, että kummassakaan rivissä ei voi olla samaa Id_P. Vaikka kahden henkilön nimet olisivat täysin samat, Id_P voisi erottaa heidät toisistaan.

Seuraavaksi tarkastele "Orders"-taulua:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

Huomaa, että "Id_O"-sarakkeessa on Orders-taulun pääavain, ja "Orders"-taulun "Id_P"-sarakkeessa viitataan "Persons"-taulun henkilöihin ilman heidän tarkkaa nimeä.

注意,"Id_P" 列将上面的两个表联系起来。

引用两个表

我们可以通过引用两个表的方式,从两个表中获取数据:

谁订购了产品,并且他们订购了什么产品?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - 使用 Join

除了上面的方法,我们也可以使用关键词 JOIN 来从两个表中获取数据。

如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

不同的 SQL JOIN

除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行