Você está na página 1de 14

BD-I - Prof.

Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

SQL (Structured Query Language)


SQL uma linguagem de consulta que implementa as operaes da lgebra relacional de forma bem amigvel. Alm de permitir a realizao de consultas, SQL possibilita:
definio da estrutura de dados; definio de restries de integridade; modificao de dados no banco de dados; especificao de restries de segurana e controle de transaes; utilizao em linguagens hospedeiras.

SQL (Structured Query Language)


SQL foi projetada e implementada pela IBM, como uma interface para o sistema de banco de dados relacional SYSTEM R, tendo sido chamada inicialmente de SEQUEL (Structured English QUEry Language). Em 1986, um trabalho conjunto entre o ANSI (American National Standards Institute) e o ISO (International Standards Organization) conduziu a primeira verso padro de SQL (ANSI 1986), chamada SQL1.
Em 1992, tal padro foi revisado e mais expandido, gerando a SQL2. A SQL3 dever estender a SQL2 com banco de dados orientados a objetos.
2

De uma forma geral, SQL utiliza os termos tabela, linha e coluna para relao, tupla e atributo, respectivamente.
1

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Esquema e Catlogo
A SQL1 no contemplava o conceito de esquema de banco de dados relacional.
Todas as tabelas eram consideradas parte do mesmo esquema.

Comando CREATE TABLE


CREATE TABLE o comando usado para especificar uma nova relao, fornecendo um nome e informando os seus atributos e as suas restries.
Inicialmente, os atributos so especificados, informando o nome, o tipo de dado e qualquer restrio para o atributo, como, por exemplo, NOT NULL. Depois, so especificadas as restries (CONSTRAINT) de chave (PRIMARY KEY, UNIQUE) e de integridade referencial (FOREIGN KEY).
Tais restries podem ser especificadas tambm no comando ALTER TABLE, que permite a alterao da definio de uma relao.
4

Esquema, incorporado SQL2, utilizado para agrupar tabelas e outros componentes que pertencem mesma aplicao de banco de dados.
Um esquema definido por um nome e inclui um identificador de autorizao para indicar o usurio que dono do esquema. CREATE SCHEMA Empresa AUTHORIZATION JSilva; Os elementos de um esquema incluem tabelas, restries, vises, domnios e outros componentes.

Catlogo uma coleo de esquemas num ambiente SQL.


Esquemas de um mesmo catlogo podem compartilhar certos elementos como, por exemplo, definies de domnio. 3

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando CREATE TABLE


CREATE TABLE Empregado ( PrimeiroNome VARCHAR(15) NOT NULL, InicialMeio CHAR, UltimoNome VARCHAR(15) NOT NULL, NumEmpregado CHAR(9) NOT NULL, DataNascimento DATE, Endereco VARCHAR(30), Sexo CHAR, Salario DECIMAL(10,2), NumSupervisor CHAR(9), NumDepto INT NOT NULL, CONSTRAINT PK_Emp PRIMARY KEY (NumEmpregado), CONSTRAINT FK_NumSup FOREIGN KEY (NumSupervisor) REFERENCES Empregado (NumEmpregado), CONSTRAINT FK_EmpDep FOREIGN KEY (NumDepto) REFERENCES Departamento (NumDepto) );

Comando CREATE TABLE


Tipos de dados numricos:
inteiro: integer ou int, smallint; real: float, real, double precision; nmeros formatados: decimal(i, j) ou numeric(i, j) ou dec(i,j) onde "i" nmero de dgitos a esquerda e "j" o nmero de dgitos a direita do ponto decimal.

Tipos de dados alfanumricos:


cadeia de caracteres de tamanho fixo: char(n) ou character(n); cadeia de caracteres de tamanho varivel: varchar(n) ou char varying(n) ou character varying(n), onde "n" o tamanho mximo de caracteres.
5 6

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando CREATE TABLE


Tipo data: date (aaaa-mm-dd) Tipo hora: time (hh:mm:ss) Pode-se declarar um domnio e usar o nome do domnio como tipo de dado de algum atributo.
CREATE DOMAIN TipoNumEmp AS CHAR(9);

Comando CREATE TABLE


Pelo fato da SQL permitir valores nulos como valores de atributos, uma restrio NOT NULL pode ser especificada se o valor nulo no puder ser definido para um atributo. Para definir um valor default para um atributo, utiliza-se a clusula DEFAULT <valor> na definio do atributo.
O valor default includo em uma nova tupla, se um valor explcito no for fornecido para o atributo em questo.
CREATE TABLE Empregado ( ... NumDepto ... );
7 8

INT

NOT NULL

DEFAULT 1,

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando CREATE TABLE


Em SQL, pode-se especificar a ao a ser tomada se uma restrio de integridade referencial for violada, mediante excluso de uma tupla ou atualizao do valor de uma chave primria.
As opes incluem bloqueio (default), propagao (CASCADE), substituio por nulo (SET NULL) e substituio pelo valor default (SET DEFAULT) que devem ser especificadas com a clusula ON DELETE (em uma operao de excluso) ou ON UPDATE (em uma operao de atualizao), em cada restrio de integridade referencial.
);

Comando CREATE TABLE


CREATE TABLE Empregado ( PrimeiroNome ... NumDepto INT NOT NULL DEFAULT 1, CONSTRAINT PK_Emp PRIMARY KEY (NumEmpregado), CONSTRAINT FK_NumSup FOREIGN KEY (NumSupervisor) REFERENCES Empregado (NumEmpregado) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT FK_EmpDep FOREIGN KEY (NumDepto) REFERENCES Departamento (NumDepto) ON DELETE SET DEFAULT ON UPDATE CASCADE VARCHAR(15) NOT NULL,

10

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando DROP SCHEMA


Para remover um esquema de um banco de dados, SQL usa o comando DROP SCHEMA, cuja sintaxe : DROP SCHEMA <E> <opo>;
onde <E> o nome do esquema a ser removido e <opo> pode ser RESTRICT (no elimina o esquema se houver algum elemento nele) ou CASCADE (elimina o esquema e todos os seus elementos).

Comando DROP TABLE


Para remover uma relao de um banco de dados, SQL usa o comando DROP TABLE, cuja sintaxe : DROP TABLE <R> <opo>;
onde <R> o nome da relao a ser removida e <opo> pode ser RESTRICT (no elimina a relao se houver alguma restrio ou viso associada a ela) ou CASCADE (elimina a relao e todas as restries e vises associadas a ela).

Ex.: DROP SCHEMA Empresa CASCADE;

Ex.: DROP TABLE Dependente CASCADE;

11

12

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando ALTER TABLE


O comando ALTER TABLE usado para adicionar ou remover atributos e restries de uma relao, e para alterar a definio de um atributo. Possui as seguintes sintaxes:
ALTER TABLE <R> ADD <A> <D> : adiciona o atributo <A>, cujo domnio <D>, na relao existente <R>.
ALTER TABLE Empregado ADD Servio VARCHAR(12);

Comando ALTER TABLE


ALTER TABLE <R> DROP <A> <opo> : remove o atributo <A> da relao existente <R>. A <opo> pode ser RESTRICT (no elimina o atributo se houver alguma restrio ou viso referenciando-o) ou CASCADE (elimina o atributo, as vises e as restries que o referenciam).
ALTER TABLE Empregado DROP Endereco CASCADE;

Neste caso, se j existirem tuplas na relao <R>, o novo atributo receber valores nulos para essas tuplas.

13

14

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando ALTER TABLE


ALTER TABLE <R> ALTER <A> DROP DEFAULT : remove a clusula de default referente ao atributo <A> da relao existente <R>.
ALTER TABLE Empregado ALTER NumDepto DROP DEFAULT;

Comando ALTER TABLE


ALTER TABLE <R> DROP CONSTRAINT <C>: remove a restrio <C> referente relao existente <R>.
ALTER TABLE Empregado DROP CONSTRAINT FK_EmpDep;

ALTER TABLE <R> ALTER <A> SET DEFAULT <V>: adiciona uma clusula de default, referente ao atributo <A> da relao existente <R>, com o valor <V>.
ALTER TABLE Empregado ALTER NumDepto SET DEFAULT 2;

ALTER TABLE <R> ADD CONSTRAINT <C>: adiciona a restrio <C> na relao existente <R>.
ALTER TABLE Empregado ADD CONSTRAINT FK_NumSup FOREIGN KEY (NumSupervisor) REFERENCES Empregado (NumEmpregado) ON DELETE SET NULL ON UPDATE CASCADE;

15

16

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Consultas Bsicas em SQL


A estrutura bsica de uma consulta SQL :
SELECT <A1>, <A2>, ... , <An> {projeo} FROM <R1>, <R2>, ... , <Rm> {produto cartesiano} WHERE <cond>; {seleo} cada <Ai>, para 1 i n, representa um atributo; cada <Rj>, para 1 j m, representa uma relao; <cond> uma condio de seleo (expresso lgica); a clusula WHERE pode ser omitida, se no houver condio de seleo; a lista de atributos A1,, A2, ... , An pode ser substituda por um asterisco (*) indicando que todos os atributos de todas as relaes da clusula FROM sero projetados.

Consultas Bsicas em SQL


Exemplos de consultas bsicas:
Nmero e nome de todos os empregados:
SELECT NumEmpregado, PrimeiroNome, UltimoNome FROM Empregado;

Nome dos empregados cujo salrio seja superior a 500 reais:


SELECT PrimeiroNome, InicialMeio, UltimoNome FROM Empregado WHERE Salario > 500;

Empregados de sexo feminino:


SELECT * FROM Empregado WHERE Sexo = 'F';
18

Esta consulta equivalente seguinte expresso em lgebra relacional: A1, A2, ...,An (cond (R1 R2 Rm) )
17

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Palavras-chave DISTINCT e ALL


Diferentemente do modelo relacional formal, SQL permite duas tuplas idnticas em uma mesma relao.
Uma relao em SQL no um conjunto de tuplas.

Operador LIKE
Na SQL, o operador de comparao LIKE permite condies de comparao em partes de uma cadeia de caracteres.
O caractere '%' substitui um nmero arbitrrio de caracteres. O caractere '_' substitui um nico caractere.

Para remover as tuplas duplicadas no resultado de uma consulta, deve-se usar a palavra-chave DISTINCT na clusula SELECT.
SELECT DISTINCT UltimoNome FROM Empregado;

Listar todos os empregados cujo nome comea com 'A':


SELECT * FROM Empregado WHERE PrimeiroNome LIKE 'A%';

Para especificar que as tuplas duplicadas no devem ser removidas, deve-se usar a palavra-chave ALL (default).
SELECT ALL UltimoNome FROM Empregado;
19

Listar todos os empregados que nasceram na dcada de 50:


SELECT * FROM Empregado WHERE DataNascimento LIKE '_ _ 5 _ _ _ _ _ _ _';
20

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Operadores aritmticos
Outra caracterstica da SQL a permisso em se utilizar operadores aritmticos ('+', '-', '*', '/') nas consultas. Apresentar os salrios resultantes de um aumento de 10% a todos os empregados do projeto 'Produto Y' :
SELECT PrimeiroNome, UltimoNome, 1.1 * Salario FROM Empregado, Trabalha_em, Projeto WHERE (Empregado.NumEmpregado = Trabalha_em.NumEmpregado) AND (Projeto.NumProj = Trabalha_em.NumProj) AND (NomeProj = 'Produto Y');

Operador BETWEEN
Por meio do operador BETWEEN, possvel especificar um intervalo de valores para um atributo. Listar todos os empregados do departamento 5 cujo salrio esteja entre 5000 e 8000:
SELECT * FROM Empregado WHERE (Salrio BETWEEN 5000 AND 8000) AND NumDepto = 5;

21

22

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Clusula ORDER BY
A SQL permite ordenar as tuplas no resultado de uma consulta pelos valores de um ou mais atributos, utilizando a clusula ORDER BY. Listar os nomes dos empregados, os nomes de seus departamentos e os nomes dos projetos nos quais eles esto trabalhando, ordenados por departamento e, dentro de cada departamento, ordenados alfabeticamente pelo empregado:
SELECT NomeDepto, PrimeiroNome, UltimoNome, NomeProj FROM Departamento, Empregado, Trabalha_em, Projeto WHERE (Empregado.NumDepto=Departamento.NumDepto) AND (Empregado.NumEmpregado=Trabalha_em.NumEmpregado) AND (Projeto.NumProj = Trabalha_em.NumProj) ORDER BY NomeDepto, PrimeiroNome;
23

Operaes de Conjunto
A SQL incorporou as seguintes operaes de conjunto da lgebra relacional:
unio (UNION); interseo (INTERSECT); diferena (EXCEPT).

Na operao de unio, as tuplas duplicadas so eliminadas automaticamente.


Para manter as tuplas duplicadas, deve-se usar a clusula UNION ALL.

24

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Operaes de Conjunto
Listar os nmeros de projetos que envolvem um empregado cujo sobrenome seja 'Silva', como trabalhador ou como gerente de um departamento que controla o projeto:
SELECT DISTINCT NumProj FROM Projeto, Departamento, Empregado WHERE (Projeto.NumDepto=Departamento.NumDepto) AND (NumGerente=NumEmpregado) AND (UltimoNome= 'Silva') UNION SELECT DISTINCT NumProj FROM Trabalha_em, Empregado WHERE (Empregado.NumEmpregado=Trabalha_em.NumEmpregado) AND (UltimoNome= 'Silva');
25

Renomeando Relaes e Atributos


Em consultas SQL, possvel "renomear" nomes de relaes, usando o operador AS. Obter o nome e o endereo dos empregados que trabalham no departamento 'Pesquisa':
SELECT E.PrimeiroNome, E.UltimoNome, E.Endereco FROM Empregado AS E, Departamento AS D WHERE (E.NumDepto = D.NumDepto) AND (D.NomeDepto = 'Pesquisa');

26

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Renomeando Relaes e Atributos


para cada empregado, obter o ltimo nome dos empregados e dos seus supervisores diretos:
SELECT E.UltimoNome, M.UltimoNome FROM Empregado AS E, Empregado AS M WHERE (E.NumSupervisor = M.NumEmpregado);

Subconsultas
Uma subconsulta um bloco completo (SELECT ... FROM ... WHERE) que existe dentro da clusula WHERE de uma outra consulta, chamada consulta externa.
SELECT DISTINCT NumProj FROM Projeto WHERE NumProj IN ( SELECT NumProj FROM Projeto, Departamento, Empregado O operador IN funciona como WHERE (NumGerente=NumEmpregado) AND o operador '' da teoria de conjuntos: verifica se um valor (Projeto.NumDepto=Departamento.NumDepto) pertence a um conjunto. AND (UltimoNome= 'Silva')) OR NumProj IN ( SELECT T.NumProj FROM Trabalha_em AS T, Empregado AS E WHERE (E.NumEmpregado=T.NumEmpregado) AND (E.UltimoNome= 'Silva'));
28

possvel tambm "renomear" nomes de atributos.


... FROM Empregado AS E(PN,IM,UN,Num,DN,End,Sexo,Sal,NumS,NumD) ...

27

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Operadores SOME e ALL


Alm do operador IN, existem outros operadores que so usados para comparar um valor 'v' com um conjunto 'V':
<operador lgico> SOME (ou ANY): retorna verdadeiro se 'v' <operador lgico> que algum valor do conjunto 'V; <operador lgico> ALL: retorna verdadeiro se 'v' <operador lgico> que todos os valores do conjunto 'V.

Operadores SOME e ALL


Obter o nome dos empregados que possuem um salrio maior que o salrio de todos os empregados do departamento 5:
SELECT PrimeiroNome, UltimoNome FROM Empregado WHERE Salario > ALL (SELECT Salario FROM Empregado WHERE NumDepto=5);

Os operadores SOME e ALL precisam acompanhar algum operador lgico: =, <>, >, >=, <, <=. O operador '= SOME' equivalente ao operador IN.

Obter o nome dos empregados que possuem salrio maior que o salrio de algum empregado do depart. 'Pesquisa':
SELECT E.PrimeiroNome, E.UltimoNome FROM Empregado AS E WHERE E.Salario > SOME ( SELECT M.Salario FROM Empregado AS M, Departamento AS D WHERE (M.NumDepto=D.NumDepto) AND 30 (D.NomeDepto= 'Pesquisa'));

29

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Subconsultas Correlacionadas
Sempre que uma condio na clusula WHERE de uma subconsulta faz referncia a algum atributo de uma relao declarada na consulta externa, diz-se que as duas consultas so correlacionadas.
Neste caso, a subconsulta avaliada uma vez para cada tupla (ou combinao de tuplas) da consulta externa.

Funo EXISTS
A funo EXISTS utilizada para verificar se o resultado de uma subconsulta correlacionada vazio ou no. Obter os nomes dos empregados que no possuem dependentes:
SELECT E.PrimeiroNome, E.UltimoNome FROM Empregado AS E WHERE NOT EXISTS (SELECT * FROM Dependente AS D WHERE E.NumEmpregado = D.NumEmpregado);

Obter o nome de cada empregado que possui um dependente com o mesmo primeiro nome do empregado.
SELECT E.PrimeiroNome, E.UltimoNome FROM Empregado AS E WHERE E.NumEmpregado IN (SELECT D.NumEmpregado FROM Dependente AS D WHERE E.PrimeiroNome = NomeDependente);
31

32

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Funo EXISTS
Obter os nomes dos gerentes que possuem pelo menos um dependente:
SELECT E.PrimeiroNome, E.UltimoNome FROM Empregado AS E WHERE EXISTS (SELECT * FROM Dependente AS D WHERE E.NumEmpregado=D.NumEmpregado) AND EXISTS (SELECT * FROM Departamento WHERE E.NumEmpregado = NumGerente);

Conjuntos Explcitos de Valores


Em SQL, possvel utilizar um conjunto explcito de valores na clusula WHERE ao invs de uma subconsulta. Obter os nmeros dos empregados que trabalham nos projetos 1, 2 ou 3:
SELECT DISTINCT NumEmpregado FROM Trabalha_em WHERE NumProj IN (1, 2, 3);

33

34

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Valor NULL
SQL permite consultas que verificam se o valor de um atributo NULL; para isto, utiliza-se o operador IS ou IS NOT.
Obter os nomes dos empregados que no possuem supervisores:
SELECT PrimeiroNome, UltimoNome FROM Empregado WHERE NumSupervisor IS NULL;

Juno entre Tabelas


SQL permite especificar a condio da juno na clusula FROM, usando a clusulas JOIN (INNER JOIN) e ON. Obter o nome e o endereo dos empregados que trabalham no departamento 'Pesquisa':
SELECT PrimeiroNome, UltimoNome, Endereco FROM (Empregado JOIN Departamento ON Empregado.NumDepto=Departamento.NumDepto) WHERE NomeDepto= 'Pesquisa';

Pode-se tambm utilizar a juno natural da lgebra:


SELECT PrimeiroNome, UltimoNome, Endereco FROM Empregado NATURAL JOIN Departamento WHERE NomeDepto= 'Pesquisa';
35 36

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Juno entre Tabelas


Em SQL, possvel utilizar tambm as operaes de juno externa (OUTER JOIN) da lgebra relacional. Para todos os empregado, obter o ltimo nome dos empregados e dos seus supervisores diretos:
SELECT E.UltimoNome AS NomeEmp, M.UltimoNome AS NomeSup FROM (Empregado AS E LEFT OUTER JOIN Empregado AS M ON E.NumSupervisor = M.NumEmpregado);

Agrupamento e Funes de Agregao


A linguagem SQL incorpora os conceitos de agrupamento e funes de agregao definidos na lgebra relacional. As principais funes de agregao so:
COUNT: nmero de tuplas recuperadas em uma consulta; SUM: soma dos valores de um atributo em uma consulta; MAX: valor mximo de um atributo em uma consulta; MIN: valor mnimo de um atributo em uma consulta; AVG: mdia dos valores de um atributo em uma consulta.

O exemplo exemplificou uma juno externa esquerda (LEFT OUTER JOIN); mas existem tambm a juno externa direita (RIGHT OUTER JOIN) e a juno externa completa (FULL OUTER JOIN).
37

38

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Agrupamento e Funes de Agregao


As funes de agregao podem ser usadas em uma clusula SELECT ou em uma clusula HAVING. A clusula GROUP BY serve para agrupar tuplas que possuem o mesmo valor para os atributos relacionados em tal clusula. A clusula HAVING pode ser usada em conjunto com a clusula GROUP BY para especificar uma condio de seleo a ser aplicada em cada grupo de tuplas recuperadas em uma consulta.
Somente os grupos que satisfizerem a condio sero retornados.
39

Agrupamento e Funes de Agregao


Obter a soma dos salrios, o maior salrio, o menor salrio e a mdia dos salrios de todos os empregados do departamento 'Pesquisa':
SELECT SUM(Salario), MAX(Salario), MIN(Salario), AVG(Salario) FROM (Empregado JOIN Departamento ON Empregado.NumDepto=Departamento.NumDepto) WHERE NomeDepto= 'Pesquisa';

Obter o nmero de empregados do departamento 'Pesquisa':


SELECT COUNT(*) FROM Empregado AS E, Departamento AS D WHERE (E.NumDepto = D.NumDepto) AND (D.NomeDepto = 'Pesquisa');
40

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Agrupamento e Funes de Agregao


Obter o nmero de salrios distintos dos empregados:
SELECT COUNT (DISTINCT Salario) FROM Empregado;

Agrupamento e Funes de Agregao


Para cada departamento, obter o seu nmero, a sua quantidade de empregados e a mdia dos salrios dos mesmos:
SELECT NumDepto, COUNT(*), AVG(Salario) FROM Empregado GROUP BY NumDepto;

Obter o nome dos empregados que possuem dois ou mais dependentes:


SELECT PrimeiroNome, UltimoNome FROM Empregado AS E WHERE (SELECT COUNT(*) FROM Dependente AS D WHERE E.NumEmpregado=D.NumEmpregado) >= 2;

41

42

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Agrupamento e Funes de Agregao


Para cada projeto, obter o nmero, o nome e a quantidade de empregados que trabalham no projeto:
SELECT P.NumProj, P.NomeProj, COUNT(*) FROM Projeto AS P, Trabalha_em AS T WHERE P.NumProj=T.NumProj GROUP BY P.NumProj, P.NomeProj;

Agrupamento e Funes de Agregao


Para cada departamento que possua mais de cinco empregados, obter o nmero do departamento e a quantidade de seus empregados que ganham mais de R$5000,00:
SELECT D.NumDepto, COUNT(*) FROM Empregado AS E, Departamento AS D WHERE E.NumDepto=D.NumDepto AND E.Salario>5000 AND E.NumDepto IN ( SELECT NumDepto FROM Empregado GROUP BY NumDepto HAVING COUNT(*) > 5) GROUP BY D.NumDepto;

Para cada projeto onde trabalham mais de dois empregados, obter o nmero, o nome e a quantidade de empregados que trabalham no projeto:
SELECT P.NumProj, P.NomeProj, COUNT(*) FROM Projeto AS P, Trabalha_em AS T WHERE P.NumProj=T.NumProj GROUP BY P.NumProj, P.NomeProj HAVING COUNT(*) > 2;

43

44

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando INSERT
Em sua forma mais simples, o comando INSERT utilizado para adicionar uma nica tupla a uma relao.
Deve-se especificar o nome da relao e uma lista de valores para a tupla. Os valores da tupla devem estar relacionados na mesma ordem em que foram definidos no CREATE TABLE.
INSERT INTO Empregado VALUES ('Rosana', 'P', 'Souza', '653298653', '1962-12-30', 'R.Alagoas, 1230', 'F', 3000, '987654321', 4);

Comando INSERT
Uma segunda forma permite especificar nomes explcitos de atributos que correspondem aos valores fornecidos no comando INSERT.
INSERT INTO Empregado(PrimeiroNome, UltimoNome, NumEmpregado, NumDepto) VALUES ('Rosana', 'Souza', '653298653', 4);

45

46

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando INSERT
Uma variao do comando INSERT inclui mltiplas tuplas numa relao, conjuntamente com a criao da relao e a carga da mesma com o resultado de uma consulta.
CREATE TABLE Info_Deptos ( Nome_Depto VARCHAR(15), Num_de_Emps INTEGER, Total_Sal INTEGER ); INSERT INTO Info_Deptos SELECT NomeDepto, COUNT(*), SUM(Salario) FROM (Departamento JOIN Empregado ON Departamento.NumDepto=Empregado.NumDepto) GROUP BY NomeDepto;
47

Comando DELETE
O comando DELETE remove tuplas de uma relao. Possui a clusula WHERE para selecionar as tuplas a serem excludas.
Quando no especificada, todas as tuplas da relao determinada so excludas; entretanto, a tabela permanece no banco de dados como uma tabela vazia.

As tuplas so explicitamente excludas de uma s relao.


Entretanto, a excluso pode se propagar para tuplas de outras relaes de acordo com as restries de integridade referencial definidas.

48

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando DELETE
DELETE FROM Empregado WHERE UltimoNome = 'Silva'; DELETE FROM Empregado WHERE Salario < 800; DELETE FROM Empregado WHERE NumDepto IN (SELECT NumDepto FROM Departamento WHERE NomeDepto = 'Pesquisa'); DELETE FROM Empregado;

Comando UPDATE
O comando UPDATE utilizado para modificar valores de atributos de uma ou mais tuplas em uma nica relao.
Clusula WHERE para selecionar as tuplas a serem modificadas. Clusula SET para especificar os atributos a serem modificados e o seus novos valores. A modificao do valor de uma chave primria pode se propagar para chaves estrangeiras de outras relaes, de acordo com as restries de integridade referencial definidas.

Alterar a localizao e o nmero do departamento controlador do projeto nmero 10 para 'Anchieta' e 1, respectivamente:
UPDATE Projeto SET Localizao = 'Anchieta', NumDepto = 1 WHERE NumProj = 10;

49

50

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Comando UPDATE
Diversas tuplas podem ser modificadas com um nico comando UPDATE. Aumentar em 10% os salrios de todos os empregados do Departamento 'Pesquisa':
UPDATE Empregado SET Salario = Salario * 1.1 WHERE NumDepto IN (SELECT NumDepto FROM Departamento WHERE NomeDepto='Pesquisa');

Vises em SQL
Uma viso em SQL uma relao nica que derivada de outras relaes ou de outras vises previamente definidas.
Uma viso no existe necessariamente na forma fsica: considerada uma relao virtual, limitando assim, as operaes de atualizao que podem ser aplicadas. No h limitao na consulta de uma viso.

O comando para especificar uma viso CREATE VIEW.


Deve-se especificar o nome da viso, uma lista de nomes de atributos e uma consulta para especificar o contedo da viso. Se nenhum dos atributos da viso resultar da aplicao de funes ou operaes aritmticas, no h necessidade de especificar os nomes de atributos para a viso, j que seriam os mesmos nomes de atributos das relaes definidoras da viso.
52

51

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Vises em SQL
CREATE VIEW V_Trabalha_em AS SELECT PrimeiroNome, UltimoNome, NomeProj, Horas FROM Empregado AS E, Projeto AS P, Trabalha_em AS T WHERE (E.NumEmpregado = T.NumEmpregado) AND (P.NumProj = T.NumProj); CREATE VIEW V_Info_Deptos (NomeDepto, QteEmps, TotalSal) AS SELECT NomeDepto, COUNT(*), SUM(Salario) FROM (Departamento JOIN Empregado ON Departamento.NumDepto=Empregado.NumDepto) GROUP BY NomeDepto;

Vises em SQL
Uma vez definida uma viso, pode-se realizar consultas utilizando a mesma. Obter o primeiro e o ltimo nome de todos os empregados que trabalham no projeto 'Projeto X':
SELECT PrimeiroNome, UltimoNome FROM V_Trabalha_em WHERE NomeProj = 'Projeto X';

Uma das principais vantagens de uma viso simplificar a especificao de certas consultas. As vises tambm so utilizadas como mecanismos de segurana e autorizao.

53

54

BD-I - Prof. Guilherme Tavares de Assis

BD-I - Prof. Guilherme Tavares de Assis

Vises em SQL
Uma viso est sempre atualizada, pois no efetua alguma ao no momento em que definida, e sim no momento em que se especifica uma consulta utilizando-a. Para remover uma viso, utiliza-se o comando DROP VIEW. DROP VIEW V_Trabalha_em;

Vises em SQL
Com relao atualizao de dados das relaes definidoras de uma viso, a partir da mesma, pode-se dizer que:
uma viso definida a partir de uma nica relao atualizvel se os atributos da viso contiverem a chave primria (ou possivelmente alguma outra chave candidata) de tal relao, pois isso mapeia cada tupla da viso para uma nica tupla da relao definidora; uma viso definida a partir de mltiplas relaes utilizando junes geralmente no atualizvel, pois a atualizao pela viso deve ser mapeada em diversas atualizaes nas relaes definidoras para fornecer o efeito desejado; uma viso definida com o uso de agrupamento e funes agregadas no atualizvel, pois alguns atributos no existem nas relaes definidoras.
56

55

Você também pode gostar