SQL JOIN
- 上一页 SQL Aliases
- 下一页 SQL Inner 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: 只要其中一个表中存在匹配,就返回行
- 上一页 SQL Aliases
- 下一页 SQL Inner Join