永发信息网

SQL语句完成以下查询,急了~~~

答案:4  悬赏:20  手机版
解决时间 2021-04-26 23:23
  • 提问者网友:ミ烙印ゝ
  • 2021-04-26 02:03
1. 某职工社团管理系统有如下三个基本表:
l 职工(职工号,姓名,年龄,性别)
l 社会团体(编号,名称,负责人,活动地点)
l 参与(职工号,编号,参与日期)
其中:
l 职工表的主码为职工号,职工姓名不能为空;
l 社会团体表的主码为编号,外码为负责人,被参照表为职工表,参照属性为职工号,社会团体名称不能为空;
l 参与表的主码为职工号和编号,职工号为外码,被参照表为职工表,参照属性为职工号,编号为外码,被参照表为社会团体表,参照属性为编号。
试用SQL语句实现以下操作:
(1) 定义职工表、社会团体表和参与表,并说明其主码和参照关系。
(2) 定义两个视图:
社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别)
参与人情况(职工号,姓名,社团编号,社团名称,参与日期)
(3) 查询参与羽毛球队、秧歌队或冬泳队的职工号和姓名。
(4) 查询参与冬泳队且年龄大于50岁的职工的职工号和姓名。
(5) 查询还没有确定负责人的社会团体编号和名称。
(6) 查询没有参与任何社会团体的职工情况。
(7) 查询姓“李”且参与至少一个社会团体的男员工的平均年龄。
(8) 查询与“肖波”至少参与一个相同社会团体的所有职工信息。
(9) 查询年龄在45至55之间的女职工或年龄在50至60之间的男职工的所有信息。
(10) 查询参与了全部社会团体的职工情况。
(11) 查询参与了职工号为“0001”的职工所参与的全部社会团体的职工号。
(12) 查询与“秧歌队”负责人年龄相同的职工的姓名。
(13) 查询比“秧歌队”中所有职工年龄都大的职工的姓名。
(14) 查询并统计每个社会团体的名称和参与人数。
(15) 查询并统计参与人数最少的社会团体的名称和参与人数。
(16) 查询并统计参与人数超过20人的社会团体的名称和负责人。
最佳答案
  • 五星知识达人网友:归鹤鸣
  • 2021-04-26 02:53

答案来啦!~~!一定要采纳!


1.


(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),


参与日期 DATETIME,


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


全部回答
  • 1楼网友:千夜
  • 2021-04-26 05:38

*********您好!Yadie.23很高兴能为你解答。********* +++++++++++++++++++++++++++++++++++++++++++++++++

我觉得我写了不少了。。花了差不多一天的时间。。后面剩下的

不会写了吧。。会的话,我再补上:

===================================================

(1)create database GLXT on ( name=GLXT, filename='e:\sqlde\GLXT.mdf', size=100, maxsize=200, filegrowth=20 ) log on( name='GLXTlog', filename='e:\sqlde\GLXT.ldf' ) go use GLXT create table 职工表( 职工号 varchar(10) not null primary key, 姓名 varchar(8) not null, 年龄 varchar(3), 性别 char(2) check(性别='男' or 性别='女') default 1 ) go use GLXT create table 社会团体表( 编号 int not null primary key, 名称 varchar(30) not null, 负责人 varchar(10), 活动地点 varchar(30) foreign key(负责人) references 职工表(职工号) ) go use GLXT create table 参与表( 职工号 varchar(10) not null references 职工表(职工号), 编号 int not null references 社会团体表(编号), 参与日期 smalldatetime, primary key(职工号,编号) )

==================================================

(2)use GLXT go create view 社团负责人 as select 编号,名称,职工表.职工号,职工表.姓名,职工表.性别 from 社会团体表,职工表 where 社会团体表.负责人=职工表.职工号 go use GLXT go create view 参与人情况 as select 职工表.职工号,职工表.姓名,社会团体表.编号,社会团体表.名称,参与日期 from 社会团体表,职工表,参与表 where 参与表.职工号=职工表.职工号 and 参与表.编号=社会团体表.编号

========================================================

(3)select 职工表.职工号,姓名 from 职工表,参与表 where 参与表.职工号=职工表.职工号 and 编号=any ( select 参与表.编号 from 社会团体表,参与表 where (名称='羽毛球队' or 名称='秧歌队' or 名称='冬泳队') and 社会团体表.编号=参与表.编号 )

==================================================

+++++++++++++++++++++++++++++++++++++++++++++++++ You can have a try,maybe my answer useful to you. 如满意,Yadie.23十分感谢您的采纳。*^-^*

  • 2楼网友:第四晚心情
  • 2021-04-26 05:00

羽毛球队,腰鼓队只是给出了名称,没有给出社会团体的编号,是否社会团体名称是唯一的?应为主码是编号!!

  • 3楼网友:千杯敬自由
  • 2021-04-26 04:28
分数太小了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯