Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 AULA – UPDATE – DELETE VAMOS REVISAR OS COMANDOS: 1)O COMANDO UPDATE PRESENTA A SEGUINTE SINTAXE: UPDATE <TABELA> SET <ATRIBUTO 1> = <VALOR 1>, <ATRIBUTO 2> = <VALOR 2>, <ATRIBUTO N> = <VALOR N> WHERE (CONDIÇÃO OU CONDIÇÕES) NUNCA ESQUEÇA QUE SE NÃO INFORMAR CONDIÇÃO NO COMANDO UPDATE ELE ALTERARÁ TODOS OS DADOS DA TABELA E PARA VOLTAR ATRÁS SOMENTE COM BACKUP, CASO TENHA, SENÃO TERÁ QUE REFAZER A TABELA TODA. 1.1)SE A ALTERAÇÃO SERÁ FEITA PARA TODOS OS REGISTROS (TUPLAS) DA TABELA USAMOS O COMANDO SEM A CLÁUSULA WHERE EXEMPLO: AUMENTO DE 10% PARA OS FUNCIONÁRIOS UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.1 1.2)SE PRECISARMOS DE CONDIÇÕES PARA A ALTERAÇÃO VAMOS USAR A CLÁUSULA WHERE COM JÁ FIZEMOS COM O COMANDO SELECT EXEMPLO: AUMENTO DE 15% PARA OS HOMENS E 20 PARA AS MULHERES UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.15 WHERE SEXO = 'M' UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.2 WHERE SEXO = 'F' 1.3)QUANDO TEMOS QUE FAZER A ATUALIZAÇÃO DE UM ÚNICO REGISTRO TEMOS QUE UTILIZAR O ATRIBUTO QUE GARANTE A NÃO DUPLICIDADE DE DADOS, OU SEJA A CHAVE PRIMÁRIA (PK-PRIMARY KEY), NO NOSSO CASO O ATRIBUTO FUNCIONARIOID EXEMPLO: FOI SOLICITADA A ALTERAÇÃO DE DADOS DA FUNCIONÁRIA ANA, QUE TEM FUNCIONARIOID = 1, ASSIM TEMOS O COMANDO ABAIXO: UPDATE FUNCIONARIO SET SALARIO = 19000, ENDERECO = 'AV BRASIL, 232' BAIRRO = 'JARDIM EUROPA' CEP = '04520032' WHERE FUNCIONARIOID = 1 VALE SALIENTAR QUE É UM ÚNICO SET PARA TODO O COMANDO, ASSIM COM SÓ TEMOS UM ORDER BY PARA CADA SELECT. 2)O COMANDO DELETE PRESENTA A SEGUINTE SINTAXE: DELETE <TABELA> WHERE (CONDIÇÃO OU CONDIÇÕES) NUNCA ESQUEÇA QUE SE NÃO INFORMAR CONDIÇÃO NO COMANDO DELETE ELE APAGARÁ TODOS OS DADOS DA TABELA E PARA VOLTAR ATRÁS SOMENTE COM BACKUP, CASO TENHA, SENÃO TERÁ QUE REFAZER A TABELA TODA. 2 2.1)SE A EXCLUSÃO SERÁ FEITA PARA TODOS OS REGISTROS (TUPLAS) DA TABELA USAMOS O COMANDO SEM A CLÁUSULA WHERE EXEMPLO: EXCLUSÃO DE TODOS OS FUNCIONÁRIOS DELETE FUNCIONARIO 2.2)SE PRECISARMOS DE CONDIÇÕES PARA A EXCLUSÃO VAMOS USAR A CLÁUSULA WHERE COM JÁ FIZEMOS COM O COMANDO SELECT EXEMPLO: EXCLUIR OS HOMENS E/OU AS MULHERES DELETE FUNCIONARIO WHERE SEXO = 'M' DELETE FUNCIONARIO WHERE SEXO = 'F' 2.3)QUANDO TEMOS QUE EXCLUIR UM ÚNICO REGISTRO TEMOS QUE UTILIZAR O ATRIBUTO QUE GARANTE A NÃO DUPLICIDADE DE DADOS, OU SEJA A CHAVE PRIMÁRIA (PK-PRIMARY KEY), NO NOSSO CASO O ATRIBUTO FUNCIONARIOID EXEMPLO: FOI SOLICITADA A EXCLUSÃO DE DADOS DO FUNCIONÁRIO LUCIANO ARAÚJO, QUE TEM FUNCIONARIOID = 2, ASSIM TEMOS O COMANDO ABAIXO: DELETE FUNCIONARIO WHERE FUNCIONARIOID = 2 3)TEMOS TAMBÉM OS SEGUINTES COMANDOS PARA EXCLUSÃO DE DADOS: ANTES PORÉM VALE SALIENTAR QUE QUANDO USAMOS O COMANDO DELETE SEM A CLÁUSULA WHERE ELE EXCLUIRÁ TODOS OS REGISTROS DA TABELA MAS A NUMERAÇÃO DA CHAVE PRIMÁRIA CONTINUARÁ, OU SEJA, EM NOSSA TABELA TEMOS 10 FUNCIONÁRIOS E SE APÓS <DELETE FUNCIONARIO> FIZERMOS UM INSERT INTO FUNCIONARIO, O VALOR DA CHAVE PRIMÁRIA, FUNCIONARIOID, SERÁ 11. 3.1)COMANDO TRUNCATE TABLE TRUNCATE TABLE <TABELA> O COMANDO TRUNCATE TABLE ELEMINA OS DADOS COMO O COMANDO DELETE, E TAMBÉM REINICIA A CONTAGEM DA CHAVE PRIMÁRIA, NO MESMO CASO ACIMA, APÓS <TRUNCATE TABLE FUNCIONARIO> FIZERMOS UM INSERT INTO FUNCIONARIO, O VALOR DA CHAVE PRIMÁRIA, FUNCIONARIOID, SERÁ 1 NOVAMENTE. 3.2)COMANDO DROP TABLE DROP TABLE <TABELA> JÁ ESTE COMANDO ALÉM DE ELIMINAR OS DADOS TAMBÉM ELIMINA DA TABELA DO BANCO DE DADOS. MUITA ATENÇÃO PARA USÁ-LO. 4)TRANSAÇÃO – TRANSACTION TEMOS UM RECURSO DE SEGURANÇA PARA NOSSAS ATIVIDADE EM SQL, AS TRANSACTIONs, COM ELA PODEMOS RETORNAR A UM PONTO DE ORIGEM SEM PERDER OU ALTERAR OS DADOS INICIAIS. 4.1)COMANDO BEGIN TRAN BEGIN TRAN INICIA A TRANSAÇÃO E A PARTIR DESTE MOMENTO TODOS OS COMANDOS FEITOS NA SEQUÊNCIA PODERÃO SER DEFEITOS OU EFETIVADOS: 3 EXEMPLO: VAMOS DAR AUMENTO DE 10% PARA OS HOMENS, 20% PARA AS MULHERES E EXCLUIR OS DADOS DOS FUNCINÁRIOS QUE FORMAM ADMITIDOS EM 2000. COMO NÃO TEMOS CERTEZA QUE SE ESSE PEDIDO SERÁ OFICIALIZADOS, PARA NOSSA SEGURANÇA VAMOS UTILIZAR OS COMANDOS ABAIXO: NUNCA ESQUEÇA DE FAZER O COMANDO BEGIN TRAN ANTES DOS COMANDOS QUE PODEM SER DESFEITOS, SENÃO NÃO TERÁ COMO DESFAZER TAIS COMANDOS. BEGIN TRAN UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.1 WHERE SEXO = 'M' UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.2 WHERE SEXO = 'F' DELETE FUNCIONARIO WHERE YEAR(DATA_ADMISSAO) = 2000 4.2)COMANDO ROLLBACK TRAN CASO PERCEBEMOS QUE HOUVE ALGUM ERRO EM NOSSAS CONDIÇÕES OU QUE NOS FOI PEDIDO PARA DESFAZER(MOS) A(S) OPERACÃO(ÕES), DESDE DE TENHAMOS FEITO O BEGIN TRAN, USAMOS O COMANDO ROLLBACK TRAN (VOLTAR ATRÁS). ROLLBACK TRAN FEITO ISSO OS DADOS OS ANTES DOS UPDATEs E DELETE SERÃO MANTIDOS 4.3)COMANDO COMMIT TRAN SE TUDO ESTIVER CORRETO PODEMOS ENTÃO EFETIVAR A TRANSAÇÃO COM O COMANDO COMMIT TRAN (EFETIVAR A TRANSAÇÃO). COMMIT TRAN COM ISSO OS DADOS SERÃO ALTERADOS E EXCLUÍDOS. EXEMPLO DENTRO DE UMA PROCEDURE CREATE PROCEURE SP_EXCLUIR @PRODUTOID INT AS DECLARE @ERRO INT SET @ERRO=0 BEGIN TRANSACTION DELETE PRODUTO WHERE PRODUTOID = @PRODUTOID SET @ERRO = @@ERROR IF @ERRO <> 0 BEGIN ROLLBACK TRANSACTION SELECT @ERRO,'OCORREU UM ERRO NA PROCEDURE: SP...' END ELSE BEGIN COMMIT TRANSACTION SELECT @ERRO,'SEM ERROS NA PROCEDURE' END MODELO FÍSICO PARA NOSSA AULA 4 I – COMANDO SELECT <LISTA DE ATRIBUTOS> FROM <TABELA(S)> WHERE <CONDIÇÃO(ÕES)> ORDER BY <ATRIBUTO> ASC/DESC USANDO O COMANDO SELECT PRECISAMOS LISTAR OS SALÁRIOS DAS FUNCIONÁRIAS COM 15% DE AUMENTE E 10% PARA OS FUNCIONÁRIOS. INICIALMENTE CRIAMOS OS SELECT PARA CADA CASO: SELECT FUNCIONARIO,SALARIO,SALARIO * 1.15 AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = 'F' SELECT FUNCIONARIO,SALARIO,SALARIO * 1.10 AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = 'M' ABAIXO TEMOS OS RECORDSETs GERADOS PELAS QUERIES ACIMA: FUNCIONARIO SALARIO AUMENTO ------------------------------------- --------------------------------------- ---------- ANA MARIA SOARES 17000.00 19550.0000 VICTÓRIA MAGALHÃES 7000.00 8050.0000 GLORIA MARIA DE SOUZA 4000.00 4600.0000 BEATRIZ DE OLIVEIRA 2800.00 3220.0000 MARIA APARECIDA DE JESUS 4500.00 5175.0000 (5 row(s) affected) FUNCIONARIO SALARIO AUMENTO -------------------------------------- --------------------------------------- --------- LUCIANO DE ARAÚJO 8000.00 8800.0000 CARLOS ROBERTO SILVA 5000.00 5500.0000 FERNANDO GOMES 3500.00 3850.0000 EDUARDO DA LUZ 1900.00 2090.0000 VICENTE JOSE DOS SANTOS 5000.00 5500.0000(5 row(s) affected) PODEMOS USAR VARIÁVEIS DE MEMÓRIA PARA SUBSTITUIR O SEXO PESQUISADO E O VALOR DO ÍNDICE A SER UTILIZADO, CONFORME ABAIXO: 5 --DECLARAÇÃO DE VARIÁVIES USANDO O COMANDO DECLARE DECLARE @SEXO CHAR(1) DECLARE @INDICE NUMERIC(18,2) --APÓS O DECLARE SER EXECUTADO AS VARIÁVEIS EXISTEM, MAS TÊM VALOR IGUAL A NULL --PARA ATRIBUIR VALORES ÀS VARIÁVEIS DE MEMÓRIA --USAMOS O COMANDO SET SET @SEXO = 'F' SET @INDICE = 1.15 --ASSIM PODEMOS SUBSTITUIR DADOS PELAS VARIÁVEIS DE MEMÓRIA JÁ DEFINIDAS SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO SELECT FUNCIONARIO,SALARIO,SALARIO * 1.15 AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = 'F' SELECT FUNCIONARIO,SALARIO,SALARIO * 1.10 AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = 'M' PROCESSANDO ESTE SCRIPT OS RESULTADO É IDÊNTICO AO ANTERIOR, MAS JÁ ESTAMOS USANDO AS VARIÁVEIS DE MEMÓRIA. FUNCIONARIO SALARIO AUMENTO ------------------------------------- --------------------------------------- ---------- ANA MARIA SOARES 17000.00 19550.0000 VICTÓRIA MAGALHÃES 7000.00 8050.0000 GLORIA MARIA DE SOUZA 4000.00 4600.0000 BEATRIZ DE OLIVEIRA 2800.00 3220.0000 MARIA APARECIDA DE JESUS 4500.00 5175.0000 (5 row(s) affected) FUNCIONARIO SALARIO AUMENTO -------------------------------------- --------------------------------------- --------- LUCIANO DE ARAÚJO 8000.00 8800.0000 CARLOS ROBERTO SILVA 5000.00 5500.0000 FERNANDO GOMES 3500.00 3850.0000 EDUARDO DA LUZ 1900.00 2090.0000 VICENTE JOSE DOS SANTOS 5000.00 5500.0000 (5 row(s) affected) COMO PRECISAMOS SEPARAR UMA LISTA PARA AS FUNCIONÁRIAS E OUTRA PARA OS FUNCIONÁRIOS, PODEMOS USAR O COMANDO IF COMO OPÇÃO. --DECLARAÇÃO DE VARIÁVIES USANDO O COMANDO DECLARE DECLARE @SEXO CHAR(1) DECLARE @INDICE NUMERIC(18,2) --APÓS O DECLARE SER EXECUTADO AS VARIÁVEIS EXISTEM, MAS TÊM VALOR IGUAL A NULL --PARA ATRIBUIR VALORES ÀS VARIÁVEIS DE MEMÓRIA --USAMOS O COMANDO SET SET @SEXO = 'F' SET @INDICE = 1.15 6 --ASSIM PODEMOS SUBSTITUIR DADOS PELAS VARIÁVEIS DE MEMÓRIA JÁ DEFINIDAS --AQUI COLOCAMOS A REGRA ESTABELECIDA, USANDO O COMANDO IF IF @SEXO = 'F' SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO --A OUTRA CONDIÇÃO, POSTERIORMENTE USAREMOS O ELSE DO COMANDO IF IF @SEXO = 'M' SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO PROCESSANDO O SCRIPT ACIMA TEMOS ABAIXO O RECORDSET, SOMENTE COM OS DADOS DAS FUNCIONÁRIAS POIS ESTABELECEMOS PARA A VARIÁVEL @SEXO O VALOR 'F'. FUNCIONARIO SALARIO AUMENTO ------------------------------------- --------------------------------------- ---------- ANA MARIA SOARES 17000.00 19550.0000 VICTÓRIA MAGALHÃES 7000.00 8050.0000 GLORIA MARIA DE SOUZA 4000.00 4600.0000 BEATRIZ DE OLIVEIRA 2800.00 3220.0000 MARIA APARECIDA DE JESUS 4500.00 5175.0000 (5 row(s) affected) SE PRECISARMOS LISTA OS FUNCIONÁRIOS TEMOS QUE MUDAR O VALOR DA VARIÁVEL @SEXO PARA 'M', COM ISSO TEMOS UM NOVO RECORSET, CONFORME ABAIXO: FUNCIONARIO SALARIO AUMENTO -------------------------------------- --------------------------------------- --------- LUCIANO DE ARAÚJO 8000.00 8800.0000 CARLOS ROBERTO SILVA 5000.00 5500.0000 FERNANDO GOMES 3500.00 3850.0000 EDUARDO DA LUZ 1900.00 2090.0000 VICENTE JOSE DOS SANTOS 5000.00 5500.0000 (5 row(s) affected) FINALMENTE PODEMOS CRIAR UMA STORED PROCEDURE PARA SER PROCESSADA E EXIBIR O RECORDSET DESEJADO, ASSIM PODEMOS TRANSFORMAR AS VARIÁVEL @SEXO E @INDICE EM PARÂMETROS, E COM ISSO NÃO SERÁ NECESSÁRIO A CADA PESQUISA TROCAR OS VALORES DAS VARIÁVEIS, POIS ESTES SERÃO INFORMADOS NA CHAMADA DA STORED PROCEDURE. CREATE PROCEDURE SP_PESQUISA_FUNCIONARIO_AUMENTO_SALARIAL --OS PARAMÊTROS DEVEM SER INFORMADOS ANTES DA CLÁUSULA 'AS' --POIS DEPOIS SERÃO ENTIDADAS COMO VARIÁVEIS DE MEMÓRIA -- @SEXO CHAR(1), @INDICE NUMERIC(18,2) --AS VARIÁVEIS DEIXAM DE APARECER AQUI POIS SE TRANSFORMARAM EM PARÂMETROS CONFORME ACIMA --ANTES DA CLÁUSULA AS É PARÂMETRO, SEM USAR O COMANDO DECLARE, DEPOIS É VARIÁVEL DE MEMÓRIA COM A UTILIZAÇÃO DO COMANDO DECLARE AS 7 --AQUI COLOCAMOS A REGRA ESTABELECIDA, USANDO O COMANDO IF IF @SEXO = 'F' SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO --A OUTRA CONDIÇÃO, POSTERIORMENTE USAREMOS O ELSE DO COMANDO IF IF @SEXO = 'M' SELECT FUNCIONARIO,SALARIO,SALARIO * @INDICE AS 'AUMENTO' FROM FUNCIONARIO WHERE SEXO = @SEXO PROCESSANDO O SCRIPT ACIMA A STORED PROCEDURE SP_PESQUISA_FUNCIONARIO_AUMENTO_SALARIAL FOI CRIADA, E PARA PROCESSÁ- LA TEMOS QUE INFORMAR OS PARÂMETROS SEXO E ÍNDICE (NESTA ORDEM POIS SÃO POSICIONAIS, OU SEJA, PRIMEIRO O SEXO E DEPOIS O ÍNDICE, POIS CRIAMOS NESSA ORDEM) SP_PESQUISA_FUNCIONARIO_AUMENTO_SALARIAL 'F',1.15 FUNCIONARIO SALARIO AUMENTO ------------------------------------- --------------------------------------- ---------- ANA MARIA SOARES 17000.00 19550.0000 VICTÓRIA MAGALHÃES 7000.00 8050.0000 GLORIA MARIA DE SOUZA 4000.00 4600.0000 BEATRIZ DE OLIVEIRA 2800.00 3220.0000 MARIA APARECIDA DE JESUS 4500.00 5175.0000 (5 row(s) affected) SP_PESQUISA_FUNCIONARIO_AUMENTO_SALARIAL 'M',1.10 FUNCIONARIO SALARIO AUMENTO -------------------------------------- --------------------------------------- --------- LUCIANO DE ARAÚJO 8000.00 8800.0000 CARLOS ROBERTO SILVA 5000.00 5500.0000 FERNANDO GOMES 3500.00 3850.0000 EDUARDO DA LUZ 1900.002090.0000 VICENTE JOSE DOS SANTOS 5000.00 5500.0000 (5 row(s) affected) II – SUBQUERIES ANTERIORMENTE PARA SABEMOS QUAIS SÃO AS CIDADES QUE PERTENCEM AOS ESTADOS CUJA A UF É SP OU RJ, UTILIZAMOS AS DUAS QUERIES ABAIXO. SENDO A PRIMEIRA PARA SABER QUAL(AIS) AS CHAVE(S) PRIMÁRIA(S) DA TABELA ESTADO (ESTADOID – PK) PARA EM SEGUIDA FAZERMOS A PESQUISA NA TABELA CIDADE USANDO O CHAVE ESTRANGEIRA (ESTADOID - FK). ASSIM TEMOS AS QUERIES ABAIXO COM OS RECORDSET GERADOS: SELECT * FROM ESTADO WHERE UF = 'SP' OR UF = 'RJ' SELECT * FROM CIDADE WHERE ESTADOID IN (1,2) ESTADOID ESTADO UF ----------- -------------------------------------------------- ---- 1 SÃO PAULO SP 2 RIO DE JANEIRO RJ (2 row(s) affected) CIDADEID CIDADE ESTADOID 8 ----------- ------------------------------------------------------------ ----------- 1 SÃO PAULO 1 2 RIO DE JANEIRO 2 (2 row(s) affected) A SUBQUERY É UMA QUERY QUE VAI PASSAR VALORES PARA OUTRA QUERY SER PROCESSADA, NESTE CASO PARA QUE A QUERY DE PESQUISA DE CIDADES ( SELECT * FROM CIDADE WHERE ESTADOID IN (1,2) ) SEJA PROCESSADA TEMOS QUE INICIALMENTE PROCESSAR A QUERY DE ESTADOS COM UF IGUAL A 'SP' OU UF = 'RJ', MAS SÓ PRECISAMOS DOS DADOS DA CHAVE PRIMÁRIA POIS É COM ELA QUE VAMOS PODE ESCREVER O SCRIPT DA PESQUISA USANDO SUBQUERY. TEMOS ENTÃO A PESQUISA DE ESTADO, MAS SÓ TRAZENDO A CHAVE PRIMÁRIA ESTADOIF, CONFORME ABAIXO: SELECT ESTADOID FROM ESTADO WHERE UF = 'SP' OR UF = 'RJ' ESTADOID ----------- 1 2 (2 row(s) affected) PERCEBEMOS QUE O RESULTADO DESTA QUERY É EXATAMENTE O QUE PRECISAMOS PARA QUE A QUERY DE PESQUISA DE CIDADE POSSA SER PROCESSADA, ASSIM A QUERY DE CIDADE UTILIZA A SUBQUERY DE ESTADO PARA SER PROCESSADA, CONFORME ABAIXO: ONDE INICIALMENTE TEMOS A REGRA ABAIXO SELECT * FROM CIDADE WHERE ESTADOID IN (1,2) USANDO O CONCEITO DE SUBQUERY TEMOS O SEGUINTE SCRIPT SELECT * FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF = 'SP' OR UF = 'RJ') CIDADEID CIDADE ESTADOID ----------- ------------------------------------------------------------ ----------- 1 SÃO PAULO 1 2 RIO DE JANEIRO 2 (2 row(s) affected AGORA AO INVÉS DE TERMOS 2 QUERIES PARA ESSE PROCESSAMENTO, PASSAMOS A TER 1 ÚNICA. PODEMOS TER VÁRIOS NÍVEIS DE SUBQUERIES, OU SEJA, PARA SABERMOS QUAIS OS FUNCIONÁRIOS QUE MORAM NOS ESTADOS INFORMADO ACIMA, TEMOS QUE ACRESCENTAR OUTRA QUERY COM A TABELA DE FUNCIONÁRIO, CONFORME ABAIXO: SELECT FUNCIONARIO,SALARIO FROM FUNCIONARIO WHERE CIDADEID IN (SELECT CIDADEID FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF = 'SP' OR UF = 'RJ')) 9 FUNCIONARIO SALARIO -------------------------------------------------------------------------------- ------- ANA MARIA SOARES 7000.00 LUCIANO DE ARAÚJO 8000.00 (2 row(s) affected) VALE SALIENTAR QUE A SUBQUERY RECEBE COMO PARÂMETRO A CHAVE PRIMÁRIA, POR ISSO PERCEBA A POSIÇÃO DE CIDADEID E ESTADOID NAS QUERY ACIMA. AINDA PODEMOS FAZER A PESQUISA INCLUINDO O DEPARTAMENTO PODENDO SER DIRETORIA OU ENFERMARIA SELECT FUNCIONARIO,SALARIO FROM FUNCIONARIO WHERE CIDADEID IN (SELECT CIDADEID FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF = SP' OR UF = 'RJ')) OR DEPARTAMENTOID IN (SELECT DEPARTAMENTOID FROM DEPARTAMENTO WHERE DEPARTAMENTO IN ('DIRETORIA','ENFERMARIA')) FUNCIONARIO SALARIO ------------------------------------------------------------------------------- -------- ANA MARIA SOARES 17000.00 LUCIANO DE ARAÚJO 8000.00 VICENTE JOSE DOS SANTOS 5000.00 (3 row(s) affected) REFERÊNCIAS ELMASRI, Ramez; NAVATHE, Shamkant. B. Sistemas de Banco de Dados. 6ª Edição. São Paulo: Pearson, 2011. GUIMARÃES, Célio Cardoso. Fundamentos de Banco de Dados: Modelagem, Projeto e SQL. 1ª Edição. Campinas SP: Unicamp, 2008. --- -- SELECT MAX(SALARIO) AS 'MAX',MIN(SALARIO) AS 'MIN' FROM FUNCIONARIO -- DECLARE @MAX NUMERIC(18,2),@MIN NUMERIC(18,2) SELECT @MAX=MAX(SALARIO),@MIN=MIN(SALARIO) FROM FUNCIONARIO SELECT @MAX AS 'MAX',@MIN AS 'MIN' 10 SELECT NM_FUNCIONARIO,SALARIO,@MAX - SALARIO,SALARIO - @MIN FROM FUNCIONARIO -- SELECT NM_FUNCIONARIO,SALARIO,(SELECT MAX(SALARIO) FROM FUNCIONARIO)- SALARIO, SALARIO - (SELECT MIN(SALARIO) FROM FUNCIONARIO) FROM FUNCIONARIO-- CREATE PROCEDURE SP_CID_EST @UF CHAR(2) AS DECLARE @ESTADOID INT,@NM_ESTADO CHAR(50) SELECT @ESTADOID=ESTADOID,@NM_ESTADO=NM_ESTADO FROM ESTADO WHERE UF=@UF SELECT NM_CIDADE,@NM_ESTADO AS 'NOME ESTADO',@UF AS 'UF' FROM CIDADE WHERE ESTADOID=@ESTADOID ORDER BY NM_CIDADE -- CREATE PROCEDURE SP_CID_UF @UF CHAR(2) AS DECLARE @ESTADOID INT SELECT @ESTADOID=ESTADOID FROM ESTADO WHERE UF=@UF -- SELECT NM_CIDADE,(SELECT NM_ESTADO FROM ESTADO WHERE UF=@UF) AS 'NOME ESTADO',@UF AS 'UF' FROM CIDADE WHERE ESTADOID=@ESTADOID ORDER BY NM_CIDADE 11 --SUBQUERY SELECT * FROM ESTADO WHERE UF='SP' SELECT * FROM CIDADE WHERE ESTADOID=1 -- SELECT ESTADOID FROM ESTADO WHERE UF='SP' SELECT * FROM CIDADE WHERE ESTADOID=1 -- SELECT ESTADOID FROM ESTADO WHERE UF='SP' SELECT * FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF='SP') -- SELECT *,(SELECT NM_ESTADO FROM ESTADO WHERE UF='SP') AS 'NOME ESTADO' FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF='SP') -- CREATE PROCEDURE SP_ESTADO_SUB @UF CHAR(2) AS SELECT NM_CIDADE,@UF AS 'UF',(SELECT NM_ESTADO FROM ESTADO WHERE UF=@UF) AS 'NOME ESTADO' FROM CIDADE WHERE ESTADOID IN (SELECT ESTADOID FROM ESTADO WHERE UF=@UF) ORDER BY NM_CIDADE
Compartilhar