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);
顯示結果: