MySQL 基础 (三)- 表联结

  • 字符拼接(concatenate)
    例:将表中列名1与 (列名2)拼接在一起,并按列名1 排序

SELECT CONCAT(列名1,’ (’,列名2, ’ )’)
FROM 表名
ORDER BY 列名1;

  • MySQL别名
    列别名
    给原列衍生出来的一列赋予名字

select … AS 新列名
from 表名;

  • 联结(join)
    例:在表1,表2 中 检索 表1中的列2,表2中的列2和列三,将表1与表2中相同的列用=联结起来

SELECT 表1列2,表2列2,表2列3
FROM 表1,表2
WHERE 表1.列名=表2.列名;

表别名 只在查询执行中使用
表名 AS 新表名
注意:要保证所有联结都有WHERE字句

  • 内联结( INNER JOIN)

SELECT 表1列2,表2列2,表2列3
FROM 表1 INNER JOIN 表2
ON 表1.列名=表2.列名;

  • 自联结(self-join)

SELECT c1.列名1,c1.列名2,c1.列名3
FROM 表名1 AS 表名2 AS c2
WHERE c1.列名2=c2.列名2
AND c2.列名3=‘值’;

  • 外联结
  • LEFT JOIN
    获取左表所有记录,即使右表没有对应匹配的记录。
    通过表1和表2的共同列,检索出 表1中的列1 和表2中的列2,包括表2列2没有值但有表1列1有值的记录

SELECT 表1.列1,表2.列2
FROM 表1 LEFT JOIN 表2
ON 表1.列1=表2.列1;

右连接(RIGHT JOIN):
与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

叉联结(CROSS JOIN)
把表A和表B的数据进行一个NM的组合,即笛卡尔积。如本例会产生44=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

SELECT * FROM TableA CROSS JOIN TableB

以上几种方式的区别和联系
MySQL 基础 (三)- 表联结
组合查询(UNION):已进行去重处理的查询
对一个表执行多个查询,按一个查询返回数据。
将多个查询语句用union连接,全部记录返回到一个查询中。
注意:UNION中的每个查询必须包含相同的列、表达式或聚集函数
UNION ALL ——返回所有匹配行,不去重

作业:
MySQL 基础 (三)- 表联结
MySQL 基础 (三)- 表联结