Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Linguagem SQL
Verso 1.4
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
SQL
Histri
a
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
SQL
interactivamente
embutida em linguagens de programao
Verso 1.4
SQL
Esquema
Relacional
Verso 1.4
SQL
Base de Dados
Relacional
Categoria
cod_cat
1
2
3
Departamento
designao
CategoriaA
CategoriaB
CategoriaC
...
...
salario_base
300
250
160
...
cod_dept
nome_dept
localizao
Contabilidade Lisboa
Vendas
Investigao Coimbra
...
...
Porto
...
Empregado
Verso 1.4
cod_emp
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
...
...
...
...
...
...
20
Manuel Matos
7-Feb-90
...
...
...
...
...
...
SQL
Comando SQL
Qual o salrio do empregado Antnio Abreu e o nome do departamento
a que pertence?
SELECT
SELECT nome_emp,
nome_emp,salario_base,
salario_base,nome_dept
nome_dept
FROM
FROM Empregado,
Empregado,Departamento,
Departamento,Categoria
Categoria
WHERE
WHERE nome_emp
nome_emp==Antnio
AntnioAbreu
Abreu
AND
AND Empregado.cod_cat
Empregado.cod_cat==Categoria.cod_cat
Categoria.cod_cat
AND
AND Departamento.cod_dept
Departamento.cod_dept==Empregado.
Empregado.cod_dept
cod_dept
Verso 1.4
SQL
Caracterstica
s
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
Verso 1.4
SQL
Componentes
DDL
DDL(Data
(DataDefinition
Definition Language)
Language)
DML
DML(Data
(DataManipulation
ManipulationLanguage)
Language)
TML
TML(Transaction
(TransactionManipulation
ManipulationLanguage)
Language)
DCL
DCL(Data
(DataControl
ControlLanguage)
Language)
Verso 1.4
SQL
SQL
Caractersticas actuais e Perspectivas
futuras
Caractersticas e Componentes
SQL na Manipulao de Dados
Verso 1.4
SQL
SQL
Manipulao de Dados
Verso 1.4
SELECT
INSERT
UPDATE
DELETE
Manipulao dos
dados da B.D.
SQL
SELECT
FROM
tabela
Verso 1.4
SQL
Projeco
Empregado
cod_emp
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
...
...
...
...
...
...
20
Manuel Matos
7-Feb-90
...
...
...
...
...
...
Clausulas
Select
From
Verso 1.4
empregado
SQL
Restri
o
Categoria
cod_cat
1
2
3
...
designao
CategoriaA
CategoriaB
CategoriaC
...
salario_base
300
250
160
...
Clausula Where
SELECT *
FROM
categoria
Verso 1.4
SQL
Juno
Empregado
cod_emp
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
...
...
...
...
...
...
20
Manuel Matos
7-Feb-90
...
...
...
...
...
...
Verso 1.4
Departamento
cod_dept
nome_dept
localizao
Contabilidade Lisboa
Vendas
Investigao Coimbra
...
...
Porto
...
SQL
Juno
SELECT
FROM
empregado, departamento
WHERE
empregado.cod_dept = departamento.cod_dept
Verso 1.4
SQL
SELECT
empregado.cod_dept, nome_emp
FROM
empregado, departamento
WHERE
empregado.cod_dept = departamento.cod_dept
Projeco
AND
nome_dept = 'Vendas'
Restrio
Verso 1.4
Juno
SQL
Aliases de Tabelas
Correlation Name
SELECT
FROM
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
SQL
Junes
Mltiplas
Categoria
cod_cat
1
2
3
Departamento
designao
CategoriaA
CategoriaB
CategoriaC
...
...
salario_base
300
250
160
...
cod_dept
nome_dept
localizao
Contabilidade Lisboa
Vendas
Investigao Coimbra
...
...
Porto
...
Empregado
Verso 1.4
cod_emp
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
...
...
...
...
...
...
20
Manuel Matos
7-Feb-90
...
...
...
...
...
...
SQL
Junes
Mltiplas
Para cada categoria listar o nome dos empregados, salrio_base e repectivo departamento
SELECT
FROM
WHERE
empregado.cod_dept = departamento.cod_dept
AND
empregado.cod_cat = categoria.cod_cat
Verso 1.4
SQL
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
Quais os departamentos e
respectivos empregados.
Nesta listagem devero aparecer
todos os departamentos, mesmo os
que no tm empregados.
Verso 1.4
Departamento
cod_dept
nome_dept
localizao
...
...
...
Marketing
Lisboa
SQL
Verso 1.4
SELECT
FROM
ON
empregado.cod_dept = departamento.cod_dept
cod_emp
nome_emp
cod_dept
nome_dept
Antnio Abreu
Contabilidade
Bernardo Bento 2
Vendas
Carlos Castro
Investigao
Marketing
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
nome, morada
FROM
cliente
UNION
Verso 1.4
SELECT
nome, morada
FROM
fornecedor
SQL
Intersec
o
Suponha que com as tabelas anteriores
Pretende uma listagem com os nomes e moradas dos clientes que tambm so
fornecedores
SELECT
nome, morada
FROM
cliente
INTERSECT
Verso 1.4
SELECT
nome, morada
FROM
fornecedor
SQL
Diferena
Suponha que com as tabelas anteriores
Pretende uma listagem com os nomes e moradas dos clientes que no so fornecedores
SELECT
nome, morada
FROM
cliente
EXCEPT
Verso 1.4
SELECT
nome, morada
FROM
fornecedor
SQL
Clausula WHERE
SELECT
FROM
tabela, [tabela,....]
WHERE
condio-de-pesquisa
Verso 1.4
SQL
Predicados
Verso 1.4
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
SQL
Predicados
Predicadosde
decomparao
comparao
Predicado
PredicadoIN
IN
Predicados
PredicadosALL
ALLou
ouANY
ANY
Predicado
PredicadoEXISTS
EXISTS
Verso 1.4
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'?
Verso 1.4
SELECT
cod_dept
FROM
empregado
FROM
WHERE
WHERE cod_dept = 3
empregado
SQL
Subqueries
Integrao das duas Queries
empregado
Verso 1.4
SQL
Subqueries
Quais os nomes dos empregados que trabalham nos departamentos
de Lisboa
empregado
Verso 1.4
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
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
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
Verso 1.4
SQL
SELECT nome_dept
FROM departamento
WHERE NOT EXISTS
( SELECT *
FROM
empregado
WHERE departamento.cod_dept = empregado.cod_dept
Verso 1.4
SQL
Diviso
( exemplo )
Nomes dos departamentos que tm empregados de todas as categorias?
Empregado
cod_emp
nome_emp
cod_cat cod_dept
Antnio Abreu
01
Categoria
Bernardo Bento 1
02
cod_cat
designao
salario_base
Carlos Castro
03
CategoriaA
300
Diogo Dado
02
CategoriaB
250
Ernesto Eco
02
CategoriaC
160
:
=
cod_dept
02
Verso 1.4
SQL
Divis
o
Nomes dos departamentos que tm empregados de todas as categorias?
empregado :
empregado.cod_dept = departamento.cod_dept
p(x)
Verso 1.4
SQL
Sabendo que:
Divis
o
xx::p(x)
p(x)
xx::~p(x)
~p(x)
empregado :
empregado.cod_dept = departamento.cod_dept
and empregado.cod_cat = categoria.cod_cat
Verso 1.4
SQL
Divis
o
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
SQL
Clausula ORDER BY
AAclausula
clausulaORDER
ORDERBY
BYusada
usadapara
paraordenar
ordenaros
osdados
dadosreferentes
referentesaauma
umaou
ou
mais
colunas
mais colunas
aaltima
ltimaclausula
clausulaaaser
serespecificada
especificada
Verso 1.4
SELECT
FROM
tabela
WHERE
condio
ORDER BY
SQL
Clausula ORDER BY
SELECT
FROM
empregado
ORDER BY
nome_emp
Recentes
Menos Recentes
Numrico (Number)
Data (Date)
SQL
Funes Agregadoras
1
2
3
MIN = ---------->
4
Salrio_base
100
200
12,5
450
700
100
120
350
9
MAX = ---------->
10
890
400
SUM =
Verso 1.4
COUNT(*) = 10
SQL
Funes Agregadoras
SELECT
MAX(salario_base)
SELECT
MIN(salario_base)
FROM
categoria
FROM
categoria
SELECT COUNT(*)
FROM
categoria
SELECT SUM(salario_base)
SELECT AVG(salario_base)
FROM
FROM
categoria, empregado
Verso 1.4
categoria, empregado
SQL
Funes Agregadoras
com Restries
SELECT
AVG(salario_base)
FROM
empregado, categoria
WHERE
cod_dept = 1
and
empregado.cod_cat = categoria.cod_cat
Verso 1.4
SQL
Cod_dept Salrio_base
Verso 1.4
Agrupamento
s
120
250
150
300
250
100
150
230
SELECT
cod_dept, min(salario_base)
300
FROM
empregado, categoria
400
WHERE
empregado.cod_cat = categoria.cod_cat
200
160
120
100
160
GROUP BY cod_dept
SQL
Agrupamentos
Mltiplos
Cod_dept Cod_cat Salrio_base
1
A
120
1
A
250
Verso 1.4
150
300
250
100
150
230
300
400
200
160
120
150
100
150
300
SELECT
FROM
empregado, categoria
WHERE
empregado.cod_cat = categoria.cod_cat
160
Ana Paula Afonso/Ana Lucas/Paulo Batista/Wilson Lucas - 2007
SQL
Agrupamentos
Mltiplos
SELECT
FROM
tabela, ...
WHERE
condio
GROUP BY
coluna, ...
COD_DEPT, min(salario_base)
FROM
empregado, categoria
WHERE
empregado.cod_cat = categoria.cod_cat
GROUP BY COD_DEPT
Verso 1.4
SQL
Verso 1.4
120
250
150
300
250
100
150
230
300
400
200
160
AVG = 214
120
AVG = 160
100
AVG = 265
160
SELECT
cod_dept, min(salario_base)
FROM
empregado, categoria
WHERE
empregado.cod_cat = categoria.cod_cat
GROUP BY cod_dept
HAVING
SQL
Clusula HAVING
SELECT
FROM
tabela, ...
WHERE
condio
GROUP BY
coluna, ...
HAVING
condio
WHERE OU HAVING ?
A clusula WHERE nunca contm funes agregadoras
A clusula HAVING deve sempre conter funes agregadoras
Verso 1.4
SQL
Subqueries com
Funes Agregadoras
Qual o nome do empregado que tem o maior salrio
empregado, categoria
Verso 1.4
SQL
Verso 1.4
SQL
Comando SELECT
Verso 1.4
SELECT
FROM
tabela, ...
WHERE
condio
GROUP BY
coluna, ...
HAVING
condio
ORDER BY
SQL
Manipulao da Base de
Dados
INSERES, ACTUALIZAES
e REMOES
Verso 1.4
SQL
Inser
t
cod_dept
nome_dept
Contabilidade Lisboa
Contabilidade Lisboa
Vendas
Vendas
Investigao Coimbra
Investigao Coimbra
...
...
Marketing
Lisboa
...
...
...
cod_dept
nome_dept
localizao
Porto
...
localizao
Porto
Cpia
Cpiade
deValores
Valoresde
deoutras
outrasTabelas
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
SQL
Update e
Delete
Actualizar o cdigo do chefe do empregado Bernardo Bento
UPDATE empregado
SET
cod_emp_chefe=2
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
SQL
SQL
Definio da Base de
Dados
Verso 1.4
CREATE
ALTER
DROP
Criao e modificao
das estruturas da B.D.
GRANT
REVOKE
Controle da segurana
da B.D.
SQL
Definio da Base de
Dados
CREATE TABLE nome_tabela
[ ( [ nome_coluna
tipo_dados
[restrio_coluna] ] |
restrio_tabela
CONSTRAINT nome_regra_tabela
[ [ UNIQUE | PRIMARY KEY ] (coluna,....) |
[ FOREIGN KEY (coluna,...) REFERENCES tabela (coluna,...)
CASCADE] ] |
[ ON DELETE
[ CHECK (condio) ]
Verso 1.4
SQL
Definio da Base de
Dados
(1) Definio de uma tabela com uma chave primria
CREATE TABLE departamento
( cod_dept
nome_dept
char(15)
NOT NULL,
data_adm
date
NOT NULL,
localizao
char(20) )
SQL
Definio da Base de
Dados
(3) Definio de uma tabela com
uma chave estrangeira
CREATE TABLE empregado
( cod_emp
nome_emp char(15)
cod_dept
NOT NULL,
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) )
SQL
Tipos de Dados
STANDARD SQL2
INTEGER
-2147483648 to 2147483647
SMALLINT
Exactos
Aprox.
BIT
NUMERIC
DECIMAL
DATE
REAL
TIME
Sinnimos
DOUBLE
FLOAT
Verso 1.4
-32768 to 32767
CHAR
VARCHAR
AAAA-MMDD
HH:MM:SS
TIMESTAMP
YYYY-MM-DD
HH:MM:SS
Preciso simples
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.
Verso 1.4
SQL
Alter Table
alter
altertable
tableempregado
empregado
ADD
ADD comisso
comisso integer(4)
integer(4) NOT
NOTNULL
NULL
alter
alter table
tabledepartamento
departamento
change
changecod_dept
cod_deptcod_dept
cod_deptinteger(15);
integer(15);
alter
altertable
tableempregado
empregado
DROP
DROP comisso
comisso
Verso 1.4
SQL
View
cod_emp
nome_emp
Antnio Abreu
13-Jan-75
Carlos Castro
4-Jun-84
...
...
...
...
...
...
20
Manuel Matos
7-Feb-90
...
...
...
...
...
...
SQL
Verso 1.4
SQL
Criao de Views
comando_select
DROP
DROPVIEW
VIEWnome_view
nome_view
Verso 1.4
SQL
Criao e Eliminao de
Utilizadores
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
Verso 1.4
SQL
Privilgio
s
DE ESTRUTURA
Verso 1.4
SQL
Privilgio
s
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
SQL
Privilgio
s
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
SQL
Transaces
TRANSACO
EFECTIVADAS
utilizando o comando COMMIT
ANULADAS
utilizando o comando ROLLBACK
Verso 1.4