• Nenhum resultado encontrado

Introdução. Categorias

N/A
N/A
Protected

Academic year: 2021

Share "Introdução. Categorias"

Copied!
104
0
0

Texto

(1)
(2)

Introdução

 SQL (Structured Query Language):

desenvolvida pela IBM (70) como parte do sistema System R. A SQL foi inicialmente chamada de SEQUEL

 É a linguagem de consulta padrão para os

SGBDR's

 Já existem padrões propostos:

ANSI-SQL(SQL-89), SQL-92 e padrões mais recentes: SQL:1999 e SQL:2003.

(3)

Introdução

O padrão SQL define precisamente uma

interface para a definição de tabelas, para as operações sobre as mesmas (seleção, projeção, junção, e outras) e para a definição de regras de integridade de bancos de dados.

(4)

Introdução

Categorias

 DDL: Linguagem de Definição de Dados. Usada para definir os esquemas, atributos, visões, regras de

integridade, índices, etc.

 DML: Linguagem de Manipulação de Dados. Usada

para se ter acesso aos dados armazenados no BD.

 DCL: Linguagem de controle dos dados. Usada para

(5)
(6)

Modelo Relacional

 Banco (codigo, nome, endereco)

 Agencia_Bancaria (numagencia, banco_fk, endereco)

 Conta (numconta, saldo, tipo, numagencia_fk, banco_fk)

 Emprestimo (numempr, valor, tipo, numagencia_fk, banco_fk)

 Cliente (codigo, nome, telefone, endereco)  Conta_cliente (cliente_fk, conta_fk)

(7)
(8)

DDL

Os comandos SQL para definição de dados

são:

CREATE: criação de novas estruturas  DROP: remoção de estruturas

(9)

CREATE TABLE - DDL

 CREATE TABLE: especifica uma nova tabela

(relação), dando o seu nome e especificando as colunas(atributos) (cada uma com seu

nome, tipo e restrições)

 Sintaxe:

 CREATE TABLE nome_tabela

(10)

CREATE TABLE - DDL

 create table banco (  codigo int,

 nome varchar(50),

(11)

Interbase - Tipos de dados

 Tipos em SQL:1999

 Numéricos exatos:

INTEGER (INT) e SMALLINT para representar inteiros  NUMERIC(p,s): tem uma precisão e uma escala(número

de dígitos na parte fracionária). A escala não pode ser maior que a precisão. Muito usado para representar dinheiro

 DECIMAL: também tem precisão e escala. A precisão é

fornecida pela implementação (SGBD).

 Numéricos aproximados:

REAL: ponto flutuante de precisão simples  DOUBLE: ponto flutuante com precisão dupla

 FLOAT(p): permite especificar a precisão que se quer.

(12)

Interbase - Tipos de dados

 Tipos em SQL:1999

 Character

 CHARACTER(x) (CHAR): representa um string de tamanho

x. Se x for omitido então é equivalente a CHAR(1). Se um string a ser armazenado é menor do que x, então o

restante é preenchido com brancos.

 VARCHAR(N): representa um string de tamanho x.

Armazena exatamente o tamanho do string (tam <= x) sem preencher o resto com brancos. Neste caso x é obrigatório.

 OBS.: Existem os National character data types: NCHAR,

NVARCHAR, NCLOB que permitem implementar internacionalização

(13)

Interbase - Tipos de dados

 Tipos em SQL:1999

 Binary Strings (BLOB)

 BINARY LARGE OBJECT (BLOB): para armazenar

grande quantidades de bytes como fotos, vídeo, áudio, gráficos, mapas, etc.

(14)

Interbase - Tipos de dados

 Tipos em SQL:1999

 DATETIMES

 DATE: armazena ano (4 digitos), mês (2 digitos) e

dia(2 digitos).

 TIME: armazena hora(2digitos), minuto(2 digitos) e

segundo(2digitos, podendo ter frações 0 a 61.9999)

(15)

Interbase - Tipos de dados

 Tipos em SQL:1999

 Intervals

 Um intervalo é a diferença entre duas datas e tempos.

Intervalos do tipo year-month ou day-time.

Year-month interval: contém apenas um valor de ano, ou

de mês ou ambos. YEAR(p), MONTH(p), INTERVAL YEAR TO MONTH(p)

 Day-Time interval: contém apenas um dia, uma hora, um

minuto e/ou um segundo. INTERVAL DAY(p), INTERVAL DAY TO HOUR, INTERVAL DAY(6) TO MINUTE,

INTERVAL SECOND(7), etc.

 Booleans: lógica de três valores (TRUE, FALSE e

(16)

DROP TABLE - DDL

 DROP TABLE: remove uma tabela-base do

BD. Remove tanto os dados quanto a definição da tabela

 Sintaxe: DROP TABLE <nomeTabela>

(17)
(18)

Not null - DDL

 Algumas restrições

 NOT NULL: Uma restrição de não-nulo simplesmente

especifica que uma coluna não pode conter o valor nulo.

 create table banco (

 codigo int not null, nome varchar(50) not null,

(19)

Default - DDL - DDL

 Algumas restrições

 DEFAULT: indica um valor padrão para a coluna

 CREATE TABLE "CLIENTE"  (

 "CPF" INTEGER NOT NULL,  "NOME" VARCHAR(50),

 "TELEFONE" VARCHAR(13),

 "ENDERECO" VARCHAR(50) default 'Januaria'  );

(20)

ALTER TABLE - DDL

 Com o comando Alter Table podemos:

 Incluir / Alterar / Excluir coluna  Incluir / Excluir restrições

(21)

ALTER TABLE - DDL

 Incluir uma coluna

 ALTER TABLE banco ADD estado varchar(40)

 Excluir uma coluna

 ALTER TABLE banco DROP estado

 Alterar o tipo do campo

 ALTER TABLE banco ALTER nome TYPE

(22)

ALTER TABLE - DDL

 Adicionar a restrição default

 ALTER TABLE banco

 ALTER endereco SET DEFAULT ‘Januaria’

 Excluir a restrição default

 ALTER TABLE banco

(23)

UNIQUE - DDL

 Algumas restrições

 UNIQUE: indica que o atributo tem valor único na tabela.

Qualquer tentativa de se introduzir uma linha na tabela contendo um valor igual ao do atributo será rejeitada. Serve para indicar chaves secundárias. Nomear as restrições (CONSTRAINTS)

 Deve ser definido primeiramente como NOT NULL

 CREATE TABLE BANCO(

 CODIGO INT NOT NULL CONSTRAINT

U_BANCOCODIGO UNIQUE,

 NOME VARCHAR (40),

(24)

ALTER TABLE - DDL

 Adicionar uma restrição Unique

 ALTER TABLE banco ADD CONSTRAINT u_bu

UNIQUE(nome)

 Remover uma restrição

(25)

Check - DDL

 Algumas restrições

 CHECK: Permite especificar que os valores de uma

determinada coluna devem estar de acordo com uma expressão arbitrária.

 create table conta (

 numconta int not null unique,

 saldo numeric constraint ch_saldo

check(saldo>1000),

 tipo int,

 num_agencia int,  cod_banco int)

(26)

ALTER TABLE - DDL

 Adicionar restrição Check

 ALTER TABLE conta ADD CONSTRAINT

(27)

ALTER TABLE - DDL

 Remover constraint

 ALTER TABLE BANCO DROP CONSTRAINT

(28)

Primary key - DDL

 Primary key: Indica que a coluna pode ser utilizado como identificador único para as linhas da tabela. Pode ser

composta por um ou dois campos. Deve ser definida como not null.

 create table banco (

 codigo int primary key,

 nome varchar (40),

 endereco varchar (60))

 create table agencia_bancaria (

 numagencia int,

 codbanco int,

 endereco varchar(50),

(29)

ALTER TABLE - DDL

 Adicionar Chave Primária

 alter table agencia_bancaria add primary key

(30)

Foreign key - DDL

 Foreign key: Especifica que o valor da coluna

deve corresponder a algum valor que existe em uma linha de outra tabela. Mantém a

integridade referencial entre as tabelas relacionadas.

 create table agencia_bancaria (  numagencia int not null,

 codbanco int references banco,  endereco varchar(40),

(31)

ALTER TABLE - DDL

 Adicionar chave estrangeira

 alter table conta add foreign key

(cod_banco,num_agencia) references agencia_bancaria

(32)

Recomendação

 É recomendado definir constraints e

nomeá-las para que o sistema não crie nomes automáticos que geralmente não são ilegíveis.

(33)

FOREIGN KEY - DDL

 Uma cláusula FOREIGN KEY inclui

regras de remoção/atualização:

 FOREIGN KEY (coluna) REFERENCES

tabela [ON DELETE

{RESTRICT|CASCADE|SET NULL| SET DEFAULT}] [ON

UPDATE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}]

 Supondo que T2 tem uma chave

estrangeira para T1, vejamos as

(34)

FOREIGN KEY - DDL

 ON DELETE:

 RESTRICT: (default) significa que uma tentativa de se remover uma linha de T1 falhará se alguma linha em T2 combina com a chave

 CASCADE: remoção de uma linha de T1 implica em remoção de todas as linhas de T2 que combina com a chave de T1

 SET NULL: remoção de T1 implica em colocar NULL em todos os atributos da chave estrangeira de cada linha de T2 que combina.

 SET DEFAULT: remoção de linha em T1 implica em colocar valores DEFAULT nos atributos da chave estrangeira de cada linha de T2 que combina.

(35)

FOREIGN KEY - DDL

 ON UPDATE:

- RESTRICT: (default) update de um atributo de T1

falha se existem linhas em T2 combinando

- CASCADE: update de atributo em T1 implica que

linhas que combinam em T2 também serão atualizadas

 SET NULL: update de T1 implica que valores da

chave estrangeira em T2 nas linhas que combinam são postos par NULL.

 SET DEFAULT: update de T1 implica que valores da

chave estrangeira de T2 nas linhas que combinam terão valores default aplicados.

(36)

FOREIGN KEY - DDL

 As restrições de integridade podem ter um nome e serem especificadas com a cláusula CONSTRAINT.

 Isto permite que possamos no futuro eliminar (DROP) ou alterar (ALTER) o constraint.

(37)
(38)

DML

 Linguagem de manipulação dos dados

 INSERT: inserção de registros  DELETE: deleção de registros

 UPDATE: atualização de registros  SELECT: seleção de registros

(39)

INSERT - DML

 Ao ser criada a tabela não contém nenhum dado. Os dados são inseridos uma linha por vez.

 Os valores dos dados são colocados na mesma ordem que as colunas aparecem na tabela,

separados por vírgula.

 INSERT INTO banco VALUES (1,’Banco 1’,’End 1‘)

 Quando não se sabe a ordem das colunas:

 INSER INTO banco (nome, endereco, codigo) VALUES

(40)

UPDATE - DML

 O comando UPDATE

 Modifica o valor de atributos de uma ou mais

tuplas.

 Sintaxe:

UPDATE tabela SET lista_atributos com atribuições de valores [WHERE condição]

 Obs.: omitir a cláusula WHERE implica que o

UPDATE deve ser aplicado a todas as tuplas da relação

(41)

DELETE - DML

 O comando DELETE

 Remove tuplas de uma relação  Sintaxe:

DELETE

FROM tabela

[WHERE condição]

 Obs.: Se omitirmos a cláusula WHERE, então o

DELETE deve ser aplicado a todas as tuplas da relação. Porém, a relação permanece no BD como uma relação vazia.

(42)
(43)

DML

Esquemas do BD Empresa:

Empregado(matricula, nome, endereco, salario,

supervisor, depto)

Departamento(coddep, nome, gerente, dataini) Projeto(codproj, nome, local, depart)

(44)

SELECT

 O comando Select:

A forma básica do comando Select é:

SELECT <lista atributos> FROM <lista tabelas> WHERE <condição>

(45)

SELECT

Obtenha todos os nomes dos empregados

Select nome

from Empregado

Obtenha o salário de José

Select salario

From Empregado

Where nome = ‘José’

Obs.: Podemos renomear o nome da coluna no resultado

select salario as SalarioJose from empregado

(46)

SELECT

 Obs2: Podemos usar colunas como expressões

select mat as matricula, salario, 0.15 * salario as IR from empregado

 Podemos inserir constantes na cláusula select se necessário

select nome, ‘marajá’ as Marajá from empregado

(47)

SELECT

Selecione todos os atributos de todos os

empregados do departamento Pesquisa Select *

From Empregado

(48)

SELECT

 Obter os nomes dos empregados e o nome

do departamento que ele trabalha

 Obter os nomes dos departamentos

 Obter os nomes dos projetos e o local de

(49)

SELECT

 Obter os nomes dos projetos e o nome dos

departamentos que o controlam

 Obter o nome do gerente de cada

(50)

SELECT

Selecione o nome e o endereço de todos

os empregados que trabalham no departamento de produção

Select e.nome, e.endereco

From empregado e join departamento d Where d.nome = ‘Produção’

(51)

SELECT

 Obter o nome do empregado, nome do

(52)

SELECT

Para cada projeto em ‘Fortaleza’, liste o

código do projeto, o departamento que controla o projeto e o nome do gerente com endereço e salário

Select p.codigo, d.nome, e.nome, e.endereco, e.salario

From Projeto p join Departamento d on p.depart = d.codigo join Empregado e on d.gerente = e.matricula

(53)

SELECT

Para cada empregado, recupere seu nome

e o nome do seu supervisor Select e.nome, s.nome

From Empregado e join Empregado s on e.matricula = s.supervisor

(54)

SELECT

Selecione todos os atributos de todos os

empregados do departamento Administração

Select e.*

from Empregado e join Departamento d on

e.depto = d.codigo

(55)

SELECT - DISTINCT

Algumas vezes surgem duplicatas como

resposta a uma query. Podemos eliminá-las usando o comando DISTINCT na

cláusula SELECT

Selecione os diferentes salários pagos pela

empresa aos empregados Select distinct salario From empregado

(56)

SELECT – ORDER BY

 Ordenação

O operador ORDER BY permite ordenar o resultado de

uma query por um ou mais atributos.

Obter uma lista de empregados e seus respectivos

departamentos, listando ordenado pelo nome do departamento

SELECT d.nome, e.nome

FROM departamento d join empregado e On d.codigo = e.depto

(57)

SELECT – ORDER BY

 Ordenação

A ordem default é ascendente (ASC) caso

queiramos ordem decrescente usamos DESC

Ex. ORDER BY d.nome DESC, e.nome

(58)

SELECT

Selecione os nomes dos empregados que

ganham mais de 1000 e menos de 10000 reais

(59)

SELECT - BETWEEN

BETWEEN:

Sintaxe: expressão [NOT] BETWEEN

expressão AND expressão

Ex.: y BETWEEN x AND Z equivale a x <= y

<= z

Selecione os nomes dos empregados

que ganham mais de 1000 e menos de 10000 reais

SELECT nome

FROM Empregado

(60)

SELECT

Obter os nomes de empregados cujos

(61)

SELECT - LIKE

 LIKE:

Permite comparações de substrings. Usa dois

caracteres reservados ‘%’ (substitui um número arbitrário de caracteres) e ‘_‘ (substitui um único caracter).

Obter os nomes de empregados cujos

endereços estão em Natal, RN SELECT nome

FROM empregado

(62)

SQL

(63)

Funções agregadas

SQL fornece 5 funções embutidas:

COUNT: retorna o número de tuplas ou valores

especificados numa query

SUM: retorna a soma os valores de uma coluna AVG: retorna a média dos valores de uma

coluna

MAX: retorna o maior valor de uma coluna MIN: identifica o menor valor de uma coluna

Estas funções só podem ser usadas numa cláusula

(64)

Funções agregadas

Encontre o total de salários, o maior

salário, o menor salário e a média salarial da relação empregados

SELECT SUM(salario), MAX(salario), MIN(salario),

AVG(salario) FROM Empregado

Encontre o maior e menor salário do

departamento de Produção

SELECT MAX(salario), MIN(salario)

FROM Empregado e join Departamento d on e.depto = d.codigo

(65)

Funções agregadas

Obtenha o número de empregados da empresa SELECT COUNT(*)

FROM empregado

Obter o número de salários distintos do

departamento de Pesquisa

SELECT COUNT(DISTINCT salario) FROM

empregado e join departamento d on e.depto=d.codigo WHERE d.nome = ‘Pesquisa’

O que aconteceria se escrevêssemos

COUNT(salario) ao invés de COUNT(DISTINCT salario))?

(66)

GROUP BY, HAVING

 Cláusula GROUP BY, HAVING

Usadas para lidar com grupos.

Para cada departamento, obter o código do

departamento, o número de empregados e a média salarial

SELECT depto, COUNT(*), AVG(salario) FROM Empregado

GROUP BY depto

as tuplas de empregados são separadas em grupos

(departamento) e as funções COUNT e AVG são aplicadas a cada grupo separadamente.

(67)

GROUP BY, HAVING

Para cada projeto, obter o código do projeto,

seu nome e o número de empregados que trabalham naquele projeto

SELECT codigop, nome, COUNT(*) FROM Projeto p join Alocacao a On p.codigo = a.projeto

GROUP BY p.codproj, p.nome

o agrupamento e as funções são aplicadas após a

(68)

HAVING

 HAVING

usada em conjunto com GROUP BY para permitir a

inclusão de condições nos grupos

Para cada projeto que possui mais de 2 empregados

trabalhando, obter o código do projeto, nome do projeto e número de empregados que trabalha neste projeto

SELECT p.codproj, p.nome, COUNT(*) FROM Projeto p join Alocacao a

ON p.codigo = a.projeto GROUP BY codigop, nome HAVING COUNT(*) > 2

Uma query é avaliada primeiro aplicando a cláusula

(69)
(70)

Junções

 O padrão SQL:1999 (e o 92) especifica

vários tipos de junções:

 Clássica (tabelas separadas por vírgulas como

vimos)

 cross-joins  natural joins

 conditions joins  column name join

(71)

Condition Join

 Exemplos: Condition Join

 usa a cláusula ON para especificar a condição de

junção Select * from T1 JOIN T2 ON T1.C1 = T2.C1 é equivalente a: select * from T1, T2 where T1.C1 = T2.C1

(72)
(73)

Junções

 Exemplos: Left Outer Join

C1 C2 10 15 20 25 C3 C4 10 BB 15 DD

T1 T2 Junção left outer de T1 com T2 Select * from T1 left outer join T2 on T1.C1 = T2.C3

C1 C2 C3 C4

10 15 10 BB

(74)
(75)
(76)

Junções

 Exemplos: Right Outer Join

C1 C2 10 15 20 25 C3 C4 10 BB 15 DD

T1 T2 Junção right outer de T1 com T2 Select * from T1 right outer join T2 on T1.C1 = T2.C3

C1 C2 C3 C4

10 15 10 BB

(77)

Junções

 Exemplos: Full Outer Join

C1 C2 10 15 20 25 C3 C4 10 BB 15 DD

T1 T2 Junção full outer de T1 com T2 Select * from T1 full outer join T2 on T1.C1 = T2.C3

C1 C2 C3 C4

10 15 10 BB

20 25 Null Null

(78)
(79)
(80)

Subconsultas

(consultas aninhadas)

(81)

Subconsultas

 São comandos SELECT aninhados em

outros comandos SELECT, INSERT,

UPDATE ou DELETE ou outras subconsultas

 Podem ser utilizadas

 Retornando valores únicos e testando-os com

operadores de comparação

 Como listas de linhas, através dos operadores IN,

(82)

Subconsultas

 Coloque as subconsultas entre parenteses  Elas devem ficar a direita dos operadores  Não use ORDER BY em uma subconsulta

(83)

Operadores de comparação

SELECT descricao , preco FROM comida WHERE preco <

(84)

Operadores de comparação

 Select prod.titulo

 From produtos prod  Where prod.preco >

 (select prod1.preco  From produtos prod1

(85)

Operadores de comparação

 Select prod.titulo

 From produtos prod

 Where prod.importado = ‘N’ and prod.preco >

 (select max(prod1.preco)  From produtos prod1

(86)

Operadores de comparação

 Select prod.ano_lancamento,  avg(prod.preco)

 from produtos prod

 group by prod.ano_lancamento  having avg(prod.preco) >

 (select avg(prod1.preco)  from produtos prod1

 where prod1.ano_lancamento =  trunc(sysdate,'yyyy'));

(87)

Exemplo

Script cerveja

CREATE TABLE cerveja ( nome VARCHAR(45), fabricante VARCHAR(45), PRIMARY KEY (nome) );

CREATE TABLE bebe ( pessoa VARCHAR(45), cerveja VARCHAR(45),

PRIMARY KEY (pessoa, cerveja) );

CREATE TABLE vende ( bar VARCHAR(45), cerveja VARCHAR(45), preco NUMERIC(4,2),

PRIMARY KEY (bar, cerveja) );

CREATE TABLE frequenta ( pessoa VARCHAR(45), bar VARCHAR(45),

PRIMARY KEY (pessoa, bar) );

ALTER TABLE bebe ADD CONSTRAINT bebe_cerveja_fk FOREIGN KEY (cerveja) REFERENCES cerveja(nome); ALTER TABLE vende ADD CONSTRAINT

vende_cerveja_fk FOREIGN KEY (cerveja) REFERENCES cerveja(nome);

(88)

INSERT INTO cerveja VALUES ('Antarctica Original', 'Ambev'); INSERT INTO cerveja VALUES ('Bohemia Weiss', 'Ambev'); INSERT INTO cerveja VALUES ('Brahma Extra', 'Ambev'); INSERT INTO cerveja VALUES ('Skol', 'Ambev');

INSERT INTO cerveja VALUES ('Budweiser', 'Ambev'); INSERT INTO cerveja VALUES ('Eisenbahn Dunkel', 'Sudbrack');

INSERT INTO cerveja VALUES ('Colonia Pilsen', 'Colonia'); INSERT INTO cerveja VALUES ('Nova Schin Pilsen',

'Schincariol');

INSERT INTO cerveja VALUES ('Primus', 'Schincariol');

INSERT INTO bebe VALUES ('Fulano','Brahma Extra'); INSERT INTO bebe VALUES ('Joao','Skol');

INSERT INTO bebe VALUES ('Joao','Brahma Extra'); INSERT INTO bebe VALUES ('Joao','Primus');

INSERT INTO bebe VALUES ('Joao','Nova Schin Pilsen'); INSERT INTO bebe VALUES ('Amadeu','Eisenbahn Dunkel'); INSERT INTO bebe VALUES ('Joana','Budweiser');

INSERT INTO bebe VALUES ('Timoteo','Antarctica Original'); INSERT INTO vende VALUES ('Bar BQ', 'Nova Schin Pilsen', 1.00);

INSERT INTO vende VALUES ('Bar BQ', 'Skol', 2.00);

INSERT INTO vende VALUES ('Bar BQ', 'Colonia Pilsen', 1.50); INSERT INTO vende VALUES ('Bar BQ', 'Budweiser', 2.00); INSERT INTO vende VALUES ('Bar BQ', 'Brahma Extra', 2.00);

INSERT INTO vende VALUES ('Bar X', 'Primus', 1.50); INSERT INTO frequenta VALUES ('Fulano','Bar BQ'); INSERT INTO frequenta VALUES ('Joao','Bar Bada'); INSERT INTO frequenta VALUES ('Amadeu','Bar X'); INSERT INTO frequenta VALUES ('Joana','Bar BQ');

(89)

Exemplo

 Encontrar cervejas vendidas abaixo do

preço médio.

 select cerveja from vende where preco <

(90)

Exemplo

 Encontrar as cervejas vendidas pelo mais

baixo preço.

 select cerveja from vende where preco =

(91)

Operador IN

 Retorna as linhas iguais a qualquer linha da

subconsulta

 Podemos usar NOT IN  Equivalente a =ANY

 O operador IN aceita a comparação

(92)

Operador IN

 Select ped.num_pedido  From pedidos ped

 Where ped.cod_cliente in

 (select adm.cod_administrador  From administradores adm);

(93)

Operador IN

 select ped.num_pedido  from pedidos ped

 where (ped.cod_cliente, ped.cod_endereco)

 in

 (select end.cod_cliente, end.cod_endereco  from enderecos

(94)

Operadores ANY e SOME

 Compara um valor com cada linha da subconsulta, utilizando um operador de comparação

 ANY e SOME são sinonimos

 select prod.titulo  from produtos prod

 where prod.importado = 'N' and prod.preco  > ANY

 (select prod1.preco  from produtos prod1

(95)

Operador ALL

 Compara um valor com todas as linhas da

subconsulta, utilizando um operador

 select prod.titulo  from produtos prod

 where prod.importado = 'N' and prod.preco  > ALL

 (select prod1.preco  from produtos prod1

(96)

Is null

Podemos verificar valores nulos

através de IS NULL e IS NOT NULL:

Selecione os nomes de todos os

empregados que não têm supervisores

SELECT nome

FROM empregado

(97)

Exemplo

 Encontrar nomes de cervejas que nenhuma

pessoa bebe.

 select nome from cerveja where nome not

(98)

Exemplo

 Encontrar pessoas que bebem cerveja mas

não freqüentam bares.

 select pessoa from bebe where pessoa not in

(99)

Exemplo

 Encontrar bares que vendem pelo menos

uma cerveja que 'Fulano' bebe.

 select distinct bar from vende where cerveja

= any(select cerveja from bebe where pessoa = 'Fulano')

(100)

Exemplo

 Encontrar nomes de fabricantes de cada

cerveja que 'Fulano' bebe.

 select fabricante from cerveja where nome in

(select cerveja from bebe where pessoa='Joao')

(101)

Exemplo

 Encontrar cervejas que são o único produto

de seu fabricante.

 select nome from cerveja where fabricante in

( select fabricante from cerveja

(102)

Exemplo

 Encontrar bares que sao frequentados por

Fulano OU que vendem cerveja a menos de R$ 2,00.

 select bar from frequenta where pessoa =

'Fulano' or bar in (select bar from vende where preco <2)

(103)

Exemplo

 Encontrar pessoas e cervejas tal que: a

pessoa bebe a cerveja E a pessoa freqüenta um bar que vende a cerveja.

 select pessoa, cerveja from bebe  where pessoa in (

 select pessoa from frequenta where bar in (  select bar from vende where vende.cerveja =

(104)

Exemplo

 Encontrar cervejas do fabricante 'Ambev' que

NÃO são vendidas no bar 'Bar BQ'.

 select nome from cerveja  where fabricante = 'Ambev'

 and nome not in (select cerveja from vende

Referências

Documentos relacionados

Foram desenvolvidas duas formulações, uma utilizando um adoçante natural (stévia) e outra utilizando um adoçante artificial (sucralose) e foram realizadas análises

bibliográfica, projeto e relatório, publicações e trabalhos científicos.. os embargos de declaração evoluíram ao longo dos códigos processuais brasileiros e, também,

libras ou pedagogia com especialização e proficiência em libras 40h 3 Imediato 0821FLET03 FLET Curso de Letras - Língua e Literatura Portuguesa. Estudos literários

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças

  2 Discente do Programa de Pós‐Graduação em Ciências da Saúde da Faculdade de Medicina do  ABC.   

No contexto em que a Arte é trabalhada como recurso didático-pedagógico na Educação Matemática (ZALESKI FILHO, 2013), pode-se conceber Performance matemática (PM) como

Neste sentido consideramos importante refletir, no INCTE 2018, sobre o desenvolvimento da lite- racia emocional dos professores e no modo como as emoções interferem na ação educativa

O software abrirá uma área de trabalho, para a montagem do sistema a ser simulado, cuja plataforma está baseada em um sistema de coordenadas cartesianas sistema a ser simulado,