38.笔记 MySQL学习——使用连接实现多表连接

来源:互联网 发布:苏州中移软件 编辑:程序博客网 时间:2024/06/06 10:52

38.笔记 MySQL学习——使用连接实现多表连接

与SQL语言中其他语句相比,SELECT语句时最常用,也是最不容易掌握的。

MYSQL的SELECT语句基本语法如下:

SELECT select_list

FROM table_list

WHERE row_contraint

GROUP BY grouping_columns

ORDER BY sorting_columns

HAVING group_constraint

LIMIT count;

MYSQL 不要求必须有FROM 子句。

1.  内连接

使用INNER JOIN来隔开多个表的名字,就进行了内连接

例如:

SELECT * FROM T1 INNER JOIN T2;

这样得到的是笛卡尔积

可以通过WHERE子句进行限定,如下

SELECT T1.*,T2.* FROM T1 INNER JOIN T2WHERE T1.I1=T2.I2;

此外CROSS JOIN 和JOIN 以及逗号都等同于INNER JOIN。

2.  对列进行限定

当一个表中出现相同的列名的时候,需要通过表名来解决可能产生的歧义。

如果需要进行自连接的话,需要使用别名来解决问题。

3.  左连接

内连接只会显示在两个表里都匹配上的行。

外连接可以把其中一个表在另一个表里没有匹配的行也显示出来。

左连接的话,当左表的某行在右表里无匹配时,仍然会被选取为一个输出行。

右连接相反。

创建两个表如下:

mysql> create table t1 (i1 int,c1 varchar(10));

Query OK, 0 rows affected (0.01 sec)

 

mysql> create table t2 (i2 int,c2 varchar(10));

Query OK, 0 rows affected (0.01 sec)

插入数据如下:

mysql> insert into t1 values ( 1, 'a');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into t1 values ( 2, 'b');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into t1 values ( 3, 'c');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into t2 values ( 2, 'c');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into t2 values ( 3, 'b');

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into t2 values ( 4, 'a');

Query OK, 1 row affected (0.01 sec)

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

内连接如下:

mysql> select t1.*,t2.* from t1 inner join t2 ont1.i1=t2.i2;

+------+------+------+------+

| i1  | c1   | i2   | c2  |

+------+------+------+------+

|   2 | b    |    2 | c   |

|   3 | c    |    3 | b   |

+------+------+------+------+

2 rows in set (0.01 sec)

左连接如下:

mysql> select t1.*,t2.* from t1 left join t2 ont1.i1=t2.i2;

+------+------+------+------+

| i1  | c1   | i2   | c2  |

+------+------+------+------+

|   2 | b    |    2 | c   |

|   3 | c    |    3 |b    |

|   1 | a    | NULL | NULL |

+------+------+------+------+

3 rows in set (0.00 sec)

只想将左表里哪些在右表里无匹配的行找出来时,LEFT JOIN非常有用。

如下:

mysql> select t1.*,t2.* from t1 left join t2 ont1.i1=t2.i2 where t2.i2 is null;

+------+------+------+------+

| i1  | c1   | i2   | c2  |

+------+------+------+------+

|   1 | a    | NULL | NULL |

+------+------+------+------+

1 row in set (0.00 sec)

可以通过ON子句或USING()子句指定匹配条件。USING子句要求被连接的列必须有相同的名字。

NATURAL LEFT JOIN类似于LEFT JOIN。会按照LEFT JOIN规则对左右两个表所有同名的列进行匹配。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击