SQL Query显示名称,工作,部门名称工资和等级

时间:2011-10-12 11:14:04

标签: sql

问题是:

  • “创建一个查询,显示所有NAME, JOB, DEPARTMENT NAME, SALARY的{​​{1}}和GRADE(来自SALGRADE表)。”

到目前为止我的代码:

EMPLOYEES

这会返回70行,但结果应该只生成 14 行。

SELECT e.ename, e.job, d.dname, e.sal, s.grade
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
  • EMPLOYEE EMP JOB DEPT NAME EMP SALARY SALARY GRADE ---------- --------- -------------- ---------- ------------ JAMES CLERK SALES 950 1 SMITH CLERK RESEARCH 800 1 ADAMS CLERK RESEARCH 1100 1 MARTIN SALESMAN SALES 1250 2 WARD SALESMAN SALES 1250 2 MILLER CLERK ACCOUNTING 1300 2 ALLEN SALESMAN SALES 1600 3 TURNER SALESMAN SALES 1500 3 BLAKE MANAGER RESEARCH 2850 4 CLARK MANAGER ACCOUNTING 2450 4 JONES MANAGER RESEARCH 2975 4 FORD ANALYST RESEARCH 3000 4 SCOTT ANALYST RESEARCH 3000 4 KING PRESIDENT ACCOUNTING 5000 5 表格有emp
  • empno, ename, job, deptno, comm, sal表格有salgrade
  • grade表格有DEPT

5 个答案:

答案 0 :(得分:3)

根本原因是您使用旧的,已弃用的“隐式连接”语法:

  select e.ename, e.job, d.dname, e.sal, s.grade
  from emp e, dept d, salgrade s
  where e.deptno = d.deptno

您只是加入了empdept表中WHERE子句中的条件 - 您的salgrade表已交叉加入 - 一个条目将匹配反对结果中的所有条目。

我建议始终使用新的ANSI标准JOIN语法:

  SELECT 
       e.ename, e.job, d.dname, e.sal, s.grade
  FROM 
       dbo.emp e
  INNER JOIN 
       dbo.dept d ON e.deptno = d.deptno
  INNER JOIN 
       dbo.salgrade s ON ???????

马上,你看到有关如何将salgrade表加入你的查询的无条件 - 你需要在这里提供一个合适的条件,那么你的结果应该没问题!

答案 1 :(得分:2)

创建一个可以显示所有员工的姓名,工作,部门名称,薪酬和等级(来自SALGRADE表)的查询 查询应该是---

SELECT e.ename,e.job,dname,e.sal,g.grade 
FROM emp e,dept,salgrade g 
WHERE (e.sal BETWEEN g.losal AND g.hisal) AND e.deptno=dept.deptno;

答案 2 :(得分:1)

尝试这个。

SELECT e.ename,e.job,d.dname,e.sal,s.grade
  FROM emp e , dept d ,salgrade s
 WHERE e.deptno=d.deptno
 GROUP BY e.ename

答案 3 :(得分:1)

 select e.ename, e.job, d.dname, e.sal, s.grade
   from emp e, dept d, salgrade s
  where e.deptno = d.deptno
    and s.grade in (1,2,3,4,5)

答案 4 :(得分:-1)

在使用连接时尝试这一点

import re
import random
import string

def format_string_to_regex(format_string: str) -> re.Pattern:
    """Convert a format string template to a regex."""
    unique_string = ''.join(random.choices(string.ascii_letters, k=24))
    stripped_fields = re.sub(r"\{[^\{\}]*\}(?!\})", unique_string, format_string)
    pattern = re.escape(stripped_fields).replace(unique_string, "(.*)")
    pattern = pattern.replace("\{\{","\{").replace("\}\}", "\}")
    return re.compile(f"^{pattern}$")

def is_error_message(error: str, expected_message: MessageId) -> bool:
    """Returns whether the error plausibly matches the MessageId."""
    expected_format = format_string_to_regex(Msg[expected_message])
    return bool(expected_format.match(error))