MySQL 基础 (三)- 表联结

MySQL别名

SQL允许给表名起别名。主要理由:

  1. 缩短SQL语句
  2. 允许在单条SELECT语句中多次使用相同的表

MySQL 基础 (三)- 表联结_第1张图片

联结

  • INNER JOIN,用于返回两表均包含的数据。
  • LEFT JOIN,从左表返回所有的行,即使右表中没有匹配。如果右表中没有匹配,则结果为NULL。
  • CROSS JOIN,从连接的表返回行的迪卡儿乘积。
  • 自联结,通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。
    SELECT p1.prod_id, p1.prod_name
    FROM products AS p1, products AS p2
    WHERE p1.vend_id = p2.vend_id
    AND p2.prod_id = 'DTNTR';

     

  • UNION,合并两个或多个SELECT语句的结果。内部的每个SELECT语句必须拥有相同数量的列。列必须拥有相似的数据类型。同时,每个SELECT语句中的列的顺序必须相同。

 

项目五:

组合两张表 (难度:简单) 在数据库中创建表1和表2,并各插入三行数据(自己造)

 MySQL 基础 (三)- 表联结_第2张图片

MySQL 基础 (三)- 表联结_第3张图片

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State

SELECT FirstName, LastName,City,State
FROM Person LEFT JOIN Address
ON Person.Personld = Address.Personld;

项目六:

删除重复的邮箱(难度:简单) 编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

MySQL 基础 (三)- 表联结_第4张图片

例如,在运行你的查询语句之后,上面的 email表应返回以下几行:

MySQL 基础 (三)- 表联结_第5张图片

SELECT * 
FROM email
WHERE id in (
SELECT MIN(id) 
FROM email
GROUP BY Email
);

 

你可能感兴趣的:(MySQL)