暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日一练 011】 SQL : natural join与using子句

原创 水清木华 2020-07-09
1254

问题:
练习题

desc student
student_id number
student_name varchar2(10)
faculty_id varchar2(10)
location_id number
desc faculty
faculty_id number
faculty_name varchar2(10)
location_id number

如下两个语句中哪个语句可以执行成功:
SQL> SELECT faculty_name, COUNT(student_id) FROM student JOIN faculty
USING (faculty_id, location_id) GROUP BY faculty_name; Statement 2
SQL> SELECT faculty_name,COUNT(student_id) FROM student NATURAL JOIN faculty
GROUP BY faculty_name;

解析:都可以执行成功;
建表测试:
create table student(
student_id number,
student_name varchar2(10),
faculty_id varchar2(10),
location_id number);

create table faculty(
faculty_id number,
faculty_name varchar2(10),
location_id number);

插入数据:
insert into student values(101,‘heqh1’,‘2001’,501);
insert into student values(102,‘heqh2’,‘2002’,501);
insert into student values(103,‘heqh3’,‘2003’,502);

insert into faculty values(2001,‘heqh1’, 501);
insert into faculty values(2002,‘heqh2’, 501);
insert into faculty values(2002,‘heqh1’, 501);
insert into faculty values(2003,‘heqh1’, 502);
insert into faculty values(2003,‘heqh2’, 503);
测试:
SELECT faculty_name, COUNT(student_id) FROM student JOIN faculty
USING (faculty_id, location_id) GROUP BY faculty_name;
image.png

SELECT faculty_name,COUNT(student_id) FROM student NATURAL JOIN faculty
GROUP BY faculty_name;
image.png

SELECT * FROM student JOIN faculty USING (faculty_id );
image.png
疑惑:按照natural join定义,可以自动的根据两张表中名字和数据类型匹配的列来连接,而且只针对这种情况的连接,如果有相同的列名但时数据类型不匹配,那么就会报错。在练习题中faculty_id 两张表的类型分别是是varchar2和number,但没有报错,并且执行成功,发生了隐式转换?

最后修改时间:2020-07-09 10:23:22
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论