A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Daniel Paulo dptsalvador@hotmail.com SQL 2014 - Módulo I Daniel Paulo dptsalvador@hotmail.com.

Apresentações semelhantes


Apresentação em tema: "Daniel Paulo dptsalvador@hotmail.com SQL 2014 - Módulo I Daniel Paulo dptsalvador@hotmail.com."— Transcrição da apresentação:

1 Daniel Paulo dptsalvador@hotmail.com
SQL Módulo I Daniel Paulo

2 Capítulo 7 Consultas com Subqueries São consultas aninhadas em instruções SELECT, INSERT, DELETE ou UPDATE. O limite máximo de aninhamento de uma subquery é de 32 níveis.

3 Capítulo 7 Principais características
As SUBQUERIES podem ser escalares (um valor conforme tipo de dados definido) É possível obter 1 ou mais colunas por SUBQUERY Deve estar entre parênteses Em instruções SELECT, UPDATE, INSERT e DELETE uma SUBQUERY é utilizada nos mesmos locais das expressões Alguns tipos de dados não podem ser utilizados nas lista de seleção: NTEXT, TEXT e IMAGE

4 Capítulo 7 Operadores (=, < , > , < > , > = , <=, !> ou !< ) devem ser associados a SUBQUERY que retornam apenas 1 valor com 1 coluna Para utilização de listas de valores é necessário utilizar IN ou EXISTS A utilização da cláusula ORDER BY só é possível caso a cláusula TOP seja utilizada

5 Capítulo 7 -- Clientes que compraram em Janeiro de 2007
SELECT * FROM CLIENTES WHERE EXISTS (SELECT * FROM PEDIDOS WHERE CODCLI = CLIENTES.CODCLI AND DATA_EMISSAO BETWEEN ' ' AND ' ') -- OU WHERE CODCLI IN (SELECT CODCLI FROM PEDIDOS WHERE DATA_EMISSAO BETWEEN ' ' AND ' ')

6 Capítulo 7 -- Clientes que NÃO compraram em Janeiro de 2007
SELECT * FROM CLIENTES WHERE NOT EXISTS (SELECT * FROM PEDIDOS WHERE CODCLI = CLIENTES.CODCLI AND DATA_EMISSAO BETWEEN ' ' AND ' ') -- OU WHERE CODCLI NOT IN (SELECT CODCLI FROM PEDIDOS WHERE DATA_EMISSAO BETWEEN ' ' AND ' ')

7 Capítulo 7 Subqueries introduzidas com IN e NOT IN
-- Lista de empregados cujo cargo tenha salário inicial -- inferior a 5000 SELECT * FROM EMPREGADOS WHERE COD_CARGO IN ( SELECT COD_CARGO FROM TABELACAR WHERE SALARIO_INIC < 5000)

8 Capítulo 7 SELECT * FROM TABELADEP
--Lista de departamentos onde não existe nenhum funcionário SELECT * FROM TABELADEP WHERE COD_DEPTO NOT IN ( SELECT COD_DEPTO FROM EMPREGADOS WHERE COD_DEPTO IS NOT NULL) --OU SELECT E.CODFUN , E.NOME, E.COD_DEPTO, E.COD_CARGO, D.COD_DEPTO, D.DEPTO FROM EMPREGADOS E RIGHT JOIN TABELADEP D ON E.COD_DEPTO = D.COD_DEPTO WHERE E.COD_DEPTO IS NULL

9 Capítulo 7 SELECT * FROM TABELACAR
-- Lista de cargos em que não existe nenhum funcinário -- cadastrado SELECT * FROM TABELACAR WHERE COD_CARGO NOT IN ( SELECT COD_CARGO FROM EMPREGADOS WHERE COD_CARGO IS NOT NULL) --OU SELECT C.COD_CARGO , C.CARGO FROM EMPREGADOS E RIGHT JOIN TABELACAR C ON E.COD_CARGO = C.COD_CARGO WHERE E.COD_CARGO IS NULL

10 Capítulo 7 Subqueries introduzidas com sinal de =
-- Funcionário(s) que ganha(m) menos SELECT * FROM EMPREGADOS WHERE SALARIO = (SELECT MIN(SALARIO) FROM Empregados) -- o mesmo que SELECT TOP 1 WITH TIES * FROM EMPREGADOS WHERE SALARIO IS NOT NULL ORDER BY SALARIO

11 Capítulo 7 -- Funcionário mais novo na empresa
SELECT * FROM EMPREGADOS WHERE DATA_ADMISSAO = (SELECT MAX(DATA_ADMISSAO) FROM EMPREGADOS) -- O mesmo que SELECT TOP 1 WITH TIES * FROM EMPREGADOS ORDER BY DATA_ADMISSAO DESC

12 Capítulo 7 Subqueries correlacionadas
São aquelas que possuem referência a uma ou mais colunas da query externa -- Grava no campo SALARIO de cada funcionário o -- valor de salário inicial contido na tabela de cargos UPDATE EMPREGADOS SET SALARIO = (SELECT SALARIO_INIC FROM TABELACAR WHERE COD_CARGO = EMPREGADOS.COD_CARGO)

13 Capítulo 7 Subqueries correlacionadas com EXISTS
Ao utilizarmos a cláusula EXISTS não é retornado dados e sim TRUE ou FALSE Antes de EXISTS não deve haver coluna, constante ou expressão Ao utilizar EXISTS, sua lista de seleção será normalmente um asterisco -- Clientes que NÃO compraram em Janeiro de 2007 SELECT * FROM CLIENTES WHERE NOT EXISTS (SELECT * FROM PEDIDOS WHERE CODCLI = CLIENTES.CODCLI AND DATA_EMISSAO BETWEEN ' ' AND ' ')

14 Capítulo 7 Diferenças entre subqueries e associações
Associações são mais rápidas, porém não lidam com lista de valores As subqueries facilitam na visualização e organização da query

15 Capítulo 7 -- Calcula o total vendido por cada vendedor em Janeiro/ e a porcentagem das suas vendas em relação ao total -- vendido no mês SELECT P.CODVEN, V.NOME, SUM(P.VLR_TOTAL) AS TOT_VENDIDO, 100 * SUM(P.VLR_TOTAL) / (SELECT SUM(VLR_TOTAL) FROM PEDIDOS WHERE DATA_EMISSAO BETWEEN ' ' AND ' ') AS PORCENTAGEM FROM PEDIDOS P JOIN VENDEDORES V ON P.CODVEN = V.CODVEN WHERE P.DATA_EMISSAO BETWEEN ' ' AND ' ' GROUP BY P.CODVEN, V.NOME

16 Capítulo 7 Tabelas temporárias São armazenadas no banco tempdb
Utilizar o símbolo # para tabela temporária associadas a conexão atual Quando é utilizado o símbolo ## todos os outros usuários poderão visualizar Tabelas criadas localmente serão excluídas ao encerrar a conexão Tabelas globais serão excluídas quando todo os usuários conectados a elas encerram suas seções Exemplo página 210

17 Capítulo 7 Laboratório página 256 à 263


Carregar ppt "Daniel Paulo dptsalvador@hotmail.com SQL 2014 - Módulo I Daniel Paulo dptsalvador@hotmail.com."

Apresentações semelhantes


Anúncios Google