Você está na página 1de 5

Structured Query Language (SQL)

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)

SELECT nome FROM Cliente

Estrutura base do SELECT:


SELECT <atributos> FROM <tabelas> [WHERE <condio>]

Nomes dos clientes de Braga:

nome ( localidade=Braga (Cliente))


SELECT nome FROM Cliente WHERE localidade=Braga
1 2

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

3. Quais os clientes (cod_cliente) com conta na agncia cod_agencia=123?

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

5. Quais os clientes com emprstimos de valor superior a 50.000 euros?

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

9. Quantos clientes possuem contas na agncia 123?

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

13. Quais os clientes (cod_cliente, cliente) da agncia 123?

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

17. Quais as agncias (cod_agencia, agencia) com depositantes residentes em Braga?

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

Insero de Dados nas tabelas


INSERT INTO <tabela> [(<colunas>)] VALUES (<valores>) Exemplos: INSERT INTO Clientes VALUES (1234, J.Silva, Estudante, Braga) INSERT INTO Clientes (cod_cliente, cliente, localidade) VALUES (1235, A.Costa, Guimares)
15

Alterao de Dados nas tabelas


UPDATE <tabela> SET <coluna> = <expresso> = [WHERE <condio>] Exemplos: UPDATE Contas SET saldo = saldo + 1000 WHERE num_conta = 1234567890

16

Remoo de Linhas nas tabelas


DELETE FROM <tabela> [WHERE <condio>]

Definio dos Dados


Dicionrio de dados:
descries acerca dos dados armazenados (metadados); encontra-se armazenado em tabelas; LDD (Linguagem de Definio de Dados).

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

Instruo fundamental - Criao de Tabelas:


definio do seu esquema (atributos e domnio dos mesmos); especificao de restries de integridade.

18

Domnio dos Atributos


SQL-92: INTEGER, SMALLINT, DECIMAL, DOUBLE PRECISION, FLOAT, CHAR, VARCHAR, BIT, DATE, TIME, TIMESTAMP, ACCESS: TEXT, MEMO, NUMBER, DATE/TIME, CURRENCY, AUTO NUMBER, YES/NO, OLE OBJECT, HYPERLINK. CREATE TABLE <tabela> ( < definio de colunas e restries de integridade > )
19

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))

Restries de Integridade Referencial


Permitem especificar na tabela referenciadora quais os atributos importados (chaves estrangeiras) e de que tabelas so importados. Impedem actualizaes Base de dados que coloquem em causa a sua integridade:
o sistema impede a realizao de uma actualizao que coloque em causa alguma restrio de integridade referencial; ou, permite que as actualizaes ocorram, mas automaticamente restabelece as condies de integridade referencial.

21

22

Exemplo
CREATE TABLE Funcionrios ( cod_dep CHAR (3), FOREIGN KEY (cod_dep), Modificao de cod_dep na tabela Departamentos ????

Tabela Contas do exemplo Contas Bancrias:


(s existem dois tipos de contas: ordem e prazo. O saldo de qualquer conta deve ser sempre superior a 10.000).

CREATE TABLE Contas ( num_conta tipo_conta cod_agencia cod_cliente

CHAR(10), CHAR(5), CHAR(3), CHAR(4) NOT NULL,

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, )

Remoo do dep. Informtica na tabela Departamentos ????


23

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

Criao e Manipulao de Views


Uma View uma tabela virtual, sem existncia fsica, cujo contedo derivado de outras tabelas. CREATE VIEW <view> [(Colunas)] AS <questo> CREATE VIEW Grandes_Contas AS (SELECT * FROM Contas WHERE saldo > 100000000)
26