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

文章目录

  • 一、题干
  • 二、解题步骤
    • 1.用CREATE TABLE语句创建上述3个表,需指出主键和外键。
    • 2.检索超过50岁的男职工的工号和姓名。
    • 3.假设每个职工只能在一个公司工作,检索工资超过1 000元的男性职工工号和姓名。
    • 4.假设每个职工可在多个公司工作,检索至少在编号为C4和C8的公司兼职的职工工号和姓名。
    • 5.检索在联华公司工作、工资超过1 000元的男性职工的工号和姓名。
    • 6.假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示(E≠},NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。
    • 7.工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工工号。
    • 8.检索联华公司中低于本公司平均工资的职工工号和姓名。
    • 9.在每一公司中为50岁以上的职工加薪100元(若职工为多个公司工作,可重复加)。
    • 10.在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。
  • 总结


一、题干

设数据库中有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的主语言练习以及项目资源的分享,大家打好基础多加练习,一起加油!

你可能感兴趣的:(SQL,mysql,sql,数据库)