关于SQL语句的多表连接查询

附件为mysql、mssqlserver和oracle的建表脚本

# 多表连接查询

# SQL92
# 笛卡尔积
select * from student_table s, teacher_table t;
# 等值连接 =
select * from student_table s, teacher_table t where s.java_teacher = t.teacher_id;
# 非等值连接 > <
select * from student_table s, teacher_table t where s.java_teacher > t.teacher_id;
select * from student_table s, teacher_table t where s.java_teacher < t.teacher_id;
# 多条件连接
select * from student_table s, teacher_table t where s.java_teacher = t.teacher_id and s.student_id > 1 and t.teacher_id < 2;
# 外连接
# (MySql和MSSQLServer不支持,使用Oracle测试)左外连接(显示满足连接条件的行,并把右边表不满足条件的行与左边表虚构的所有值为null的行连接起来)
select * from student_table s, teacher_table t where s.java_teacher(+) = t.teacher_id;
# (MySql和MSSQLServer不支持,使用Oracle测试)右外连接(显示满足连接条件的行,并把左边表不满足条件的行与右边表虚构的所有值为null的行连接起来)
select * from student_table s, teacher_table t where s.java_teacher = t.teacher_id(+);

# SQL99
# 交叉连接(SQL92中的笛卡尔积) cross join
select * from student_table s cross join teacher_table t;
# (MSSQLServer不支持,MySql和Oracle支持)自然连接(同名列连接) natural join , 若无同名列则为交叉连接
select * from student_table s natural join teacher_table t;
# (MSSQLServer不支持,MySql和Oracle支持)使用using子句进行指定多个同名列连接(若没有同名属性则报错)
select * from student_table s join teacher_table t using (teacher_name);
# 使用join...on子句进行等值连接 =
select * from student_table s join teacher_table t on s.java_teacher = t.teacher_id;
# 使用join...on子句进行非等值连接 > <
select * from student_table s join teacher_table t on s.java_teacher > t.teacher_id;
select * from student_table s join teacher_table t on s.java_teacher < t.teacher_id;
# 使用join...on子句进行多条件连接
select * from student_table s join teacher_table t on s.java_teacher = t.teacher_id and s.student_id > 1 and t.teacher_id < 2;
# 左外连接 left joinj...on 与SQL92标准相反(显示满足连接条件的行,并把左边表不满足条件的行与右边表虚构的所有值为null的行连接起来)
select * from student_table s left join teacher_table t on s.java_teacher = t.teacher_id;
# 右外连接 right join...on 与SQL92标准相反(显示满足连接条件的行,并把右边表不满足条件的行与左边表虚构的所有值为null的行连接起来)
select * from student_table s right join teacher_table t on s.java_teacher = t.teacher_id;
# (MySql不支持,MSSQLServer和Oracle支持)全外连接 full join...on (显示满足连接条件的行,并把左边表不满足条件的行与右边表虚构的所有值为null的行连接起来,同时把右边表不满足条件的行与左边表虚构的所有值为null的行连接起来)
select * from student_table s full join teacher_table t on s.java_teacher = t.teacher_id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值