【正确答案】(1)
CREATE TABLE 职工(
职工号 CHAR(8) PRIMARY KEY,
姓名 CHAR (8) NOT NULL,
年龄 SMALLINT,
性别 CHAR (2),
CONSTRAINT C1 CHECK (性别 IN ('男','女')))
CREATE TABLE 社会团体 (
编号 CHAR(8) PRIMARY KEY,
名称 CHAR(8) NOT NULL,
负责人 CHAR(8),
活动地点 VARCHAR(50),
CONSTRAINT C2 FOREIGN KEY(负责人) REFERENCES 职工(职工号))
CREATE TABLE 参与 (
职工号 CHAR(8),
编号 CHAR(8),
参与日期 DATETLME,
CONSTRAINT C3 PRIMARY KEY(职工号,编号),
CONSTRAINT C4 FOREIGN KEY (职工号) REFERENCES 职工(职工号))
(2)
CREATE VIEW 社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别)
AS SELECT 编号,名称,负责人,姓名,性别
FROM 社会团体,职工
WHERE 社会团体.负责人=职工.职工号
CREATE VIEW 参与人情况(职工号,姓名,社团编号,社团名称,参与日期)
AS SELECT 职工.职工号,姓名,社会团体.编号,名称,参与日期
FROM 职工,社会团体,参与
WHERE 职工.职工号=参与.职工号 AND 参与.编号=社会团体.编号
(3)
SELECT DISTINCT 职工.职工号,姓名
FROM 职工,社会团体,参与
WHERE 职工.职工号=参与.职工号 AND 参与.编号=社会团体.编号
AND 社会团体.名称 IN ('羽毛球队','秧歌队','冬泳队')
(4)
SELECT 职工号,姓名
FROM 职工
WHERE 职工号 IN
(SELECT 职工号
FROM 参与
WHERE 编号 IN
(SELECT 编号
FROM 社会团体
WHERE 名称='冬泳队'))
AND 年龄>50
(5)
SELECT 编号,名称
FROM 社会团体
WHERE 负责人 IS NULL
(6)
SELECT *
FROM 职工
WHERE NOT EXISTS (
SELECT *
FROM 参与
WHERE 参与.职工号=职工.职工号)
(7)
SELECT AVG(年龄)
FROM 职工
WHERE 姓名 LIKE '李%' AND性别='男' AND EXISTS (
SELECT *
FROM 参与
WHERE 参与.职工号=职工.职工号)
(8)
SELECT *
FROM 职工 AS E1
WHERE E1.姓名<>'肖波' AND EXISTS
(SELECT J1.编号
FROM 参与 AS J1
WHERE J1.职工号=E1.职工号 AND J1.编号=ANY
(SELECT J2.编号
FROM 职工 AS E2, 参与 AS J2
WHERE E2.职工号=J2. 职工号 AND E2.姓名='肖波'))
(9)
SELECT *
FROM 职工
WHERE ((年龄 BETWEEN 45 AND 55) AND 性别='女') OR
((年龄 BETWEEN 50 AND 60) AND 性别='男')
(10)
SELECT *
FROM 职工
WHERE NOT EXISTS (
SELECT *
FROM 参与
WHERE NOT EXISTS (
SELECT *
FROM 社会团体
WHERE 参与.职工号=职工.职工号 AND 参与.编号=社会团体.编号))
(11)
SELECT 职工号
FROM 职工
WHERE NOT EXISTS (
SELECT *
FROM 参与 AS 参与 1
WHERE 参与 1.职工号='0001' AND NOT EXISTS (
SELECT *
FROM 参与 AS 参与 2
WHERE 参与 2.编号=参与1.编号 AND 参与2.职工号=职工.职工号))
(12)
SELECT 姓名
FROM 职工
WHERE 年龄>(
SELECT 年龄
FROM 职工,社会团体
WHERE 社会团体.负责人=职工.职工号 AND 社会团体.名称='秧歌队')
(13)
SELECT 姓名
FROM 职工
WHERE 年龄>ALL(
SELECT 年龄
FROM 职工,社会团体,参与
WHERE 社会团体.编号=参与.编号 AND 职工.职工号=参与.职工号
AND 社会团体.名称='秧歌队')
(14)
SELECT 社会团体.名称,COUNT(参与.职工号)
FROM 社会团体,参与
WHERE 社会团体.编号=参与.编号
GROUP BY 参与.编号,社会团体.名称
(15)
SELECT 社会团体.名称,COUNT(参与.职工号)
FROM 社会团体,参与
WHERE 社会团体.编号=参与.编号
GROUP BY 参与.编号,社会团体.名称
HAVING COUNT(参与.职工号)<=ALL (
SELECT COUNT(参与.职工号)
FROM 参与
GROUP BY 参与.编号)
(16)
SELECT 社会团体.名称,职工.姓名
FROM 职工,社会团体,参与
WHERE 社会团体.编号=参与.编号
AND 社会团体.负责人=职工.职工号
GROUP BY 参与.编号,社会团体.名称,职工.姓名
HAVING COUNT (参与.编号)>20
【答案解析】