文章目录
- 一、题干
- 二、解题步骤
- 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的主语言练习以及项目资源的分享,大家打好基础多加练习,一起加油!