You are on page 1of 71

Linguagem SQL | Prof.

Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Prof. Sidney Melo Frazão
1
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
É a linguagem utilizada para acessar, de forma
estruturada e declarativa, (não procedural, ou seja,
não é necessário que o usuário programe qualquer
Linguagem de Consulta Estruturada (SQL -
Structured Query Language)
não é necessário que o usuário programe qualquer
algoritmo para acessar as tuplas de uma relação)
instâncias de tabelas de bases de dados. Sua
principal tarefa é, portanto, criar e manter objetos,
manipular e recuperar dados do banco de dados,
administrar dados e manter a segurança.
2
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Foi desenvolvida pela IBM, e padronizada pelo
comitê ANSI (American National Standardization
Institute ), segundo o padrão ANSI 89
Introdução
Institute ), segundo o padrão ANSI 89
3
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Se subdivide em:
Linguagem de Definição de Dados (DDL – Data
Definition Language)
Introdução
Definition Language)
Linguagem de Manipulação de Dados (DML –
Data Manipulation Language).
4
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Comentários
1. Com delimitadores: /* e */
Estas marcam delimitam o escopo de um comentário em
uma consulta. Esta pode ser inclusive maior que uma linha.
5
/* Este é um exemplo de um comentário que aparece em
uma ou mais consultas SQL. Como podemos notar, este
comentário não se restringe a apenas uma linha. */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Comentários
2. Sem delimitadores: --
A marca acima indica que, a partir daquele ponto,
tudo que se seguir até o final da linha representa um
comentário. Portanto, caso seja necessário comentar
6
comentário. Portanto, caso seja necessário comentar
uma nova parte da consulta em uma linha posterior,
deve-se ou utilizar os delimitadores de início e fim de
comentário explanados no item 1, ou marcar com um
novo --. Lembre-se que não se pode continuar
uma consulta após a marca anterior ter sido
indicada.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Comentários
SELECT nome_func -- Estamos selecionando o campo “nome_func”
FROM Funcionário -- da tabela de funcionários
WHERE idade >= 25 -- que tenham pelo menos 25 anos de idade
7
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Três comandos integram esta classe:
CREATE [TABLE | VIEW | INDEX] – Criação de
uma tabela (CREATE TABLE), de uma visão
(CREATE VIEW ) ou de um índice (CREATE
INDEX).
A Linguagem de Definição de Dados
INDEX).
ALTER TABLE – Alteração da definição (meta-
esquema) de uma tabela, com a adição de uma
coluna à esquerda.
DROP [TABLE | VIEW | INDEX] – Destruição
(dados e definição) de uma tabela básica (DROP
TABLE), de uma visão (DROP VIEW) ou de um
índice (DROP INDEX).
8
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Sejam as tabelas:
FUNCIONÁRIO(matricula, nome_func, endereco,
salario, cod_lotacao)
A Linguagem de Definição de Dados
DIVISÃO(cod_divisao, sig_divisao, nome_divisao,
mat_diretor, cod_dep_respon)
DEPARTAMENTO (cod_dep, sig_depto,
nome_depto, mat_diretor, mat_assessor)
9
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
CREATE TABLE nome-da-tabela ( definição-da-
coluna [ , definição-da-coluna ] ) e definição-da-
coluna é definida como: nome-da-coluna tipo -de-
dado
DLD - O comando CREATE TABLE
dado
Exemplo:
CREATE TABLE Funcionário( matricula INT NOT
NULL AUTO_INCREMENT PRIMARY KEY,
nome_func CHAR(30),endereco
VARCHAR(50),salario DECIMAL, cod_lotacao
INT(10) NOT NULL )
10
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
cria a tabela:
FUNCIONÁRIO(matricula, nome_func, endereco,
salario, cod_lotacao);
e a obrigatoriedade de valores não nulos nos
DLD - O comando CREATE TABLE
e a obrigatoriedade de valores não nulos nos
campos matricula e cod_lotacao.
11
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
CREATE VIEW nome-da-visão [ ( nome-do
atributo [ , nome-do atributo ] ) ] AS sub-
consulta
DLD - O comando CREATE VIEW
exemplo
CREATE VIEW Funcionários_Informatica ( matricula,
nome_func ) AS SELECT matricula, nome_func
FROM Funcionário, Divisão WHERE (cod_lotacao
= cod_divisao) AND (sig_divisao = ‘DIDAP’)
12
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
/* Crie a visão “Funcionários_Informatica”, com o
número da matrícula e o nome dos funcionários
que trabalhem na divisão de nome ‘DIDAP’ */
DLD - O comando CREATE VIEW
13
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
ALTER TABLE nome-da-tabela ADD [CONSTRAINT
nome-da-restrição] cláusula -de-restrição | DROP
CONSTRAINT nome-da-restrição | ADD [COLUMN]
nome-do-atributo tipo-de-dado [cláusula default]
[cláusula nula ] [restrição-da-coluna] | DROP
DLD - O comando ALTER TABLE
[cláusula nula ] [restrição-da-coluna] | DROP
[COLUMN] nome-do-atributo RESTRI CT |CASCADE
exemplo
ALTER TABLE Funcionário ADD telefone varchar(15)
transforma a tabela de Funcionários em:
FUNCIONÁRIO(matricula, nome_func, endereco, salario,
cod_lotacao, telefone)
14
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
DROP TABLE nome-da-tabela
Esta sentença não só remove a
descrição da tabela do catálogo do
DLD - O comando DROP TABLE
descrição da tabela do catálogo do
banco, como todas suas instâncias,
visões e índices definidos sobre ela.
Exemplo
DROP TABLE Funcionário /* Remova do banco de
dados a tabela “Funcionário” */
15
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
DROP VIEW nome-da-visão
Remoção da visão especificada, bem
como todas as visões definidas a partir
DLD - O comando DROP VIEW
como todas as visões definidas a partir
da especificada.
Exemplo:
DROP VIEW Funcionários_Informatica /*
Remova do banco de dados a visão
“Funcionários_Informatica”
*/
16
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Subcategoria da SQL que permite a
visualização e alteração do conteúdo dos
dados de tabelas básicas, temporárias ou
visões. É de valia tanto para o
Linguagem de Manipulação de Dados
visões. É de valia tanto para o
Administrador de Banco de Dados, porém
tem seu uso mais freqüente com os
desenvolvedores de aplicação e usuários
avançados.
17
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Quatro comandos integram esta classe:
SELECT – Seleção de atributos de uma tabela
INSERT – Inclusão de uma ou várias tuplas
Linguagem de Manipulação de Dados
INSERT – Inclusão de uma ou várias tuplas
em uma tabela
DELETE – Remoção de uma ou várias tuplas de
uma tabela
UPDATE – Atualização de valores de atributos
18
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Temos dois formatos possíveis:
INSERT INTO tabela [ ( nome-do atributo [ ,
nome-do atributo ] ) ] VALUES ( valor-
constante [ , valor-constante ] )
DML – Comando INSERT
constante [ , valor-constante ] )
ou
INSERT INTO tabela [ ( nome-do atributo [ ,
nome-do atributo ] ) ] sub-consulta
19
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
EXEMPLO
INSERT INTO Funcionário VALUES ( 10250,
‘Alberto Mello’, ‘Rua do Acre, 80’, 5100.00, 7322)
insere o registro acima com todos os campos
DML – Comando INSERT
insere o registro acima com todos os campos
preenchidos na tabela de Empregados.
INSERT INTO Funcionário ( matricula, nome_func,
cod_lotacao ) VALUES ( 11344, ‘Jorge de Abreu
Soares’, 7321)
insere o registro acima na tabela de Funcionários,
com o campo “endereco” desconhecido (nulo).
20
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
DELETE FROM tabela [WHERE condição ]
Este comando remove todas as tuplas de uma
DML – Comando DELETE
Este comando remove todas as tuplas de uma
tabela, segundo a especificação da cláusula
WHERE, caso exista. Se esta não existir, todas
as instâncias da tabela são removidas; contudo,
a descrição da tabela no catálogo do sistema
permanece intacta, por só poder ser alterada
pelos comandos da linguagem de definição de
dados.
21
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Exemplos:
a) DELETE FROM Funcionário WHERE nome_func = ‘João
da Silva’
removeria todos os Funcionários que tivessem o nome
“João da Silva”.
b) DELETE FROM Funcionário
DML – Comando DELETE
b) DELETE FROM Funcionário
removeria todos os Funcionários da tabela “Funcionário”.
c) DELETE FROM Funcionário WHERE matricula = (
SELECT matricula FROM Funcionário, Divisão WHERE
cod_lotacao = cod_divisao AND Divisão.sig_divisao =
‘DISOP’ ) /* Remova todos os registros de funcionários
que trabalhem na divisão de nome ‘DISOP’ */
removeria todas as tuplas de funcionários da DISOP.
22
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
UPDATE tabela SET atributo = expressão [ , atributo =
expressão ] [WHERE condição]
Modifica o(s) valor(es) de atributo(s) de uma tabela,
DML – Comando UPDATE
Modifica o(s) valor(es) de atributo(s) de uma tabela,
seguindo ou não uma determinada condição.
Exemplo:
UPDATE Funcionário SET endereco = ‘Rua Mena Barreto,
20’ WHERE nome_func = ‘Jorge de Abreu Soares’
/* Modifique os endereços das tuplas cujo nome de
funcionário é “Jorge de Abreu Soares” */
23
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Formato Geral:
SELECT [ALL | DISTINCT] lista-de-seleção
FROM tabela [nome-correlato ] [ , tabela
DML – Comando SELECT
FROM tabela [nome-correlato ] [ , tabela
[nome-correlato] ] [ WHERE condição ] [
GROUP BY atributo [ , atributo ] ] [
HAVING condição ] [ ORDER BY atributo [
, atributo ] [ASC | DESC] ]
24
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
exemplo
DML – Comando SELECT
25
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
exemplo
DML – Comando SELECT
26
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta simples com recuperação de alguns campos:
SELECT matricula, nome_func FROM Funcionário
/* Mostre o número da matrícula e o nome de todos os
funcionários */
DML – Comando SELECT
27
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Especificação de rótulos para dados de saída:
SELECT ‘Nome do Funcionário: ‘, nome_func FROM Funcionário
/* Mostre o nome de todos os funcionários */
DML – Comando SELECT
28
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Uso do qualificador ALL:
SELECT ALL depto FROM Divisao /* Mostre o código das
departamentos responsáveis por divisões */
DML – Comando SELECT
29
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Uso do qualificador DISTINCT:
SELECT DISTINCT depto FROM Divisao /* Mostre sem
repetições o código dos departamentos responsáveis por
divisões */
DML – Comando SELECT
30
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta simples com qualificação:
SELECT matricula, nome_func, endereco, salario FROM
Funcionário WHERE matricula < 11000 /* Mostre o número da
matrícula, o nome, o endereço e o salário de todos os
funcionários que possuam matrícula menor que 11000 */
DML – Comando SELECT
funcionários que possuam matrícula menor que 11000 */
31
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta simples com ordenação padrão (ORDER BY):
SELECT matricula, nome_func FROM Funcionário WHERE
matricula >= 11000 ORDER BY nome_func /* Mostre o número
da matrícula e o nome de todos os funcionários que possuam
matrícula maior ou igual a 11000, em ordem crescente de nome
DML – Comando SELECT
matrícula maior ou igual a 11000, em ordem crescente de nome
do funcionário */
32
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta simples com ordenação decrescente:
SELECT matricula, nome_func FROM Funcionário WHERE
matricula >= 11000 ORDER BY nome_func DESC /* Mostre o
número da matrícula e o nome de todos os funcionários com
matrícula maior ou igual a 11000, em ordem decrescente do
DML – Comando SELECT
matrícula maior ou igual a 11000, em ordem decrescente do
nome do funcionário */
33
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta de junção com igualdade simples:
SELECT cod_dep, Departamento.nome_depto FROM
Departamento, Divisao WHERE (depto = cod_dep) AND
(sig_divisao = ‘DIDAP’) /* Mostre o código e o nome dos
departamentos que tenham uma divisão com nome ‘DIDAP’ */
DML – Comando SELECT
departamentos que tenham uma divisão com nome ‘DIDAP’ */
34
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta de junção com desigualdade simples:
SELECT cod_dep, Departamento.nome_depto FROM
Departamento, Divisao WHERE (depto = cod_dep) AND
(sig_divisao <> ‘DISOP’)
/* Mostre o código e o nome das departamentos que não tenham
DML – Comando SELECT
/* Mostre o código e o nome das departamentos que não tenham
uma divisão com nome ‘DISOP’ */
35
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta de junção de uma tabela com ela mesma:
SELECT f1.matricula AS O_que_ganha_mais, f2. matricula AS
O_que_ganha_menos FROM Funcionário f1, Funcionário f2 WHERE
f1.cod_lotacao = f2.cod_lotacao AND f1.salario > f2.salario AND
f1.cod_lotacao = 7321
DML – Comando SELECT
/* Mostre em pares o número de matrícula do funcionário que receba um
salário maior que outro funcionário, se ambos trabalharem na divisão
de código 7321 */
36
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
Consulta de junção de três tabelas:
SELECT Funcionário.* FROM Departamento, Divisao, Funcionário
WHERE (cod_lotacao = cod_divisao) AND (depto = cod_dep OR
cod_lotacao = cod_dep) AND sig_depto = ‘INF’ORDER BY matricula
/* Mostre todos os dados do funcionário que trabalhem na departamento
DML – Comando SELECT
de nome ‘INF’, ou em uma divisão cuja departamento responsável
tenha nome ‘INF’ */
37
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
A cláusula UNION
Efetua a união lógica do resultado de duas consultas.
Formato Geral:
consulta1 UNION consulta2
O resultado das consultas 1 e 2 devem ser compatíveis, ou seja, os
DML – Comando SELECT
O resultado das consultas 1 e 2 devem ser compatíveis, ou seja, os
atributos retornados pelas consultas devem ser os mesmos.
Exemplo:
( SELECT matricula, nome_func, endereco FROM Funcionário WHERE
endereco LIKE ‘Av.%’ )
UNION ( SELECT matricula, nome_func, endereco FROM Funcionário
WHERE matricula > 11000 )
/* Mostre o número da matrícula, o nome e o endereço dos funcionários
que tenham endereço iniciando com o padrão ‘Av.’ ou com o número
da matrícula menor que 11000 */
38
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
39
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
A cláusula GROUP BY
Este operador organiza a tabela em grupos que possuam o
mesmo valor de atributo. Esta organização é lógica, e não
se dá no nível físico do banco de dados. Por exemplo,
imagine que queremos saber o número de funcionários
40
imagine que queremos saber o número de funcionários
alocados por divisão. Para isso, nossa consulta deverá
trabalhar em cima de grupos, e a partir destes grupos
procederemos os devidos cálculos.
SELECT cod_lotacao, count(*) AS total_funcionarios
FROM Funcionário GROUP BY cod_lotacao
/* Mostre o número da divisão e o seu respectivo
número total de funcionários lotados */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
41
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
42
Se quiséssemos melhorar o as pecto da consulta anterior,
imprimindo não só o código mas também o nome da divisão ou
da departamento, teríamos de realizar uma junção com a tabela
de divisões e a de departamentos, e teríamos a seguinte
consulta:
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
(SELECT sig_divisao, nome_divisao, count (*) AS
total_funcionarios FROM Funcionário, Divisao
WHERE cod_lotacao = cod_divisao -- Junção das
tabelas “Divisão” e “Funcionário”
GROUP BY sig_divisao, nome_divisao )
43
GROUP BY sig_divisao, nome_divisao )
UNION
( SELECT sig_depto, nome_depto, count(*) AS
total_funcionarios FROM Funcionário,
Departamento WHERE cod_lotacao = cod_dep
GROUP BY sig_depto, nome_depto )
/* Mostre o código, o nome, o nome estendido e
o total de funcionários de todas as divisões,
agrupando pelo código das divisões */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Comando SELECT
44
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
Predicados
Especificam um relacionamento entre duas
expressões:
expressão1 predicado expressão2
45
Operadores de comparação válidos:
[not] like
[not] between
[not] in
all | any | some
[not] exists
is [not] NULL
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado LIKE
Usado quando quer-se selecionar strings quaisquer que
obedeçam a um certo padrão. O “caracter-coringa” ‘_‘ é
usado para substituir 1 caracter, e ‘%’ uma
substring.
46
Formato Geral:
expressão [NOT] LIKE padrão [ESCAPE
caracter_de_escape ]
onde expressão pode ser um atributo ou uma expressão
contendo funções de string. O padrão deve
obrigatoriamente ser uma string.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
SELECT * FROM Funcionário WHERE nome_func LIKE
‘C__los %’ OR nome_func LIKE ‘%lores’
/* Mostre todos os dados dos funcionários que tenham
nome terminando começando com ‘C’, seguido de dois
caracteres quaisquer e do padrão ‘los ’. Os demais
47
caracteres quaisquer e do padrão ‘los ’. Os demais
caracteres do nome, depois destas verificações, não
mais importam */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
Se a cláusula ESCAPE for especificada, o
processador de consultas não tratará o caracter
especificado nesta cláusula com um tratamento
comum. Vejamos como seria analisada uma consulta
utilizando esta cláusula:
48
utilizando esta cláusula:
SELECT * FROM Funcionário WHERE nome_func LIKE
‘%\[A-F\]ima’ ESCAPE ‘\’
/* Mostre todos os dados dos funcionários que tenham
nome terminando com o padrão ‘Aima’, ‘Bima’,‘Cima’,
‘Dima’, ‘Eima’ ou ‘Fima’ */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
Na consulta acima, os colchetes têm a função específica
de indicar uma faixa de caracteres (entre os colchetes).
O interpretador de consultas irá procurar no atributo
nome_func das tuplas de funcionário strings de
qualquer tamanho, que necessariamente terminem com
49
qualquer tamanho, que necessariamente terminem com
‘IMA’. Contudo, o quarto caracter, a partir do último,
pode ser qualquer um dentro da faixa A-F, ou seja, os
caracteres ‘A’, ’B’, ‘C’, ‘D’, ‘E’ e ‘F’.
Se alguma tupla tiver um nome que termine em ‘AIMA’,
‘BIMA’, ‘CIMA’, ‘DIMA’, ‘EIMA’ ou ‘FIMA’ satisfazem à
consulta.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado BETWEEN
Verifica se o valor de um determinado atributo ou
expressão pertence a um intervalo, limitado por dois
outros atributos ou expressões.
Formato Geral:
50
Formato Geral:
y [NOT] BETWEEN x AND z Ou seja, a condição acima é
verdadeira se e somente se x < y e y < z.
Exemplos:
SELECT * FROM Funcionário WHERE matricula
BETWEEN 10500 AND 11000
/* Mostre todos os dados dos funcionários que tenham
número de matrícula entre 10500 e 11000 */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
51
Exemplo 2
SELECT * FROM Funcionário WHERE matricula NOT BETWEEN
10500 AND 11000
/* Mostre todos os dados dos funcionários que não tenham número de
matrícula entre 10500 e 11000 */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
52
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado IS NULL
Formato Geral:
expressão IS [NOT] NULL
Esta sentença é verdadeira se o valor retornado por
expressão for nulo (ou não for nulo, quando NOT é
53
expressão for nulo (ou não for nulo, quando NOT é
especificado).
Exemplos:
SELECT * FROM Funcionário WHERE endereco IS
NULL
/* Mostre todos os dados dos funcionários que tenham
um endereço nulo */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
SELECT * FROM Funcionário WHERE endereco
IS NOT NULL
/* Mostre todos os dados dos funcionários que
não tenham um endereço nulo */
54
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado IN
O resultado da expressão que contém este predicado será
verdadeiro se e somente se o valor do operando (chamemos
nos nossos exemplos de x) aparecer na lista de valores ou
na subconsulta subsequente.
Formato Geral:
55
Formato Geral:
x [NOT] IN (lista_de_valores | subconsulta)
onde:
lista_de_valores = valor [ , valor ]
Exemplos:
SELECT * FROM Funcionário WHERE matricula IN (10078,
11404, 11057)
/* Mostre todos os dados dos funcionários que tenham
matrícula igual a 10078, 11404 ou 11057 */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
e
SELECT cod_divisao, nome_divisao FROM Divisao WHERE
56
SELECT cod_divisao, nome_divisao FROM Divisao WHERE
cod_divisao IN ( SELECT cod_lotacao FROM Funcionário WHERE
salario < 1000 )
/* Mostre o código e o nome estendido da divisão que tenha um
funcionário com salário menor que R$ 1000,00 */
Retorna:
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado EXISTS
Formato Geral:
[NOT] EXISTS (subconsulta)
A sentença acima é verdadeira se e somente se o conjunto retornado
pela subconsulta não for vazio. No caso de a palavra reservada
57
pela subconsulta não for vazio. No caso de a palavra reservada
NOT ser explicitada, o sentido se inverte: a sentença é
verdadeira se o conjunto retornado pela subconsulta for vazio.
Exemplos:
SELECT nome_depto FROM Departamento WHERE NOT EXISTS
(SELECT * FROM Divisao WHERE sig_divisao = ‘DIMED’)
/* Exiba todos os dados das departamentos, se por acaso não existir
alguma divisão de nome ‘DIMED’ */
não exibe nenhum resultado, já que a subconsulta retorna uma tupla, e
a consulta principal executaria a seleção no caso de nenhuma tupla
ser encontrada.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
SELECT cod_dep, sig_depto, nome_depto, mat_diretor
FROM Departamento WHERE EXISTS ( SELECT *
FROM Divisao WHERE sig_divisao = ‘DIMED’)
/* Exiba todos os dados das departamentos, se por acaso
existir algum a divisão de nome ‘DIMED’ */
58
existir algum a divisão de nome ‘DIMED’ */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
O predicado ANY-OR-ALL
Formato Geral:
operador-any-or-all (subconsulta)
59
A sentença acima é verdadeira se e somente se
pelo menos um dos valores retornados pela
subconsulta for idêntico ao valor sendo
comparado, no caso do operador ANY. Já com o
operador ALL, a sentença é verdadeira se o valor
comparado for igual a todos os valores retornados
pela subconsulta.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
Os operadores any-or-all podem ser:
= ANY (equivalente ao IN)
<> ANY (ou != ANY)
< ANY
60
< ANY
<= ANY
> ANY
>= ANY
= SOME (equivalente ao IN)
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
<> SOME (ou != SOME)
< SOME
<= SOME
> SOME
>= SOME
61
>= SOME
= ALL
<> ALL(ou != ALL )
< ALL
<= ALL
> ALL
>= ALL
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
SELECT cod_divisao, nome_divisao FROM Divisao
WHERE mat_diretor = ANY ( SELECT matricula FROM
Funcionário WHERE sig_divisao = ‘DIDAP’)
/* Mostre o código e o nome estendido das divisões cujo
nome seja ‘DIDAP’ */
62
nome seja ‘DIDAP’ */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Predicados
SELECT * FROM Funcionário WHERE matricula < ALL (
SELECT matricula FROM Funcionário WHERE
matricula >= 10500 )
/* Mostre todos os dados dos funcionários com número
de matrícula menor que 10500 */
63
de matrícula menor que 10500 */
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Funções
Funções Agregadas
Retornam um único valor de acordo com o conteúdo de
uma coluna. São amplamente utilizadas, já que têm a
característica importante de inferir resultados a partir de
dados resultantes de consultas.
64
dados resultantes de consultas.
Formato Geral:
nome-da-função ( [DISTINCT | ALL] nome-da-função )
onde nome-da-função pode assumir os seguintes valores:
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Funções
65
Observações:
· A palavra reservada DISTINCT elimina ocorrências duplicadas do
argumento, e não pode ser usada em conjunto com as funções “max“ e
“min“.
· Valor padrão ð ALL (todas as ocorrências, mesmo as duplicadas, são
retornadas).
· Valores nulos são ignorados por funções agregadas, exceto a função
“count “.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Funções
A função agregada “count”
Aceita o caracter “*” como máscara, tendo a função de
determinar não mais o número de ocorrências de uma
coluna, mas sim das linhas de uma tabela
Com o caracter “*”, não podemos utilizar os qualificadores
66
Com o caracter “*”, não podemos utilizar os qualificadores
ALL ou DISTINCT
Valores nulos serão computados caso se use esta função
com o caracter “*”
Exemplos:
Baseando-se ainda na tabela e nas instâncias da tabela de
Funcionários:
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Funções
67
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Funções
68
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Nomes Correlatos
Nomes Correlatos
Servem para renomear temporariamente uma tabela em
uma consulta, seja para abreviar nomes de tabelas
longos, como para propiciar a junção de uma tabela
com ela mesma.
69
Exemplo:
SELECT func.nome_func FROM Funcionário func
Observações:
Só podem existir até 30 correlações em uma consulta
21
Nomes correlatos devem ser únicos, ou seja, não se
pode especificar um nome correlatos para duas tabelas
diferentes.
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Nomes Correlatos
Exemplo:
SELECT tab.nome_func FROM Funcionário tab, Cidade
tab -- “tab” foi especificado para duas tabelas distintas
Se for especificado um nome correlativo para uma
tabela, só se deve utilizar este nome na consulta, e não
70
tabela, só se deve utilizar este nome na consulta, e não
mais o nome real da tabela
Exemplo:
SELECT func.nome_func FROM Funcionário func --
Consulta correta
e não
SELECT Funcionário.nome_func FROM Funcionário func
-- Consulta errada
Linguagem SQL | Prof. Sidney Melo Frazão
Linguagem SQL Linguagem SQL
DML – Nomes Correlatos
Não se pode usar nomes de tabelas
existentes como correlatas para
outras tabelas.
Exemplo:
71
Exemplo:
Suponha que, além da tabela de Funcionários,
possuíssemos a tabela de Localidades (endereço
completo do Funcionário) e de Cidades. A seguinte
consulta conteria um erro sintático:
SELECT func.nome_func FROM Funcionário Func,
Cidade Localidade WHERE Localidade.nom_locali =
‘Rio de Janeiro’