SQL题,有员工表和对应的学历表,其中的学历分别为:01(研究生) 02(本科) 03(专科) 04(高中)员工表: 员工编号 int 主键
员工姓名 varchar(18)
员工学历 varchar(18)
学历表:学历编号 int 主键
员工编号 int 外键 对应于员工表中的主键
员工学历 varchar(18)
毕业日期 varchar(18)
问题:
1:创建以上2表2:求出是2000年以后毕业的学员信息3:更新员工表中的最高学历,最高学历来源于学历表4:如果要求多表合并,员工表应如何设计题目大概是这样

解决方案 »

  1.   

    关于题目中的int、varchar类型,大家在做的时候,就用Oracle中number、varchar2来实现即可
      

  2.   

    CREATE TABLE t_employee (
     emp_id NUMBER PRIMARY KEY,
     emp_name VARCHAR(18),
     emp_education VARCHAR2(18)
     );
     
     CREATE TABLE t_education (
       edu_id NUMBER PRIMARY KEY,
       emp_id NUMBER  ,
       emp_education VARCHAR2(18),
       end_date  DATE);
    ALTER TABLE t_education  ADD CONSTRAINTS  foreign_test  FOREIGN KEY(emp_id)   
     REFERENCES t_employee(emp_id);
     
     
     SELECT  A.emp_id,A.emp_name,A.emp_education,B.end_date  FROM 
     t_employee A,t_education B
     WHERE A.emp_id=B.emp_id
     AND    B.end_date >=TO_date('2000-1-1','yyyy-mm-dd');
     
     
     UPDATE t_employee A
     SET emp_education=(SELECT MAX(emp_education) FROM t_education  B WHERE A.emp_id=B.emp_Id);
      

  3.   

    这样的题应该在SQL板块,回答比较令人满意
      

  4.   

    UPDATE t_employee A 
    SET emp_education=(SELECT MAX(emp_education) FROM t_education  B WHERE A.emp_id=B.emp_Id);最高学历不应该简单的max
    update t_employee a
    set emp_education=(select emp_education from t_education b
      where emp_id=a.emp_id
        and not exists(select 1 from t_education where emp_id=b.emp_id
          and end_date>b.end_date))
    如果学历像本例中这样有规律的话,1楼的思路可以,但要将max改成min第四题是什么意思,将2表合并成1张?员工编号 int
    员工姓名 varchar(18) 
    员工学历 varchar(18) 
    学历编号 int 
    员工学历 varchar(18) 
    毕业日期 varchar(18) 员工编号和学历编号为联合主键
    不过这样不是很合理
    可以设计为员工编号 int 主键
    员工姓名 varchar(18) 
    员工学历 varchar(18) 
    学历编号1 int 高中
    毕业日期1 varchar(18) 
    学历编号2 int 专科或本科
    专科或本科 char(1) '1'为本科,'0'为专科
    毕业日期2 varchar(18) 
    学历编号3 int 研究生
    毕业日期3 varchar(18)