简体   繁体   English

连接两个表的SQL

[英]Joining two tables SQL

I have a question. 我有个问题。 I have two tables employees and salary and I want to display the full name and salary grade of all employee who's grade_ID is 2 or 3 sort by employee_ID. 我有两个表employee和salary,我想显示所有grade_ID为2或3(按employee_ID排序)的雇员的全名和薪水等级。

Here are the tables: 表格如下:

Salary_ID      LOW_SALARY       High Salary
1                1              250000
2                250001         500000
3                500001         750000
4                750001         999999

EMPLOYEE_ID     FIRST_NAME     Last_NAME   Salary
1               James          Smith       800000
22               Roy           Red         375000
2                Ron           Johnson     550000
5                Rob           Green       225000

I know I have to join the tables, this is what I have so far: 我知道我必须加入表格,这是我到目前为止的结果:

QUERY 查询

SELECT employees2.FIRST_NAME,
       employees2.last_name,
       salary_grades.SALARY_GRADE_ID,
       employees2.SALARY
FROM employees2,
     salary_grades
ORDER BY employees2.EMPLOYEE_ID;

what do i do next? 我下一步该怎么办? I am stuck. 我被困住了。 Can anyone help me out? 谁能帮我吗? Thank you. 谢谢。

It may be the query you're looking for: 它可能是您要查找的查询:

SELECT E.EMPLOYEE_ID
    ,E.FIRST_NAME
    ,E.LAST_NAME
    ,E.SALARY
FROM employees E
INNER JOIN salary S ON S.LOW_SALARY <= E.SALARY
                      AND S.HIGH_SALARY >= E.SALARY
                      AND S.SALARY_ID IN (2,3)
ORDER BY E.EMPLOYEE_ID

Hope this will help you. 希望这会帮助你。

Simply have to use a join condition that compares the employee salary with the low and high limits of the salary rank, ie 只需使用将员工薪水与薪资等级的上下限进行比较的加入条件,即

SELECT E.*, S.* FROM Employee AS E
INNER JOIN dbo.Salary AS S 
ON S.LOW_SALARY <= E.Salary AND S.High_Salary >= E.Salary

If you want, you can filter by Salary_Id between 2 and 3 如果需要,可以按Salary_Id在2到3之间进行过滤

NOTE: This syntax should work in the 3 types of servers. 注意:此语法应在3种类型的服务器中工作。

Test data, for SQL Server: 针对SQL Server的测试数据:

CREATE TABLE Salary (Salary_Id INT, LOW_SALARY INT, High_Salary INT)
INSERT INTO Salary VALUES(1,1,250000)
INSERT INTO Salary VALUES(2,250001,500000)
INSERT INTO Salary VALUES(3,500001,750000)
INSERT INTO Salary VALUES(4,750001,999999)

CREATE TABLE Employee (Employee_Id INT, FIRST_NAME varchar(50), Last_NAME varchar(50), Salary INT)
INSERT INTO Employee VALUES(1, 'James', 'Smith', 800000)

I'll give the SQL Server (2008+) answer. 我将给出SQL Server(2008+)的答案。

SELECT E.FIRST_NAME, E.last_name, S.SALARY_GRADE_ID, E.SALARY
FROM employees2 E
JOIN salary_grades S  ON (E.SALARY BETWEEN S.LOW_SALARY AND S.HIGH_SALARY) AND S.SALARY_ID IN (2, 3)
ORDER BY  E.EMPLOYEE_ID;
SELECT employees2.FIRST_NAME, employees2.LAST_NAME, employees2.SALARY, salary_grades.SALARY_GRADE_ID
FROM  employees2, salary_grades
WHERE employees2.SALARY BETWEEN salary_grades.LOW_SALARY AND salary_grades.HIGH_SALARY 
ORDER BY salary_grades.SALARY_GRADE_ID

So I tried using this script, it works but do i use IN to display the range of 2 and 3 in sqldeveloper? 所以我尝试使用此脚本,它可以工作,但是我是否使用IN在sqldeveloper中显示2和3的范围?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM