面试的时候被问到数据库的关联查询,有点懵,现在整理一下。
这里我使用的是mysql数据库进行展示

1. 数据库表格建立与数据导入

CREATE TABLE car_sheet ( id INT NOT NULL, car_name VARCHAR ( 100 ) NOT NULL );
INSERT INTO car_sheet ( id, car_name ) VALUES ( 1, 'baoma' );
INSERT INTO car_sheet ( id, car_name ) VALUES ( 1, 'benchi' );
INSERT INTO car_sheet ( id, car_name ) VALUES ( 2, 'dazhong' );
INSERT INTO car_sheet ( id, car_name ) VALUES ( 2, 'sikeda' );
INSERT INTO car_sheet ( id, car_name ) VALUES ( 3, 'xuefulan' );
CREATE TABLE user_sheet ( id INT NOT NULL, user_name VARCHAR ( 100 ) NOT NULL );
INSERT INTO user_sheet ( id, user_name ) VALUES ( 1, 'xiaohong' );
INSERT INTO user_sheet ( id, user_name ) VALUES ( 2, 'xiaohua' );
INSERT INTO user_sheet ( id, user_name ) VALUES ( 3, 'panghai' );
INSERT INTO user_sheet ( id, user_name ) VALUES ( 4, 'dahai' );

2. 数据库表查询展示

select * from car_sheet;
select * from user_sheet;

image.png

3. left join(左关联)查询

3.1 左边表数据条数少于右边表

select * from user_sheet u left join car_sheet c on u.id=c.id ;

image.png
这里需要说明一下,就是左关联的时候,左表为主表所有的数据都需要显示,右表只是显示符合条件的数据。
但是这里我们看到左表的数据重复显示了,这就说明了当右表中的多条数据对应左表中的一条数据的时候,左表是会重复来对应右表的。
当左表中的数据在右表中没有对应的时候,左表的数据还是会显示,但是右表区域就会显示null。

3.2 左边表数据条数多于右边表

select * from car_sheet c left join user_sheet u on u.id=c.id ;

image.png
如上图所示,我们会发现,右表中的数据如果和左表的数据没有关联的话就不会显示。

4. right join(右连接)查询

与左连接结果相反,参考左连接即可。


周兆东
107 声望21 粉丝

一个java小白的成长之路。。。