新月份,新目标。您的帮助使项目向前推进。 🖥️ 支持 sqltest →
SQL 代码已复制到剪贴板

Employee 数据库(Firebird):模式、表和 SQL 练习

Employee 是 Firebird 自带的示例数据库:一家小公司的员工、部门、职位、项目、客户和销售。 在 SQLtest.online 上,你可以直接在浏览器中查询它:做自动判题的练习,或在练习场中运行自己的查询,无需安装任何软件。

  • 10 张表和 1 个视图
  • 42 名员工
  • 21 个部门
  • 33 道 SQL 练习

什么是 Employee

Employee 是 Firebird 的经典示例数据库,源自 InterBase。它描述一家小型跨国公司:部门树、员工和薪资历史、带预算的项目以及面向客户的销售。

数据库规模不大,结果很容易用肉眼核对,但其中的关系很有意思:部门层级、员工到职位的复合外键,以及员工与项目之间的多对多关系。它也是练习 Firebird SQL 方言的好地方。

ER 图

该图展示了 Employee 的表以及它们之间的外键关系。点击可查看完整尺寸。

Employee 数据库 ER 图

数据库包含什么

这些表分为三组。

人员

EMPLOYEE、DEPARTMENT(每个部门都有上级部门)、JOB 和 SALARY_HISTORY。

项目

PROJECT、关联表 EMPLOYEE_PROJECT 以及 PROJ_DEPT_BUDGET 中的年度预算。

销售

CUSTOMER、SALES(采购订单)和包含货币信息的 COUNTRY。

最需要记住的一点:职位由三列共同确定(代码、级别和国家),因此 EMPLOYEE 与 JOB 的连接需要这三列。视图 PHONE_LIST 把员工和所在部门的电话合并在一起。

各表的数据量:

表行数内容
EMPLOYEE42员工
DEPARTMENT21部门
JOB31职位和薪资范围
SALARY_HISTORY49薪资变动
PROJECT6项目
EMPLOYEE_PROJECT28员工 ↔ 项目
PROJ_DEPT_BUDGET24按部门和年份的项目预算
CUSTOMER15客户
SALES33采购订单
COUNTRY16国家和货币

表结构

点击表名可查看它的列、示例行和键。

表列表

COUNTRY - 国家表。
  • COUNTRY国家名称
  • CURRENCY国家使用的货币
COUNTRY CURRENCY
美国 美元
JOB - 公司员工排班。
  • JOB_CODE职位代码
  • JOB_GRADE职位等级
  • JOB_COUNTRY与职位相关的国家
  • JOB_TITLE职位名称
  • MIN_SALARY职位的最低工资
  • MAX_SALARY职位的最高工资
  • JOB_REQUIREMENT职位要求
  • LANGUAGE_REQ语言要求
JOB_CODE JOB_GRADE JOB_COUNTRY JOB_TITLE MIN_SALARY MAX_SALARY JOB_REQUIREMENT LANGUAGE_REQ
CEO 1 美国 首席执行官 130000.00 250000.00 没有具体要求。 [null]
  • 外键 (JOB_COUNTRY) 参考 COUNTRY(COUNTRY)
DEPARTMENT - 公司部门。
  • DEPT_NO部门编号
  • DEPARTMENT部门名称
  • HEAD_DEPT上级部门(可以为null)
  • MNGR_NO经理编号
  • BUDGET部门预算
  • LOCATION部门位置
  • PHONE_NO部门电话号码
DEPT_NO DEPARTMENT HEAD_DEPT MNGR_NO BUDGET LOCATION PHONE_NO
000 公司总部 [null] 105 1000000.00 蒙特雷 (408) 555-1234
  • 外键 (HEAD_DEPT) 参考 DEPARTMENT(DEPT_NO)
EMPLOYEE - 员工列表。
  • EMP_NO员工编号
  • FIRST_NAME员工的名字
  • LAST_NAME员工的姓氏
  • PHONE_EXT员工的电话分机
  • HIRE_DATE员工入职日期
  • DEPT_NO部门编号
  • JOB_CODE员工的职位代码
  • JOB_GRADE员工的职位等级
  • JOB_COUNTRY与员工职位相关的国家
  • SALARY员工的工资
  • FULL_NAME员工的全名
EMP_NO FIRST_NAME LAST_NAME PHONE_EXT HIRE_DATE DEPT_NO JOB_CODE JOB_GRADE JOB_COUNTRY SALARY FULL_NAME
2 罗伯特 尼尔森 250 1988-12-28 00:00:00 600 VP 2 美国 105900.00 尼尔森,罗伯特
  • 外键 (DEPT_NO) 参考 DEPARTMENT(DEPT_NO)
  • 外键 (JOB_CODE) 参考 JOB(JOB_CODE)
PROJECT - 项目列表。
  • PROJ_ID项目ID
  • PROJ_NAME项目名称
  • PROJ_DESC项目描述
  • TEAM_LEADER项目负责人
  • PRODUCT与项目相关的产品
PROJ_ID PROJ_NAME PROJ_DESC TEAM_LEADER PRODUCT
VBASE 视频数据库 开发一个视频数据库管理系统,用于管理按需视频分发。 45 软件
  • 外键 (TEAM_LEADER) 参考 EMPLOYEE(EMP_NO)
EMPLOYEE_PROJECT - 员工与项目的映射。
  • EMP_NO员工编号
  • PROJ_ID项目ID
EMP_NO PROJ_ID
144 DGPII
  • 外键 (EMP_NO) 参考 EMPLOYEE(EMP_NO)
  • 外键 (PROJ_ID) 参考 PROJECT(PROJ_ID)
PROJ_DEPT_BUDGET - 项目预算。
  • FISCAL_YEAR财政年度
  • PROJ_ID项目ID
  • DEPT_NO部门编号
  • QUART_HEAD_CNT季度人数(可以为null)
  • PROJECTED_BUDGET财政年度的预计预算
FISCAL_YEAR PROJ_ID DEPT_NO QUART_HEAD_CNT PROJECTED_BUDGET
1994 GUIDE 100 [null] 200000.00
  • 外键 (PROJ_ID) 参考 PROJECT(PROJ_ID)
  • 外键 (DEPT_NO) 参考 DEPARTMENT(DEPT_NO)
SALARY_HISTORY - 员工工资变动历史。
  • EMP_NO员工编号
  • CHANGE_DATE工资变动日期
  • UPDATER_ID更新者ID
  • OLD_SALARY之前的工资
  • PERCENT_CHANGE工资变动百分比
  • NEW_SALARY变动后的新工资
EMP_NO CHANGE_DATE UPDATER_ID OLD_SALARY PERCENT_CHANGE NEW_SALARY
28 1992-12-15 00:00:00 admin2 20000.00 10.000000 22000.000000
  • 外键 (EMP_NO) 参考 EMPLOYEE(EMP_NO)
CUSTOMER - 公司客户。
  • CUST_NO客户编号
  • CUSTOMER客户名称
  • CONTACT_FIRST联系人名字
  • CONTACT_LAST联系人姓氏
  • PHONE_NO客户电话号码
  • ADDRESS_LINE1 地址行1
  • ADDRESS_LINE2地址行2(可以为null)
  • CITY客户所在城市
  • STATE_PROVINCE客户所在州或省
  • COUNTRY客户所在国家
  • POSTAL_CODE客户邮政编码
  • ON_HOLD暂停状态(可以为null)
CUST_NO CUSTOMER CONTACT_FIRST CONTACT_LAST PHONE_NO ADDRESS_LINE1 ADDRESS_LINE2 CITY STATE_PROVINCE COUNTRY POSTAL_CODE ON_HOLD
1001 签名设计 戴尔·J. 小

示例查询

这些查询展示了数据之间是如何关联的。复制任意一条,在练习场中运行即可。

员工、部门和职位:基于三列复合键的连接。

SELECT FIRST 3 e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT, j.JOB_TITLE
FROM EMPLOYEE e
JOIN DEPARTMENT d ON d.DEPT_NO = e.DEPT_NO
JOIN JOB j ON j.JOB_CODE = e.JOB_CODE
          AND j.JOB_GRADE = e.JOB_GRADE
          AND j.JOB_COUNTRY = e.JOB_COUNTRY
ORDER BY e.EMP_NO;
FIRST_NAMELAST_NAMEDEPARTMENTJOB_TITLE
RobertNelsonEngineeringVice President
BruceYoungSoftware DevelopmentEngineer
KimLambertField Office: East CoastEngineer

订单和客户:Firebird 使用 FIRST n 限制行数。

SELECT FIRST 3 s.PO_NUMBER, c.CUSTOMER, s.ORDER_DATE, s.TOTAL_VALUE
FROM SALES s
JOIN CUSTOMER c ON c.CUST_NO = s.CUST_NO
ORDER BY s.ORDER_DATE;
PO_NUMBERCUSTOMERORDER_DATETOTAL_VALUE
V91E0210Central Bank1991-03-04 00:00:005000.00
V92J1003MPM Corporation1992-07-26 00:00:002985.00
V92E0340Central Bank1992-10-15 00:00:0070000.00

按主题分类的 SQL 练习

基于 Employee 数据库共有 33 道练习,从简单查询到窗口函数和数据修改。答案会在真实的 Firebird 上自动检查。 右侧数字是该主题的练习数量,彩色圆点表示难度范围。

从哪里开始

Employee 数据库的前几道练习:

  1. 列出部门
  2. 查找非美元/欧元国家
  3. 子部门列表 (JOIN)
  4. 子部门列表
  5. 识别外籍员工
  6. 按部门查找员工
  7. 获取员工薪资
  8. 高薪员工
  9. 薪资高于平均水平的员工
  10. 查找管理部门

全部 Employee 练习 →

常见问题

使用 Employee 需要安装 Firebird 吗?

不需要。SQLtest.online 的练习和练习场都在我们的服务器上执行查询,有浏览器就够了。在练习场中,Employee 可在 Firebird 4.0 上使用。

Employee 数据库从何而来?

它作为示例数据库(employee.fdb)随 Firebird 一起发布,最早可追溯到 Firebird 的前身 InterBase。

Firebird 的 SQL 有什么不同?

大部分标准 SQL 都能照常使用。最先会遇到的差异是:用 FIRST n / SKIP n 或 FETCH FIRST n ROWS ONLY 限制行数,以及对象名称为大写。