在面试的过程中,我们经常会碰到关于数据库的一些问题,其中出现频率比较高的有关于sql的左连接、内连接、外连接等问题,那么让我们来看看这些连接的具体信息。
首先,我们新建两张数据表,USER_A和USER_B,简单的建表语句如下:
CREATE TABLE USER_A ( id INT NOT NULL, username VARCHAR(255), age INT ) CREATE TABLE USER_B ( id INT NOT NULL, username VARCHAR(255), age INT )
现在,我们向这两张表中插入一些数据:
insert into USER_A VALUES(1,"AA1",21); insert into USER_A VALUES(2,"AA2",22); insert into USER_A VALUES(3,"AA3",23); insert into USER_B VALUES(1,"BB1",11); insert into USER_B VALUES(2,"BB2",12);
插入完成后,USER_A和USER_B表如下:
1、左连接:
左连接又称为左外连接,其关键字为LEFT JOIN 或者 LEFT OUTER JOIN,其是以左边的表的数据为基准,若左表有数据右表没有数据,则显示左表中的数据,右表中的数据显示为空。
select * from USER_A LEFT JOIN USER_B ON USER_A.id = USER_B.id;
运行结果:
分析:从上述运行结果可以看出,左连接查询之后,左表USER_A数据全部显示,右表USER_B对应的也将会显示,在id=3时,由于右表无id=3的记录,所以右表的数据将全部已null值代替。
2、右连接
右连接又称为右外连接,其关键字为RIGHT JOIN 或者 RIGHT OUTER JOIN,其是以右边的表的数据为基准,若右表有数据左表没有数据,则显示右表中的数据,左表中的数据显示为空。
select * from USER_A RIGHT JOIN USER_B ON USER_A.id = USER_B.id;
运行结果:
分析:右外连接是以右表USER_B为基准,此时右表中没有左表USER_A中的id=3这条记录,故这条记录将不会被查询显示到虚表中。
3、内连接
内连接包括自然连接和相等连接,其关键字为INNER JOIN,内连接使用比较运算符根据每个表共有的列的值匹配两个表中的记录。
select * from USER_A INNER JOIN USER_B ON USER_A.id = USER_B.id;
运行结果: