MySQL基础3-表联结
1、mysql别名
MySQL在查询数据时,可以为表和字段取别名,这个别名可以代替其指定的表和字段
SELECT * FROM 表名 [AS] 别名; 为表取别名
SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,……] FROM 表名; 为 字段取别名
SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。语法如下
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的。
SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。
SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
CROSS JOIN又称为笛卡尔乘积,实际上是把两个表乘起来。
SELECT * FROM [TABLE 1] CROSS JOIN [TABLE 2]
SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
实践时间:
1、在数据库中创建Person表和Address表,表结构如下:
接着插入以下数据
要求编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
select Person.FirstName,Person.LastName,Address.City,Address.State
from Person
left join
Address on Person.PersonId = Address.PersonId
order by Person.FirstName;
2、编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
创建如下表
插入如下数据
DELETE e1
FROM email e1, email e2
WHERE e1.Email = e2.Email
AND e1.Id > e2.ID;