Escolar Documentos
Profissional Documentos
Cultura Documentos
Base de Dados
Structures Query Language ( SQL )
921078775
13
SQL (estructure query language)
SQL>Comandos SQL>Select
Para que servem os comandos SQL? Uma utilização comum é a seleção de tabelas
localizadas numa base de dados. Imediatamente, visualizamos duas palavras-chave:
necessitamos de SELECT (selecionar) FROM (de) uma tabela. (Note que uma tabela é
um receptáculo existente numa base de dados onde os dados estão armazenados. Para
obter mais informações sobre como manipular tabelas, consulte a secção Manipulação
de tabelas). Deste modo, temos a estrutura SQL mais básica:
Tabela Store_Information
Iremos utilizar esta tabela como exemplo ao longo deste tutorial (esta tabela irá aparecer
em todas as secções). Para selecionar todas as lojas nesta tabela, introduzimos
Resultado:
store_name
Los Angeles
San Diego
Los Angeles
Boston
É possível selecionar nomes de várias colunas, assim como selecionar nomes de várias
tabelas.
1
SQL>Comandos SQL>Distinct
TabelaStore_Information
introduzimos
Resultado:
store_name
Los Angeles
San Diego
Boston
SQL>Comandos SQL>Where
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "condição"
Por exemplo, para selecionar todas as lojas com valores superiores a 1.000 € na Tabela
2
Store_Information,
introduzimos
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
Resultado:
store_name
Los Angeles
SQL>Comandos SQL>And Or
Na secção anterior, vimos que a palavra-chave WHERE pode ser utilizada para
selecionar condicionalmente dados de uma tabela. Esta condição pode ser uma condição
simples (como a apresentada na secção anterior) ou pode ser uma condição composta.
As condições compostas são constituídas por várias condições simples ligadas através
de AND ou OR. Não existe qualquer limite relativamente ao número de condições
simples que podem estar presentes numa única instrução SQL.
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "condição simples"
{[AND|OR] "condição simples"}+
Os símbolos {}+ significam que a expressão entre parênteses irá ocorrer uma ou mais
vezes. Note que AND e OR podem ser utilizados alternadamente. Além disso, podemos
utilizar os sinais de parênteses ( ) para indicar a ordem da condição.
Por exemplo, podemos pretender selecionar todas as lojas com vendas superiores a 1
000 € ou todas as lojas com vendas inferiores a 500 € mas superiores a 275 € na Tabela
Store_Information, 3
TabelaStore_Information
introduzimos
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275)
Resultado:
store_name
Los Angeles
San Francisco
SQL>Comandos SQL>In
Na linguagem SQL, a palavra-chave IN pode ser utilizada de duas formas e esta secção
introduz uma que está relacionada com a cláusula WHERE. Quando utilizada neste
contexto, sabemos exatamente o valor dos valores devolvidos que pretendemos
visualizar em pelo menos uma das colunas. A sintaxe para utilizar a palavra-chave IN é
a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "nome_coluna" IN ('valor1', 'valor2', ...)
O número de valores entre parênteses pode ser um ou mais, com cada valor separado
por uma vírgula. Os valores podem ser numéricos ou caracteres. Se existir apenas um
valor entre parênteses, o comando é equivalente a
Por exemplo, podemos pretender selecionar todos os registos das lojas de Los Angeles e
San Diego na Tabela Store_Information,
TabelaStore_Information
4
introduzimos
SELECT *
FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego')
Resultado:
SQL>Comandos SQL>Between
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "nome_coluna" BETWEEN ''valor1' AND ''valor2'
Este comando irá selecionar todas as linhas cuja coluna tiver um valor entre o 'valor1' e
o 'valor2'.
Por exemplo, podemos querer visualizar todas as vendas entre 6 de Janeiro de 1999 e 10
de Janeiro de 2010 na Tabela Store_Information,
TabelStore_Information
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999'
Note que a data pode estar armazenada em diferentes formatos em bases de dados
diferentes. Este tutorial simplesmente seleciona um dos formatos.
Resultado:
SQL>Comandos SQL>Like
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "nome_coluna" LIKE {PATTERN}
'A_Z': Todas as cadeias que começam por 'A', outro caráter, e terminam em 'Z'.
Por exemplo, 'ABZ' e 'A2Z' iriam ambas satisfazer a condição, enquanto 'AKKZ'
não iria (porque existem dois caracteres entre A e Z em vez de um).
'ABC%': Todas as cadeias que começam por 'ABC'. Por exemplo, 'ABCD' e
'ABCABC' iriam satisfazer a condição.
'%AN%': Todas as cadeias que contêm o padrão 'AN' em qualquer local. Por
exemplo, 'LOS ANGELES' e 'SAN FRANCISCO' iriam satisfazer a condição.
Tabela Store_Information
Queremos encontrar todas as lojas cujo nome contém 'AN'. Para tal, introduzimos
SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'
Resultado:
SQL>Comandos SQL>Order By
Até agora, vimos como obter dados de uma tabela utilizando os comandos SELECT e
WHERE. Contudo, frequentemente precisamos de listar os resultados por uma ordem
em particular. Pode ser por ordem ascendente, descendente, ou com base no valor
numérico ou valor de texto. Nesses casos, podemos utilizar a palavra-chave ORDER
BY para alcançar o objetivo.
SELECT "nome_coluna"
FROM "nome_tabela"
[WHERE "condição"]
ORDER BY "nome_coluna" [ASC, DESC]
TabelaStore_Information
introduzimos
Resultado:
Para além do nome da coluna, também podemos utilizar a posição da coluna (com base
na consulta SQL) para indicar a que coluna pretendemos aplicar a cláusula ORDER
BY. A primeira coluna é 1, a segunda coluna é 2, etc. No exemplo acima, iremos obter
os mesmos resultados através do seguinte comando:
Como começamos por lidar com números, a próxima questão natural é perguntar se é
- AVG……Para media
- COUNT……Para contar
- MAX
- MIN
- SUM………Para somar
TabelaStore_Information
Introduziríamos
Resultado:
SUM(Sales)
2750 €
2 750 € representa a soma de todas as entradas Sales (Vendas): 1500 € + 250 € + 300 €
+ 700 €.
Para além de utilizar funções, também é possível utilizar a linguagem SQL para efetuar
tarefas simples como a adição (+) e a subtração (-). Para dados de caracteres, também se
encontram disponíveis várias funções de cadeias, tais como as funções de concatenação,
corte e subtração. Os diferentes vendedores de sistemas RDBMS têm diferentes
implementações de cadeias e é melhor consultar as referências relativas ao seu sistema
RDBMS para descobrir de que forma estas funções são utilizadas.
9
SQL>Comandos SQL>Count
Outra função aritmética é COUNT. Esta permite COUNT (contar) o número de linhas
SELECT COUNT("nome_coluna")
FROM "nome_tabela"
Por exemplo, se quisermos descobrir o número de entradas de uma loja na nossa tabela,
TabelaStore_Information
Introduziríamos
SELECT COUNT(store_name)
FROM Store_Information
Resultado:
Count(store_name)
4
COUNT e DISTINCT podem ser utilizadas em conjunto numa instrução para obter o
número de entradas diferentes numa tabela. Por exemplo, se quisermos descobrir o
número de diferentes lojas, escreveríamos
Resultado:
Count(DISTINCT store_name)
3
SQL>Comandos SQL>Group By
Tabela Store_Information
Resultado:
store_name SUM(Sales)
Los Angeles 1800 €
San Diego 250 €
Boston> 700 €
SQL>Comandos SQL>Having
Outra coisa que os utilizadores poderão pretender efetuar é limitar os resultados com
base na respectiva soma (ou quaisquer outras funções agregadas). Por exemplo,
podemos pretender visualizar apenas as lojas com vendas superiores a 1 500 €. Em vez
de utilizarmos a cláusula WHERE na instrução SQL, é necessário utilizar a cláusula
HAVING, que se encontra reservada para as funções agregadas. Normalmente a
instrução HAVING é colocada perto do final da instrução SQL e uma instrução SQL
com a cláusula HAVING pode ou não incluir a cláusula GROUP BY. A sintaxe para
HAVING é
11
SELECT "nome_coluna1", SUM("nome_coluna2")
FROM "nome_tabela"
GROUP BY "nome_coluna1"
TabelaStore_Information
introduziríamos
Resultado:
store_name SUM(Sales)
Los Angeles 1800 €
SQL>Comandos SQL>Alias
A seguir focamos a utilização de alias. Existem dois tipos de alias que são utilizados
mais frequentemente: alias de colunas e alias de tabelas.
O segundo tipo de alias é o alias de tabelas. Tal é obtido colocando um alias diretamente
após o nome da tabela na cláusula FROM. Isso é conveniente quando quiser obter
informações a partir de duas tabelas separadas (o termo técnico é 'efetuar uniões'). A
vantagem de utilizar um alias de tabelas é imediatamente aparente visível quando
falamos em uniões
12
Contudo, antes de abordarmos as uniões, observemos a sintaxe dos alias de colunas e
tabelas:
Resumidamente, ambos os tipos de alias são colocados diretamente após o item de alias,
separados por um espaço em branco. Utilizamos novamente a nossa tabela
Store_Information,
Tabela Store_Information
Resultado:
SQL>Comandos SQL>Join
Agora iremos abordar as uniões. Para efetuar uniões corretas na linguagem SQL, são
necessários muitos dos elementos introduzidos até agora. Suponhamos que temos as
duas tabelas seguintes:
Tabela Store_Information
13
store_name Sales Date
Los Angeles 1500 € 05-Jan-1999
Tabela Geography
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego
e queremos descobrir quais as vendas por região. Constatamos que a tabela Geography
inclui informações sobre regiões e lojas e a tabela Store_Information contém
informações de vendas para cada loja. Para obter as informações de vendas por região, é
necessário combinar as informações das duas tabelas. Examinando as duas tabelas,
descobrimos que estão ligadas através do campo comum, store_name. Primeiro iremos
apresentar a instrução SQL e explicar posteriormente a utilização de cada segmento:
Resultado:
REGION SALES
East 700 €
West 2050 €
As duas primeiras linhas dizem ao sistema SQL para selecionar dois campos, o primeiro
é o campo "region_name" da tabela Geography (com alias como REGION), e o
segundo é o somatório do campo "Sales" da tabela Store_Information (com alias como
SALES). Repare que agora os alias das tabelas são utilizados aqui: Geography possui
alias como A1, Store_Information com alias como A2. Sem alias, a primeira linha seria
que é muito mais inadequada. Na sua essência, os alias de tabelas tornam toda a
instrução SQL muito mais fácil de compreender, em especial quando se encontram
incluídas várias tabelas. 14
A sintaxe para efetuar uma união externa na linguagem SQL depende da base de dados.
Por exemplo, em Oracle, iremos colocar o sinal "(+)" na cláusula WHERE no outro
lado da tabela para a qual queremos incluir todas as linhas.
TabelaStore_Information
TabelaGeography
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego
Note que neste caso estamos a utilizar a sintaxe Oracle para a união externa.
Resultado:
store_name SALES
Boston 700 €
New York
Los Angeles 1800 €
San Diego 250 €
Nota: NULL é obtido quando não existir qualquer correspondência na segunda tabela.
Nesse caso, "New York" não aparece na tabela Store_Information, e por isso a coluna
"SALES" correspondente é NULL.
MySQL: CONCAT( )
Oracle: CONCAT( ), ||
SQL Server: +
CONCAT(str1, str2, str3, ...): Concatenar str1, str2, str3 e quaisquer outras cadeias
juntas. Note que a função Oracle CONCAT( ) apenas permite dois argumentos -- apenas
duas cadeias podem ser utilizadas em simultâneo aquando da utilização desta função.
Contudo, é possível concatenar mais de duas cadeias em simultâneo no Oracle
utilizando '||'.
TabelaGeography
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego
16
Exemplo 1:
MySQL/Oracle:
Resultado :
'EastBoston'
Exemplo 2:
Oracle:
SELECT region_name || ' ' || store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
Exemplo 3:
SQL Server:
SELECT region_name + ' ' + store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
A função SUBSTRING na linguagem SQL é utilizada para obter uma parte dos dados
armazenados. Esta função possui nomes diferentes nas diversas bases de dados:
TabelaGeography
Exemplo 1:
SELECT SUBSTR(store_name, 3)
FROM Geography
WHERE store_name = 'Los Angeles';
Resultado :
's Angeles'
Exemplo 2:
SELECT SUBSTR(store_name,2,4)
FROM Geography
WHERE store_name = 'San Diego';
Resultado :
'an D'
Resultado :
'Sample'
Exemplo 2:
Resultado :
'Sample '
Exemplo 3:
Resultado :
' Sample'
A função LENGTH em SQL é utilizada para obter o comprimento de uma cadeia. Esta
função possui nomes diferentes nas diversas bases de dados:
MySQL: LENGTH( )
Oracle: LENGTH( )
SQL Server: LEN( )
TabelaGeography
region_name store_name
East Boston
East New York 19
West Los Angeles
West San Diego
SELECT Length(store_name)
FROM Geography
WHERE store_name = 'Los Angeles';
Resultado:
11
Exemplo 2:
Resultado:
region_name Length(region_name)
East 4
East 4
West 4
West 4
Replace(str1, str2, str3): Em str1, encontrar onde str2 ocorre e substituir por str3.
TabelaGeography
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego 20
Resultado:
region_name
Eastern
Eastern
West
West
A função DATEADD é utilizada para adicionar um intervalo a uma data. Esta função
encontra-se disponível no SQL Server.
em que o tipo de dados de <expression> é algum tipo de data, hora ou data e hora.
<number> é um número inteiro (pode ser positivo ou negativo). <datepart> pode ser um
dos seguintes elementos:
datepart Abreviatura
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour Hh
minute mi, n
second ss, s
millisecond Ms
microsecond Mcs
nanosecond Ns 21
TZoffset Tz
ISO_WEEK isowk, isoww
'2000-01-15 00:05:00.000'
A função DATEDIFF é utilizada para calcular a diferença entre dois dias e é utilizada
no sistema MySQL e SQL Server. A sintaxe desta função de data é diferente entre estas
duas bases de dados, pelo que cada uma delas é abordada abaixo:
MySQL:
SELECT DATEDIFF('2000-01-10','2000-01-05');
SQL Server:
datepart Abreviatura
-5
DATEPART é uma função do SQL Server que extrai uma parte específica do valor de
data/hora. A sua sintaxe será a seguinte:
datepart Afkorting
year yy, yyyy
quarter qq, q
month mm, m
23
dayofyear dy, y
day dd, d
Exemplo 1:
Resultado:
2001
Exemplo 2:
Resultado:
41
A função GETDATE é utilizada para obter a hora do sistema atual da base de dados no
SQL Server. A sua sintaxe é
GETDATE( )
SELECT GETDATE( );
24
produz o seguinte resultado:
A função GETDATE é muito útil quando necessitamos de registar a hora em que uma
transação em particular ocorre. No SQL Server, basta introduzirmos o valor da função
GETDATE( ) na tabela para obter o resultado. Também podemos definir o valor padrão
de uma coluna como sendo GETDATE( ) para alcançar o mesmo objetivo.
A função SYSDATE é utilizada para obter a hora do sistema atual da base de dados nos
sistemas Oracle e MySQL.
Oracle:
SYSDATE
'16-JAN-2000'
MySQL:
SYSDATE( )
SELECT SYSDATE( );
'2000-01-16 09:06:22' 25