设数据库中有三个关系:
职工表EMP(E#,ENAME,AGE,SEX,ECITY),
其属性分别表示职工工号、姓名、年龄、性别和籍贯。
工作表WORKS(E#,C#,SALARY),
其属性分别表示职工工号、工作的公司编号和工资。
公司表COMP(C#,CNAME,CITY),
其属性分别表示公司编号、公司名称和公司所在城市。
试用SQL语句写出下列操作:
(1)用CREATETABLE语句创建上述三个表,需指出主键和外键。
(2)检索超过50岁的男职工的工号和姓名。
(3)假设每个职工只能在一个公司工作,检索工资超过1000元的男性职工工号和姓名。
(4)假设每个职工可在多个公司工作,检索在编号为C4和C8公司兼职的职工工号和姓名。
(5)检索在“联华公司’’工作、工资超过1000元的男性职工的工号和姓名。
(6)假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数。显示(E#,NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。
(7)工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工工号。
(8)检索联华公司中低于本公司平均工资的职工工号和姓名。
(9)在每一公司中为50岁以上职工加薪100元(若职工为多个公司工作,可重复加)。
(10)在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。
(1) 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 COMP (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, PRIMARY KEY(E#,C#), FOREIGN KEY(E#)REFERENCES EMP(E#), FOREIGN KEY(C#)REFERENCES COMP(C#)); (2) SELECT E#,ENAME FROM EMP WHERE AGE>50 AND SEX=′M′; (3) SELECT EMP.E#,ENAME FROM EMP,WORKS WHERE EMP.E#=WORKS.E# AND SALARY>1000; (4) SELECT A.E#,A.ENAME FROM EMP A,WORKS B,WORKS C WHERE A.E#=B.E#AND B.E#=C.E# AND B.C#=′C4′ AND C.C#=′C8′; (5) SELECT A.E#,A.ENAME FROM EMP A,WORKS B,COMP C WHERE A.E#=B.E#AND B.C#=C.C# AND CNAME=′联华公司′AND SALARY>1000 AND SEX=′M′: (6) SELECT E#,COUNT(C#)AS NUM,SUM(SALARY)AS SUM SALARY FROM WORKS GROUP BY E#; (7) SELECT X.E# FROM WORKS X WHERE NOT EXISTS (SELECT* FROM WORKS Y WHERE E#=′E6′ AND NOT EXISTS (SELECT* FROM WORKS Z W H ERE Z.E#=X.E# AND Z.C#=Y.C#)); (8) SELECT A.E#,A.ENAME FROM EMP A,WORKS B,COMP C WHERE A.E#=B.E#AND B.C#=C.C# AND CNAME=′联华公司′ AND SALARY<(SELECT AVG(SALARY) FROM WORKS,COMP WHERE WORKS.C#=COMP.C# AND CNAME=′联华公司′); (9) UPDATE WORKS SET SALARY=SALARY+100 WHERE E#IN(SELECT E#FROM EMP W H ERE AGE>5 O); (10) DELETE FROM WORKS WHERE E#IN(SELECT E#FROM EMP W H ERE AGE>60); DELETE FROM EMP WHERE AGE>60;