在sql中表连接方式有left join (左连接);rith join(右连接);inner join(内连接);full join(全连接);union all (上下拼接)union (上下去重拼接)

left join(左连接):

左连接是将左表作为底层表,然后将右侧的表连在上面。

例如:想知道学生的信息以及学生所学的科目

由于学生信息在student_info中 但是学习的科目在student_subject中,因此需要将两张表关联起来,然后查询需要的信息。

select a.student_id, a.student_name, a.student_age, a.student_sex, b.student_subjectfrom (selectstudent_id,student_name,student_age,student_sexfrom student_info )aleft join (stu_id,student_subjectfrom student_subject)b on a.stu_id=b.stu_id

此时a表和b表关联起来后形成一张总表,我们再在最外层选择是a表中的数据还是b表中的数据,如是a表,则写上a.字段名称;b表则写上b.字段名称。如果字段在a,b表其中一个的话可以不用指明是从哪个表里面选取的字段,直接写字段名称即可。但是如果同一个字段在两个或两个以上的表中,那么必须指明是那张表里面的字段。但为了代码规范以及快速查询是那张表里面的字段,最好是写上表名称。

right join(右连接):

左连接是将左表作为底层表,然后将右侧的表连在上面,那么右连接则是将右侧的表作为底层表,然后将左侧的表连在上面。

那么上面左连接的代码也可以写成:

select a.student_id, a.student_name, a.student_age, a.student_sex, b.student_subjectfrom (stu_id,student_subjectfrom student_subject)bright join(selectstudent_id,student_name,student_age,student_sexfrom student_info )a on a.stu_id=b.stu_id

inner join (内连接):

是将两张表里面都有的字段连接起来,如果a表有这个人但是b表没有,那么这条记录将会筛选掉,不会出现。

select a.student_id, a.student_name, a.student_age, a.student_sex, b.student_subjectfrom (stu_id,student_subjectfrom student_subject)binner join(selectstudent_id,student_name,student_age,student_sexfrom student_info )a on a.stu_id=b.stu_id

这里筛选的是stu_id两表都有的,其它字段不影响。

full join(全连接):

跟inner join 相反,只要是a,b表出现过得记录,都被查询出来。不会删除任何数据。

union all (上下拼接):

join 方法是对表的左右连接操作,但是有时我们发现有缺失一些数据条数,我们想把这些数据汇合到一张表里面,那么久可以使用union all

例如:数据库里面有两张学生表,但是student_info 有一些缺失 这些缺失数据在student_info2 中能够找到,因此可以用

selectstudent_id,student_name,student_age,student_sexfrom student_info union allselectstudent_id,student_name,student_age,student_sexfrom student_info2

这样整张表的数据就全了

union (去重上下连接):

union all 虽然能够将两张表连接起来,但是有一些重复的数据,sql中的union是在原表的基础上查看第二张表中的信息是否存在原表中,如果存在那么将不连接,如果不存在,那么这条记录将连接在原表下面

selectstudent_id,student_name,student_age,student_sexfrom student_info unionselectstudent_id,student_name,student_age,student_sexfrom student_info2