设有职工关系Emp (Eno,Ename,Esex,EDno)和部门关系Dept (Dno,Dname, Daddr),创建这两个关系的SQL语句如下:CREATE TABLE Emp (Eno CHAR(4),Ename CHAR(8),Esex CHAR(1) CHECK(Esex IN ('M','F')),EDno CHAR(4) REFERENCES Dept (Dno),PRIMARY KEY (Eno));CREATE TABLE Dept (Dno CHAR(4) NOT NULL UNI

题目

设有职工关系Emp (Eno,Ename,Esex,EDno)和部门关系Dept (Dno,Dname, Daddr),创建这两个关系的SQL语句如下:

CREATE TABLE Emp (

Eno CHAR(4),

Ename CHAR(8),

Esex CHAR(1) CHECK(Esex IN ('M','F')),

EDno CHAR(4) REFERENCES Dept (Dno),

PRIMARY KEY (Eno)

);

CREATE TABLE Dept (

Dno CHAR(4) NOT NULL UNIQUE,

Dname CHAR(20),

Daddr CHAR(30)

);

直接运行该语句,DBMS会报错,原因是(53)。若经过修改,上述两个表创建完毕之后(尚无数据),则下述语句中能被执行的是(54)。

A.创建表Dept时没有指定主码

B.创建表Dept时没有指定外码

C.创建表Emp时,被参照表Dept尚未创建

D.表Emp的外码EDno与被参照表Dept的主码Dno不同名


相似考题
参考答案和解析
正确答案:C
解析:本题考查对完整性约束的掌握。本题中,职工关系Emp为参照关系,其属性EDno参照部门关系Dept中的Dno,在创建Emp关系时,系统会根据参照约束查找被参照关系,因此,被参照关系就先于参照关系而建立。约束一旦建立,更新数据必须满足约束条件才可正确执行,表Emp有主码约束和参照约束,故Eno不能取空值,EDno列因为被参照关系Dept尚无记录,故只能取空值。
更多“设有职工关系Emp (Eno,Ename,Esex,EDno)和部门关系Dept (Dno,Dname, Daddr),创建这两个关系的SQL ”相关问题
  • 第1题:

    以下两个关系表:

    Emp(eid,ename,age,did,salary),其各列含义为:

    职工号,姓名,年龄,部门号,工资

    Dept(did,dname,mgr_id),其各列含义为:部门号,部门名称,部门经理职工号

    写出一条SQL语句,查询工资大于10000,且与他所在部门的经理年龄相同的职工姓名。


    正确答案:select a.*from Emp aDept bEmp c where a. did=b.did and b.mgr_id=c.eid and a.salary>10000 and a.age=c.age
    select a.*from Emp a,Dept b,Emp c where a. did=b.did and b.mgr_id=c.eid and a.salary>10000 and a.age=c.age

  • 第2题:

    ● 设有职工表emp(Eno,Ename,Sex,Age)(Eno为职工号,Ename为职工姓名,Sex为性别,Age为年龄)和salary(Eno,Hour,Month,Wage)(Hour为工作时长为多少小时,Month表示几月份,Wage为薪水),建立一个视图V-Salary(Eno,Ename,Hour,Month,Wage),并按Eno升序排序的SQL语句为:

    (1)CREATE ( )

    AS SELECT emp.Eno,emp.Ename ,salary.Hour,salary.Month,salary.Wage

    FROM emp, salary

    WHERE emp.Eno=salary.Eno

    ORDER BY ENO

    在此视图上查均月工资在3000以上的职工工资情况的SQL语句为:

    SELECT Eno,Ename,AVG(Wage)

    FROM V-Salary

    GROUP BY ( )

    HAVING AVG(Wage)>3000

    ( )

    A. CREATE TABLE V-Salary(emp.Eno,emp.Ename,salary.Hour,salary.Month,salary.Wage)

    B. CREATE VIEW V-Salary(Eno,Ename,Hour,Month,Wage)

    C. CREATE TABLE V-Salary(Eno,Ename,Hour,Month,Wage)

    D. CREATE INDEX V-Salary(Eno,Ename,Hour,Month,Wage)

    ( )

    A. Eno B.Ename

    C.Month D.Wage


    正确答案:B,A
    此题第一空容易,考查考生是否了解建立视图的语法规则。第二空也比较明显,在salary中有字段Month,用于标识当前记录是哪个月的工资记录,这就意味着在数据表中,一个Eno对应着多个工资记录,要计算平均值,可以先按Eno进行分组,再求工资平均值,所以第2空填A。

  • 第3题:

    列出所有部门的职工人数(包括没有职工的部门) ()。

    A.select dept.deptno,dname,count(emp.empno) from emp,dept where emp.deptno=dept.deptno group by dept.deptno,dname;

    B.select dept.deptno,dname,count(emp.empno) from emp,dept where emp.deptno()=dept.deptno group by dept.deptno,dname;

    C.select dept.deptno,dname,count(emp.empno) from emp,dept where emp.deptno=dept.deptno() group by dept.deptno,dname;

    D.select dept.deptno,dname,count(emp.empno) from emp,dept where emp.deptno(


    B

  • 第4题:

    职员关系模式为E(Eno, Ename, Dept, Eage, Eaddr),其中Eno表示职员号,Ename表示职员名,Dept表示职员所在部门,Eage表示年龄,Eaddr表示职员的家庭住址。建立“开发部”(DS表示开发部)职员的视图DS_E如下,要求进行修改、插入操作时保证该视图只有开发部的职员。

    CREATE VIEW DS_E

    AS SELECT Eno, Ename, Dept, Eage, Eaddr

    FROM

    WHERE (1)

    如下SQL语句可以查询开发部姓“王”职员的姓名和家庭住址。

    Select Ename, Eaddr

    From DS_E

    Where (2);

    A.Dept=DS

    B.Dept=DS WITH CHECK OPTION

    C.Dept='DS'

    D.Dept='DS'S WITH CHECK OPTION


    正确答案:D

  • 第5题:

    对于第7题的两个基本表,有一个SQL语句: SELECT ENO, ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHERE DNAME='金工车间');其等价的关系代数表达式是:______。

    A.πENO,ENAME(σDNAME≠'金工车间'(EMPDEPT))

    B.πENO,ENAME

    C.πENO,ENAME(EMP)-πENO,ENAME (σDNAME='金工车间'(EMPDEPT))

    D.πENO,ENAME (EMP)-πENO,ENAME (σDNAME≠'金工车间'(EMPDEPT))


    正确答案:C