Você está na página 1de 12

Na linguagem SQL podem considerar-se os

seguintes domínios distintos:


Programação SQL
Um conjunto de comandos que podem ser
(Structured Query Language) utilizados para a criação de bases de dados e que
é genericamente designado por Linguagem de
Definição de Dados (DDL).
E que contém comandos que permitem, por
exemplo: criar uma base de dados, criar uma nova
tabela, alterar uma tabela, eliminar uma tabela e
eliminar uma base de dados.

Linguagem de Definição de Dados

Um conjunto de comandos associados aos A linguagem de definição de dados utiliza


processos de actualização e extracção de basicamente os seguintes comandos:
informação da base de dados, designado por
Linguagem de Manipulação de Dados (DML). CREATE – comando utilizado para criar novas
tabelas e novas bases de dados;
A Linguagem de Manipulação de Transacções ou
Transaction Manipulation Language (TML). ALTER - comando usado para modificar tabelas,
isto é, eliminar, alterar ou adicionar campos;
A Linguagem de Controlo de Dados ou Data
Control Language (DCL). DROP – comando utilizado para eliminar tabelas
e a base de dados.

Comando: CREATE DATABASE O Comando: CREATE TABLE

O SQL tem a instrução CREATE DATABASE que O SQL tem a instrução CREATE TABLE que
permite criar uma nova base de dados vazia. permite criar uma nova tabela na base de dados.

Para criar a base de dados Biblioteca faz-se o Para criar a tabela Livro com 4 campos (Número,
seguinte: CREATE DATABASE Biblioteca; Título, Autor e Preço) faz-se o seguinte:

CREATE TABLE Livro (


Para começar a trabalhar com a base de dados Numero Integer NOT NULL UNIQUE PRIMARY KEY,
que se acabou de criar é necessário escrever: Titulo Varchar(20),
USE Biblioteca; Autor Varchar(20),
Preco Float);

1
O Comando: ALTER TABLE O Comando: ALTER TABLE

O SQL tem a instrução ALTER TABLE que Para alterar uma tabela, por exemplo, modificar o
permite alterar a estrutura de uma tabela já tipo de dados do campo Editora da tabela Livro,
existente na base de dados. faz-se o seguinte:
ALTER TABLE Livro
MODIFY Editora Varchar(15);
Para alterar uma tabela, por exemplo,
acrescentar o campo Editora à tabela Livro, faz-se
o seguinte: Para alterar uma tabela, por exemplo, eliminar o
campo Editora da tabela Livro, faz-se o seguinte:
ALTER TABLE Livro ALTER TABLE Livro
ADD Editora Integer; DROP Editora;

O Comando: DROP TABLE O Comando: DROP DATABASE

O SQL tem a instrução DROP TABLE que permite O SQL tem instrução DROP DATABASE que
eliminar uma tabela, ao utilizar esta instrução, os permite eliminar uma base de dados.
dados da tabela perdem-se para sempre.
Para eliminar a tabela Livro faz-se o seguinte: Ao fazer esta operação estamos a eliminar todas
DROP TABLE Livro; as tabelas da base de dados, bem como todos os
dados (registos) que foram inseridos.

DROP DATABASE Nome_Base_Dados;

Linguagem de Manipulação de
O Comando: INSERT INTO
Dados

A Linguagem de Manipulação de Dados permite O SQL tem a seguinte instrução que permite inserir
construir expressões baseadas nos seguintes novos registos numa tabela já existente na base de
comandos: dados.

SELECT – comando utilizado para executar consultas INSERT INTO Nome_Tabela (nome_campo1,
à base de dados; nome_campo2, …)
INSERT – comando usado para introduzir uma nova
informação na base de dados (novos registos);
UPDATE – comando utilizado para actualizar a base
VALUES (valor1, valor2, …);
de dados, alterando a informação contida em registos
e campos;
DELETE – comando usado para eliminar registos de
tabelas da base de dados.

2
O Comando: INSERT INTO O Comando: DELETE FROM

Para preencher dois registos na tabela Livro, faz- O SQL tem a seguinte instrução que permite eliminar
se o seguinte: um conjunto de registos que existem numa tabela e
respeitam uma condição.
INSERT INTO Livro (Numero, Titulo, Autor, Preco)
VALUES DELETE FROM Nome_Tabela
(2123344456, “Amor em tempos de cólera”, WHERE Condição;
“Gabriel Garcia Marques”, 26),
Neste caso apenas são eliminados os registos
que respeitam essa condição (podem ser vários,
(3233345566, “Os Lusíadas”, “Luís de Camões”, um ou mesmo nenhum).
15);

O Comando: DELETE FROM O Comando: DELETE FROM

Para eliminar da tabela livros todos os registos de


livros que tem um preço igual a 26 euros, faz-se o DELETE FROM Livro;
seguinte:
DELETE FROM Livro
WHERE Preco=26; O comando anterior apaga todos os registos da
tabela Livro.
Se por acaso não se escrever a condição o
comando DELETE apaga todos os registos dessa
tabela (fica a tabela vazia).
No entanto, não elimina a tabela isso apenas é
feito usando o comando DROP TABLE.

O Comando: UPDATE O Comando: UPDATE

O SQL tem a seguinte instrução que permite Imagine que o preço de um determinado livro
actualizar (alterar) o valor de um dado ou de um aumentou 20% em relação ao seu preço original.
conjunto de dados que já existem nos campos de Então o preço será igual ao preço original mais
uma tabela. 20% (0.2) do preço original.

UPDATE Nome_Tabela UPDATE Livro


SET Nome_Campo1=Expressão SET Preco=Preco+Preco*0.2
SET Nome_Campo2=Expressão Where Numero=3233345566;

Where Condição;

3
O Comando: SELECT O Comando: SELECT

É através do comando SELECT que se definem Sintaxe simplificada:


as consultas (queries) em SQL.
Uma consulta (query) é um conjunto de SELECT <Lista de campos>
comandos, através dos quais a informação é FROM <Lista de tabelas>
seleccionada na base de dados. WHERE <Condição>;
Esse conjunto de comandos pode actuar sobre
uma ou mais tabelas de base de dados e ainda
sobre outras consultas.
O SELECT, FROM e WHERE são palavras-chave do
O resultado de uma consulta (query) aparece SQL.
sobre a forma de uma tabela virtual (dynaset).
As consultas (queries) são conjuntos de
comandos SQL.

O Comando: SELECT Operadores relacionais:

O comando SELECT indica quais os campos que


devem figurar na consulta (query). Operador Descrição Exemplo Resultado

A cláusula FROM indica o nome das tabelas a = Igual a 7=5 Falso


consultar. > Maior que 7>5 Verdadeiro
A cláusula WHERE estabelece uma condição a < Menor que 7<5 Falso
que estão sujeitas as linhas das tabelas para
figurarem na consulta (query). A condição de >= Maior ou igual que 7>=5 Verdadeiro
restrição tem que ser verdadeira para os registos
seleccionados. <= Menor ou igual 7<=5 Falso
O ponto e vírgula (;) indica o fim da consulta. que

<> Diferente de 7<>5 Verdadeiro

Operadores lógicos: O Comando: SELECT

Para os próximos exemplos considere uma base


de dados com 3 tabelas e os seguintes campos:
Operador Descrição Exemplo

Livro (Número, Título, Autor, Preço);


AND E lógico Condição 1 AND Condição 2

OR Ou lógico Condição 1 OR Condição 2


Leitor (Código, Nome, Morada, Cidade, C_Postal,
Idade);
NOT Negação NOT Condição
Requisição (Nr_Livro, Cod_Leitor, Data_Req,
Data_Entrega).

4
O Comando: SELECT O Comando: SELECT

Mostrar toda a informação sobre todos os livros. Mostrar o código e o nome dos leitores cujo código é
inferior a 5.
SELECT *
SELECT Código, Nome
FROM LIVRO;
FROM Leitor
WHERE Código < 5;

O asterisco (*) representa todos os campos de Outra forma de escrever a mesma consulta seria:
uma tabela. SELECT Leitor.Código, Leitor.Nome
FROM Leitor
WHERE Leitor.Código < 5;

O Comando: SELECT O Comando: SELECT

Como pode haver campos, em tabelas diferentes, Listar o nome e a cidade dos leitores com o nome
com nomes iguais, o nome completo de um a começar por M e o código entre 2 e 5.
campo é o nome da tabela, seguido de um
ponto, seguido do nome do campo. SELECT Leitor.Nome, Leitor.Cidade
FROM Leitor
No entanto, quando não há possibilidade de WHERE Leitor.Nome LIKE “M%” AND
confusão, o SQL deixa referir os campos
simplesmente pelo seu nome próprio. Leitor.Código >= 2 AND Leitor.Código <= 5;

O Comando: SELECT O Comando: SELECT

Listar o nome e a cidade dos leitores com o nome O operador BETWEEN, embora não venha
a começar por M e o código entre 2 e 5. acrescentar poder à linguagem SQL, facilita a
expressão de consultas que envolvam
Ou comparação com uma gama de valores.
SELECT Leitor.Nome, Leitor.Cidade
FROM Leitor As condições de pesquisa podem incidir sobre
campos que não têm valores numéricos. No caso
WHERE Leitor.Nome LIKE “M%” AND das strings (cadeias de caracteres) utiliza-se o
Leitor.Código BETWEEN 2 AND 5; operador LIKE (comparação de strings) para
verificar se o conteúdo da coluna se enquadra
num dado padrão, por exemplo: LIKE “Maria”.

5
O Comando: SELECT O Comando: SELECT

No Access: As comparações podem ser ligadas por três


O caracter * (asterisco) vale por um conjunto de operadores lógicos: AND, OR e NOT.
caracteres quaisquer.
O caracter ? (ponto de interrogação) vale por um AND de duas condições é verdadeiro se ambas as
e um só caracter. condições forem verdadeiras.
OR de duas condições é verdadeiro se pelo
No MySQL: menos uma das condições é verdadeira.
O caracter % (percentagem) vale por um NOT de uma condição é verdadeiro se a condição
conjunto de caracteres quaisquer. é falsa.
O caracter _ (under score) vale por um e um só
caracter.

O Comando: SELECT O Comando: SELECT

Mostrar o código e o nome dos leitores, mas que o O comando SELECT identifica os campos que
campo nome da tabela Leitor seja apresentado devem figurar na consulta e utilizando a palavra
com a designação “Nome Completo do Leitor”. reservada AS é possível definir uma nova
designação para o campo Nome, da tabela Leitor.
SELECT Leitor.Código, Leitor.Nome AS “Nome
Completo do Leitor”
FROM Leitor;

O Comando: SELECT O Comando: SELECT

Mostra o nome dos leitores que tem 10, 15 e 20 Ou


anos de idade. SELECT Leitor.Nome
FROM Leitor
SELECT Leitor.Nome WHERE Leitor.Idade IN (10, 15, 20);
FROM Leitor
WHERE Leitor.Idade = 10 OR Leitor.Idade = 15 O operador IN pode ser utilizado para comparar um
OR Leitor.Idade = 20; valor com um conjunto de valores constantes.
O conjunto é colocado entre parêntesis curvos e os
valores separados por vírgulas.

6
O Comando: SELECT O Comando: SELECT

Pretende-se seleccionar as cidades, onde residem O resultado da consulta anterior tem linhas
os leitores, com o código superior ou igual a 2. repetidas (porque mais do que um leitor mora na
mesma cidade...), o que não devia ser permitido,
uma vez que, deve-se evitar a repetição
SELECT Leitor.Cidade desnecessária de informação.
FROM Leitor
O SQL trabalha deste modo para que possam ser
WHERE Leitor.Código >= 2; aplicadas as funções de grupo (de que vamos
falar mais à frente) de um modo mais versátil.

O Comando: SELECT O Comando: SELECT

No entanto, o SQL tem um mecanismo que nos Escrever o número de dias que durou cada
permite transformar o resultado num conjunto
genuíno, por eliminação de repetições existentes nas requisição nos casos em que duraram menos que
linhas resultantes de um SELECT, usando a palavra 10 dias.
reservada DISTINCT. Assim cada cidade surge
apenas uma vez. O DISTINCT só pode ser colocado
imediatamente a seguir ao SELECT. SELECT Nr_Livro, Cod_Leitor, Data_Entrega-
Data_Req AS “N.º de Dias”
SELECT DISTINCT Leitor.Cidade
FROM Requisição
FROM Leitor
WHERE Leitor.Código >= 2; WHERE (Data_Entrega – Data_Req) < 10;

Expressões Aritméticas Expressões Aritméticas

Embora até ao momento, só tenhamos imposto As precedências dadas, pelo SQL, aos
condições baseadas em atributos (campos) já operadores, são as normais. Pode-se utilizar
existentes na base de dados, é possível especificar parêntesis curvo para alterar a ordem de
condições baseadas em expressões calculadas a avaliação normal dos operadores.
partir dos campos.
Também podemos usar expressões para criar
O SQL permite compor expressões recorrendo a
campos calculados, que não existem na base de
campos da base de dados, a constantes e aos
dados (exemplo: “N.º de Dias”).
operadores aritméticos normais: +, -, *, e /.

7
Expressões Aritméticas Ordenação

O SQL permite também a realização de Obter uma lista com os autores, títulos e preços
operações aritméticas sobre campos não dos livros ordenada crescentemente por autor e
numéricos, como por exemplo, datas. decrescentemente por preço.
Para o SQL, uma data é apenas um número de
dias que passou desde um instante de referência, SELECT Autor, Título, Preco
o que faz com que a subtracção de duas datas FROM Livro
seja um número de dias. ORDER BY Autor ASC, Preco DESC;

Ordenação Ordenação

Se nada for indicado o SQL imprime as linhas, Para que o resultado possa ser apresentado com um
resultantes de uma consulta, pela ordem que mais lhe formato mais aceitável, o SQL fornece a palavra
convém, que normalmente não é a ordem que convém ORDER BY, que permite ordenar as linhas do
a uma pessoa que está a ler o resultado. resultado por um campo ou um conjunto de campos,
tanto ascendentemente (ASC), como
descendentemente (DESC).

Pode ordenar-se pelo número de campos que for


necessário e, para cada um deles, dizer se a
ordenação é ascendente ou descendente.

Ordenação Ordenação

Por defeito, se for usada a palavra ORDER BY, o Caso se indique que se pretende ordenar o
SQL ordena o resultado ascendentemente. Para resultado de um SELECT por mais do que um
ordenar descendentemente, é necessário campo a ordenação é feita pelo primeiro campo, e
acrescentar a palavra-chave DESC entre valores iguais é ordenado pelo segundo
(DESCENDENT). Existe também a palavra-chave campo.
ASC (ASCENDENT), embora, por razões óbvias,
não seja muito usada.

8
Ordenação Ordenação

Ordenação por posição Ordenação por posição

Para obter a lista dos autores, títulos e preços dos Ou


livros ordenada crescentemente por autor e SELECT Autor, Título, Preco
decrescentemente por preço, podemos fazer o FROM Livro
seguinte:
ORDER BY 1, 3 DESC;
SELECT Autor, Título, Preco
FROM Livro
ORDER BY Autor, Preco DESC;

Ordenação

A ordem dos campos é 1, 2, 3, ... a contar da O valor NULL, quando presente num campo,
esquerda para a direita. Nada tem a ver com a indica “ausência de valor”. O NULL não é zero,
ordem pela qual foram criados. A ordem levada nem a string vazia. O valor NULL permite-nos
em conta é a ordem pela qual os campos ou indicar se existe ou não um valor já disponível
expressões foram colocados na cláusula SELECT. para um determinado campo.
Não são permitidos números com sinais (+ ou -). As comparações de valores com NULL terão de
ser realizadas utilizando sempre o operador IS.

SELECT campo1 Obter uma lista com os nomes, moradas e código


FROM tabela postal dos leitores que não tem idade.
Where campo2 IS NULL; O resultado deve ser ordenado ascendentemente
por nome.
Ou a operação inversa
SELECT Nome, Morada, C_Postal
SELECT campo1 FROM Leitor
FROM tabela WHERE Idade IS NULL
Where campo2 IS NOT NULL; ORDER BY Nome;

9
Funções de Grupo Neste caso, queremos saber informação que não
depende de cada linha, mas sim do conjunto total
Obter o preço médio, o valor total e o número de das linhas.
livros da biblioteca, bem como, o preço do livro
mais caro e o preço do livro mais barato. O SQL permite realizar operações, chamadas “de
grupo” sobre o conjunto das linhas seleccionadas.
SELECT AVG(Preço), SUM(Preço), COUNT(*),
MAX(Preço), MIN(Preço) Essas operações, ou funções, são as seguintes:
FROM Livro;

AVG(exp) – média aritmética, calculada para a SUM(exp) – soma total de todas as ocorrências da
expressão exp. expressão exp.

Obter o preço médio dos livros da tabela livro. Exemplo: Mostrar a soma do preço de todos os
Exemplo: livros (valor total existente na tabela livro).
SELECT AVG(Preco)
SELECT SUM(Preco)
FROM Livro;
FROM Livro;

MIN(exp) – mínimo encontrado para a expressão MAX(exp) – máximo encontrado para a expressão
exp. exp.

Mostrar o preço do livro mais barato existente na Mostrar o preço do livro mais caro existente na
tabela livro. tabela livro.
Exemplo: Exemplo:
SELECT MIN(Preco) SELECT MAX(Preco)
FROM Livro; FROM Livro;

10
COUNT(*) – número de linhas seleccionadas Calcule o preço médio dos livros de cada autor.
(usa-se o *, porque o número de linhas é igual
para todos os campos). Já vimos que o SQL permite calcular funções de
grupo para o conjunto de linhas seleccionadas. No
Mostrar quantos livros há na tabela livro. entanto, esta possibilidade às vezes, não é suficiente.
Exemplo:
SELECT COUNT(*)
FROM Livro;

Neste caso, por exemplo, para responder a esta O que queríamos que o SQL fizesse era agrupar
pergunta, teríamos que fazer uma consulta para as linhas por autor e, a seguir, para cada grupo
cada autor: formado, aplicar a função de grupo.

SELECT AVG(Preço) FROM Livro WHERE Autor O SQL permite fazer isto mesmo, com a palavra
LIKE ‘Luís de Camões’; GROUP BY.
SELECT AVG(Preço) FROM Livro WHERE Autor
LIKE ‘Eça de Queiros’; SELECT Autor, AVG(Preco)
SELECT AVG(Preço) FROM Livro WHERE Autor FROM Livro
LIKE ‘Camilo Castelo Branco’; GROUP BY Autor;

O SQL, para avaliar as consultas deste tipo, Pode pedir-se para agrupar por mais do que um
agrupa todas as linhas que têm igual o campo campo, bastando para isso colocar a lista de
especificado depois da palavra GROUP BY e nomes de campos, pelos quais queremos agrupar,
aplica, a cada grupo de linhas obtido, a função de a seguir à palavra GROUP BY.
grupo especificada em SELECT. Neste caso, o SQL agrupa as linhas do resultado
Vai aparecer, portanto, uma linha para cada tendo em conta o conjunto dos campos
grupo, ou seja, neste caso, por cada autor. especificados.
Se não especificarmos nenhum campo de O resultado terá, pois, tantas linhas, quantos os
agrupamento, o SQL agrupa todas as linhas grupos de linhas com valores diferentes para o
seleccionadas. conjunto de campos.
O resultado é, pois, apenas uma linha.

11
Há, no entanto, uma limitação ao tipo de Qual o nome do autor e o preço médio dos livros,
perguntas que se pode fazer com GROUP BY: cujo preço médio é maior que 30 euros.
não se podem colocar condições sobre campos
calculados por funções de grupo. A primeira tentativa que qualquer pessoa faria
seria a seguinte,

SELECT Autor, AVG(Preço)


FROM Livro
WHERE AVG(Preço) > 30
GROUP BY Autor;

Em vez de dar o resultado esperado para esta Assim a formulação correcta da pergunta: Qual o
pergunta, o SQL daria uma mensagem de erro do nome do autor e o preço médio dos livros, cujo
tipo: não se pode usar condições com funções de preço médio é maior que 30 euros.
grupo.
SELECT Autor, AVG(Preco)
Para obter o resultado pretendido com a pergunta FROM Livro
de cima é necessário recorrer a mais uma palavra: GROUP BY Autor
HAVING.
HAVING AVG(Preco) > 30;
A cláusula HAVING funciona exactamente como a
cláusula WHERE, só que actua sobre grupos
definidos por GROUP BY.

Isto não quer dizer que não se possa utilizar, Mostre o nome dos autores, começados por C,
simultaneamente, WHERE e GROUP BY. O único cujos livros tenham um preço médio inferior a 25.
cuidado a ter é que não se podem impor, na
cláusula WHERE, condições que dependam de SELECT Autor, AVG(Preco)
funções de grupo.
FROM Livro
WHERE Autor LIKE “C%”
Estas condições são colocadas depois de
HAVING. GROUP BY Autor
HAVING AVG(Preco) < 25;

12