MySQL基础3-表联结

1、mysql别名

MySQL在查询数据时,可以为表和字段取别名,这个别名可以代替其指定的表和字段

SELECT * FROM 表名 [AS] 别名; 为表取别名

SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,……] FROM 表名; 为 字段取别名

MySQL基础3-表联结

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表,表结构如下:

MySQL基础3-表联结

接着插入以下数据

MySQL基础3-表联结

 

要求编写一个 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;

MySQL基础3-表联结

 

2、编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

创建如下表

MySQL基础3-表联结

插入如下数据

MySQL基础3-表联结

DELETE e1
    FROM email e1, email e2
    WHERE e1.Email = e2.Email
    AND e1.Id > e2.ID;

MySQL基础3-表联结