项目5:组合两张表 (难度:简单)
在数据库中创建表1和表2,并各插入三行数据(自己造)
表1: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId 是上表主键
-- 创建person表并插入数据
-- 创建表 CREATE TABLE person ( personid int(11) NOT NULL, firstName varchar(50) NOT NULL, lastName varchar(50) NOT NULL, PRIMARY KEY (`personid`)) ; -- 插入数据 INSERT INTO `person` VALUES ('1', 'xiao', 'ming'); INSERT INTO `person` VALUES ('2', 'xiao', 'hei'); INSERT INTO `person` VALUES ('3', 'xiao', 'long'); INSERT INTO `person` VALUES ('4', 'xiao', 'hong'); INSERT INTO `person` VALUES ('5', 'xiao', 'lei');
表2: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------
AddressId 是上表主键
-- 创建address表并插入数据
-- 创建表 CREATE TABLE address ( addressId int(11) NOT NULL, personId int(11) NOT NULL, city varchar(255) NOT NULL, state varchar(255) NOT NULL, PRIMARY KEY ('addressId')) ; -- 插入数据 INSERT INTO address VALUES ('1', '1', 'hangzhou', 'zhejiang'); INSERT INTO address VALUES ('2', '3', 'shenzheng', 'guangdong'); INSERT INTO address VALUES ('3', '4', 'shijiazhuang', 'hebei'); INSERT INTO address VALUES ('4', '5', 'heifei', 'anhui');
编写一个 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