SQL架构
Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255))
Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255))
Truncate table Person
insert into Person (PersonId, LastName, FirstName) values ('1', 'Wang', 'Allen')
Truncate table Address
insert into Address (AddressId, PersonId, City, State) values ('1', '2', 'New York City', 'New York')
表一:person
列名 | 类型 |
---|---|
PersonId | int |
FirstName | varchar |
LastName | varchar |
PersonId 是上表主键
表二:Address
列名 | 类型 |
---|---|
AddressId | int |
PersonId | int |
City | varchar |
State | varchar |
AddressId 是上表主键
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
FirstName, LastName, City, State
运行过程:
SELECT P.FirstName,
P.LastName,
A.City,
A.State
FROM Person P
LEFT JOIN Address A ON P.PersonId = A.PersonId
知识点:
oracle中的连接可分为,内连接(inner join)、外连接(outer join)、全连接(full join),不光是Oracle,其他很多的数据库也都有这3种连接查询方式
通俗地说,打个比方。
SELECT * FROM A inner join B ON A.F1 = B.F1, 内连接,显示的查询结果,就是查询条件A 的必须等于B的数据;
SELECT * FROM A left join B ON A.F1 = B.F1 ,左连接,显示的查询结果,就是左边表的全部,和右边表的符合查询条件的数据。
还有一个right jion , SELECT * FROM A right join B ON A.F1 = B.F1 ,右连接,显示的查询结果,是右边表的全部,和左边表的符合查询条件的数据。