Você está na página 1de 73

SQL

Linguagem SQL

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

SQL Caractersticas actuais e Perspectivas futuras

Caractersticas e Componentes SQL na Manipulao de Dados

SQL na Definio da Base de Dados

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Histria
1970: Codd define o Modelo Relacional 1974: IBM desenvolve o projecto SYSTEM/R com a linguagem SEQUEL 1979: lanado o primeiro SGBD comercial (ORACLE) 1981: lanado o SGBD INGRES 1983: IBM anuncia o DB2 1986, 1987: ratificada a norma SQL que fica conhecida como SQL-86 (ANSI X3.135-1986 e ISO 9075:1987) 1989: ratificada a norma SQL-89 quer pela ANSI quer pela ISO 1992: ratificada a norma: SQL2 1999: ratificada a norma SQL1999, anteriormente conhecida como SQL3

2006: SQL:2006, define a forma como o SQL pode ser usado em conjuno com o XML (ANSI/ISO/IEC 9075-14:2006 )
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Structured Query Language, o que ? SQL uma linguagem normalizada para definio, acesso, manipulao e controlo de Bases de Dados Relacionais

Na maioria dos SGBDR, esta linguagem pode ser utilizada:


interactivamente embutida em linguagens de programao

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Esquema Relacional

Empregado ( cod-emp, nome_emp, data_admisso, cod_cat, cod_dept, cod_emp_chefe ) Departamento ( cod-dept, nome_dept, localizao) Categoria ( cod-cat, designao, salario_base )

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Base de Dados Relacional


Categoria
cod_cat 1 2 3 ... designao CategoriaA CategoriaB CategoriaC ... salario_base 300 250 160 ...

Departamento
cod_dept 1 2 3 ... nome_dept Vendas ... localizao Porto ... Contabilidade Lisboa Investigao Coimbra

Empregado
cod_emp 1 2 3 ... 20 ... nome_emp Antnio Abreu Carlos Castro ... Manuel Matos ... data_admisso cod_cat cod_dept cod_emp_chefe 13-Jan-75 4-Jun-84 ... 7-Feb-90 ... 1 1 3 ... 3 ... 1 2 3 ... 2 ... 1 1 1 ... 2 ...

Bernardo Bento 1-Dec-81

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Comando SQL
Qual o salrio do empregado Antnio Abreu e o nome do departamento a que pertence?

SELECT nome_emp, salario_base, nome_dept FROM Empregado, Departamento, Categoria WHERE nome_emp = Antnio Abreu AND Empregado.cod_cat = Categoria.cod_cat AND Departamento.cod_dept = Empregado. cod_dept

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Caractersticas
Linguagem no procedimental em que se especifica O QU e no COMO Existe uma clara abstraco perante a estrutura fsica dos dados, isto , no necessrio especificar caminhos de acesso nem algoritmos de pesquisa fsica

Operaes sobre estruturas lgicas As operaes efectuam-se sobre conjuntos de dados (tabelas), no sendo necessrio (nem possvel) manipular linha-a-linha

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Componentes

DDL (Data Definition Language) DML (Data Manipulation Language) TML (Transaction Manipulation Language) DCL (Data Control Language)

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

SQL Caractersticas actuais e Perspectivas futuras

Caractersticas e Componentes SQL na Manipulao de Dados SQL na Definio da Base de Dados

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

SQL

Manipulao de Dados

SELECT INSERT UPDATE DELETE

Acesso aos dados da B.D. Manipulao dos dados da B.D.

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Clausula SELECT e FROM

SELECT

[ DISTINCT ] coluna, ... | *

FROM

tabela

O smbolo * utilizado quando se pretende seleccionar todos os atributos da tabela especificada na clausula FROM DISTINCT aplicado a todas as colunas especificadas na clausula SELECT e elimina as repeties existentes

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Projeco
Empregado
cod_emp 1 2 3 ... 20 ... nome_emp Antnio Abreu Carlos Castro ... Manuel Matos ... data_admisso cod_cat cod_dept cod_emp_chefe 13-Jan-75 4-Jun-84 ... 7-Feb-90 ... 1 1 3 ... 3 ... 1 2 3 ... 2 ... 1 1 1 ... 2 ...

Bernardo Bento 1-Dec-81

Clausulas Select From

SELECT cod_emp, nome_emp FROM empregado

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Restrio
Categoria
cod_cat 1 2 3 ... designao CategoriaA CategoriaB CategoriaC ... salario_base 300 250 160 ...

Clausula Where

SELECT * FROM categoria WHERE salario_base > 200

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Juno
Empregado
cod_emp 1 2 3 ... 20 ... nome_emp Antnio Abreu Carlos Castro ... Manuel Matos ... data_admisso cod_cat cod_dept cod_emp_chefe 13-Jan-75 4-Jun-84 ... 7-Feb-90 ... 1 1 3 ... 3 ... 1 2 3 ... 2 ... 1 1 1 ... 2 ...

Bernardo Bento 1-Dec-81

A partir do produto cartesiano selecciona-se somente as linhas que satisfazem a condio


EMPREGADO.COD_DEPT= DEPTARTAMENTO.COD_DEPT

Departamento
cod_dept 1 2 3 ... nome_dept Vendas ... localizao Porto ... Contabilidade Lisboa Investigao Coimbra

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Juno

SELECT FROM WHERE

nome_emp, empregado.cod_dept, nome_dept empregado, departamento empregado.cod_dept = departamento.cod_dept

Caso o nome de uma coluna seja igual em vrias tabelas ento a REGRA

Nome_Tabela.Nome_Coluna
em qualquer stio da clusula SELECT

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Projeco, Restrio e Juno


Qual o nome dos empregados pertencentes ao departamento de Vendas

SELECT FROM WHERE

empregado.cod_dept, nome_emp empregado, departamento empregado.cod_dept = departamento.cod_dept Projeco

AND
nome_dept = 'Vendas'

Restrio

Juno

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Aliases de Tabelas
Correlation Name

SELECT FROM

cod_emp, D.cod_dept, nome_dept empregado E, departamento D

WHERE

E.cod_dept = D.cod_dept

Particularmente til quando se pretende usar a mesma tabela com significados diferentes Pretende-se o nome de cada empregado e o nome do respectivo chefe SELECT E.nome, CH.nome FROM empregado E, empregado CH WHERE E.cod_emp_chefe = CH.cod_emp
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Junes Mltiplas
Categoria
cod_cat 1 2 3 ... designao CategoriaA CategoriaB CategoriaC ... salario_base 300 250 160 ...

Departamento
cod_dept 1 2 3 ... nome_dept Vendas ... localizao Porto ... Contabilidade Lisboa Investigao Coimbra

Empregado
cod_emp 1 2 nome_emp Antnio Abreu data_admisso cod_cat cod_dept cod_emp_chefe 13-Jan-75 1 1 1 2 1 1

Bernardo Bento 1-Dec-81

3
... 20 ...

Carlos Castro
... Manuel Matos ...

4-Jun-84
... 7-Feb-90 ...

3
... 3 ...

3
... 2 ...

1
... 2 ...

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Junes Mltiplas
Para cada categoria listar o nome dos empregados, salrio_base e repectivo departamento

SELECT FROM WHERE

categoria.cod_cat, nome_emp, nome_dept, salario_base empregado, departamento, categoria empregado.cod_dept = departamento.cod_dept AND empregado.cod_cat = categoria.cod_cat

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Juno "Outer" (Outer Join)


Empregado
cod_emp 1 2 3 nome_emp Antnio Abreu Carlos Castro data_admisso cod_cat cod_dept cod_emp_chefe 13-Jan-75 4-Jun-84 1 1 3 1 2 3 1 1 1

Bernardo Bento 1-Dec-81

Quais os departamentos e respectivos empregados.


Nesta listagem devero aparecer todos os departamentos, mesmo os que no tm empregados.

Departamento
cod_dept ... 6 nome_dept ... Marketing localizao ... Lisboa

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Juno Outer Direita (Right Outer Join)

SELECT FROM ON

nome_emp, empregado.cod_dept, nome_dept empregado, right outer join departamento empregado.cod_dept = departamento.cod_dept

cod_emp 1 2 3

nome_emp Antnio Abreu Carlos Castro

cod_dept 1 3 6

nome_dept Contabilidade Vendas Investigao Marketing

Bernardo Bento 2

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Unio
Suponha que tem as seguintes tabelas: CLIENTE ( nome, morada ) FORNECEDOR ( nome, morada ) Pretende uma listagem com os nomes e moradas quer dos clientes, quer dos fornecedores

SELECT FROM UNION

nome, morada cliente

SELECT
FROM

nome, morada
fornecedor

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Interseco
Suponha que com as tabelas anteriores Pretende uma listagem com os nomes e moradas dos clientes que tambm so fornecedores

SELECT FROM

nome, morada cliente

INTERSECT

SELECT
FROM

nome, morada
fornecedor

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Diferena
Suponha que com as tabelas anteriores Pretende uma listagem com os nomes e moradas dos clientes que no so fornecedores SELECT FROM EXCEPT SELECT FROM nome, morada fornecedor nome, morada cliente

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Clausula WHERE

SELECT FROM WHERE

[ DISTINCT ] coluna, ...| * tabela, [tabela,....] condio-de-pesquisa

Uma condio-de-pesquisa basicamente uma coleco de predicados, combinados atravs dos operadores booleanos AND, OR, NOT e parntesis.

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Predicados

Um predicado pode ser: - Um predicado de comparao (WHERE NOME_EMP = Manuel Silva) - Um predicado de BETWEEN (WHERE COD_EMP BETWEEN 1 AND 5)

- Um predicado de LIKE (WHERE NOME_EMP LIKE ' M%')


- Um teste de valor nulo (WHERE COMISSO IS NULL)

- Um predicado de IN (WHERE COD_CAT IN (1,2))

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Predicados
Os predicados podem ser utilizados num contexto esttico, sendo avaliados com base em valores constantes.

Ex: WHERE COD_CAT IN (1,2)


Podem tambm ser avaliados com base em valores dinmicos, a retirar da base de dados Ex: WHERE COD_CAT IN (SELECT COD_CAT FROM CATEGORIA)

SUBQUERY

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Predicados utilizados em Subqueries


As subqueries so usadas em:

Predicados de comparao Predicado IN Predicados ALL ou ANY Predicado EXISTS

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries
Qual o cdigo e nome dos empregados que trabalham no mesmo departamento que o empregado 'Carlos Castro'?

Qual o departamento do empregado 'Carlos Castro'? 3 SELECT FROM WHERE cod_dept empregado nome_emp = 'Carlos Castro'

Qual o cdigo e nome dos empregados do departamento 3

SELECT cod_emp, nome_emp FROM empregado WHERE cod_dept = 3

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries
Integrao das duas Queries

SELECT cod_emp, nome_emp FROM empregado FROM empregado WHERE nome_emp = 'Carlos Castro') WHERE cod_dept = ( SELECT cod_dept

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries

Quais os nomes dos empregados que trabalham nos departamentos de Lisboa

SELECT cod_emp, nome_emp FROM empregado FROM departamento WHERE localizao = 'Lisboa' )

WHERE cod_dept IN ( SELECT cod_dept

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries
Quais os empregados cujo salrio superior a todos os salrios dos empregados do departamento 1

SELECT nome_emp FROM empregado, categoria WHERE empregado.cod_cat = categoria.cod_cat AND salrio_base > ALL ( SELECT salrio_base FROM empregado, categoria WHERE empregado.cod_cat = categoria.cod_cat AND cod_dept = 1 )

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries
Quais os empregados cujo salrio superior a algum dos salrios dos empregados do departamento 1

SELECT nome_emp FROM empregado, categoria WHERE empregado.cod_cat = categoria.cod_cat AND salrio_base > ANY ( SELECT salrio_base FROM empregado, categoria WHERE empregado.cod_cat = categoria.cod_cat AND cod_dept = 1 )

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Operador EXISTS
Nome dos departamentos que tm empregados (pelo menos um)

SELECT nome_dept FROM departamento WHERE EXISTS ( SELECT * FROM empregado WHERE departamento.cod_dept = empregado.cod_dept )
A condio VERDADEIRA se o resultado da subquery no for vazio

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Operador NOT EXISTS


Nome dos departamentos que no tm empregados

SELECT nome_dept FROM departamento WHERE NOT EXISTS ( SELECT * FROM empregado WHERE departamento.cod_dept = empregado.cod_dept )
A condio VERDADEIRA se o resultado da subquery for vazio

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Diviso ( exemplo )
Nomes dos departamentos que tm empregados de todas as categorias? Empregado
cod_emp 1 2 3 4 5 nome_emp Antnio Abreu Carlos Castro Diogo Dado Ernesto Eco cod_cat cod_dept 1 3 2 3 01 02 03 02 02

Categoria
cod_cat 1 2 3 designao CategoriaA CategoriaB CategoriaC salario_base 300 250 160

Bernardo Bento 1

:
=
cod_dept 02

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Diviso
Nomes dos departamentos que tm empregados de todas as categorias?

Nome dos departamentos para os quais, qualquer que seja a categoria, existe algum empregado desse departamento e dessa categoria

Nome dos departamentos: " categoria categorias


( $ empregado : p(x) empregado.cod_dept = departamento.cod_dept and empregado.cod_cat = categoria.cod_cat
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Diviso
Sabendo que:

" x : p(x)

~$ x

: ~p(x)

Nome dos departamentos: ~$ categoria categorias ( ~ p(x) )

Nome dos departamentos: ~$ categoria categorias ( ~$ empregado : empregado.cod_dept = departamento.cod_dept and empregado.cod_cat = categoria.cod_cat )
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Diviso
Comando SQL

SELECT nome_dept FROM departamento WHERE NOT EXISTS ( SELECT * FROM categoria WHERE NOT EXISTS ( SELECT * FROM empregado WHERE empregado.cod_dept = departamento.cod_dept and empregado.cod_cat = categoria.cod_cat ))

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Clausula ORDER BY
A clausula ORDER BY usada para ordenar os dados referentes a uma ou mais colunas a ltima clausula a ser especificada

SELECT FROM WHERE ORDER BY

[ DISTINCT ] coluna, ... | * tabela condio coluna [ASC | DESC ], ...

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Clausula ORDER BY

SELECT FROM ORDER BY

* empregado nome_emp

Por defeito, os dados so ordenados ascendentemente Z A Caracter (Char) 9 0 Numrico (Number)

Recentes
Menos Recentes Data (Date)

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Funes Agregadoras
Salrio_base 100 200 12,5

1 2 3 MIN = ----------> 4 5 6 7 8 9 MAX = ----------> 10

450
700 100 120 COUNT(*) = 10

350
890 400 SUM =

AVG = SUM / COUNT

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Funes Agregadoras

SELECT FROM

MAX(salario_base) categoria

SELECT FROM

MIN(salario_base) categoria

SELECT COUNT(*) FROM categoria

SELECT SUM(salario_base) FROM categoria, empregado WHERE empregado.cod_cat = categoria.cod_cat

SELECT AVG(salario_base) FROM categoria, empregado WHERE empregado.cod_cat = categoria.cod_cat

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Funes Agregadoras com Restries


SELECT FROM AVG(salario_base) empregado, categoria

WHERE

cod_dept = 1
and empregado.cod_cat = categoria.cod_cat

Mdia dos salrios dos empregados do departamento cujo cdigo 1

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Agrupamentos
Cod_dept Salrio_base 1 1 1 1 1 2 120 250 150 300 250 100

120

Para cada departamento qual o salrio minmo?

2
2 3 3

150
230 300 400

100
SELECT FROM WHERE cod_dept, min(salario_base) empregado, categoria empregado.cod_cat = categoria.cod_cat

3
3

200
160

160

GROUP BY cod_dept

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Agrupamentos Mltiplos
Cod_dept Cod_cat Salrio_base 1 A 120 1 1 1 1 2 2 2 3 3 3 3
Verso 1.4

A B B B A B B B B C C

250 150 300 250 100 150 230 300 400 200 160

120

Para cada categoria de cada departamento qual o salrio minmo?

150 100 150


SELECT FROM cod_dept, cod_cat, min(salario_base) empregado, categoria

WHERE

empregado.cod_cat = categoria.cod_cat

300 160

GROUP BY cod_dept, cod_cat

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Agrupamentos Mltiplos
SELECT FROM WHERE GROUP BY [ DISTINCT ] coluna, ... | * tabela, ... condio coluna, ...

Qualquer coluna que no seja uma funo agregadora s pode estar na clusula SELECT se estiver na clasula GROUP BY
SELECT FROM WHERE COD_DEPT, min(salario_base) empregado, categoria empregado.cod_cat = categoria.cod_cat

GROUP BY COD_DEPT

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Restries sobre Grupos


Cod_dept Salrio_base

1
1 1 1 1 2 2 2 3 3 3 3
Verso 1.4

120
250 150 300 250 100 150 230 300 400 200 160

AVG = 214 120

Para cada departamento qual o salrio mnimo. Seleccionar apenas os departamentos cujo salrio mdio seja superior a 200

AVG = 160 100


AVG = 265 160

SELECT

cod_dept, min(salario_base)

FROM
WHERE HAVING

empregado, categoria
empregado.cod_cat = categoria.cod_cat avg (salario_base) > 200

GROUP BY cod_dept

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Clusula HAVING
SELECT FROM [ DISTINCT ] coluna, ... | * tabela, ...

WHERE
GROUP BY HAVING

condio
coluna, ... condio

WHERE OU HAVING ? A clusula WHERE nunca contm funes agregadoras A clusula HAVING deve sempre conter funes agregadoras

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries com Funes Agregadoras


Qual o nome do empregado que tem o maior salrio

SELECT empregado.cod_emp, nome_emp FROM empregado, categoria salrio_base = ( SELECT max(salrio_base) FROM categoria, empregado WHERE empregado.cod_cat = categoria.cod_cat ) WHERE empregado.cod_cat = categoria.cod_cat and

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Subqueries com Agrupamentos

Para cada departamento qual o empregado que tem o maior salrio

SELECT cod_dept, cod_emp, nome_emp FROM empregado, categoria WHERE empregado.cod_cat = categoria.cod_cat and (cod_dept, sal rio_base) IN ( SELECT cod_dept, max(salrio_base) FROM categoria, empregado WHERE empregado.cod_cat = categoria.cod_cat GROUP BY cod_dept )

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Comando SELECT

SELECT FROM WHERE

[ DISTINCT ] coluna, ... | * tabela, ... condio

GROUP BY
HAVING ORDER BY

coluna, ...
condio coluna [ASC | DESC ], ...

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Manipulao da Base de Dados


INSERES, ACTUALIZAES e REMOES

INSERT INTO tabela_nome [ (coluna, coluna, ....)] VALUES (valor, valor, ...) | comando SELECT UPDATE tabela_nome SET lista_de_atribuies [WHERE condio] DELETE FROM tabela_nome [WHERE condio]

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Insert
INSERT INTO DEPARTAMENTO VALUES (4,'Marketing','Lisboa')

cod_dept 1 2 3 ...

nome_dept Vendas ...

localizao Porto ...

cod_dept
1 2 3 4 ...

nome_dept
Vendas Marketing ...

localizao
Porto Lisboa ...

Contabilidade Lisboa Investigao Coimbra

Contabilidade Lisboa Investigao Coimbra

Cpia de Valores de outras Tabelas


INSERT INTO EMP_HIST (cod_emp, nome_emp, data_admisso) SELECT cod_emp, nome_emp, data_admisso FROM empregado

WHERE data_admisso > '1-JAN-91'

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Update e Delete
Actualizar o cdigo do chefe do empregado Bernardo Bento UPDATE empregado SET cod_emp_chefe=2 WHERE nome_emp = 'Bernardo Bento'

Apagar todos os empregados que trabalham no departamento 2 DELETE FROM empregado

WHERE cod_dept = 2
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

SQL

Caractersticas actuais e Perspectivas Futuras

Caractersticas e Componentes SQL na Manipulao de Dados SQL na Definio da Base de Dados

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

SQL

Definio da Base de Dados

CREATE ALTER DROP GRANT REVOKE

Criao e modificao das estruturas da B.D.

Controle da segurana da B.D.

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Definio da Base de Dados


CREATE TABLE nome_tabela [ ( [ nome_coluna tipo_dados [restrio_coluna] ] | [restrio_tabela],....) ] | [AS SELECT comando]
restrio_coluna
[ NULL | NOT NULL] | [ UNIQUE | PRIMARY KEY ] | [ REFERENCES tabela (coluna) [ ON DELETE CASCADE] ] | [ CHECK (condio) ]

restrio_tabela
CONSTRAINT nome_regra_tabela [ [ UNIQUE | PRIMARY KEY ] (coluna,....) | [ FOREIGN KEY (coluna,...) REFERENCES tabela (coluna,...) CASCADE] ] | [ CHECK (condio) ]
Verso 1.4

[ ON DELETE

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Definio da Base de Dados


(1) Definio de uma tabela com uma chave primria CREATE TABLE departamento ( cod_dept data_adm integer(4) PRIMARY KEY, NOT NULL, NOT NULL, date nome_dept char(15) localizao char(20) ) (2) Definio de uma tabela com uma chave primria composta

CREATE TABLE linha_enc ( n_enc integer(4), n_produto integer(4), quantidade integer(3) NOT NULL, CONSTRAINT chave_le PRIMARY KEY (n_enc, n_produto) )
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Definio da Base de Dados


(3) Definio de uma tabela com uma chave estrangeira CREATE TABLE empregado
( cod_emp integer(4) PRIMARY KEY, NOT NULL, nome_emp char(15)

cod_dept

char(20) REFERENCES departamento(cod_dept) )

(4) Definio de uma tabela com uma chave estrangeira composta CREATE TABLE faltas_material ( n_falta integer(4), data_falta date, n_enc integer(4), n_produto integer(4), CONSTRAINT chave_fme PRIMARY KEY (n_falta,data_falta), CONSTRAINT falta_le FOREIGN KEY (n_enc, n_produto) REFERENCES linha_enc(n_enc, n_produto) )
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Definio da Base de Dados

(5) Definio de uma tabela com uma regra de verificao CREATE TABLE encomenda ( n_enc integer(4) PRIMARY KEY, data_enc date NOT NULL, cod_cliente integer(4) REFERENCES cliente(cod_cliente), data_entrega date CHECK (data_entrega > data_enc) )

(6) Definio de uma tabela com valores seleccionados de outra tabela CREATE TABLE emp_dept1 AS SELECT cod_emp, nome_emp, data_adm
FROM empregado WHERE cod_dept = 1

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Tipos de Dados
STANDARD SQL2 INTEGER
-2147483648 to 2147483647

SMALLINT
Exactos

-32768 to 32767

CHAR VARCHAR
BIT

NUMERIC
DECIMAL REAL
Sinnimos

DATE
TIME

AAAA-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS

Aprox.

DOUBLE
FLOAT
Preciso simples

TIMESTAMP

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Alter Table
ALTER TABLE nome_tabela ADD novas colunas | novas restries_coluna

ALTER TABLE nome_tabela


CHANGE definio das colunas
No se pode modificar uma coluna contendo valores nulos para NOT NULL. S se pode adicionar uma coluna NOT NULL a uma tabela que no contenha nenhuma linha. Soluo: Adicione como NULL, preencha-a completamente e depois mude para NOT NULL Pode-se decrementar o tamanho de uma coluna e o tipo de dados, caso essa coluna contenha valores nulos em todas as linhas.
Nota: Disponvel em quase todos os SGBDR existentes no mercado.

ALTER TABLE nome_tabela DROP coluna | restrio_coluna

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Alter Table

alter table empregado ADD comisso integer(4) NOT NULL alter table departamento change cod_dept cod_dept integer(15);

alter table empregado


DROP comisso

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

View
cod_emp 1 2 3 ... 20 ... nome_emp Antnio Abreu Bernardo Bento Carlos Castro ... Manuel Matos ... data_admisso 13-Jan-75 1-Dec-81 4-Jun-84 ... 7-Feb-90 ... cod_cat cod_dept cod_emp_chefe 1 1 3 ... 3 ... 1 2 3 ... 2 ... 1 1 1 ... 2 ...

No contm informao prpria

uma imagem de uma tabela atravs No ocupam espao fsico e por isso de uma "janela" a partir da qual se so vulgarmente denominadas tabelas pode visualizar e alterar os campos virtuais seleccionados Assemelham-se a tabelas e com algumas restries so View Tabela Temporria tratadas como tal
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Vantagens da Utilizao de Views

SEGURANA
Uma view permite restringir informao a certos grupos de utilizadores CONVENINCIA

muitas vezes possvel substituir uma consulta complexa por uma view, que usada de uma forma mais simplista

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Criao de Views

CREATE VIEW nome_view AS

CREATE VIEW emp AS

comando_select

SELECT cod_emp, nome_emp


FROM empregado

No comando select podem-se utilizar todas as clsulas excepto a clasula Order By Podem-se definir views custa de outras views As alteraes na tabela original reflectem-se nas views dessa tabela DROP VIEW nome_view
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Criao e Eliminao de Utilizadores


CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ...

DROP USER user [, user] ...

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Privilgios
DE ESTRUTURA

o utilizador pode criar, alterar ou remover um objecto (ex. tabela)


DE CONTEDO

o utilizador pode inserir, alterar, remover ou aceder ao contedo de uma tabela


Estes privilgios so concedidos por utilizadores que possuem pelo menos os privilgios que esto a conceder.

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Privilgios
GRANT comando para conceder privilgios; pode ser dada ao concedido a possibilidade de tambm usar "grant's" (WITH GRANT OPTION) REVOKE comando para remover privilgios EXEMPLO: Conceder privilgios de acesso a informao:

grant SELECT
on EMPREGADO to USER_A,USER_B
Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Privilgios
EXEMPLO: Conceder privilgios de estrutura:

grant CREATE on testes to USER_C, USER_D EXEMPLO: Conceder todos os privilgios de estrutura excepto GRANT OPTION grant ALL on testes to USER_E, USER_F

Verso 1.4

Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

SQL

Transaces
TRANSACO

Unidade de trabalho, que para ser realizada pode necessitar de vrias operaes.
Uma transaco comea com BEGIN. Exemplo: transferir 2000 da Conta Ordem para a Poupana - necessrio debitar da conta ordem e creditar na Poupana

Todas as operaes da transaco devem ser:


Verso 1.4

EFECTIVADAS

utilizando o comando COMMIT


ANULADAS utilizando o comando ROLLBACK
Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007

Você também pode gostar