Новый месяц, новые цели. Ваша помощь помогает проекту двигаться вперед. 🖥️ Поддержите sqltest →
SQL код скопирован в буфер обмена

База данных Employee (Firebird): схема, таблицы и SQL-задачи

Employee — учебная база, которая поставляется вместе с Firebird: сотрудники, отделы, должности, проекты, клиенты и продажи небольшой компании. На SQLtest.online с ней можно работать прямо в браузере: решать задачи с автоматической проверкой и писать свои запросы в песочнице, ничего не устанавливая.

  • 10 таблиц и 1 представление
  • 42 сотрудника
  • 21 отдел
  • 33 SQL-задачи

Что такое Employee

Employee — классическая учебная база Firebird, доставшаяся от InterBase. Она описывает небольшую международную компанию: дерево отделов, сотрудников и историю зарплат, проекты с бюджетами и продажи клиентам.

База небольшая, поэтому результаты легко проверить глазами, но связи в ней интересные: иерархия отделов, составной внешний ключ от сотрудника к должности и связь «многие ко многим» между сотрудниками и проектами. Заодно на ней удобно освоить диалект SQL Firebird.

ER-диаграмма

Диаграмма показывает таблицы Employee и связи между ними по внешним ключам. Нажмите, чтобы открыть её в полном размере.

ER-диаграмма базы данных Employee

Из чего состоит база

Таблицы делятся на три группы.

Персонал

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
USA Dollar
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 USA Генеральный директор 130000.00 250000.00 Нет специфических требований. [null]
  • FOREIGN KEY (JOB_COUNTRY) REFERENCES 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
  • FOREIGN KEY (HEAD_DEPT) REFERENCES 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 Robert Nelson 250 1988-12-28 00:00:00 600 VP 2 USA 105900.00 Nelson, Robert
  • FOREIGN KEY (DEPT_NO) REFERENCES DEPARTMENT(DEPT_NO)
  • FOREIGN KEY (JOB_CODE) REFERENCES JOB(JOB_CODE)
PROJECT - список проектов.
  • PROJ_IDИдентификатор проекта
  • PROJ_NAMEНазвание проекта
  • PROJ_DESCОписание проекта
  • TEAM_LEADERРуководитель проекта
  • PRODUCTПродукт, связанный с проектом
PROJ_ID PROJ_NAME PROJ_DESC TEAM_LEADER PRODUCT
VBASE Video Database Разработка системы управления видео базой данных для управления видео распределением по запросу. 45 software
  • FOREIGN KEY (TEAM_LEADER) REFERENCES EMPLOYEE(EMP_NO)
EMPLOYEE_PROJECT - сотрудники по проектам.
  • EMP_NOНомер сотрудника
  • PROJ_IDИдентификатор проекта
EMP_NO PROJ_ID
144 DGPII
  • FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE(EMP_NO)
  • FOREIGN KEY (PROJ_ID) REFERENCES PROJECT(PROJ_ID)
PROJ_DEPT_BUDGET - бюджет проектов.
  • FISCAL_YEARФискальный год
  • PROJ_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
  • FOREIGN KEY (PROJ_ID) REFERENCES PROJECT(PROJ_ID)
  • FOREIGN KEY (DEPT_NO) REFERENCES DEPARTMENT(DEPT_NO)
SALARY_HISTORY - изменения зарплаты.
  • EMP_NOНомер сотрудника
  • CHANGE_DATEДата изменения заработной платы
  • UPDATER_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
  • FOREIGN KEY (EMP_NO) REFERENCES 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 Signature Design Dale J. Little (619) 530-2710 15500 Pacific Heights Blvd. [null] San Diego CA USA 92121 [null]
  • FOREIGN KEY (COUNTRY) REFERENCES COUNTRY(COUNTRY)
SALES - таблица продаж.
  • PO_NUMBERНомер заказа
  • CUST_NOНомер клиента, связанный с заказом
  • SALES_REPНомер представителя по продажам
  • ORDER_STATUSСтатус заказа
  • ORDER_DATEДата заказа
  • SHIP_DATEДата отгрузки
  • DATE_NEEDEDТребуемая дата (может быть null)
  • PAIDСтатус оплаты
  • QTY_ORDEREDЗаказанное количество
  • TOTAL_VALUEОбщая стоимость заказа
  • DISCOUNTПримененная скидка
  • ITEM_TYPEТип товара в заказе
  • AGEDЗначение старения
PO_NUMBER CUST_NO SALES_REP ORDER_STATUS ORDER_DATE SHIP_DATE DATE_NEEDED PAID QTY_ORDERED TOTAL_VALUE DISCOUNT ITEM_TYPE AGED
V91E0210 1004 11 shipped 1991-03-04 00:00:00 1991-03-05 00:00:00 [null] y 10 5000.00 0.100000 hardware 1.000000000
  • FOREIGN KEY (CUST_NO) REFERENCES CUSTOMER(CUST_NO)
  • FOREIGN KEY (SALES_REP) REFERENCES EMPLOYEE(EMP_NO)

Список представлений этой БД:

PHONE_LIST - представление со списком телефонов сотрудников.
  • EMP_NOНомер сотрудника
  • FIRST_NAMEИмя сотрудника
  • LAST_NAMEФамилия сотрудника
  • PHONE_EXTДобавочный номер сотрудника
  • LOCATIONМестоположение отдела
  • PHONE_NOТелефонный номер отдела
EMP_NO FIRST_NAME LAST_NAME PHONE_EXT LOCATION PHONE_NO
2 Robert Nelson 250 Monterey (408) 555-1234

Примеры запросов

Эти запросы показывают, как связаны данные. Скопируйте любой и запустите в песочнице.

Сотрудник, отдел и должность — соединение по составному ключу из трёх столбцов:

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 →

Частые вопросы

Нужно ли устанавливать Firebird, чтобы работать с Employee?

Нет. Задачи и песочница на SQLtest.online выполняют запросы на сервере, достаточно браузера. В песочнице Employee доступна в Firebird 4.0.

Откуда взялась база Employee?

Она поставляется с Firebird как пример базы данных (employee.fdb) и ведёт историю ещё от InterBase — предшественника Firebird.

Чем отличается SQL в Firebird?

Большая часть стандартного SQL работает как обычно. Первое, с чем вы столкнётесь: FIRST n / SKIP n или FETCH FIRST n ROWS ONLY для ограничения строк и имена объектов в верхнем регистре.