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