关系数据库语言SQL课后练习(四)


一、题干

设数据库中有3个关系:
职工表EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别
和籍贯。
工作表WORKSfZ#,雠,SALARY),其屙I生分别表示职工工号、工作的公司编号和工资。
公司表COMP(C#,CNAME,CITY),其属性分别表示公司编号、公司名称和公司所在城市。

二、解题步骤

1.用CREATE TABLE语句创建上述3个表,需指出主键和外键。

代码如下:

CREATE TABLE EMP
(E# CHAR(4)NOT NULL,
ENAME CHAR(8)NOT NULL,
AGE SMALLINT,
SEX CHAR(1),
ECITY CHAR(20),
PRIMARY KEY(E#));
CREATE TABLE C:OMP
(C# CHAR(4)NOT NULL,
CNAME CHAR(20)NOT NULL,
CITY CHAR(20),
PRIMARY KEY(C#));
CREATE TABLE WORKS
(E# CHAR(4)NOT NULL,
C# CHAR(4)NOT NULL,
SALARY SMALLINT,
PIuMARY KEY(E#,C#),
FOREIGN KEY(E#)REFERENCES EMP(E#),
FOREIGN KEY(C#)REFERENCES COMP(C#))

2.检索超过50岁的男职工的工号和姓名。

代码如下:

(SELECT E#,ENAME
FROMEMP
WHERE AGE>50 AND SEX=’M’;

3.假设每个职工只能在一个公司工作,检索工资超过1 000元的男性职工工号和姓名。

代码如下:

(SELECT E#,ENAME
FROMEMP
WHERE AGE>50 AND SEX=’M’;

4.假设每个职工可在多个公司工作,检索至少在编号为C4和C8的公司兼职的职工工号和姓名。

代码如下:

SELECT A.E#,A.ENAME
FROM EMPA,WORKS B,WORKS C
WHERE A.E#=B.E# AND B.E#=C.E#
AND B.C#=’C4’AND C.C#=’C8’;

5.检索在联华公司工作、工资超过1 000元的男性职工的工号和姓名。

代码如下:

SELECT A.E#,A.ENAME
FROM EMPA,WORKS B,COMP C
WHERE A.E#=B.E#AND B.C#=C.#
AND CNAME=’联华公司’AND SALARY>1000 AND SEX='M’;

6.假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示(E≠},NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。

代码如下:

SELECT E#,COUNT(C#)AS NUM,SUM(SALARY)AS SUM—SALARY
FROM WORKS
GROUP BY E#;

7.工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工工号。

代码如下:

SELECT X.E#
FROM WORKS X
WHERE NOT EXISTS
(SELECT *
FROM WORKS Y
WHERE E#=’E6’
AND NOT EXISTS
(SELECT *
FROM WORKS Z
WHERE Z.E#=X.E#AND Z.C#=Y.C#))

8.检索联华公司中低于本公司平均工资的职工工号和姓名。

代码如下:

SELECT A.E#,A.ENAME
FROM EMPA,WORKS B,COMP C
WHERE A.E#=B.E#AND B.C#=C.C# AND CNAME=’联华公司’
AND SALARY<(SELECT AVG(SALARY)
FROM WORKS.C0MP C
WHERE WORK S.C#=COMP.C# AND CNAME=’联华公司’)

9.在每一公司中为50岁以上的职工加薪100元(若职工为多个公司工作,可重复加)。

代码如下:

UPDATE WORKS
SET SALARY=SALARY+100
WHERE E# IN(SELECT E# FROM EMP WHERE AGE>50)

10.在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。

DELETE FROM WORKS
WHERE E# IN(SELECT E# FROM EMP WHERE AGE>60);
DELETE FROM EMP
WHERE AGE>60

总结

本篇已经是SQL基础练习的最后一道练习题啦,往后笔者会更新嵌入SQL的主语言练习以及项目资源的分享,大家打好基础多加练习,一起加油!

  • 20
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值