-- CRIANDO BANCO DE DADOS
mysql> CREATE DATABASE db_senac;
mysql> USE db_senac;

-- CRIANDO TABLEAS
mysql> CREATE TABLE tbl_funcionarios (
    ->   Codigo INT NOT NULL AUTO_INCREMENT,
    ->   PrimeiroNome VARCHAR(50) NOT NULL,
    ->   SegundoNome VARCHAR(50),
    ->   UltimoNome VARCHAR(50) NOT NULL,
    ->   DataNasci DATE NOT NULL,
    ->   CPF CHAR(11) NOT NULL UNIQUE,
    ->   RG VARCHAR(20) NOT NULL,
    ->   Endereco VARCHAR(255) NOT NULL,
    ->   CEP CHAR(8) NOT NULL,
    ->   Cidade VARCHAR(100) NOT NULL,
    ->   Fone VARCHAR(20) NOT NULL,
    ->   CodigoDepartamento INT NOT NULL,
    ->   Funcao VARCHAR(100) NOT NULL,
    ->   Salario DECIMAL(10,2) NOT NULL,
    ->   PRIMARY KEY (Codigo),
    ->   INDEX idx_nome (PrimeiroNome, UltimoNome),
    ->   INDEX idx_departamento_funcao (CodigoDepartamento, Funcao));
    
    --INSERINDO DADOS 
    mysql> INSERT INTO tbl_funcionarios (
    ->   PrimeiroNome, SegundoNome, UltimoNome, 
    ->   DataNasci, CPF, RG, Endereco, CEP,
    ->   Cidade, Fone, CodigoDepartamento, Funcao, Salario
    -> ) VALUES
    ->   ('Maria', 'Silva', 'Barbosa', '1980-01-01', '12345678900', '12345678900', 'Rua da Paz, 123', '12345678', 'Sao Paulo', '1199999999', 1, 'Gerente', 10000.00),
    ->   ('João', NULL, 'Da Silva', '1990-02-02', '98765432100', '98765432100', 'Rua da Felicidade, 456', '98765432', 'Rio de Janeiro', '2188888888', 1, 'Vendedor', 2000.00),
    ->   ('José', 'Carlos', 'Santos', '1985-03-03', '76543210900', '76543210900', 'Rua da Esperança, 789', '76543210', 'Belo Horizonte', '3177777777', 2, 'Analista', 3000.00),
    ->   ('Ana', 'Paula', 'Pereira', '1970-04-04', '65432109800', '65432109800', 'Rua da Alegria, 101', '65432109', 'Porto Alegre', '5166666666', 3, 'Programadora', 4000.00),
    ->   ('Pedro', 'Luiz', 'Oliveira', '1965-05-05', '54321098700', '54321098700', 'Rua da Liberdade, 202', '54321098', 'Salvador', '7155555555', 1, 'Diretor', 5000.00),
    ->   ('Cristina', 'Maria', 'Souza', '1950-06-06', '43210987600', '43210987600', 'Rua da Amizade, 303', '43210987', 'Recife', '8144444444', 2, 'Designer', 6000.00),
    ->   ('Fabiano', NULL, 'Santos', '1975-07-07', '32109876500', '32109876500', 'Rua da Justiça, 404', '32109876', 'Fortaleza', '8533333333', 3, 'Analista de Sistemas', 7000.00)
    ->   ('João', 'Silva', 'Santos', '1990-05-15', '12345678901', '78901234', 'Rua A, 123', '12345678', 'São Paulo', '11-987654321', 1, 'Analista', 5000.00),
    ->   ('Maria', 'Ferreira', 'Souza', '1985-09-10', '98765432101', '56789012', 'Av. B, 456', '54321876', 'Rio de Janeiro', '21-987654321', 2, 'Gerente', 8000.00),
    ->   ('Carlos', NULL, 'Rocha', '1992-02-20', '56789012301', '12345678', 'Rua C, 789', '98765432', 'Belo Horizonte', '31-987654321', 1, 'Programador', 4000.00),
    ->   ('Ana', 'Sousa', 'Pereira', '1988-07-01', '90876543201', '87654321', 'Av. D, 789', '87654321', 'Brasília', '61-987654321', 3, 'Analista de RH', 5500.00),
    ->   ('Pedro', 'Oliveira', 'Almeida', '1995-12-18', '45678901201', '23456789', 'Rua E, 1011', '76543210', 'Curitiba', '41-987654321', 2, 'Desenvolvedor', 4500.00),
    ->   ('Fernanda', NULL, 'Gomes', '1991-03-25', '76543210901', '34567890', 'Av. F, 1213', '65432109', 'Porto Alegre', '51-987654321', 1, 'Analista', 5200.00),
    ->   ('Rafael', 'Martins', 'Pereira', '1987-08-05', '23456789001', '45678901', 'Rua G, 1415', '54321234', 'Salvador', '71-987654321', 2, 'Gerente', 7500.00),
    ->   ('Mariana', NULL, 'Cavalcanti', '1993-01-12', '87654321001', '56789012', 'Av. H, 1617', '43210543', 'Recife', '81-987654321', 3, 'Analista de RH', 5800.00),
    ->   ('Paulo', 'Lima', 'Santos', '1989-06-30', '34567890101', '67890123', 'Rua I, 1819', '32109876', 'Fortaleza', '85-987654321', 2, 'Desenvolvedor', 4300.00),
    ->   ('Amanda', NULL, 'Rodrigues', '1994-11-08', '65432109801', '78901234', 'Av. J, 2021', '21098765', 'Manaus', '92-987654321', 1, 'Programador', 4100.00);

-- VIEWS 
 
 mysql> CREATE VIEW nome_completo_funcionarios AS
    -> SELECT Codigo,CONCAT(primeiroNome,' ', COALESCE(segundoNome,''),' ',UltimoNome) AS nome_Completo
    -> FROM tbl_funcionarios;
    
-- CONSULTAS 

1 - Listar nome e sobrenome ordenado por sobrenome:
 mysql> SELECT primeiroNome, segundoNome FROM tbl_funcionarios ORDER BY segundoNome;

2 - Listar todos os campos de funcionários ordenados por cidade:
mysql> SELECT * FROM tbl_funcionarios ORDER BY cidade;

3 - Liste os funcionários que têm salário superior a R$ 1.000,00 ordenados pelo nome completo:  
mysql> SELECT CONCAT(PrimeiroNome,' ',COALESCE(SegundoNome,''),' ', UltimoNome) AS NomeCompleto, Salario
    ->  FROM tbl_funcionarios 
    -> WHERE Salario > 1000.00
    -> ORDER BY NomeCompleto ;

4 - Liste a data de nascimento e o primeiro nome dos funcionários ordenados do mais novo para o mais velho: 
mysql> SELECT PrimeiroNome, DataNasci FROM tbl_funcionarios ORDER BY (SELECT (2023 - SUBSTRING(DataNasci,1,5)));

5 - Liste os funcionários como uma lista telefônica, com enedeço e cidade: 
mysql> SELECT 
    -> nome_completo AS Nome,
    -> func.Endereco,
    -> func.Cidade,
    -> func.fone
    -> FROM nome_completo_funcionarios
    -> INNER JOIN tbl_funcionarios as func
    -> ON nome_completo_funcionarios.Codigo = func.Codigo
    -> ORDER BY nome_completo;
    
6 - Liste o nome completo de todos os funcionários que não tenham segundo nome:
mysql> SELECT 
    -> CONCAT(PrimeiroNome,' ',COALESCE(SegundoNome,''),' ', UltimoNome) AS NomeCompleto
    -> FROM tbl_funcionarios
    -> WHERE segundoNome IS NULL
    -> ORDER BY NomeCompleto;

7 - Liste os nomes dos funcionários que moram em Ituiutabae que exerçam a função deTelefonista:
mysql> SELECT primeiroNome 
    -> FROM tbl_funcionarios
    -> WHERE cidade = 'Ituiutaba' AND funcao = 'Telefonista';

8 - Liste os nomes dos funcionários que trabalham no departamento 2:
mysql> SELECT CodigoDepartamento, nome_completo_funcionarios.nome_completo 
       FROM tbl_funcionarios
       INNER JOIN nome_completo_funcionarios 
       ON nome_completo_funcionarios.Codigo = tbl_funcionarios.Codigo
       WHERE CodigoDepartamento = 2
       ORDER BY nome_completo;

9 - Liste o nome e o código do departamento de todos os funcionários que ganham mais do queR$ 2000,00:
mysql> SELECT CodigoDepartamento,func.nome_completo 
       FROM tbl_funcionarios 
       INNER JOIN nome_completo_funcionarios AS func 
       ON func.Codigo = tbl_funcionarios.Codigo 
       WHERE Salario > 2000.00;