Fundamentos do SQL em Gestão de Dados
Fundamentos do SQL em Gestão de Dados
Módulo–III
SQL
Visão Geral
A linguagem IBM SEQUEL (Linguagem de Consulta Estruturada em Inglês) foi desenvolvida como parte do System R
projeto no Laboratório de Pesquisa da IBM em San Jose. Renomeado como SQL (Structured Query)
Language)
• SQL padrão ANSI e ISO:
• SQL-86 ou SQL1
• SQL-89
• SQL-92 ou SQL2
• SQL: 1999 (o nome da linguagem tornou-se compatível com Y2K) ou SQL3
• SQL: 2003
SQL é uma linguagem de banco de dados abrangente, possui instruções para a definição de dados, atualização
e consulta. Possui recursos para definir visões no banco de dados, para especificar segurança e
autorização, para definir restrições de integridade e para especificar controles de transação.
Sistemas comerciais oferecem a maioria, se não todos, os recursos do SQL2, além de conjuntos de recursos variados de versões posteriores
Os conceitos de esquema de banco de dados relacional foram incorporados ao SQL2 para agrupar
tabelas juntas e outras construções que pertencem à mesma aplicação de banco de dados. Um esquema é
identificado por um nome de esquema e inclui um identificador de autorização. Identificador de autorização
indica o usuário ou conta que possui o esquema. Também inclui os descritores para cada
elemento no esquema.
Elementos de esquema incluem tabelas, restrições, visões, domínios e outras construções (como
autorizações que descrevem o esquema. Elementos do esquema podem ser definidos no momento
da criação do esquema ou depois.
• CRIAR ESQUEMA
• Especifica um novo esquema de banco de dados dando-lhe um nome. Exemplo:
• criar esquema de autorização da empresa KUMAR;
• Todos os usuários não estão autorizados a criar esquemas e seus elementos.
• Os privilégios para criar o esquema, tabelas e outras construções podem ser explicitamente concedidos a
os usuários relevantes pelo DBA.
• SQL2 usa o conceito de catálogo.
• O catálogo é uma coleção nomeada de esquemas em um ambiente SQL.
• Um catálogo contém um esquema especial chamado INFORMATION_SCHEMA, que fornece
informações sobre todos os esquemas no catálogo e todos os descritores de elementos de todos os
esquema no catálogo para usuários autorizados.
• Restrições de integridade podem ser definidas para as relações e entre as relações do mesmo
esquema.
• Os esquemas dentro do mesmo catálogo também podem compartilhar certos elementos, como domínio
definições.
• O comando CREATE TABLE é usado para especificar uma nova relação base, dando seu nome, e
especificando cada um de seus atributos e restrições.
• Os atributos são especificados primeiro dando seu nome, seus tipos de dados e restrições para
os atributos como NOT NULL, CHECKS etc. especificados em cada atributo.
• As restrições de chave, integridade de entidade e integridade referencial podem ser especificadas dentro do
CRIE A TABELA comando após a declaração dos atributos, ou pode ser adicionado posteriormente usando o
comando ALTER.
• Uma relação SQL é definida usando o comando criar tabela:
CRIAR TABELA R(A1 D1, A2 D2 ..., Um Dn,
(restrição-de-integridade_1),
...,
(restrição de integridade_k))
• R é o nome da relação
• Cada Ai é um nome de atributo no esquema da relação R
• Di é o tipo de dados dos valores no domínio do atributo Ai
UNIQUE(DNAME),
FOREIGN KEY(MGRSSN) REFERENCES EMPLOYEE (SSN));
CRIAR TABELAPROJETO
(PNAME VARCHAR2 (15) NOT NULL,
PNUMBER INTNOT NULL,
PLOCALIZAÇÃO VARCHAR2 (15) NÃO NULO,
DNUM INTNAONULL,
CHAVE PRIMÁRIA(PNUMBER),
ÚNICO(PNAME)
CHAVE ESTRANGEIRA(DNUM) REFERENCES DEPARTAMENTO (DNUMBER));
CRIE TABLEWORKS_ON
(ESSN CARACTERE (9) NULO NÃO,
PNO INTNOT NULL,
HORAS DECIMAL (3,1) NÃO NULO,
DNO INTNÃO NULO,
CHAVE PRIMÁRIA(ESSN, PNO),
CHAVE ESTRANGEIRA(ESSN) REFERENCIA EMPREGADO (SSN),
CHAVE ESTRANGEIRA(PNO) REFERENCIA PROJETO (PNUMERO));
• O nome do esquema pode ser explicitamente anexado ao nome da relação separado por ponto.
• CRIE A TABELA EMPRESA. EMPREGADO…….
• A tabela EMPLOYEE torna-se parte do esquema COMPANY
n.
oVARCHAR(n) ou CHAR VARYING(n) ou CHARACTER VARYING(N): Comprimento variável
cadeias de caracteres, com comprimento máximo n especificado pelo usuário.
Para strings de comprimento fixo (CARACTERE), uma string mais curta é preenchida com espaços em branco.
• Bit-string: consiste em uma sequência de bits, de comprimento fixo ou variável, comprimento padrão
A cadeia de bits é 1. BLOB também está disponível para especificar colunas que têm grandes valores binários, como
como imagens.
• Data: Tem dez posições, na forma AAAA-MM-DD, os componentes são ANO, MÊS, DIA
• Tempo: tem pelo menos oito posições, no formato HH:MM:SS, os componentes são HORA,
MINUTE, SECOND
Apenas data e hora válidas são permitidas, operadores de comparação podem ser usados.
oTIME(i): Composto por hora: minuto: segundo mais i dígitos adicionais especificando frações
de um segundo formato é hh:mm:ss ii...i
• TIMESTAMP: Um carimbo de data/hora inclui os campos DATA e HORA, além de um mínimo de seis
posições para frações decimais de segundos e um qualificador OPCIONAL COM FUSO HORÁRIO.
oTEMPO COM FUSO HORÁRIO: este tipo de dado inclui seis posições adicionais para
especificando o deslocamento em relação ao fuso horário universal padrão, que está em
intervalo de 13:00 a 12:59 em unidades de HORAS:MINUTOS
Se a cláusula TIMESTAMP WITH TIME ZONE não estiver incluída, o padrão é o fuso horário local para o SQL.
sessão.
• INTERVALO: O tipo de dado intervalo especifica um intervalo - um valor relativo que pode ser usado para
incrementar ou decrementar um valor absoluto de uma data, hora ou carimbo de data/hora.
Os intervalos são qualificados como intervalos de ANO/MÊS ou DIA/HORA.
Pode ser positivo ou negativo quando adicionado ou subtraído de um valor absoluto.
o resultado é um valor absoluto.
Domínios em SQL
• Um domínio pode ser declarado e o domínio pode ser usado com vários atributos.
• CRIAR DOMÍNIO ENO_TYPE COMO CHAR(9)
• ENO_TYPE pode ser usado no lugar de CHAR(9) com SSN, ESSN, MGRSSN.
• O tipo de dado do domínio pode ser alterado, o que será refletido para os numerosos atributos em
o esquema e melhora a legibilidade do esquema.
• Uma cláusula ADEFAULT é usada para declarar um valor padrão para um atributo na ausência de um valor real.
valor.
Sempre que um valor explícito não for fornecido para o atributo, o valor padrão será
anexado.
• Uma cláusula CHECK é usada para restringir os valores de domínio de um atributo.
• Podemos especificar CASCADE, SET NULL ou SET DEFAULT nas restrições de integridade referencial.
(chaves estrangeiras).
Nomeando as restrições
• Um nome de restrição é usado para identificar uma restrição particular caso a restrição precise ser
cancelado ou modificado posteriormente.
Comandos de exclusão
Exemplos:
• CANCELAR ESQUEMA EMPRESA CASCATE;
oSchema e todos os seus elementos foram excluídos.
• EXCLUIR TABELA EMPREGADO CASCATA;
oTable e todos os seus elementos foram excluídos.
• Se a opção RESTRICT for usada em vez de CASCADE
Um esquema é excluído somente se não tiver elementos, caso contrário, um erro será exibido.
Uma tabela é excluída somente se não for referenciada em nenhuma restrição por outra tabela.
comando ALTER
• A definição de uma tabela base pode ser alterada usando o comando ALTER TABLE.
• As várias opções possíveis incluem
adicionando uma coluna
removendo uma coluna
mudando a definição da coluna
adicionando e removendo as restrições da tabela
• O comando ALTER TABLE é utilizado para adicionar um atributo a uma das relações base.
• O novo atributo terá NULLs em todas as tuplas da relação logo após o comando ser
executado; portanto, a restrição NOT NULL não é permitida para tal atributo
Exemplo:
• ALTER TABLE EMPREGADO ADICIONAR CARGO CHAR(12);
• Os usuários do banco de dados devem inserir um valor para o novo atributo CARGO para cada tupla de EMPREGADO.
• Isso pode ser feito usando o comando UPDATE ou pela cláusula DEFAULT.
• O comando ALTER TABLE também é usado para remover um atributo de uma das relações base.
• Para excluir uma coluna, deve-se escolher uma opção CASCADE ou RESTRICT para o comportamento de exclusão.
• ALTER TABLE EMPREGADO REMOVER CARGO;
• Se CASCADE, todas as relações e visões que referenciam a coluna são eliminadas automaticamente.
do esquema junto com a coluna.
• O comando ALTER TABLE também é usado para modificar um atributo de uma das relações base.
• ALTER TABLE EMPLOYEE ALTER MGRSSN DROP DEFAULT;
• ALTER TABLE EMPLOYEE ALTER MGRSSN SET DEFAULT 999;
Query 0: Retrieve the birthdate and address of the employee whose name is ‘John B. Smith’.
SELECIONAR DATA_NASCIMENTO, ENDEREÇO
DE EMPREGADO
ONDE FNAME='John' E MINIT='B.'
E LNAME='Smith';
Π BDATE, ADDRESS (σFNAME=’John’ EMINIT=’B’ ELNAME=’Smith’Funcionário
Query 1: Retrieve the name and address of all employees who work for the ‘ Research’
departamento.
Consulta 2: Para cada projeto localizado em 'Stafford', liste o número do projeto, o controlador
número do departamento, e o sobrenome do gerente do departamento, endereço e data de nascimento.
Query 1A: Retrieve the name and address of all employees who work for the ‘ Research’
departamento.
SELECIONE NOME, SOBRENOME, ENDEREÇO
DE EMPREGADO, DEPARTAMENTO
ONDE DNAME='Pesquisa' E
FUNCIONÁRIO.NÚMERO = DEPARTAMENTO.NÚMERO
Q1B
Consulta 8: Para cada funcionário, recupere o nome do funcionário e o nome dele ou dela
supervisor imediato.
SELECT [Link], [Link], [Link], S. LNAME
DA EMPREGADA E S
ONDE [Link]=[Link]
• Os nomes de relação alternativos E e S são chamados de aliases.
• E e S podem ser considerados como duas cópias diferentes de EMPREGADO; E representa os funcionários em
papel dos supervisionados e S representa funcionários no papel de supervisores
• Se mais de uma relação for especificada na cláusula FROM e não houver condição de junção,
então o PRODUTO CARTESIANO de tuplas é selecionado
Q1O
SELECIONE SSN, NOME_DA_DEPARTAMENTO DA FUNCIONÁRIO, DEPARTAMENTO
Use of * (Asterisk)
• Para recuperar todos os valores dos atributos das tuplas selecionadas, utiliza-se um *, que representa todos os
atributos
• O SQL geralmente trata uma tabela não como um conjunto, mas sim como um multiconjunto, onde tuplas duplicadas podem aparecer.
mais de uma vez em uma tabela e no resultado de uma consulta.
• SQL não elimina automaticamente tuplas duplicadas no resultado das consultas porque:
A eliminação de duplicatas é cara.
O usuário pode querer ver os duplicados no resultado da consulta.
Para uma função agregada, a eliminação de tuplas não é desejada.
• Uma tabela SQL com uma chave primária é restrita a ser um conjunto, uma vez que o valor da chave deve ser
distinto em cada tupla.
• A palavra-chave DISTINCT pode ser usada na cláusula SELECT se os duplicados precisarem ser eliminados no
resultado da consulta.
• As relações resultantes dessas operações de conjunto são conjuntos de tuplas; tuplas duplicadas são
eliminado do resultado
• As operações de conjunto se aplicam apenas a relações compatíveis com união; as duas relações devem ter
os mesmos atributos e os atributos devem aparecer na mesma ordem
• Se os duplicados devem ser mantidos
operação de união (UNION ALL)
diferença de conjunto (MINUS ALL ou EXCEPT ALL)
interseção (INTERSECT ALL)
• (Nem todos podem funcionar em todas as ferramentas)
Consulta 4: Faça uma lista de todos os números de projetos para projetos que envolvem um funcionário cujo sobrenome
o nome é 'Smith' como trabalhador ou como gerente do departamento que controla o projeto.
(SELECIONE DISTINTO PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
ONDE DNUM=DNUMBER E MGRSSN=SSN
E LNAME='Smith')
UNIÃO
(SELECIONE DISTINTO PNUMBER
DA TRABALHA_EM, FUNCIONÁRIO
ONDE ESSN=SSN E LNAME='Smith')
Faça uma lista de todos os números de projetos para projetos que envolvem um funcionário cujo sobrenome é
‘Smith’ como trabalhador e como gerente do departamento que controla o projeto.
(SELECIONE DISTINTO PNUMBER
DE PROJETO, DEPARTAMENTO, EMPREGADO
ONDE DNUM=DNUMBER E MGRSSN=SSN
E LNAME='Smith')
INTERSECTO
(SELECIONE DISTINCT PNUMBER
DE TRABALHOS_EM, EMPREGADO
ONDE ESSN=SSN E LNAME='Smith')
Faça uma lista de todos os números de projetos para projetos que envolvem um funcionário cujo sobrenome é
‘Smith’ as a manager of the department that controls the project but not as aworker.
(SELECIONE DISTINTAMENTE O NÚMERO DO PRODUTO
MENOS
(SELECIONE DISTINTAMENTE O NÚMERO DO PRODUTO
DA TRABALHA_EM, EMPREGADO
ONDE ESSN=SSN E LNAME='Smith')
Query 12: Retrieve all employees whose address is in Houston, Texas. (Here, the value of
o atributo ENDEREÇO deve conter a substring 'Houston, Texas'.
SELECIONAR NOME, SOBRENOME
DE EMPREGADO
ONDE O ENDEREÇO COMO
%Houston, Texas%
Query 12A: Retrieve all employees who were born during the 195Os.(Here, ‘5’ must be the
8º caractere da string de acordo com nosso formato de data, então o valor de BDATE é 5', com cada
sublinhado como um marcador para um único caractere arbitrário.
SELECIONE NOME, SOBRENOME
DE EMPREGADO
ONDE BDATE COMO ‘_ _ _ _ _ 195_’;
(ou'%195_')
Operadores Aritméticos
• Os operadores aritméticos padrão ‘+’, ‘-’, ‘*’, ‘/’ (para adição, subtração, multiplicação,
e divisão, respectivamente) podem ser aplicados a valores numéricos em um resultado de consulta SQL.
Query 13: Show the resulting salaries if every employee working on the ‘ProductX’ project is
dada uma valorização de 10%.
Operadores de Comparação
Consulta 14: Recuperar todos os funcionários do departamento 5 cujo salário está entre R$ 30.000 e
R$ 40.000
SELECIONE *
DE EMPREGADO
ONDE (SALÁRIO ENTRE 30000 E 40000) E DNO = 5;
SELECIONAR *
DE EMPREGADO
ONDE (SALÁRIO >= 30000) E (SALÁRIO <= 40000) E DNO = 5;
• A cláusula ORDER BY é usada para ordenar as tuplas em um resultado de consulta com base nos valores de
algum(s) atributo(s)
• A ordem padrão é em ordem crescente de valores.
• A palavra-chave DESC pode ser usada se a ordem decrescente for necessária; a palavra-chave ASC pode ser
usado para especificar explicitamente a ordem ascendente, embora seja o padrão
Consulta 15: Recupere uma lista de funcionários e os projetos em que cada um trabalha, ordenada por
departamento do funcionário, e dentro de cada departamento ordenado alfabeticamente por funcionário
sobrenome, primeiro nome.
NULLS em SQL
• SQL permite consultas que verificam se um valor é NULL (faltando ou indefinido ou não aplicável)
• SQL usa IS ou IS NOT para comparar NULLs porque considera cada valor NULL distinto de
outros valores NULL, portanto a comparação de igualdade não é apropriada.
Consulta 14: Recupere os nomes de todos os funcionários que não têm supervisores.
DE EMPREGADO
ONDE SUPERSSN É NULO
• Nota: Se uma condição de junção for especificada, tuplas com valores NULL para os atributos de junção não são
incluso no resultado
Renomeando Atributos
• Qualquer atributo que aparecer no resultado pode ser renomeado adicionando o qualificativo AS
seguido pelo novo nome desejado.
• A construção AS pode ser usada tanto para nomes de atributos quanto para nomes de relações e pode ser usada em
tanto as cláusulas SELECT quanto FROM.
Selecione ename como EMPNAME
de emp como EMPREGADO
Consultas Aninhadas
• Algumas consultas requerem que valores existentes no banco de dados sejam buscados e então utilizados em um
condição de comparação.
• Uma consulta SELECT completa, chamada de consulta aninhada, pode ser especificada dentro da cláusula WHERE.
de outra consulta, chamada de consulta externa
Query 1: Retrieve the name and address of all employees who work for the ‘ Research’
departamento.
SELECIONE NOME, SOBRENOME, ENDEREÇO
DE EMPREGADO
ONDE DNO EM
(SELECIONE DNUMBER
DO DEPARTAMENTO
ONDE DNAME='Pesquisa')
• A consulta aninhada seleciona o número do departamento 'Pesquisa'
• A consulta externa seleciona uma tupla de EMPREGADO se o valor DNO estiver no resultado da consulta aninhada
• O operador de comparação IN compara um valor v com um conjunto (ou multi-conjunto) de valores V, e
valoriza como VERDADEIRO se v for um dos elementos em V
• Em geral, podemos ter vários níveis de consultas aninhadas
Consulta 4A: Crie uma lista de todos os números de projeto para projetos que envolvem um funcionário cujo sobrenome
o nome é 'Smith' como trabalhador ou como gerente do departamento que controla o projeto.
SELECIONE DISTINTAMENTE PNUMBER DA PROJETO ONDE PNUMBER ESTÁ EM
(SELECIONAR PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
• Se uma condição na cláusula WHERE de uma consulta aninhada fizer referência a um atributo de uma relação
declaradas na consulta externa, as duas consultas são ditas correlacionadas.
• Uma referência a um atributo não qualificado refere-se à relação declarada na mais interna
consulta aninhada
Consulta 16: Recupere o nome de cada funcionário que tenha um dependente com o mesmo nome
e do mesmo gênero que o funcionário.
SELECIONE [Link]
DE EMPREGADO COMO E
ONDE [Link] EM
(SELECIONE ESSN
DE DEPENDENTE
ONDE E.GÊNERO = D.GÊNERO E
[Link]=DEP_NAME)
Consulta de Bloco Único: Uma consulta escrita com SELECT... FROM... WHERE... blocos aninhados e utilizando
os operadores de comparação = ou IN podem sempre ser expressos como uma única consulta em bloco.
Q16A
SELECIONE [Link]
DE EMPREGADO E, DEPENDENTE D
ONDE [Link] = [Link] E
[Link] = D.DEP_NAME E
E.GÊNERO = D.GÊNERO;
A Função Exists
• EXISTS é usado para verificar se o resultado de uma consulta aninhada correlacionada está vazio (contém
sem tuplas) ou não
• EXISTS e NOT EXISTS são geralmente usados em conjunto com uma consulta aninhada correlacionada
• EXISTS retorna TRUE se houver pelo menos uma tupla no resultado da consulta, caso contrário,
retorna falso.
• NOT EXISTS retorna TRUE se não houver tuplas no resultado da consulta, caso contrário, retorna
falso.
Consulta 16B: Recupere o nome de cada funcionário que tenha um dependente com o mesmo nome
como o funcionário.
SELECIONE [Link] DO EMPREGADO E
ONDE EXISTE
(SELECIONAR *
DE DEPENDENTE D
ONDE [Link]=[Link] E
[Link]=D.DEP_NAME E
[Link] = [Link])
• A consulta aninhada correlacionada recupera todas as tuplas DEPENDENTE relacionadas a uma tupla FUNCIONÁRIO.
Se não existirem, a tupla EMPREGADO é selecionada
• EXISTS é necessário para o poder expressivo do SQL
Q7. Liste os nomes dos gerentes que têm pelo menos um dependente.
SELECIONE NOME, SOBRENOME
DE FUNCIONÁRIO
ONDE EXISTE
(SELECIONE *
DO DEPENDENTE
ONDE SSN=ESSN)
E EXISTE
(SELECIONE *
DO DEPARTAMENTO
ONDE SSN=MGRSSN);
• O SQL original, conforme especificado para o SYSTEM R, também tinha um operador de comparação CONTAINS.
que é usado em conjunto com consultas correlacionadas aninhadas
• Este operador foi removido da linguagem, possivelmente devido à dificuldade em
implementando isso de forma eficiente
Consulta 3: Recupere o nome de cada funcionário que trabalha em todos os projetos controlados por
número do departamento 5.
SELECIONE NOME, SOBRENOME DA EMPREGADO
ONDE ((SELECIONE PNO, ESSN
DE TRABALHA_EM
ONDE SSN=ESSN)
CONTÉM
(SELECIONE PNUMBER
DO PROJETO
ONDE DNUM=5))
• A segunda consulta aninhada, que não é correlacionada com a consulta externa, recupera o projeto
números de todos os projetos controlados pelo departamento 5
• A primeira consulta aninhada, que é correlacionada, recupera os números dos projetos sobre os quais o
o trabalho do funcionário, que é diferente para cada tupla de funcionário devido à correlação
Consulta 13: Recuperar os números de previdência social de todos os empregados que trabalham no número do projeto
1, 2 ou 3.
SELECIONAR DISTINCT ESSN
A PARTIR DO TRABALHO EM
Renomeando Atributos
Consulta 8A: Para cada funcionário, recupere o nome do funcionário e o nome de seu ou sua
supervisor imediato.
SELECIONE [Link] COMO Nome_do_Supervisionado,
Joining Tables
• Podemos especificar uma "relação unida" na cláusula FROM e ela se parece com qualquer outra
relação, mas é o resultado de um junção
• Permite que o usuário especifique diferentes tipos de junções (junção THETA regular, JUNÇÃO NATURAL,
JUNÇÃO EXTERNA À ESQUERDA, JUNÇÃO EXTERNA À DIREITA, JUNÇÃO CRUZADA, etc
Query 1: Retrieve the name and address of all employees who work for the ‘ Research’
departamento.
Q1:SELECIONE NOME, SOBRENOME, ENDEREÇO
DE FUNCIONÁRIO, DEPARTAMENTO
ONDE DNUMBER=DNO E DNAME='Pesquisa';
poderia ser escrito como:
Q1:SELECIONAR NOME, SOBRENOME, ENDEREÇO
DA (FUNCIONÁRIO JUNTE-SE AO DEPARTAMENTO EM DNUMBER=DNO)
ONDE DNAME=’Pesquisa’;
Além disso,
Q1:SELECIONE NOME, SOBRENOME, ENDEREÇO
DE EMPREGADO, DEPARTAMENTO
ONDE DNAME='Pesquisa' E DNUMBER=DNO
ON [Link]=[Link])
Consulta Q2: Para cada projeto localizado em 'Stafford', liste o número do projeto, o controlador.
department number, and the department manager’s last name, address, and birthdate.
pode ser escrito da seguinte forma; isso ilustra múltiplos joins nas tabelas unidas
ONDE PLOCATION='Stafford';
Funções Agregadas
Query 19: Find the sum of the salary of all employees, the maximum salary, the minimum
salário e o salário médio entre os funcionários.
SELECIONE SOMA(SALÁRIO), MÁXIMO(SALÁRIO), MÍNIMO(SALÁRIO), MÉDIA(SALÁRIO) DE FUNCIONÁRIO;
Consulta 20: Encontre a soma dos salários de todos os funcionários, o salário máximo, o mínimo
salário, e o salário médio entre os funcionários que trabalham para o departamento de 'Pesquisa'.
SELECIONAR SOMA(SALÁRIO), MÁXIMO(SALÁRIO), MÍNIMO(SALÁRIO), MÉDIA(SALÁRIO)
DE EMPREGADO, DEPARTAMENTO
ONDE DNO=DNUMBER E
DNAME= ‘Research’
Ou
Agrupamento
• SQL tem uma cláusula GROUP BY para especificar os atributos de agrupamento, que também devem aparecer
na cláusula SELECT
• Em muitos casos, queremos aplicar as funções de agregação a subgrupos de tuplas em uma relação
• Cada subgrupo de tuplas consiste no conjunto de tuplas que têm o mesmo valor para o
atributo(s) de agrupamento
• Então, a função de agregação é aplicada a cada subgrupo de forma independente
Query 20: For each department, retrieve the department number, the number of employees
no departamento e seu salário médio.
SELECIONE DNO, CONTAR (*), MÉDIA (SALÁRIO)
DE EMPREGADO
AGRUPAR POR DNO;
• As tuplas de EMPREGADO são divididas em grupos--cada grupo tendo o mesmo valor para o
atributo de agrupamento DNO
• As funções COUNT e AVG são aplicadas a cada um desses grupos de tuplas separadamente
• A cláusula SELECT inclui apenas o atributo de agrupamento e as funções a serem aplicadas em
cada grupo de tuplas
• Uma condição de junção pode ser usada em conjunto com agrupamento
Query 25: For each project, retrieve the project number, project name, and the number of
funcionários que trabalham nesse projeto.
SELECIONE PNUMBER, PNAME, CONTAR (*)
DE PROJETO, TRABALHA_EM
ONDE PNUMBER=PNO
AGRUPAR POR PNUMBER, PNAME;
• Neste caso, a agrupamento e as funções são aplicadas após a junção das duas relações.
A cláusula Having
• Às vezes, queremos recuperar os valores dessas funções apenas para aqueles grupos que
satisfazer certas condições
• A cláusula HAVING é usada para especificar uma condição de seleção em grupos (em vez de em
tuplas individuais)
Query 26: For each project on which more than two employees work, retrieve the project
number, project name, and the number of employees who work on that project.
SELECIONE PNUMBER, PNAME, CONTAR (*)
DE PROJETO, TRABALHA_EM
ONDE PNUMBER=PNO
AGRUPAR POR PNUMBER, PNAME
TENDO CONTAGEM (*) >2;
Consulta 27: Para cada projeto, recupere o número do projeto, o nome do projeto e o número de
employees from department 5 who work on that project.
SELECIONE PNUMBER, PNAME, CONTAR (*)
DE PROJETO, TRABALHA_EM, EMPREGADO
Query 28: For each department that has more than five employees, retrieve the department
número e o número de seus funcionários que estão ganhando mais de 40000.
Uma consulta é avaliada aplicando primeiro a cláusula WHERE, depois GROUP BY e HAVING, e
finalmente a cláusula SELECT.
Banco de Questões
2. Explain the following commands in SQL, with examples: DROP, CREATE, ALTER, UPDATE,
ROLLBACK, CHECK, EXISTS/NOT EXISTS
3. Explain the various constraints in SQL with syntax and examples.
4. Discuta as instruções INSERT, DELETE e UPDATE em SQL com exemplos.
5. Explain JOIN operations in SQL with syntax and examples.
6. Explique Consultas Aninhadas com exemplos.