FROM SC
WHERE GRADE>=90;
例 4-2 查 年 龄 大 于 18 , 并 且 不 是 信 息 系 〔 IS 〕 与 数 学 系 〔 MA 〕 的 学 生 姓 名 和 性 别 。
解 : SELECT SNAME, SSEX
FROM STUDENT WHERE SAGE>18 AND SDEPT NOT IN ('IS', 'MA');
例 4-3 查 以 “ MIS_ 〞 开 头 , 且 倒 数 第 二 个 汉 字 为 “ 导 〞 字 的 课 程 的 详 细 信 息 。
解 : SELECT * FROM COURSE WHERE CNAME LIKE 'MIS#_% 导 _' ESCAPE '#';
例 4-4 查 询 选 修 计 算 机 系 〔 CS 〕 选 修 了 2 门 及 以 上 课 程 的 学 生 学 号 。
FROM STUDENT, SC
WHERE SDEPT='CS'
GROUP BY STUDENT.SNO HAVING COUNT(*)>=2;
例 4-5 查 询 student 表 与 sc 表 的 广 义 笛 卡 尔 积 。
解 : SELECT STUDENT.*, SC.*
FROM STUDENT CROSS JOIN SC;
例 4-6 查 询 student 表 与 sc 表 基 于 学 号 sno 的 等 值 连 接 。
解 : SELECT * FROM STUDENT, SC WHERE STUDENT.SNO=SC.SNO;
例 4-7 查 询 student 表 与 sc 表 基 于 学 号 sno 的 自 然 连 接 。
FROM STUDENT, SC
WHERE STUDENT.SNO=SC.SNO;
例 4-8 查 询 课 程 号 的 间 接 先 修 课 程 号 。
FROM COURSE FIRST, COURSE SECOND
WHERE FIRST.CPNO=SECOND.CNO;
例 4-9 查 询 学 生 及 其 课 程 、 成 绩 等 情 况 〔 不 管 是 否 选 课 , 均 需 列 出 学 生 信 息 〕。
解 : SELECT STUDENT.SNO, SNAME, SSEX, SAGE, SDEPT, CNO, GRADE
FROM STUDENT LEFT OUTER JOIN SC ON STUDENT.SNO=SC.SNO;
例 4-10 查 询 学 生 及 其 课 程 成 绩 与 课 程 及 其 学 生 选 修 成 绩 的 明 细 情 况 〔 要 求 学 生 与 课
程 均 全 部 列 出 〕。
解 : SELECT STUDENT.SNO, SNAME, SSEX, SAGE, SDEPT,
COURSE.CNO, GRADE, CNAME, CPNO, CCREDIT
FROM STUDENT LEFT OUTER JOIN SC
ON STUDENT.SNO=SC.SNO FULL OUTER JOIN COURSE ON SC.CNO=COURSE.CNO;
说 明 :因 MySQL 不 支 持“ FULL OUTER JOIN 〞 ,为 此 上 命 令 运 行 会 出 错 的 。可 以 把“ FULL
OUTER JOIN 〞 用 “ … LEFT OUTER JOIN … UNION … RIGHT OUTER JOIN … 〞 来 变 通 实 现 ,
为 此 , 查 询 命 令 可 改 为 :
SELECT a.SNO, a.SNAME, a.SSEX, a.SAGE, a.SDEPT, C.CNO, b.GRADE, c.CNAME, c.CPNO,
c.CREDIT FROM STUDENT a LEFT OUTER JOIN SC b ON a.SNO=b.SNO LEFT OUTER JOIN COURSE