Вы находитесь на странице: 1из 41

A LINGUAGEM SQL

SQL significa Structured Query Language

A linguaguem SQL possui comandos que podemos englobar em trs grandes


categorias:
DDL (Data Definition Language) Linguagem de definio de dados;
DML (Data Manipulation Language) Linguagem de manipulao de
dados;
DCL (Data Control Language) Linguagem de control dos dados.

A LINGUAGEM SQL

Linguagem de definio dos dados


Os comandos que pertencem a esta categoria so utilizados para criar e
alterar a base de dados, tabelas e ndices.

CREATE - comando usado para criar uma nova base de dados, e para
criar novas tabelas
numa base de dados.
DROP - um comando utilizado para eliminar tabelas e ndices.
ALTER - usado para modificar uma tabela (criar, alterar ou eliminar
campos).

A LINGUAGEM SQL

Linguagem de manipulao dos dados


Os comandos que pertencem a esta categoria permitem actualizar e extrair
informao da base de dados.

SELECT comando usado para executar pesquisas base de dados.


INSERT permite introduzir nova informao na base de dados.
UPDATE permite actualizar a informao contida em registos e
campos.
DELETE elimina registos das tabelas da base de dados.

A LINGUAGEM SQL

Linguagem de controlo dos dados


Os comandos desta seco permitem o controlo sob a informao na base
de dados, pela atribuio de permisses de acesso, gesto da segurana e mesmo a
anulao das transaes efectuadas na base de dados.
GRANT permite conceder permisses de acesso base de dados.
REVOKE permite retirar as permisses de acesso base de dados.
CONNECT concede permisses de acesso s tabelas existentes.
DBA concede todos os privilgios de administrao da base de dados.
RESOURCE concede permisses para aceder s tabelas existentes e criar novas
tabelas.
COMMIT permite que as transaes efectuadas sejam tornados permanentes.
ROLLBACK permite que as transaes efectuadas sejam anuladas.

A LINGUAGEM SQL

Comando SELECT
SELECT permite efectuar pesquisas e sub-pesquisas sobre a informao
contida numa base de dados, mostrando o resultado sobre a forma de tabela virtual
SELECT [ DISTINCT | DISTINCTROW | TOP n [PERCENT] ]
<lista_campos>
FROM <nome_tabela> {<alias>}{, <nome_tabela> {<alias>}}
[WHERE <critrio_pesquisa>]
[GROUP BY lista_campos_a_agrupar ]
[HAVING <critrio_para_agrupar>]
[ORDER BY <nome_campo> [ASC|DESC] {,<nome_campo> [ASC|DESC]}]

A LINGUAGEM SQL

Comando SELECT
O comando SELECT tem de possuir obrigatoriamente as duas primeiras
linhas, todas outras opes so indicadas entre parntesis rectos:
SELECT lista_campos
FROM lista_tabelas

A lista_campos, uma lista de campos e/ou expresses separadas por vrgulas.

A LINGUAGEM SQL

Comando SELECT
Se quisermos seleccionar todas as colunas de uma tabela, basta indicarmos o smbolo *.
Pelo que para seleccionar todas os campos da tabela alunos fariamos:

SELECT *
FROM alunos;

A LINGUAGEM SQL

Comando SELECT
Caso existam campos de mais do que uma tabela indicados nesta lista, cada campo ser
precedido pelo nome da tabela, separado de um ponto

SELECT aluno.nome, curso.designao


FROM aluno, curso;

A LINGUAGEM SQL

DISTINCT
A opo DISTINCT omitir registos que
campos indicados.

contm dados duplicados nos

Suponhamos que queremos ver todos os ltimos nome dos autores, e apenas
este campo, queremos sem dvida evitar repeties de valores desse campo. Ento
faramos:

SELECT DISTINCT ult_nome


FROM autores;

A LINGUAGEM SQL

DISTINCTROW
A opo DISTINCTROW omitir dados baseados em registos integralmente
duplicados.
Por exemplo poderamos criar um query que far a juno (join) nas tabelas de
Leitores e de Requisies pelo campo codleitor. A tabela de leitores no contm valores
duplicados no campo codleitor, porque se trata de um campo chave, mas isso no
acontece no caso da tabela de Requisies.
Imaginemos que queremos fazer o join das duas tabelas baseadas no campo
codleitor, ento faramos:

SELECT DISTINCTROW nome


FROM leitores
INNER JOIN requisies ON leitores.codleitor = requisies.codleitor
ORDER BY nome;
Se omitirmos o DISTINCTROW, a tabela virtual resultante mostrar vrias linhas para cada
leitor que tem mais do que uma requisio.

A LINGUAGEM SQL

TOP n [PERCENT]
Devolve um certo nmero de registos que caibam no topo ou em baixo de um
intervalo indicado na clusula ORDER BY.
Suponhamos que queremos o conjunto dos 5 registos da tabela LEITORES,
dos leitores mais velhos, que satisfaam a condio de morar em Faro.
SELECT TOP 5, PrimNome, OutrosNomes, UltNome
FROM Alunos
WHERE localidade = Faro
ORDER BY idade DESC;

A LINGUAGEM SQL

TOP n [PERCENT]
Devolve um certo nmero de registos que caibam no topo ou em baixo de um
intervalo indicado na clusula ORDER BY.
Se quisermos 10 % dos leitores, dos leitores mais velhos, que satisfaam a mesma
condio, teramos:
SELECT TOP 10 PERCENT, PrimNome, OutrosNomes, UltNome
FROM Alunos
WHERE localidade = Faro
ORDER BY idade DESC;

A LINGUAGEM SQL

Clusula FROM
A clusula FROM lista_tabelas, serve para indicar a lista de tabelas sobre as
quais ser aplicada a pesquisa, devem ser separadas por vrgulas.

SELECT <lista_campos>
FROM <nome_tabela> {<alias>}{, <nome_tabela> {<alias>}}

A LINGUAGEM SQL

Clusula FROM
nome_tabelas alias
A lista_tabelas indica as tabelas que participam na pesquisa, e aparecem
separadas por vrgulas.
Poder-se- criar um alias da tabela, isto um outro nome pelo qual a
tabela conhecida, permitindo que sejam feitas operaes sobre o mesmo campo.
SELECT X.codaluno,Y.codaluno
FROM alunos AS X, alunos AS Y ;

A LINGUAGEM SQL

A LINGUAGEM SQL

Uma expresso uma combinao de colunas ligadas por operadores aritmticos.


Os operadores aritmticos so os seguintes:
+

adio

subtraco

multiplicao

diviso

SELECT quantidade + preo AS TOTAL


FROM factura;

A LINGUAGEM SQL

As funes de agregao do SQL so usadas nas expresses, consideremos as


seguintes:
Count (*)

conta o nmero de registos seleccionados.

Sum (exp)

soma os valores de um campo ou combinao de campos para


cada registo.

Avg (exp)

faz a mdia de todos os valores da expresso indicada.

Max (exp)

calcula o valor mximo da expresso indicada para todos os


registos.

Min (exp)

calcula o valor mnimo da expresso indicada para todos os


registos.

A LINGUAGEM SQL

Exemplos:

Determinar o nmero de multas atribudas aos leitores da nossa base de


dados;
SELECT Count(*) AS TotalMultas
FROM multas;

A LINGUAGEM SQL

Exemplos:

Determinar qual a multa mais alta a mais baixa atribuda a um leitor;

SELECT Max (valor) AS MaisAlta, Min (valor) AS MaisBaixa


FROM multas;

A LINGUAGEM SQL

Exemplos:

Somar todas o valor de todas as multas j registadas

SELECT Sum(valor)
FROM multas;

A LINGUAGEM SQL

Clusula WHERE
Esta clusula estabelece o critrio que define que registos das tabelas indicadas na
clusula WHERE so afectadas pelo SELECT e tem o seguinte formato:

SELECT <lista_campos>
FROM <lista_tabelas>
WHERE <critrio_pesquisa>

A LINGUAGEM SQL

Clusula WHERE
No critrio_pesquisa aparecem os operadores lgicos AND, OR e NOT.
Existem trs tipos de critrios de pesquisa:
I.

Comparao;

II.

Ligao;

III.

Sub-interrogaes (subquerys).

A LINGUAGEM SQL

Clusula WHERE

I.

Critrios de pesquisa por comparao

a) Operador_relacional (=, <>, >, <=, >=, <)

b) [NOT] BETWEEN expresso1 AND expresso2


A palavra BETWEEN significa entre (dois valores dados pelas
duas expresses).
c) [NOT] IN (lista_itens)
A palavra IN significa contido em (na lista de itens indicada).

A LINGUAGEM SQL

Clusula WHERE

I.

Critrios de pesquisa por comparao

d) [NOT] LIKE string


A palavra LIKE significa igual a. Aplica-se a campos tipo text.
A string um conjunto de caracteres.
Podemos usar caracteres especiais na string que permitiro pesquisar com mais
preciso a informao que pretendemos.
*
?
[a-z]
[a0-2-]
[a-z,A-Z]
\
\*
\\

zero ou mais caracteres


um s caracter
qualquer letra minscula
pesquisa o a, o 0, 1 e 2 e o smbolo
qualquer caracter que seja uma letra
o prximo caracter no tem um significado real
encontrar o smbolo *
encontrar o smbolo \

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE

Seleccionar o codleitor que tem multas de valor superior a 200.


SELECT codleitor
FROM multas
WHERE valor > 200

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE

Seleccionar os leitores cujo telefone comece por 289.


SELECT telefone
FROM leitores
WHERE telefone LIKE 089*

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE
Seleccionar os leitores cujo nome comece por uma letra de R a Z (maisculas ou
minsculas).

SELECT nome
FROM leitores
WHERE nome LIKE [R-Z]* OR nome LIKE [r-z]*

A LINGUAGEM SQL

II. Critrios de pesquisa por Ligao


fundamental que estejam definidos os relacionamentos entre as tabelas
sobre as quais se deseja fazer um query envolvendo o comando SELECT
com a clusula WHERE.
A ligao feita entre um ou mais campos de uma tabela e um ou mais
campos da outra tabela. Caso os campos que se deseja estabelecer a
ligao sejam iguais, deve-se preceder o nome do campo com o nome da
tabela a que diz respeito.
O resultado um tabela virtual que satisfaz a condio indicada na
clusula WHERE.

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE
Mostrar o ttulo e a localizao de todos os livros cujo assunto seja generalidades.
SELECT livros.titulo, livros.localizao
FROM livros, assuntos, livrosassuntos livass
WHERE livros.isbn = livass.isbn AND lisass.codassunto = assuntos.codassunto
AND assuntos.nomeassunto LIKE generalidades
Este comando ilustra uma operao de juno (join), a qual sabemos decomposta
numa projeco de uma restrio de um produto.
Se observarmos o comando atentamente verificamos que a clusula FROM define um
produto entre as tabelas livros, assuntos e livrosassuntos.
Os campos indicados logo depois do comando SELECT executam uma projeco,
definindo os campos que iro figurar na tabela virtual resultante do query.
A clusula WHERE estabelece a restrio, definindo as condies a que uma linha da
tabela produto deve obedecer para que ser possa figurar no resultado da query.

A LINGUAGEM SQL

III. Sub-interrogaes
Podemos fazer uma sub-query, i.e., o critrio de pesquisa da clusula WHERE
pode ser uma novo comando SELECT.
Se fizermos uma sub-query o comando SELECT no poder conter a clusula
ORDER BY, e apenas poder ter um campo na lista de campos.
possvel usar uma das cinco opes:

WHERE expresso operador_relacional [ALL|ANY|SOME|[NOT]IN|[NOT] EXIST]

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE
O nome dos leitores que ainda no devolveram os livros
SELECT primnome, ultnome
FROM leitor
WHERE codleitor = ANY
(SELECT codleitor
FROM requisitardevolver
WHERE datadev is NULL);
No exemplo apresentado temos uma query dentro outra query (ie, uma query com
subquery). Neste caso, a subquery determinar todos os codreq da tabela reqdev em
que o campo datadev estar em branco. A query princpal mostrar o primeiro e o
ltimo nome dos leitores cujo codleitor figure nos registos encontrados pela subquery.

A LINGUAGEM SQL

Clusula WHERE
Vejamos mais alguns exemplos do comando SELECT com a clusula WHERE
Todos os ISBN ilustrados cujo ttulo Os Lusadas
SELECT isbn
FROM livros
WHERE ilustra = S AND isbn IN
(SELECT isbn
FROM livros
WHERE titulo = Os Lusadas);
No exemplo apresentado atrs, temos querys dentro de querys (ie, uma query
com subquery). Como explicao do funcionamento da segunda query
poderamos dizer que a subquery, indicada entre parentesis, ir determinar os isbn
de todos os livros da tabela livros em que o ttulo seja Os Lusadas. Desses isbn
encontrados, o comando ir mostrar apenas aqueles em que o campo ilustra tenha
o valor S. Ie, na globalidade apenas sero mostrados os isbn dos livros com o
titulo Os Lusadas e com ilustraes.

A LINGUAGEM SQL

Clusula GROUP BY
A clusula GROUP BY combina os registos com valores iguais de um
campo num nico registo. Cria-se um valor para cada registo se incluirmos as
funes de agregao do SQL, tal como o Sum ou o Count, no comando SELECT.

SELECT <lista_campos>
FROM <lista_tabelas>
WHERE <critrio_pesquisa>
[GROUP BY lista_campos_a_agrupar ]

A LINGUAGEM SQL

Clusula GROUP BY
Vejamos o seguinte exemplo do comando SELECT com a clusula GROUP BY.
Contar o nmero de requisies de livros de cada leitor.
SELECT codleitor, Count(isbn) AS Total_Requisies
FROM RequisitarDevolver
GROUP BY codleitor

A LINGUAGEM SQL

Clusula HAVING
Especifica que registos agrupados sero mostrados pelo comando SELECT com a
clusula GROUP BY. Depois do GROUP BY ter agrupado os registos, o HAVING
mostrar os registos agrupados que satisfaam as condies da clusula HAVING.

SELECT <lista_campos>
FROM <lista_tabela>
[WHERE <critrio_pesquisa>]
[GROUP BY lista_campos_a_agrupar ]
[HAVING <critrio_para_agrupar>]

A LINGUAGEM SQL

Clusula HAVING
Vejamos o seguinte exemplo do comando SELECT com a clusula HAVING.
Mostrar o total de requisies de cada leitor, para leitores com mais de 3
requisies.

SELECT codleitor, count(isbn) AS TotalRequisies


FROM requisitardevolver
GROUP BY codleitor
HAVING count(isbn) > 3;

A LINGUAGEM SQL

Clusula HAVING
Vejamos o seguinte exemplo do comando SELECT com a clusula HAVING.
Mostrar a mdia de requisies de cada leitor com mdia superior ou igual a 20
requisies.

SELECT codleitor, avg(isbn) AS MdiaRequisies


FROM requisitardevolver
GROUP BY codleitor
HAVING avg(isbn) > = 20;

A LINGUAGEM SQL

Clusula ORDER BY
Classifica os dados exibidos por um campo ou campos em ordem
ascendente ou descendente.

SELECT <lista_campos>
FROM <lista_tabelas>
[WHERE <critrio_pesquisa>]
[ORDER BY <nome_campo> [ASC|DESC] {,<nome_campo> [ASC|DESC]}]
Por defeito a ordem de classificao ascendente de (A-Z,0-9). A
palavra reservada ASC no final de cada campo que se queira classificar por
ordem ascendente. E a palavra reservada DESC utiliza-se depois de cada campo
que se deseja classificar por ordem descendente.

A LINGUAGEM SQL

Clusula ORDER BY
Vejamos alguns exemplos.

Lista classificada por ordem crescente pelo ltimo nome dos leitores
registados. Para leitores com nome igual ordena depois pelo primeiro nome.

SELECT ultnome, primnome


FROM leitor
ORDER BY ultnome, primnome

A LINGUAGEM SQL

Clusula ORDER BY
Vejamos alguns exemplos.

Lista classificada por ordem descendente pelo titulo dos livros registados.

SELECT titulo
FROM livros
ORDER BY titulo DESC

Вам также может понравиться