前言:
数据库的多表记录查询,在执行过程中出现的问题。。。
首先创建的两张数据表 tb_worker和tb_department。
普通内连接查询
根据两张表中的相同字段id来连接两张表:
select name,sex,hobby,score,d_name,manager,work_num from tb_worker inner join tb_department on tb_worker.id=tb_department.id;
在操作时容易出现的情况:
1:查询字段中出现了两张表中相同的字段:
select id,name,sex,hobby,score,d_name,manager,work_num from tb_worker inner join tb_department on tb_worker.id=tb_department.id;
比如,两张表中都有id字段,查询时如果要查询这个id字段的话,数据库就不知道应该返回哪一张数据表中的id 字段,就会返回错误。
2:可以根据需要返回怎样的数据来输入指定的字段:
select hobby,score,d_name,manager,work_num from tb_worker inner join tb_department on tb_worker.id=tb_department.id;
我们和第二张图片对比可以发现,如果我们不想返回name、sex这两个字段的内容,就可以不输入这两个字段。
3:假如我们的字段和后面输入的表名称时不对应的,会有怎样的结果:
select hobby,score,d_name,manager,work_num from tb_department inner join tb_worker on tb_worker.id=tb_department.id;
这里我们可以看到,如果不对应也是可以返回相同的值的,一般情况下我们都是相对应着写。
自连接查询
自连接查询其实就是把同一张表的数据当成两张不同的表中的数据,然后分别给这两张新的表起个别名,作为新表的名称。
select t1.id,t1.name,t1.sex,t2.score from tb_worker as t1 inner join tb_worker as t2 on t1.id=t2.id and t2.score>9.1;
外连接查询 ——左连接查询
1:我们让tb_worker 作为左表,然后进行查询:
select tb_worker.id,tb_worker.name,tb_worker.sex,tb_department.d_name,tb_department.manager from tb_worker left join tb_department on tb_worker.id=tb_department.id;
我们以tb_worker为左表,那么左表就是查询过程中的基表,左表需要查询的字段会保留 , 另一张表中的数据如果不符合连接条件的话就会返回空值NULL。
2:如果我们把左表改成tb_department ,就会出现这样的结果,不会返回空值。
右连接查询
右连接查询将右表作为基表,这里我们将tb_worker 作为右表进行查询:
select tb_worker.id,tb_worker.name,tb_worker.sex,tb_worker.hobby,tb_department.d_name, tb_department.manager,tb_department.work_num from tb_department right join tb_worker on tb_department.id=tb_worker.id;
同样,我们让tb_department 作为右表,来看一下结果:
由此可见,假如让这两张表中id字段少的作为基表,那么返回值就不会有空值。