Sei sulla pagina 1di 60

A linguagem SQL

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Introduo
SQL Structured Query Language Linguagem declarativa noprocedural Desenvolvidapelo laboratrio da IBM em San Jose anos 60/70 Inicialmente chamada SEQUEL (Structured English QUEry Language) Criada como interface entre usurios e o primeiro SGBDR SYSTEM R

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Introduo
SQL Structured Query Language Padro industrial que atinge grande parte do mercado de SGBDs Atrativo: pequena quantidade de comandos para realizar uma grande quantidade de operaes necessrias para definio e manipulao de relaes Simplicidade Grande poder de consulta Padro facilita migrao

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Introduo
Recursos: DDL e DML Criao de vises (views) Especificaes de segurana e autorizaes Definio de restries de integridade Controle de transao Regras para integrao com linguagens de programao Regras e triggers

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Introduo
Dois conjuntos principais de comandos: DDL Data Definition Language: Especificao do esquema da base de dados DML Data Manipulation Language: insero, remoo, alterao e consultas na instncia da base de dados

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL
Alguns comandos da DDL CREATE SCHEMA CREATE TABLE ALTER TABLE DROP TABLE CREATE DOMAIN DROP DOMAIN CREATE VIEW DROP VIEW CREATE INDEX DROP INDEX

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao do esquema


CREATE SCHEMA Comando utilizado para criar esquemas de aplicaes. O esquema permite agrupar as tabelas, restries, vises, domnios e outros construtores (como concesso de autoridade) que descrevem o esquema. Por exemplo: CREATE SCHEMA COMPANHIA AUTHORIZATION MAC0426

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao de domnios


CREATE DOMAIN Utilizado para definir domnios de atributos. CREATE DOMAIN nome AS tipo [<restries de coluna>]

Facilita a redefinio de tipos de dados de um domnio utilizados por muitos atributos de um esquema, alm de melhorar a legibilidade do esquema.
Por exemplo: CREATE DOMAIN TIPO_ID AS CHAR(9);

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao de domnios


Pode-se definir um novo domnio com a especificao de uma restrio sobre o tipo de dados. Por exemplo:
CREATE DOMAIN TIPO_DEPNUM AS INTEGER CHECK (TIPO_DEPNUM > 0 AND TIPO_DEPNUM < 21);

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao de tabelas


CREATE TABLE cria uma tabela (tabela base), e define colunas e restries Restries de colunas NOT NULL DEFAULT valor CHECK(condio) Restries de tabela PRIMARY KEY ( <atributos chave primria> ) UNIQUE ( <atributos chave candidata> ) FOREIGN KEY ( <atributos chave estrangeira> REFERENCES tabelaRef [(<chave primria>)] [<aes>] <aes> ON DELETE | ON UPDATE CASCADE | SET NULL | SET DEFAULT CHECK(condio) Sistemas de Banco de Dados

10

2009 by Rafael Alexandre

SQL Alguns tipos de dados


INTEGER | SMALLINT DECIMAL [(precision, scale)] precision o nmero total de dgitos total e scale o nmero de dgitos depois do ponto

DOUBLE PRECISION | FLOAT | REAL


CHAR(n) tamanho fixo n caracteres VARCHAR(n) tamanho varivel mximo de n caracteres BLOB Binary Large Object DATE | TIME | TIMESTAMP ...

11

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao de tabelas


Forma geral

12

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Criao de tabelas

13

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Alterao de tabelas


ALTER TABLE incluir/alterar/remover definies de colunas e restries ALTER TABLE tabela <ao>; <ao>: ADD novoAtrib tipo [<restries de coluna>] ADD [CONSTRAIN nome] <restrio de tabela> DROP atributo [CASCADE | RESTRICT] DROP CONSTRAINT nome

14

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Alterao de tabelas


ADD novoAtrib tipo [<restries de coluna>]
E o valor do novo atributo nas tuplas j existentes? Se no for especificada nenhuma clusula default, ento o valor ser null. Assim, a clusula NOT NULL no pode ser aplicada. Por exemplo: ALTER TABLE COMPANHIA.EMPREGADO ADD FUNCAO VARCHAR(12);

15

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Alterao de tabelas


DROP atributo [CASCADE | RESTRICT] CASCADE todas as vises e restries (constrains) que referenciam o atributo so removidas automaticamente RESTRICT o atributo s removido se no houver nenhuma viso ou restrio que o referencie
Por exemplo: ALTER TABLE COMPANHIA.EMPREGADO DROP FUNCAO CASCADE;

16

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Remoo de tabelas


DROP TABLE exclui uma tabela do banco de dados
DROP TABLE tabela [CASCADE | RESTRICT];

CASCADE: todas as vises e restries que referenciam a tabela so removidas automaticamente


RESTRICT: a tabela removida somente se no for referenciada em nenhuma restrio ou viso

17

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DDL Remoo de esquema


DROP SCHEMA exclui um esquema do banco de dados
DROP SCHEMA esquema [CASCADE | RESTRICT]; CASCADE: todos os elementos do esquema so removidos automaticamente RESTRICT: o esquema s ser removido se no existir os elementos Por exemplo:

18

DROP SCHEMA COMPANHIA CASCADE;


Sistemas de Banco de Dados
2009 by Rafael Alexandre

DML - Insero
INSERT insere uma ou mais tuplas em uma tabela
Insero de 1 tupla: INSERT INTO tabela [(atrib1,atrib2,...)] VALUES (valor1, valor2,...) Insero de mltiplas tuplas: INSERT INTO tabela [(atrib1,atrib2,...)] <comando SELECT>

19

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Insero
Exemplo 1 Insero de uma nica tupla: Inserir 3 as tuplas na relao PROJETO:

INSERT INTO PROJETO VALUES ('ProductX', '1', 'Bellaire', '5') INSERT INTO PROJETO VALUES ('ProductY', '2', 'Sugarland', '5') INSERT INTO PROJETO VALUES ('ProductZ', '3', 'Houston', '5')
O terceiro valor 5 corresponde ao departamento 5. Logo, o departamento 5 deve existir na relao DEPARTAMENTO para que as inseres tenham sucesso; pois caso

20

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Insero
Exemplo 2 Insero de mltiplas tuplas: Popular uma tabela temporria DEPTS_INFO:

21

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Alterao
UPDATE modifica o valor de um atributo em uma ou mais tuplas da tabela
Por exemplo, UPDATE tabela SET atributo1 = <valor ou expresso>, atributo2 = <valor ou expresso>, WHERE <condio de localizao>; UPDATE PROJETO SET PLOCALIZACAO = 'Bellaire', DNUM = 5 WHERE PNUMERO=10;

22

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Remoo
DELETE remove uma ou mais tuplas da tabela.
Exemplos: DELETE FROM tabela1 [FROM tabela2] WHERE <condio de localizao>]; DELETE FROM EMPREGADO WHERE ID = 1234; DELETE FROM EMPREGADO WHERE DNUM IN (SELECT DNUMERO FROM DEPARTAMENTO WHERE DNOME='Research'); DELETE FROM EMPLOYEE;

23

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Consulta
SELECT Comando de consulta.
Forma geral: SELECT [ DISTINCT | ALL ] <lista de atributos> FROM <lista de tabelas> [ WHERE <condies> ] [ GROUP BY atributo ] [ HAVING <condies> ] [ ORDER BY atributo [ ASC | DESC ] ];

24

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML - Consulta
SELECT seleciona O QUE se deseja na tabela resultado:
<lista de atributos> ou * (para todos os atributos) ALL inclui tuplas duplicadas ( o default) DISTINCT elimina tuplas duplicadas FROM DE ONDE retirar os dados necessrios WHERE CONDIES de seleo dos resultados.

25

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Consulta simples


Consulta 1 Recuperar a data de aniversrio e o endereo do empregado chamado 'John B. Smith'.

26

Assim, uma consulta com apenas uma relao na clusula FROM similar a um par de operaes SELECTPROJECT da lgebra Relacional. A diferena que podemos obter tuplas repetidas no resultado.
Sistemas de Banco de Dados
2009 by Rafael Alexandre

DML Consulta simples


A mesma consulta em CRT

27

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Consulta com um join


Consulta 2 Obter o nome e o endereo dos empregados que trabalham para o departamento de Pesquisa.

28

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Consulta com um join


Similar seqncia SELECTPROJECTJOIN da lgebra Relacional
(DNOME=Pesquisa') uma condio de seleo do operador SELECT da lgebra Relacional) (DNUMERO=DNUM) uma condio de juno do operador JOIN da lgebra Relacional.

29

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Consulta com dois joins


Para todo projeto localizado em 'Stafford', listar o nmero do projeto, o nmero do departamento responsvel, o sobrenome, endereo e data de nascimento do gerente responsvel pelo departamento.

30

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Consulta com dois joins


Na consulta anterior, existem duas condies Join
A condio Join DNUM=DNUMERO relaciona um projeto com o departamento que o controla A condio Join GERID=ID relaciona o departamento com o empregado que o gerencia.

31

Sistemas de Banco de Dados

2009 by Rafael Alexandre

DML Qualificando um atributo


Em SQL podemos usar o mesmo nome para dois ou mais atributos, desde que os atributos estejam em relaes diferentes.
Uma consulta que referencia dois ou mais atributos com o mesmo nome deve qualificar o atributo com o nome da relao. Exemplo:

32

Sistemas de Banco de Dados

2009 by Rafael Alexandre

ALIASES
Algumas consultas precisam referenciar duas vezes a mesma relao
Em alguns casos, pseudnimos (aliases) so atribudos ao nome da relao Por exemplo, considere a seguinte consulta: Para cada empregado, recupere o nome do empregado e onome de seu supervisor imediato.

33

Sistemas de Banco de Dados

2009 by Rafael Alexandre

ALIASES
Na consulta anterior, E e S so chamados de aliases ou variveis de tupla da relao EMPREGADO.
Podemos pensar em E e S como duas cpias distintas de EMPREGADO: E representa os supervisionados e S representa os supervisores. Aliases podem ser usados em qualquer consulta SQL. Pode-se, tambm, usar a palavrachave AS:

34

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Clusula WHERE no especificada


Uma clusula WHERE no especificada indica ausncia de uma condio.
Assim, todas as tuplas dos relaes da clusula FROM sero selecionadas. Isso equivale a condio WHERE TRUE. Por exemplo, considere a seguinte consulta:

35

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Clusula WHERE no especificada


Se mais de uma relao especificada na clusula FROM e no existir nenhuma condio de juno, ento o resultado ser o produto cartesiano.

extremamente importante no negligenciar a especificao de qualquer condio de seleo ou de juno na clusula WHERE; sob a pena de gerar resultados incorretos e volumosos.

36

Sistemas de Banco de Dados

2009 by Rafael Alexandre

O uso do *
Um * usado para recuperar todos os valores de atributos da tupla selecionada.

37

Sistemas de Banco de Dados

2009 by Rafael Alexandre

O uso do *
A SQL no trata uma relao como um conjunto; tuplas duplicadas podem ocorrer.
Para eliminar tuplas duplicadas no resultado de uma consulta, a palavra DISTINCT usada. A primeira consulta abaixo pode gerar tuplas duplicadas, mas a segunda no:

38

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Operao de conjunto
Algumas operaes de conjunto foram incorporados linguagem SQL.
Existe uma operao de Unio e, em algumas verses da SQL, existem as operaes de Subtrao e Interseco. As relaes resultantes dessas operaes so sempre conjunto de tuplas; tuplas duplicadas so eliminadas do resultado. O conjunto de operaes aplicamse somente s relaes que so compatveis

39

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Operao de conjunto
Listar os nmeros de projetos em que o empregado de sobrenome Smith trabalhe ou que sejam controlados por algum departamento gerenciado pelo empregado de sobrenome Smith:

40

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Operao de conjunto
A SQL tambm possui operaes sobre multiconjuntos (conjuntos que permitem repetio de elementos) UNION ALL EXCEPT ALL INTERSECT ALL.

41

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Consultas aninhadas
Uma consulta SELECT completa, chamada de consulta aninhada, pode ser especificada dentro da clusula WHERE de uma outra consulta, chamada consulta externa. Por exemplo: Recupere o nome e o endereo de todos os empregados que rabalham para o departamento de Pesquisa.

42

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Consultas aninhadas correlacionadas


Se a condio WHERE de uma consulta aninhada referenciar um atributo de uma relao declarada na consulta externa, as consultas estaro correlacionadas Por exemplo: Recupere o nome de cada empregado que tenha um dependente com o mesmo nome do empregado.

43

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Consultas aninhadas correlacionadas


Na consulta anterior, a consulta aninhada tinha um resultado diferente para cada tupla da consulta externa
Consultas escritas com blocos SELECTFROMWHERE e que utilizem operadores de comparao e IN sempre podem ser expressas como uma consulta simples Por exemplo, a mesma consulta pode ser escrita como: Em SQL:

44

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Conjuntos explcitos
possvel utilizar um conjunto de valores explicitamente enumerado na clusula WHERE ao invs de utilizar uma consulta aninhada.
Por exemplo: Recupere o ID de todos os empregados que trabalham nos projetos de nmeros

45

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Exists e Not Exists

46

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Valores Nulos em consultas SQL


A SQL permite que consultas verifiquem se um valor nulo utilizando IS ou IS NOT Por exemplo: Recupere os nomes de todos os empregados que no possuem supervisores.

47

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Juno de relaes
Pode se especificar uma juno de relaes na clusula FROM.
A juno de relaes uma relao como outra qualquer, mas o resultado de uma juno. Permite que o usurio especifique tipos diferentes de junes ("theta" JOIN, NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN, etc).

48

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Juno de relaes
Por exemplo:

Por exemplo:A consulta apresentada acima pode ser reescrita como:

49

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Juno de relaes
Por exemplo:

Por exemplo:A consulta apresentada acima pode ser reescrita como:

50

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Juno de relaes
Por exemplo:

Por exemplo:A consulta apresentada acima pode ser reescrita como:

51

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Funes agregadas
A SQL possui as seguintes funes agregadas: COUNT, SUM, MAX, MIN e AVG
Exemplo: Encontrar o maior salrio, o menor salrio, e a mdia salarial de todos os empregados.

52

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Funes agregadas
Exemplo: Recuperar o total de empregados da companhia (Consulta A) e o nmero de empregados do departamento Pesquisa

53

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Agrupamento
Como na extenso da lgebra Relacional, a SQL tem uma clusula GROUP BY para especificar os atributos de agrupamento, que devem aparecer na clusula SELECT. Por exemplo: Para cada departamento, recuperar o seu nmero, a quantidade de empregados que possui e a sua mdia salarial.

54

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Agrupamento
Algumas vezes queremos recuperar os valores das funes agregadas que satisfaam a certas condies A clusula HAVING usada para especificar essa condio Por exemplo: Para cada projeto em que trabalhem mais de dois empregados, recupere o nmero do projeto, o nome do projeto e o nmero de empregados que trabalham no projeto.

55

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Comparao de substrings
O operador de comparao LIKE usado para comparar partes de uma string Os dois caracteres reservados so usados: O '%' (ou '* em algumas implementaes) pesquisa um nmero arbitrrio de caracteres O '_ pesquisa um nico caractere arbitrrio. Por exemplo: Recupere todos os empregados que morem em Houston, Texas. Aqui, o valor do atributo endereo deve conter a substring 'Houston,TX'.

56

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Comparao de substrings
Encontre todos os empregados que nasceram durante a dcada de 50.

Se o caractere % ou _ for necessrio como um caractere normal de uma string, ele deve ser precedido por um caractere de escape. A string AB_CD%EF deve ser escrita como: AB\_CD\%EF.

57

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Operaes aritmticas
Os operadores aritmticos padro +, -, * e / podem ser aplicados valores numricos como um resultado de uma consulta SQL. Por exemplo: Recupere todos os empregados (nome e sobrenome) e seus respectivos salrios que trabalham no projeto ProdutoX com um aumento de 10%.

58

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Order By
A clusula ORDER BY usada para ordenar tuplas resultantes de uma consulta com base nos valores de alguns atributos. Por exemplo: Recuperar a lista de empregados e dos projetos em que eles trabalhem, ordenados pelo departamento do empregado e cada departamento ordenado alfabeticamente pelo sobrenome do empregado.

59

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Order By
A ordem padro ascendente, mas podemos utilizar a palavra-chave DESC para especificar que queremos a ordem descendente. A palavra-chave ASC pode ser usada para especificar explicitamente a ordem ascendente.

60

Sistemas de Banco de Dados

2009 by Rafael Alexandre

Potrebbero piacerti anche