Você está na página 1de 43

PROF. MSc.

Saula Dantas

A linguagem SQL dividida em duas partes, so elas:


Data Definition Language (DDL): fornece comandos para definio da estrutura das tabelas, criao de relaes, ndices ou remoo destas estruturas. Data Manipulation Language (DML): a linguagem de consulta propriamente dita; permite fazer consultas sobre os dados, alm de possuir comandos para a insero ou remoo de tuplas.

` ` ` ` ` ` ` ` `

char(n). Cadeia de caracteres de comprimento fixo n. varchar(n). Cadeia de caracteres de comprimento varivel, com o mximo n especificado pelo utilizador. int. inteiro (um subconjunto finito dos inteiros). smallint. Inteiro pequeno (um subconjunto do tipo int). numeric(p,d). Nmero de vrgula fixa, com preciso de p dgitos e com d casas decimais. real, double precision. Nmeros de vrgula flutuante, com preciso varivel, de acordo com o BD adotado. float(n). Nmero de vrgula flutuante, com um mnimo de preciso de n dgitos. Date(yyyy-mm-dd). Cadeia de caracteres que identifica uma data. Os valores nulos so permitidos em todos os tipos de dados. A declarao de um atributo como not null probe os valores nulos para esse atributo.

O comando para criar uma tabela em SQL o comando CREATE TABLE. Sua sintaxe ser demonstrada atravs do seguinte exemplo: CREATE TABLE Municipio ( CodMun int NOT NULL, NomeMun varchar(35) NOT NULL, Populacao numeric(10,0) );

Exerccio: crie as seguintes tabelas:

Constraints so regras agregadas a colunas ou tabelas: Ex: Chaves Primrias, estrangeiras e domnios

Criando uma chave primria: CREATE TABLE Municipio ( CodMun int NOT NULL, -- Cdigo Identificador do Municpio NomeMun varchar(35) NOT NULL, -- Nome do Municpio Populacao numeric(10,0), -- Populao do Municpio PRIMARY KEY (CodMun) );

Para especificar uma chave estrangeira, utiliza-se a seguinte sintaxe:

FOREIGN KEY ( lista-de-colunas ) REFERENCES nome-tabela ( lista-de-colunas ) ON UPDATE ACAO ON DELETE ACAO Exemplo: CREATE TABLE Fazenda ( IdFaz integer NOT NULL, NomeFaz varchar (40) NOT NULL, AreaFaz float4, CodMun int NOT NULL, Dono int, PRIMARY KEY (idFaz), FOREIGN KEY (dono) REFERENCES Proprietario (IdProp) ON UPDATE CASCADE ON DELETE CASCADE

Onde a ACAO: Determina qual ao o banco de dados deve tomar quando for excluda ou alterada uma chave da tabela que contm referncia a esta chave. Ento ela pode ser: SET NULL (altera o contedo da coluna para nulo, perdendo a referncia, sem deixar valores inconsistentes), SET DEFAULT (altera o contedo da coluna para o valor especificado na clusula DEFAULT se houver), CASCADE (exclui ou altera todos os registros que se relacionam a eles) NO ACTION (em caso de alterao, no modifica os valores que se relacionam a eles), ou RESTRICT (no permite a excluso da chave primria).

  

Para esta finalidade a Linguagem SQL disponibiliza um conjunto de comandos que realizam modificaes em tabelas existentes. possvel, por exemplo: Incluir coluna; Excluir coluna; Incluir restrio; Excluir restrio; Mudar nome de coluna; Mudar nome de tabela.

Excluindo colunas: Para excluir uma coluna deve ser utilizado o comando: ALTER TABLE nome_da_tabela DROP COLUMN nome_do_campo ; Exemplo: ALTER TABLE produtos DROP COLUMN descricao;

Incluindo colunas: Para incluir uma coluna deve ser utilizado o comando: ALTER TABLE nome_da_tabela ADD COLUMN nome_do_novo_campo tipo_de_dado ; Exemplos: ALTER TABLE hidrografia ADD COLUMN Ordem_Rio varchar(10) ; ALTER TABLE funcionarios ADD COLUMN CPF numeric(10,0) ;

Incluindo restrio (constraint): Para incluir uma Chave Primria, deve ser utilizado o comando:
ALTER TABLE nome_da_tabela ADD PRIMARY KEY (nome_do_campo) ;

Exemplo: ALTER TABLE Lotes Add Primary Key (num_lote) ; Para incluir uma Chave Estrangeira, deve ser utilizado o comando:
ALTER TABLE nome_da_tabela_filha ADD FOREIGN KEY (nome_da_coluna) REFERENCES nome_da_tabela_mae (nome_da_coluna) ON UPDATE ACAO ON DELETE ACAO;

Exemplo: ALTER TABLE Fazenda ADD FOREIGN KEY (CodMun) REFERENCES Municipio (CodMun) ON UPDATE CASCADE ON DELETE SET NULL;

Exerccio: Crie novamente as tabelas abaixo com as chaves primrias e estrangeiras (utilize DROP TABLE para apagar as tabelas

Excluindo restrio (constraint): Para excluir uma restrio, deve ser utilizado o comando:
ALTER TABLE nome_da_tabela DROP CONSTRAINT nome_da_restrio;

Exemplo: ALTER TABLE Produtos DROP CONSTRAINT produtos_id_pedido_fkey;

Mudar nome de coluna: Para mudar o nome de uma coluna, deve ser utilizado o comando:
ALTER TABLE nome_da_tabela RENAME coluna-velha TO coluna-nova;

Exemplo: ALTER TABLE produtos RENAME pecas TO equipamentos; Mudar nome da Tabela: Para mudar o nome da tabela, deve ser utilizado o comando:
ALTER TABLE nome_da_tabela RENAME TO novo_nome;

Exemplo: ALTER TABLE produtos RENAME TO equipamentos;

O comando INSERT utilizado para povoar uma tabela com linhas. Este comando requer o nome da tabela, e um valor para cada coluna da tabela. Por exemplo:

INSERT INTO nome_da_tabela (nome_da_coluna_1, nome_da_coluna_2, ... , nome_da_coluna_n) VALUES (valor_coluna_1, valor_coluna_2, valor_coluna_n); Exemplo: INSERT INTO municipio (codmun, nomemun, populacao) VALUES (1, 'Alcantil', 5200); Ou na forma implcita: INSERT INTO municipio VALUES (3, 'Aroeiras', 650);

O comando DELETE usado para apagar os registros e no as tabelas.

DELETE FROM tabela Condicao_SQL;


Exemplo:

DELETE FROM municipio WHERE codmun=3;


J o exemplo abaixo, apaga todas os registros de uma tabela:

DELETE FROM municipio;

O comando DROP TABLE usado para as tabelas.

DROP TABLE tabela; ou DROP TABLE tabela CASCADE, se houver alguma chave estrangeira na tabela
Exemplos:

DROP TABLE municipio; DROP TABLE fazenda CASCADE;

Para efetuar uma atualizao so necessrias trs informaes: 1. O nome da tabela e da coluna; 2. O novo valor para a coluna; 3. Quais linhas sero atualizadas.

Exemplo:

UPDATE municipio SET nomemun = Joo Pessoa WHERE codmun = 15 ;


Neste caso, o registro da tabela municpio que contm o codmun=15 ter o nome do municpio modificado para Joo Pessoa

A partir do modelo abaixo:


Proprietario
matricula (PK) : int nome_prop : varchar(45) num_lote (FK) : int

Lote
num_lote (PK) : int Area_Edif: float4 ID_Quadra: int

Quadra
ID_Quadra (PK): int Bairro: varchar (60)

1. Crie as tabelas e os relacionamentos 2. Insira no mnimo 4 registros em cada tabela 3. Crie um novo campo para a tabela lote e insira 3 registros 4. Altere a matricula de um proprietrio 5. Atualize o nmero de dois lotes 6. Apague um registro na tabela quadra 7. Aumente a rea de um lote em 20% 8. Renomeie a tabela Quadra para Quadra_setor 9. Renomeie o campo Bairro para Nome_Bairro

O comando utilizado para especificar consultas na linguagem SQL o SELECT. A sintaxe geral do comando SELECT :

SELECT LISTA_DE_COLUNAS FROM TABELA WHERE CONDICAO ;

Ex1: Listar TODOS os dados da tabela ESTADO:

Exemplo de uma consulta em SQL Obter todas as colunas (campos) da tabela fazenda que possuam mais de 20 ha: SELECT * FROM FAZENDA WHERE AreaFaz > 20; Onde o * corresponde a uma seleo de todas as colunas da tabela fazenda

` ` ` ` ` ` ` `

AND interseo OR unio NOT OU ! negao [ not (coluna=valor) ] > maior que >= maior ou igual que < menor que <= menor ou igual que <> diferente de

Exemplos: SELECT nomefaz FROM fazenda WHERE Areafaz > 20 AND codmun = 2;

SELECT nomefaz FROM fazenda WHERE Areafaz > 20 OR codmun = 2;

` ` ` `

IS NULL Encontra valores nulos IS NOT NULL Encontra valores no nulos LIKE Encontra uma cadeia de caracteres especificada ILIKE Semelhante ao LIKE, mas no case sensitive

Exemplos do uso do like LIKE a% - encontra as palavras que se iniciem com a letra a LIKE %a - encontra as palavras que terminem com a letra a LIKE %a% - encontra as palavras que possuem a letra a em qualquer posio

BETWEEN Define um intervalo de busca

Exemplo: encontrar as fazendas que possuem rea maior que 60 ha e menor que 210 ha SELECT nomefaz FROM fazenda WHERE areafaz BETWEEN 60 AND 210;

Em uma consulta SQL, os registros so mostrados de uma forma no ordenada. Para garantir que os registros sero retornados de uma consulta SELECT em uma ordem especfica, necessrio que se use a clusula ORDER BY (ASC crescente, DESC decrescente) no final do comando SELECT. Exemplos: SELECT nomefaz, areafaz FROM fazenda WHERE areafaz > 10 ORDER BY nomefaz DESC; Ou seja, seriam mostrados os nomes e as reas das fazendas com mais de 10 ha, da maior rea para a menor rea

Podemos tambm limitar a quantidade de registros mostrados com o comando LIMIT, exemplo: Mostrar os nomes e a populao dos 3 municpios mais populosos SELECT nomemun, populacao FROM municipio ORDER BY populacao DESC LIMIT 3; Por padro, quando usamos o ORDER BY, os resultados so mostrados em ORDEM CRESCENTE, por isso usamos o DESC (resultados na ordem decrescente) e depois limitamos a um nmero de 3 municpios.

Funes de agregao permitem computar valores sobre grupos de linhas de uma tabela. As funes mais utilizadas esto listadas abaixo: x x x x x COUNT : contagem de linhas ou valores SUM : soma MAX : mximo MIN : mnimo AVG : mdia

As funes de agregao podem ser aplicadas sobre toda a tabela ou sobre um grupo de linhas. Permitem calcular valores sobre grupos de linhas, definidas pela clusula GROUP BY. Veja o exemplo abaixo:
`

Obter rea total das fazendas de cada proprietrio SELECT dono, sum(areaFaz) FROM fazenda GROUP BY dono;

A PARTIR DESTE MODELO CONCEITUAL, RESPONDAS AS SEGUINTES PERGUNTAS:

1. 2. 3. 4. 5. 6. 7. 8.

9. 10. 11.

Repita as consultas dos exemplos anteriores no PgAdmin Faa uma consulta que retorne o nmero total de fazendas Quantas fazendas pertencem ao dono de cdigo igual a 207 ? Qual o nome e a populao do municpio de menor populao? Selecione todas as colunas da tabela variedade Qual o valor da soma das reas das fazendas que pertencem ao dono de cdigo igual a 274? Faa uma consulta que retorne as fazendas com rea menor que 50 ha ou que estejam no municpio de cdigo igual a 2. Selecione todas as colunas da tabela plantao que esto dentro do intervalo de plantio 02-04-2005 a 07-06-2005, ordenados pela data do plantio Selecione as fazendas que no pertencem ao proprietrio de cdigo igual a 207 Selecione todos os proprietrios que comeam com as letras Ca Selecione todos os municpios que no comeam pela letra J

Muitas das consultas realizadas precisam acessar simultaneamente vrias tabelas que esto ligadas. Para isso, damos o nome de JUNO de tabelas ou JOIN.
`

Qualificador de Nome tabela1.coluna1 tabela2.coluna2 Equao de juno tabela1.coluna1 = tabela2.coluna2

Problema: fazer um Join entre as tabelas cliente e pedido

Soluo: Select cliente.nome_cli, pedido.cod_cli, pedido.num_ped from cliente, pedido where cliente.cod_cli = pedido.cod_cli;

`A

partir das tabelas abaixo ,observe o exemplo seguinte:

Clientes (cod_cliente, cliente, profisso, localidade) Emprstimos (num_emprstimo, cod_cliente, cod_agencia, valor)

Quais os clientes com emprstimos de valor superior a 50.000 reais? SELECT Clientes.* FROM Clientes, Emprestimos WHERE Clientes.cod_cliente = Emprestimos.cod_cliente AND Emprestimos.valor > 50000

`A

partir das tabelas abaixo ,observe o exemplo seguinte:

ESTADO
Sigla (PK): varchar(2) Nome_Est: varchar(50) 1 *

CIDADE
Codigo (PK) : varchar(2) Nome_Cid: varchar(40) Populacao :numeric (8,0) Estado (FK): varchar(2) Area_km2 :numeric (10,2)

Retorne todas as cidades e o estado ao qual pertence. SELECT C.nome_cid, E.nome_est FROM cidade C, estado E WHERE C.estado = E.sigla

`A

partir das tabelas abaixo ,observe o exemplo seguinte:


E A
igla K :var ar Nom Est: var ar e

CI A E
Codigo K :var ar Nom Cid: var ar e opula ao:num eri , Estado K :var ar A m :num rea eri ,

Retorne o nome de ada estado e a soma das reas de todas as idades desse estado. E LE C E .nome E st, UM C .Area RO M estado E , idade C WHE RE E .sigla = C .estado GRO UP BY E .nome m

1. 2. 3. 4. 5.

Selecione o nome das fazendas e os nomes dos municpios onde elas se encontram. Selecione os nomes dos proprietrios e a soma da rea de suas respectivas propriedades. Repita a consulta anterior RETIRANDO os proprietrios que comeam com a letra C. Faa uma consulta que retorne os nomes dos proprietrios e o nome das fazendas que possuem reas maiores que 55 ha. Selecione o nome das fazendas e a descrio da variedade plantada em cada uma delas

1 - Selecione o nome das fazendas e os nomes dos municpios onde elas se encontram. SELECT f.nomefaz, m.nomemun FROM municipio m, fazenda f WHERE f.codmun = m.codmun ; 2 - Selecione os nomes dos proprietrios e a soma da rea de suas respectivas propriedades. SELECT p.nomeprop, SUM(f.areafaz) FROM proprietario p, fazenda f WHERE p.idprop = f.dono group by p.nomeprop;

3 - Repita a consulta anterior RETIRANDO os proprietrios que comeam com a letra C.

SELECT p.nomeprop, SUM(f.areafaz)


FROM proprietario p, fazenda f WHERE p.idprop = f.dono and p.nomeprop not like 'C%' group by p.nomeprop; 4 - Faa uma consulta que retorne os nomes dos proprietrios e o nome das fazendas que possuem reas maiores que 55 ha. SELECT p.nomeprop, f.nomefaz FROM proprietario p, fazenda f WHERE p.idprop = f.dono and f.areafaz > 55;

5. Selecione o nome das fazendas e a descrio da variedade plantada em cada uma delas. SELECT f.nomefaz, v.descvar FROM fazenda f, plantacao p, variedade v WHERE f.idfaz = p.idfaz and p.tipovar = v.tipovar;

1. 2. 3.

4.

5. 6. 7.

8. 9. 10.

Selecione o nome dos proprietrios, o telefone e o nome das suas respectivas fazendas RETIRANDO as fazendas com menos de 60 ha. Selecione o nome dos proprietrios, e a quantidade de fazendas que cada um possui, a consulta deve vir ordenada por ordem alfabtica. O proprietrio Carlos Nascimento comprou mais uma fazenda chamada Alegria (idfaz=603), no municpio de Pedras de Fogo com 350.51 ha, insira este registro no BD. Faa uma consulta mostrando todos os dados sobre o proprietrio Carlos Nascimento, suas respectivas fazendas e o nome dos municpios onde ficam suas fazendas. Altere a rea da fazenda chamada Riacho Azul, aumentando o seu tamanho 30%. Qual o nome do proprietrio da fazenda Riacho Azul? A proprietria Maria da Silva comprou mais uma fazenda chamada So Miguel (idfaz=658) no municpio de Texeira com 200 ha, insira este registro no BD. (OBS.: Dados do municpio codmun=6, populacao=5600). Qual a soma total das reas das fazendas de Maria da Silva? Apague as fazendas com rea menor que 50 h. Altere o nome da coluna datultcolh para data_ultima_colheita na tabela plantacao

Você também pode gostar