Beruflich Dokumente
Kultur Dokumente
Linguagem SQL
Verso 1.4
SQL
Verso 1.4
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
SQL
Structured Query Language, o que ? SQL uma linguagem normalizada para definio, acesso, manipulao e controlo de Bases de Dados Relacionais
Verso 1.4
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
SQL
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 ...
Verso 1.4
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
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
SQL
Componentes
DDL (Data Definition Language) DML (Data Manipulation Language) TML (Transaction Manipulation Language) DCL (Data Control Language)
Verso 1.4
SQL
Verso 1.4
SQL
SQL
Manipulao de Dados
Verso 1.4
SQL
SELECT
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
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 ...
Verso 1.4
SQL
Restrio
Categoria
cod_cat 1 2 3 ... designao CategoriaA CategoriaB CategoriaC ... salario_base 300 250 160 ...
Clausula Where
Verso 1.4
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 ...
Departamento
cod_dept 1 2 3 ... nome_dept Vendas ... localizao Porto ... Contabilidade Lisboa Investigao Coimbra
Verso 1.4
SQL
Juno
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
SQL
AND
nome_dept = 'Vendas'
Restrio
Juno
Verso 1.4
SQL
Aliases de Tabelas
Correlation Name
SELECT FROM
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
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
3
... 20 ...
Carlos Castro
... Manuel Matos ...
4-Jun-84
... 7-Feb-90 ...
3
... 3 ...
3
... 2 ...
1
... 2 ...
Verso 1.4
SQL
Junes Mltiplas
Para cada categoria listar o nome dos empregados, salrio_base e repectivo departamento
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
SQL
Departamento
cod_dept ... 6 nome_dept ... Marketing localizao ... Lisboa
Verso 1.4
SQL
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
cod_dept 1 3 6
Bernardo Bento 2
Verso 1.4
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
nome, morada
fornecedor
Verso 1.4
SQL
Interseco
Suponha que com as tabelas anteriores Pretende uma listagem com os nomes e moradas dos clientes que tambm so fornecedores
SELECT FROM
INTERSECT
SELECT
FROM
nome, morada
fornecedor
Verso 1.4
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
SQL
Clausula WHERE
Uma condio-de-pesquisa basicamente uma coleco de predicados, combinados atravs dos operadores booleanos AND, OR, NOT e parntesis.
Verso 1.4
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)
Verso 1.4
SQL
Predicados
Os predicados podem ser utilizados num contexto esttico, sendo avaliados com base em valores constantes.
SUBQUERY
Verso 1.4
SQL
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'? 3 SELECT FROM WHERE cod_dept empregado nome_emp = 'Carlos Castro'
Verso 1.4
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
SQL
Subqueries
SELECT cod_emp, nome_emp FROM empregado FROM departamento WHERE localizao = 'Lisboa' )
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 )
A condio VERDADEIRA se o resultado da subquery no for vazio
Verso 1.4
SQL
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
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
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
SQL
Diviso
Sabendo que:
" x : p(x)
~$ x
: ~p(x)
Nome dos departamentos: ~$ categoria categorias ( ~$ empregado : empregado.cod_dept = departamento.cod_dept and empregado.cod_cat = categoria.cod_cat )
Verso 1.4
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
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
Verso 1.4
SQL
Clausula ORDER BY
* empregado nome_emp
Recentes
Menos Recentes Data (Date)
Verso 1.4
SQL
Funes Agregadoras
Salrio_base 100 200 12,5
450
700 100 120 COUNT(*) = 10
350
890 400 SUM =
Verso 1.4
SQL
Funes Agregadoras
SELECT FROM
MAX(salario_base) categoria
SELECT FROM
MIN(salario_base) categoria
Verso 1.4
SQL
WHERE
cod_dept = 1
and empregado.cod_cat = categoria.cod_cat
Verso 1.4
SQL
Agrupamentos
Cod_dept Salrio_base 1 1 1 1 1 2 120 250 150 300 250 100
120
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
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
WHERE
empregado.cod_cat = categoria.cod_cat
300 160
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
SQL
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
Para cada departamento qual o salrio mnimo. Seleccionar apenas os departamentos cujo salrio mdio seja superior a 200
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
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
SQL
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
SQL
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
SQL
Comando SELECT
GROUP BY
HAVING ORDER BY
coluna, ...
condio coluna [ASC | DESC ], ...
Verso 1.4
SQL
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
SQL
Insert
INSERT INTO DEPARTAMENTO VALUES (4,'Marketing','Lisboa')
cod_dept 1 2 3 ...
cod_dept
1 2 3 4 ...
nome_dept
Vendas Marketing ...
localizao
Porto Lisboa ...
Verso 1.4
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'
WHERE cod_dept = 2
Verso 1.4
SQL
SQL
Verso 1.4
SQL
SQL
Verso 1.4
SQL
restrio_tabela
CONSTRAINT nome_regra_tabela [ [ UNIQUE | PRIMARY KEY ] (coluna,....) | [ FOREIGN KEY (coluna,...) REFERENCES tabela (coluna,...) CASCADE] ] | [ CHECK (condio) ]
Verso 1.4
[ ON DELETE
SQL
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
SQL
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
SQL
(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
SQL
Tipos de Dados
STANDARD SQL2 INTEGER
-2147483648 to 2147483647
SMALLINT
Exactos
-32768 to 32767
CHAR VARCHAR
BIT
NUMERIC
DECIMAL REAL
Sinnimos
DATE
TIME
Aprox.
DOUBLE
FLOAT
Preciso simples
TIMESTAMP
Verso 1.4
SQL
Alter Table
ALTER TABLE nome_tabela ADD novas colunas | novas restries_coluna
Verso 1.4
SQL
Alter Table
alter table empregado ADD comisso integer(4) NOT NULL alter table departamento change cod_dept cod_dept integer(15);
Verso 1.4
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 ...
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
SQL
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
SQL
Criao de Views
comando_select
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
SQL
Verso 1.4
SQL
Privilgios
DE ESTRUTURA
Verso 1.4
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
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
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
EFECTIVADAS