问题:
练习题
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;

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

SELECT * FROM student JOIN faculty USING (faculty_id );

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




