--学生表
CREATE TABLE S
(
SID NUMBER(4), --学生ID
SNAME VARCHAR2(10), --学生姓名
SEX CHAR, --学生性别
AGE NUMBER(2) --学生年龄
)--学生成绩表
CREATE TABLE SC
(
SID NUMBER(4), --学生ID
CID NUMBER(4), --课程ID
GRADE NUMBER(3) --成绩
)--课程表
CREATE TABLE C
(
CID NUMBER(4), --课程ID
CNAME VARCHAR2(20), --课程名
TEACHER VARCHAR2(20) --任课老师
)DECLARE
BEGIN
INSERT INTO C VALUES(9001,'数据结构','胡老师');
INSERT INTO C VALUES(9002,'数据库原理','徐老师');
INSERT INTO C VALUES(9003,'计算机基础','王老师');
INSERT INTO S VALUES(1001,'张三','F',20);
INSERT INTO S VALUES(1002,'李四','F',21);
INSERT INTO S VALUES(1003,'小丽','M',20);
INSERT INTO S VALUES(1004,'王五','F',30);
INSERT INTO SC VALUES(1001,'9001',80);
INSERT INTO SC VALUES(1001,'9002',90);
INSERT INTO SC VALUES(1001,'9003',98);
INSERT INTO SC VALUES(1002,'9001',70);
INSERT INTO SC VALUES(1002,'9002',60);
INSERT INTO SC VALUES(1003,'9001',0);
INSERT INTO SC VALUES(1003,'9002',50);
INSERT INTO SC VALUES(1003,'9003',77);
INSERT INTO SC VALUES(1004,'9001',0);
INSERT INTO SC VALUES(1004,'9002',0);
INSERT INTO SC VALUES(1004,'9003',0);
END;--查找出姓名为“张三”的“数据结构”的成绩
--方式1
SELECT ts.sname,tsc.grade
FROM SC tsc
INNER JOIN S ts ON tsc.sid=ts.sid
WHERE ts.sname='张三'
AND tsc.cid=
(
SELECT tc.cid
FROM C tc
WHERE tc.cname='数据结构'
)--方式2
SELECT ts.sname,tc.cname,tsc.grade
FROM SC tsc
INNER JOIN S ts ON tsc.sid=ts.sid
INNER JOIN C tc ON tsc.cid=tc.cid
WHERE ts.sname='张三' AND tc.cname='数据结构'--方式3
SELECT ts.sname,tc.cname,tsc.grade
FROM SC tsc,S ts,C tc
WHERE tsc.sid=ts.sid
AND tsc.cid=tc.cid
AND ts.sname='张三'
AND tc.cname='数据结构'--查找出没有选修“数据结构”课程的学员的ID和姓名
--方式1
SELECT ts.sid,ts.sname
FROM S ts
INNER JOIN SC tsc ON ts.sid=tsc.sid
WHERE tsc.grade=0 AND tsc.cid=
(
SELECT tc.cid
FROM C tc
WHERE tc.CNAME='数据结构'
)--方式2
SELECT ts.sid,ts.sname
FROM S ts
INNER JOIN SC tsc ON ts.sid=tsc.sid
INNER JOIN C tc ON tsc.cid=tc.cid
WHERE tsc.grade=0 AND tc.cname='数据结构'--方式3
SELECT ts.sid,ts.sname
FROM S ts,SC tsc,C tc
WHERE ts.sid=tsc.sid
AND tsc.cid=tc.cid
AND tsc.grade=0
AND tc.cname='数据结构'=============================================================
1、以上几种查询方式有什么区别吗,各自的优点和缺点是什么呢?
2、一般在项目中都用哪种方式比较多呢?PS.题目中加了【值得探讨】只是针对初学者^^,请高手不要扔砖头~~~
CREATE TABLE S
(
SID NUMBER(4), --学生ID
SNAME VARCHAR2(10), --学生姓名
SEX CHAR, --学生性别
AGE NUMBER(2) --学生年龄
)--学生成绩表
CREATE TABLE SC
(
SID NUMBER(4), --学生ID
CID NUMBER(4), --课程ID
GRADE NUMBER(3) --成绩
)--课程表
CREATE TABLE C
(
CID NUMBER(4), --课程ID
CNAME VARCHAR2(20), --课程名
TEACHER VARCHAR2(20) --任课老师
)DECLARE
BEGIN
INSERT INTO C VALUES(9001,'数据结构','胡老师');
INSERT INTO C VALUES(9002,'数据库原理','徐老师');
INSERT INTO C VALUES(9003,'计算机基础','王老师');
INSERT INTO S VALUES(1001,'张三','F',20);
INSERT INTO S VALUES(1002,'李四','F',21);
INSERT INTO S VALUES(1003,'小丽','M',20);
INSERT INTO S VALUES(1004,'王五','F',30);
INSERT INTO SC VALUES(1001,'9001',80);
INSERT INTO SC VALUES(1001,'9002',90);
INSERT INTO SC VALUES(1001,'9003',98);
INSERT INTO SC VALUES(1002,'9001',70);
INSERT INTO SC VALUES(1002,'9002',60);
INSERT INTO SC VALUES(1003,'9001',0);
INSERT INTO SC VALUES(1003,'9002',50);
INSERT INTO SC VALUES(1003,'9003',77);
INSERT INTO SC VALUES(1004,'9001',0);
INSERT INTO SC VALUES(1004,'9002',0);
INSERT INTO SC VALUES(1004,'9003',0);
END;--查找出姓名为“张三”的“数据结构”的成绩
--方式1
SELECT ts.sname,tsc.grade
FROM SC tsc
INNER JOIN S ts ON tsc.sid=ts.sid
WHERE ts.sname='张三'
AND tsc.cid=
(
SELECT tc.cid
FROM C tc
WHERE tc.cname='数据结构'
)--方式2
SELECT ts.sname,tc.cname,tsc.grade
FROM SC tsc
INNER JOIN S ts ON tsc.sid=ts.sid
INNER JOIN C tc ON tsc.cid=tc.cid
WHERE ts.sname='张三' AND tc.cname='数据结构'--方式3
SELECT ts.sname,tc.cname,tsc.grade
FROM SC tsc,S ts,C tc
WHERE tsc.sid=ts.sid
AND tsc.cid=tc.cid
AND ts.sname='张三'
AND tc.cname='数据结构'--查找出没有选修“数据结构”课程的学员的ID和姓名
--方式1
SELECT ts.sid,ts.sname
FROM S ts
INNER JOIN SC tsc ON ts.sid=tsc.sid
WHERE tsc.grade=0 AND tsc.cid=
(
SELECT tc.cid
FROM C tc
WHERE tc.CNAME='数据结构'
)--方式2
SELECT ts.sid,ts.sname
FROM S ts
INNER JOIN SC tsc ON ts.sid=tsc.sid
INNER JOIN C tc ON tsc.cid=tc.cid
WHERE tsc.grade=0 AND tc.cname='数据结构'--方式3
SELECT ts.sid,ts.sname
FROM S ts,SC tsc,C tc
WHERE ts.sid=tsc.sid
AND tsc.cid=tc.cid
AND tsc.grade=0
AND tc.cname='数据结构'=============================================================
1、以上几种查询方式有什么区别吗,各自的优点和缺点是什么呢?
2、一般在项目中都用哪种方式比较多呢?PS.题目中加了【值得探讨】只是针对初学者^^,请高手不要扔砖头~~~
外连接都用(+),同理