【发布时间】:2015-08-13 19:38:09
【问题描述】:
我有一个包含以下表格的数据库:
create table EMPLOYEE
(
Emp_ID INT NOT NULL AUTO_INCREMENT,
Emp_FName VARCHAR(30) NOT NULL,
Emp_LName VARCHAR(30) NOT NULL,
Address_ID_Resident INT REFERENCES ADDRESS(Address_ID),
JobTime_ID CHAR(1) REFERENCES JOBTIME(JobTime_ID),
PRIMARY KEY(Emp_ID)
);
其他表地址如下:
create table ADDRESS
(
Address_ID INT NOT NULL AUTO_INCREMENT,
Address_St VARCHAR(50) NOT NULL,
Address_City VARCHAR(30) NOT NULL,
Address_State VARCHAR(3) NOT NULL,
Address_PostCode CHAR(4) NOT NULL,
Add_TypeID CHAR(1) REFERENCES ADDRESSTYPE(Add_TypeID),
PRIMARY KEY(Address_ID)
);
ADDRESSTYPE 表用于区分地址是住宅、办公室还是邮政
create table ADDRESSTYPE
(
AddType_ID CHAR(1) NOT NULL,
Add_Type VARCHAR(15) NOT NULL,
PRIMARY KEY(AddType_ID)
);
JobTime Table 描述员工的工作是全职还是休闲。
Create table JOBTIME
(
JobTime_ID CHAR(1) NOT NULL,
JobTime_Desc VARCHAR(10) NOT NULL,
PRIMARY KEY(JobTime_ID)
);
现在,由于他们每个人的薪水不同,所以对于全职和休闲,我们有两张单独的桌子。
Create table FULLTIME
(
Emp_ID INT NOT NULL,
Emp_salary_yearly DOUBLE(10,2) NOT NULL,
JobType_ID INT REFERENCES JOBTYPE(JobType_ID),
FullTimeJob_ID CHAR(1) NOT NULL DEFAULT 'F',
PRIMARY KEY(Emp_ID)
);
ALTER TABLE FULLTIME ADD FOREIGN KEY(Emp_ID) REFERENCES EMPLOYEE(Emp_ID);
ALTER TABLE FULLTIME ADD FOREIGN KEY(FullTimeJob_ID) REFERENCES JOBFULLTIME(FullTimeJob_ID);
Create table CASUALTIME
(
Emp_ID INT NOT NULL,
Emp_salary_hourly DOUBLE(10,2) NOT NULL,
JobType_ID INT REFERENCES JOBTYPE(JobType_ID),
CasualJob_ID CHAR(1) NOT NULL DEFAULT 'C',
PRIMARY KEY(EMP_ID)
);
ALTER TABLE CASUALTIME ADD FOREIGN KEY(Emp_ID) REFERENCES EMPLOYEE(Emp_ID);
ALTER TABLE CASUALTIME ADD FOREIGN KEY(CasualJob_ID) REFERENCES JOBCASUALTIME(CasualJob_ID);
现在我想要按薪水排序的所有员工的姓名列表、完整地址,并指明该员工是全职工作还是临时工作。这里的 name 是 Name 列中表示的 FName 和 LName 的组合,以及标记为 ADDRESS 的列中 Street, Suburb State Postcode(例如 123 Anzac Pde, Maroubra NSW 2038)的组合。现在我知道在加入语句的帮助下做到这一点。但是,如果我们应该在不使用 JOIN 语句的情况下执行此操作,那么针对此问题的 SQL Query 可以是什么?
我需要根据员工的工作类型从 ADDRESS TABLE 中获取地址,并从 FULLTIME 和 CASUAL 表中获取薪水
【问题讨论】:
-
到目前为止您尝试过什么查询?
-
@Sachu 我在如何将 Emp_salary_yearly 和 Emp_salary_hourly 合并到一个列中遇到问题?
-
你不认为地址表应该有代表员工ID的列!我刚刚检查了前两个表,但我不知道你还能如何获取员工地址!
-
@ubaidgadha 员工表具有地址表的 FK。有些员工可能住在一起,所以这是正确的关系。
-
双(10,2)。 ??我能有工作吗。我不介意我不知道我得到了多少百万的确切报酬,所以我可能可以不用 DECIMAL 数据类型来生活