Beruflich Dokumente
Kultur Dokumente
Linguagem de manipulao de dados. Linguagem standard para os sistemas de bases de dados relacionais. Instrues:
de Interrogao: SELECT; de Actualizao: INSERT, DELETE e UPDATE.
Exemplo...
lgebra Relacional SQL Nomes de todos os clientes:
nome (Cliente)
Clientes (cod_cliente, cliente, profisso, localidade) Agencias (cod_agencia, agencia, localidade) Contas (num_conta, tipo_conta, cod_cliente, cod_agencia, saldo) Emprstimos (num_emprstimo, cod_cliente, cod_agencia, valor) 1. Quais os clientes (cod_cliente e cliente) deste banco? SELECT cod_cliente, cliente FROM Clientes 2. Quais os clientes que residem em Braga? SELECT * FROM Clientes WHERE localidade = Braga
3
SELECT DISTINCT cod_cliente FROM Contas WHERE cod_agencia=123 4. Quais os clientes que residem na mesma localidade das agncias onde possuem contas? SELECT Clientes.* FROM Clientes, Contas, Agencias WHERE Clientes.localidade = Agencias.localidade AND Clientes.cod_cliente = Contas.cod_cliente AND Contas.cod_agencia = Agencias.cod_agencia
4
SELECT Clientes.* FROM Clientes, Emprestimos WHERE Clientes.cod_cliente = Emprestimos.cod_cliente AND Emprestimos.valor > 50000 6. Quais os nomes dos clientes com a mesma profisso que o cliente com o cod_cliente=1234? SELECT C1.cliente FROM Clientes C1, Clientes C2 WHERE C1.profissao = C2.profissao AND C2.cod_cliente = 1234
5
7. Listar as contas (num_conta, saldo) da agncia 123, por ordem decrescente do seu valor de saldo.
SELECT num_conta, saldo FROM Contas WHERE cod_agencia=123 ORDER BY saldo DESC 8. Quantas contas existem em todas as agncias do banco? SELECT COUNT (*) FROM Contas Outras funes de agregao: MIN, MAX, AVR, SUM.
6
SELECT COUNT (DISTINCT cod_cliente) FROM Contas WHERE cod_agencia=123 10. Listar o nmero de contas existentes em cada agncia. SELECT cod_agencia, COUNT (*) FROM Contas GROUP BY cod_agencia
11. Para cada agncia (cod_agencia) com menos de 1000 contas, listar os valores mximo e mnimo dos saldos dessas contas, assim como o saldo mdio.
SELECT cod_agencia, MAX(saldo), MIN(saldo), AVG(saldo) FROM Contas GROUP BY cod_agencia HAVING COUNT(*) < 1000
12. Quais os clientes cuja profisso desconhecida? SELECT * FROM Clientes WHERE profissao IS NULL
SELECT C.cod_cliente, C.cliente FROM Clientes C, Contas T, Emprestimos E WHERE (C.cod_cliente = T.cod_cliente AND T.cod_agencia = 123) OR (C.cod_cliente = E.cod_cliente AND E.cod_agencia = 123)
14. Quais os clientes (cod_cliente, cliente) que so, simultaneamente, depositantes e devedores da agncia 123?
SELECT C.cod_cliente, C.cliente FROM Clientes C, Contas T WHERE C.cod_cliente = T.cod_cliente AND T.cod_agencia = 123 INTERSECT ou AND SELECT C.cod_cliente, C.cliente FROM Clientes C, Emprestimos E WHERE C.cod_cliente = E.cod_cliente AND E.cod_agencia = 123
10
15. Quais os clientes (cod_cliente, cliente), da agncia 123, que so apenas depositantes?
16. Quais os clientes (cod_cliente, cliente) com, pelo menos, um emprstimo no banco?
SELECT C.cod_cliente, C.cliente FROM Clientes C, Contas T WHERE C.cod_cliente = T.cod_cliente AND T.cod_agencia = 123 EXCEPT SELECT C.cod_cliente, C.cliente FROM Clientes C, Emprestimos E WHERE C.cod_cliente = E.cod_cliente AND E.cod_agencia = 123
SELECT C.cod_cliente, C.cliente FROM Clientes C WHERE EXIST (SELECT * FROM Emprestimos E WHERE C.cod_cliente = E.cod_cliente)
11
12
18. Quais os clientes cujo saldo total das suas contas superior ao valor de qualquer emprstimo contrado neste banco?
SELECT A.cod_agencia, A.agencia FROM Agencias A, Contas C WHERE C.cod_cliente IN (SELECT cod_cliente FROM Clientes WHERE localidade = Braga) AND C.cod_agencia = A.cod_agencia
SELECT C.* FROM Clientes C WHERE ((SELECT SUM(T.saldo) FROM Contas T WHERE T.cod_cliente = C.cod_cliente) > (SELECT MAX(valor) FROM Emprestimos) )
13
14
16
Exemplos: DELETE FROM Contas WHERE num_conta = 1234567890 DELETE FROM Clientes WHERE cod_cliente IN (SELECT cod_cliente FROM Contas WHERE cod_agencia = 123)
17
18
CREATE TABLE Vendas ( num_factura INTEGER PRIMARY KEY, valor DECIMAL (6,2) NOT NULL) CREATE TABLE Facturas ( num_factura CHAR (5), cod_produto CHAR (6), PRIMARY KEY (num_factura, cod_produto)) CREATE TABLE Fornecedores ( cod_fornecedor CHAR (4) PRIMARY KEY, nome_fornecedor CHAR (20), UNIQUE (nome_fornecedor))
20
CREATE TABLE Indivduos ( peso INTEGER, classificao SMALLINT, sexo CHAR (1), CHECK (peso > 50), CHECK (classificao BETWEEN 0 AND 20), CHECK (sexo IN (F, M))
21
22
Exemplo
CREATE TABLE Funcionrios ( cod_dep CHAR (3), FOREIGN KEY (cod_dep), Modificao de cod_dep na tabela Departamentos ????
REFERENCES Departamentos (cod_dep), Departamentos ON UPDATE CASCADE, cod_dep departamento ON DELETE SET NULL)
abc bcd cde Informtica Produo Comercial
Funcionrios
cod_func 1 2 3 nome J. Silva A. Costa F. Martins cod_dep abc bcd abc
saldo DECIMAL(10,2) NOT NULL, CONSTRAINT tipos_de_contas CHECK (tipo_conta IN (ordem, prazo)), CONSTRAINT valor_saldo CHECK (saldo >= 10000), CONSTRAINT ch _prim_Contas PRIMARY KEY (num_conta), CONSTRAINT ch _estr_Agencias_Contas FOREIGN KEY (cod_agencia) REFERENCES Agencias (cod_agencia) ON UPDATE CASCADE ON DELETE SET NULL, )
24
Alterao de Tabelas
Adicionar novas colunas ou restries de integridade; Modificar as caractersticas das colunas; Remover colunas ou restries de integridade. ALTER TABLE Clientes ADD COLUMN nacionalidade CHAR(15) DEFAULT portuguesa ALTER TABLE Clientes DROP COLUMN nacionalidade
25
Remoo de Tabelas
DROP TABLE Clientes