Banco de dados Employee (Firebird): esquema, tabelas e exercícios de SQL
Employee é o banco de exemplo que acompanha o Firebird: funcionários, departamentos, cargos, projetos, clientes e vendas de uma pequena empresa. No SQLtest.online você consulta o banco direto no navegador: resolve exercícios com correção automática e executa suas próprias consultas no playground, sem instalar nada.
- 10 tabelas e 1 view
- 42 funcionários
- 21 departamentos
- 33 exercícios de SQL
O que é o Employee
Employee é o banco de exemplo clássico do Firebird, herdado do InterBase. Ele descreve uma pequena empresa internacional: a árvore de departamentos, os funcionários e o histórico de salários, projetos com orçamentos e vendas a clientes.
O banco é pequeno, então os resultados são fáceis de conferir, mas tem relacionamentos interessantes: uma hierarquia de departamentos, uma chave estrangeira composta de funcionários para cargos e ligações de muitos para muitos entre funcionários e projetos. Também é o lugar para praticar o dialeto SQL do Firebird.
Diagrama ER
O diagrama mostra as tabelas do Employee e as chaves estrangeiras entre elas. Clique para abrir em tamanho real.
O que há no banco
As tabelas se dividem em três grupos.
Pessoal
EMPLOYEE, DEPARTMENT (cada departamento tem um superior), JOB e SALARY_HISTORY.
Projetos
PROJECT, a tabela de ligação EMPLOYEE_PROJECT e os orçamentos anuais em PROJ_DEPT_BUDGET.
Vendas
CUSTOMER, SALES (pedidos) e COUNTRY com as moedas.
O ponto principal: um cargo é identificado por três colunas ao mesmo tempo (código, nível e país), por isso a junção de EMPLOYEE com JOB precisa das três. A view PHONE_LIST combina os funcionários com os telefones dos departamentos.
Quantos dados há nas tabelas:
| Tabela | Linhas | Conteúdo |
|---|---|---|
| EMPLOYEE | 42 | funcionários |
| DEPARTMENT | 21 | departamentos |
| JOB | 31 | cargos e faixas salariais |
| SALARY_HISTORY | 49 | alterações salariais |
| PROJECT | 6 | projetos |
| EMPLOYEE_PROJECT | 28 | funcionários ↔ projetos |
| PROJ_DEPT_BUDGET | 24 | orçamentos de projetos por departamento e ano |
| CUSTOMER | 15 | clientes |
| SALES | 33 | pedidos |
| COUNTRY | 16 | países e moedas |
Estrutura das tabelas
Clique em uma tabela para ver suas colunas, uma linha de exemplo e as chaves.
Lista de tabelas
- COUNTRYNome do país
- CURRENCYMoeda usada no país
| COUNTRY | CURRENCY |
|---|---|
| USA | Dollar |
- JOB_CODECódigo do trabalho
- JOB_GRADEGrau do trabalho
- JOB_COUNTRYPaís associado ao trabalho
- JOB_TITLETítulo do trabalho
- MIN_SALARYSalário mínimo para o trabalho
- MAX_SALARYSalário máximo para o trabalho
- JOB_REQUIREMENTRequisitos do trabalho
- LANGUAGE_REQRequisitos de idioma
| JOB_CODE | JOB_GRADE | JOB_COUNTRY | JOB_TITLE | MIN_SALARY | MAX_SALARY | JOB_REQUIREMENT | LANGUAGE_REQ |
|---|---|---|---|---|---|---|---|
| CEO | 1 | USA | Chief Executive Officer | 130000.00 | 250000.00 | No specific requirements. | [null] |
- FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY(COUNTRY)
- DEPT_NONúmero do departamento
- DEPARTMENTNome do departamento
- HEAD_DEPTDepartamento principal (pode ser nulo)
- MNGR_NONúmero do gerente
- BUDGETOrçamento do departamento
- LOCATIONLocalização do departamento
- PHONE_NONúmero de telefone do departamento
| DEPT_NO | DEPARTMENT | HEAD_DEPT | MNGR_NO | BUDGET | LOCATION | PHONE_NO |
|---|---|---|---|---|---|---|
| 000 | Corporate Office | [null] | 105 | 1000000.00 | Monterey | (408) 555-1234 |
- FOREIGN KEY (HEAD_DEPT) REFERENCES DEPARTMENT(DEPT_NO)
- EMP_NONúmero do funcionário
- FIRST_NAMEPrimeiro nome do funcionário
- LAST_NAMESobrenome do funcionário
- PHONE_EXTRamal do telefone do funcionário
- HIRE_DATEData de contratação do funcionário
- DEPT_NONúmero do departamento
- JOB_CODECódigo do trabalho do funcionário
- JOB_GRADEGrau do trabalho do funcionário
- JOB_COUNTRYPaís associado ao trabalho do funcionário
- SALARYSalário do funcionário
- FULL_NAMENome completo do funcionário
| 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)
- PROJ_IDID do projeto
- PROJ_NAMENome do projeto
- PROJ_DESCDescrição do projeto
- TEAM_LEADERLíder da equipe do projeto
- PRODUCTProduto associado ao projeto
| PROJ_ID | PROJ_NAME | PROJ_DESC | TEAM_LEADER | PRODUCT |
|---|---|---|---|---|
| VBASE | Video Database | Development of a video database management system for managing video distribution on demand. | 45 | software |
- FOREIGN KEY (TEAM_LEADER) REFERENCES EMPLOYEE(EMP_NO)
- EMP_NONúmero do funcionário
- PROJ_IDID do projeto
| EMP_NO | PROJ_ID |
|---|---|
| 144 | DGPII |
- FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE(EMP_NO)
- FOREIGN KEY (PROJ_ID) REFERENCES PROJECT(PROJ_ID)
- FISCAL_YEARAno fiscal
- PROJ_IDID do projeto
- DEPT_NONúmero do departamento
- QUART_HEAD_CNTContagem de cabeças do trimestre (pode ser nulo)
- PROJECTED_BUDGETOrçamento projetado para o ano fiscal
| 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)
- EMP_NONúmero do funcionário
- CHANGE_DATEData da mudança salarial
- UPDATER_IDID do atualizador
- OLD_SALARYSalário anterior
- PERCENT_CHANGEPercentual de mudança no salário
- NEW_SALARYNovo salário após a mudança
| 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)
- CUST_NONúmero do cliente
- CUSTOMERNome do cliente
- CONTACT_FIRSTPrimeiro nome da pessoa de contato
- CONTACT_LASTSobrenome da pessoa de contato
- PHONE_NONúmero de telefone do cliente
- ADDRESS_LINE1Linha de endereço 1
- ADDRESS_LINE2Linha de endereço 2 (pode ser nulo)
- CITYCidade do cliente
- STATE_PROVINCEEstado ou província do cliente
- COUNTRYPaís do cliente
- POSTAL_CODECódigo postal do cliente
- ON_HOLDStatus de espera (pode ser nulo)
| 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)
- PO_NUMBERNúmero do pedido de compra
- CUST_NONúmero do cliente associado ao pedido
- SALES_REPNúmero do representante de vendas
- ORDER_STATUSStatus do pedido
- ORDER_DATEData do pedido
- SHIP_DATEData de envio
- DATE_NEEDEDData necessária (pode ser nulo)
- PAIDStatus de pagamento
- QTY_ORDEREDQuantidade pedida
- TOTAL_VALUEValor total do pedido
- DISCOUNTDesconto aplicado
- ITEM_TYPETipo de item no pedido
- AGEDValor envelhecido
| 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)
Abaixo está a lista de views deste banco de dados:
- EMP_NONúmero do funcionário
- FIRST_NAMEPrimeiro nome do funcionário
- LAST_NAMESobrenome do funcionário
- PHONE_EXTRamal do telefone do funcionário
- LOCATIONLocalização do departamento
- PHONE_NONúmero de telefone do departamento
| EMP_NO | FIRST_NAME | LAST_NAME | PHONE_EXT | LOCATION | PHONE_NO |
|---|---|---|---|---|---|
| 2 | Robert | Nelson | 250 | Monterey | (408) 555-1234 |
Exemplos de consultas
Estas consultas mostram como os dados se relacionam. Copie qualquer uma e execute no playground.
Um funcionário, departamento e cargo: uma junção por chave composta de três colunas.
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_NAME | LAST_NAME | DEPARTMENT | JOB_TITLE |
|---|---|---|---|
| Robert | Nelson | Engineering | Vice President |
| Bruce | Young | Software Development | Engineer |
| Kim | Lambert | Field Office: East Coast | Engineer |
Pedidos e clientes: o Firebird usa FIRST n para limitar as linhas.
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_NUMBER | CUSTOMER | ORDER_DATE | TOTAL_VALUE |
|---|---|---|---|
| V91E0210 | Central Bank | 1991-03-04 00:00:00 | 5000.00 |
| V92J1003 | MPM Corporation | 1992-07-26 00:00:00 | 2985.00 |
| V92E0340 | Central Bank | 1992-10-15 00:00:00 | 70000.00 |
Exercícios de SQL por tema
Há 33 exercícios no banco Employee, de seleções simples a funções de janela e alteração de dados. As soluções são verificadas automaticamente em um Firebird real. O número à direita é a quantidade de exercícios do tema; os pontos coloridos mostram a faixa de dificuldade.
- Fundamentos de SQL 3
- Funções de Agregação 3
- Funções de Janela 2
- Consultas Analíticas 1
- Consultas de Manipulação de Dados (DML) 1
Por onde começar
Os primeiros exercícios do banco Employee:
- Exibir departamentos
- Encontre países que não usam Dólar/Euro
- Lista de Subdepartamentos (JOIN)
- Obter uma lista de subdepartamentos
- Encontre funcionários estrangeiros
- Encontrar funcionários por departamento
- Encontre o salário do funcionário
- Encontre funcionários com salários altos
- Funcionários com Salário Acima da Média
- Encontre o departamento
Todos os exercícios do Employee →
Perguntas frequentes
Preciso instalar o Firebird para usar o Employee?
Não. Os exercícios e o playground do SQLtest.online executam as consultas nos nossos servidores, então basta um navegador. No playground, o Employee está disponível no Firebird 4.0.
De onde vem o banco Employee?
Ele acompanha o Firebird como banco de exemplo (employee.fdb) e vem desde o InterBase, o antecessor do Firebird.
Em que o SQL do Firebird é diferente?
A maior parte do SQL padrão funciona normalmente. As primeiras diferenças que você vai encontrar: FIRST n / SKIP n ou FETCH FIRST n ROWS ONLY para limitar linhas, e nomes de objetos em maiúsculas.