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 [Link], [Link]
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 [Link] = [Link]
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 [Link],[Link]
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 [Link], [Link]
FROM livros, assuntos, livrosassuntos livass
WHERE [Link] = [Link] AND [Link] = [Link]
AND [Link] 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