mysql的连接方式主要分为横向合并和纵向合并,本文将分别进行讲解:
1. 横向合并
1.1 MySQL内连接
MySQL的内连接使用inner join on,它的效果跟使用where是一样的,如果联结的是两个表,那么需要左右的条件或者说字段是需要完全匹配的。
SELECT <select_list> FROM A
INNER JOIN B ON A.Key = B.Key;
另一种写法:
select <select_list> from A,B
where A.Key = B.Key

1.2 MySQL外连接
mysql外连接包括左连接和右连接,二者连接方式相同,区别是选取的主表不一样。
1.2.1左连接:
两个表进行左连接时会返回左边表中的所有的行和右边表中与之相匹配的列值没有相匹配的用空值代替。
SELECT <select_list> FROM A
LEFT JOIN B ON A.Key = B.Key;

(A:主表出所有行;B:附表出匹配行,总行数为A*B行)
1.2.2 右连接:
两个表进行右连接时会返回右边表中的所有的行和左边表中与之相匹配的列值没有相匹配的用空值代替。
SELECT <select_list> FROM A
RIGHT JOIN B ON A.Key = B.Key;

2 纵向合并
联合查询
union: 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
例: 用union合并t1与t2表
select t1.* from t1
union
select t2.* from t2;
union all:用于合并两个或多个 SELECT 语句的结果集,保留重复行。
例: 用union all合并t1与t2表
select t1.* from t1
union all
select t2.* from t2;
注:
1. 如果连接具有相同列名称的多个表,则必须在SELECT和ON子句中使用表名标注,以避免列错误。
例如,如果t1和t2表都具有名为c的一个相同列名,则必须在SELECT和ON子句中使用表限定符,如使用t1.c或t2.c指定引用是那个表中的c列。
2. 为了节省书写表名的时间,可以在查询中使用表别名。 例如,可以将表名称verylonglonglong_tablename使用表别名t,然后使用t.column引用其列。



雷达卡




京公网安备 11010802022788号







