Employee 数据库(Firebird):模式、表和 SQL 练习
Employee 是 Firebird 自带的示例数据库:一家小公司的员工、部门、职位、项目、客户和销售。 在 SQLtest.online 上,你可以直接在浏览器中查询它:做自动判题的练习,或在练习场中运行自己的查询,无需安装任何软件。
- 10 张表和 1 个视图
- 42 名员工
- 21 个部门
- 33 道 SQL 练习
什么是 Employee
Employee 是 Firebird 的经典示例数据库,源自 InterBase。它描述一家小型跨国公司:部门树、员工和薪资历史、带预算的项目以及面向客户的销售。
数据库规模不大,结果很容易用肉眼核对,但其中的关系很有意思:部门层级、员工到职位的复合外键,以及员工与项目之间的多对多关系。它也是练习 Firebird SQL 方言的好地方。
ER 图
该图展示了 Employee 的表以及它们之间的外键关系。点击可查看完整尺寸。
数据库包含什么
这些表分为三组。
人员
EMPLOYEE、DEPARTMENT(每个部门都有上级部门)、JOB 和 SALARY_HISTORY。
项目
PROJECT、关联表 EMPLOYEE_PROJECT 以及 PROJ_DEPT_BUDGET 中的年度预算。
销售
CUSTOMER、SALES(采购订单)和包含货币信息的 COUNTRY。
最需要记住的一点:职位由三列共同确定(代码、级别和国家),因此 EMPLOYEE 与 JOB 的连接需要这三列。视图 PHONE_LIST 把员工和所在部门的电话合并在一起。
各表的数据量:
| 表 | 行数 | 内容 |
|---|---|---|
| EMPLOYEE | 42 | 员工 |
| DEPARTMENT | 21 | 部门 |
| JOB | 31 | 职位和薪资范围 |
| SALARY_HISTORY | 49 | 薪资变动 |
| PROJECT | 6 | 项目 |
| EMPLOYEE_PROJECT | 28 | 员工 ↔ 项目 |
| PROJ_DEPT_BUDGET | 24 | 按部门和年份的项目预算 |
| CUSTOMER | 15 | 客户 |
| SALES | 33 | 采购订单 |
| COUNTRY | 16 | 国家和货币 |
表结构
点击表名可查看它的列、示例行和键。
表列表
- COUNTRY国家名称
- CURRENCY国家使用的货币
| COUNTRY | CURRENCY |
|---|---|
| 美国 | 美元 |
- 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)
- 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)
- 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)
- 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)
- EMP_NO员工编号
- PROJ_ID项目ID
| EMP_NO | PROJ_ID |
|---|---|
| 144 | DGPII |
- 外键 (EMP_NO) 参考 EMPLOYEE(EMP_NO)
- 外键 (PROJ_ID) 参考 PROJECT(PROJ_ID)
- 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)
- 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)
- 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. | 小
示例查询这些查询展示了数据之间是如何关联的。复制任意一条,在练习场中运行即可。 员工、部门和职位:基于三列复合键的连接。
订单和客户:Firebird 使用 FIRST n 限制行数。
按主题分类的 SQL 练习基于 Employee 数据库共有 33 道练习,从简单查询到窗口函数和数据修改。答案会在真实的 Firebird 上自动检查。 右侧数字是该主题的练习数量,彩色圆点表示难度范围。
从哪里开始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 限制行数,以及对象名称为大写。 |