175. Combine Two Tables
Table: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId is the primary key column for this table.
Table: Address
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId is the primary key column for this table.
Write a SQL query for a report that provides the following information for each person in the Person table, regardless if there is an address for each of those people:
FirstName, LastName, City, State
1. 创建数据库,创建表,添加主键和外键:
-- 创建数据库
CREATE DATABASE leetcode;
--
USE leetcode;
-- 创建person表
CREATE TABLE person
(
personid int(10) NOT NULL,
firstname varchar(50) NULL,
lastname varchar(50) NULL
);
-- 创建person表的主键
ALTER TABLE person ADD PRIMARY KEY (personid);
-- 创建Address表
CREATE TABLE address
(
addressid int(10) NOT NULL,
personid int(10) NOT NULL,
city varchar(50) NULL,
state varchar(50) NULL
);
-- 创建address表的主键
ALTER TABLE address ADD primary key (addressid);
-- 创建外键
ALTER TABLE address ADD CONSTRAINT FK_ADDRESS_PERSON foreign key (personid) references person (personid);
2. 添加数据
-- 为表中添加数据
INSERT INTO person(personid, firstname, lastname)
VALUES (1, 'Hong', 'Wang');
INSERT INTO person(personid, firstname, lastname)
VALUES (2, 'Te', 'Bane');
INSERT INTO person(personid, firstname, lastname)
VALUES (3, 'Sing', 'Song');
INSERT INTO person(personid, firstname, lastname)
VALUES (4, 'Yang', 'Zhang');
INSERT INTO person(personid, firstname, lastname)
VALUES (5, 'King', 'Liao');
INSERT INTO address(addressid, personid, city, state)
VALUES (1,1,'Xian','Changan');
INSERT INTO address(addressid, personid, city, state)
VALUES (2,2,'hanzhong','a2');
INSERT INTO address(addressid, personid, city, state)
VALUES (3,3,'shanxi','a3');
INSERT INTO address(addressid, personid, city, state)
VALUES (4,4,'beijing','chaoyang');
INSERT INTO address(addressid, personid, city, state)
VALUES (5,5,'Xian','weiyang');
3. 查询
-- 内联结查询
SELECT firstname, lastname, city, state
FROM person, address
WHERE person.personid = address.personid;
-- 左向外联接查询
SELECT person.firstname, person.lastname, address.city, address.state
FROM person person
left outer join address address using (personid);
显示结果: