如何在sql中加入两个或多个没有'common column'的表

时间:2017-01-03 23:33:59

标签: sql join

这是我从班级的家庭作业中提出的一个问题,这个问题给了我一些麻烦。

显示在Syndey的任何部门加入超过5名员工的月份。

PS:我为帽子道歉。我的老师指示我创建这样的表格。

表位:

LOCATION_ID    NOT NULL NUMBER(4)    
STREET_ADDRESS          VARCHAR2(40) 
POSTAL_CODE             VARCHAR2(12) 
CITY           NOT NULL VARCHAR2(30) 
STATE_PROVINCE          VARCHAR2(25) 
COUNTRY_ID              CHAR(2)

表格工作:

JOB_ID     NOT NULL VARCHAR2(10) 
JOB_TITLE  NOT NULL VARCHAR2(35) 
MIN_SALARY          NUMBER(6)    
MAX_SALARY          NUMBER(6) 

JOB_HISTORY:

JOB_ID     NOT NULL VARCHAR2(10) 
JOB_TITLE  NOT NULL VARCHAR2(35) 
MIN_SALARY          NUMBER(6)    
MAX_SALARY          NUMBER(6) 

表员工:

EMPLOYEE_ID    NOT NULL NUMBER(6)    
FIRST_NAME              VARCHAR2(20) 
LAST_NAME      NOT NULL VARCHAR2(25) 
EMAIL          NOT NULL VARCHAR2(25) 
PHONE_NUMBER            VARCHAR2(20) 
HIRE_DATE      NOT NULL DATE         
JOB_ID         NOT NULL VARCHAR2(10) 
SALARY                  NUMBER(8,2)  
COMMISSION_PCT          NUMBER(2,2)  
MANAGER_ID              NUMBER(6)    
DEPARTMENT_ID           NUMBER(4)    

表部门:

DEPARTMENT_ID   NOT NULL NUMBER(4)    
DEPARTMENT_NAME NOT NULL VARCHAR2(30) 
MANAGER_ID               NUMBER(6)    
LOCATION_ID              NUMBER(4)    

1 个答案:

答案 0 :(得分:0)

首先,请不要抱歉在SQL脚本中使用大写字母。您的老师正在教您正确的指导方针。实际上,这是一种推荐的方式(清洁代码方式),用大写字母编写SQL脚本,尤其是SQL关键字和数据类型,以提高可读性。如果您希望将列名称保留为大写,那么这是您的选择。

这是您的查询以获得所需的输出。您尚未提及当前定位的数据库。我编写了针对Microsoft SQL Server数据库的查询。

SELECT HiredMonth,COUNT(HiredMonth)
FROM
(
SELECT DATENAME(MONTH,E.HIRE_DATE) AS HiredMonth
FROM Employees E
INNER JOIN Departments D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
INNER JOIN Locations L ON D.LOCATION_ID = L.LOCATION_ID
WHERE CITY = 'Sydney') AS P
Group BY P.HiredMonth

P.S。如果你的目标是其他数据库,那么我的查询中使用的几个内置函数(如DATENAME)可能需要相应更改才能使此查询在其他数据库中可编辑。