Inner join、Left join、Right join和Full join

----Inner join和join是一样的,也称为内连接,表示在表中存在至少一个匹配时,返回行数据,和wehere的使用效果是相同的

原表:

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

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

当我们想要查找出所有有订单信息的客户时:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
where Person.Id_P = Order.Id_P
ORDER BY Persons.LastName

使用内连接时:

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

结果:

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

 

----Left Join:左连接的结果是除了匹配条件的数据还包含左边表中的所有数据

     Right Join:右连接的结果是除了匹配条件的数据还包含右边表中的所有数据

     Full Join:只要其中某个表存在匹配,FULL JOIN 关键字就会返回行,就是不管左右两边的表的行内是否存在数据

     这三者统称为外链接

当我们想要查找所有人的订单情况时:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT 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
Bush George  

当我们想要查找所有的订单情况以及订单的客户信息时:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT 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
    34764

当我们想要查找所有人包括所有的订单信息情况时;

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL 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
Bush George  
    34764
收藏 打印