对以下示例表的查询是什么?

时间:2016-04-21 08:47:32

标签: sql union-all

你可以帮我查一个显示如下表格的查询:

Dept_ID                Dept_Name

10                     Admin
10                     Whalen
20                     Sales
20                     James
20                     King
20                     Smith
40                     Marketing
40                     Neena

依此类推......架构是HR

显示部门ID和部门名称,然后显示在该部门下工作的后续员工姓氏

4 个答案:

答案 0 :(得分:1)

SELECT Dept_ID, Dept_Name
FROM Your_Table

我可以做到这一点很简单。如果没有关于表结构和一些示例数据的更多细节,确切地说出查询应该是什么非常困难(几乎不可能)。

从您的编辑中,您可能需要更多类似的内容;

SELECT DT.Dept_ID, DT.Dept_Name, ET.Emp_Name
FROM Dept_Table AS DT INNER JOIN Emp_Table AS ET ON DT.Dept_ID = ET.Dept_ID
ORDER BY Dept_ID

这显示了下一栏中每个部门的员工,您并不是真的希望同一列中的所有员工。

答案 1 :(得分:0)

假设您的数据库中有一个名为departments的表,其中包含此信息,您的代码可能如下所示:

select 
  dept_id, dept_name
from
  departments

答案 2 :(得分:0)

如果您想显示表格的某些列,就像上面问题中提到的那样,您可以使用以下语法:

  

从table_name中选择column_names

替换:

  1. column_names,其中要显示的列名以逗号分隔 2.table_name,其中包含要显示其列的表的名称

    对于上述问题,以下代码将执行:

  2.   

    从部门选择Dept_Id,Dept_Name;

    如果您的表名是' Department'

    ,则上述代码有效

答案 3 :(得分:0)

当您合并两个数据集时,没有隐式排序,您可以按任何顺序获得结果。

获取必须使用ORDER BY的特定订单。

要使用ORDER BY,您必须有字段来执行此排序。

在您的情况下,伪代码将是...
- ORDER BY [dept_id], [depts-then-employees], [dept_name]

这三者的中间部分是你必须创造的东西。

这样做的一种方法如下。

注意 :仅仅因为您有一个要订购的字段,并不意味着您必须选择它。

SELECT
    dept_id,
    dept_name
FROM
(
    SELECT
        d.dept_id,
        d.dept_name,
        0   AS entity_type_ordinal
    FROM
        department   d

    UNION ALL

    SELECT
        d.dept_id,
        e.employee_name,
        1    AS entity_type_ordinal
    FROM
        department   d
    INNER JOIN
        employee     e
            ON  e.dept_id = d.dept_id
)
   dept_and_emp
ORDER BY
   dept_id,
   entity_type_ordinal,
   dept_name