You are on page 1of 51

SQL (Linguagem de Consulta Estruturada) uma linguagem informtica destinada a

armazenar, manipular e obter dados armazenados em bases de dados relacionais. A


primeira encarnao da linguagem SQL apareceu em 1974, quando um grupo dentro
da BM desenvolveu o primeiro prottipo de uma base de dados relacional. A primeira
base de dados relacional comercial foi distribuda pela Relational Software (mais tarde
passou a chamar-se Oracle).
Existem normas para a linguagem SQL. Contudo, a linguagem SQL que pode ser
utilizada em cada um dos principais sistemas RDBMS possui diferentes caractersticas.
sso deve-se a duas razes: 1) A norma SQL relativamente complexa e no prtico
implementar toda a norma 2) cada vendedor de bases de dados precisa de formas
para diferenciar o seu produto dos outros. Neste tutorial, essas diferenas so
mencionadas quando apropriado.
Este site de tutorial de SQL lista os comandos SQL utilizados mais frequentemente e
encontra-se dividido nas seguintes seces:
Comandos SQL : nstrues SQL bsicas para armazenar, obter e manipular
dados numa base de dados relacional.
Manipulao de tabelas : Forma como as instrues SQL so utilizadas para gerir
tabelas dentro de uma base de dados.
Linguagem SQL avanada : Comandos SQL avanados.
Sintaxe SQL : Uma nica pgina que lista a sintaxe de todos os comandos SQL
neste tutorial.
Para cada comando, a sintaxe SQL ser primeiro apresentada e explicada, seguindo-
se um exemplo. No final deste tutorial, deve possuir uma compreenso geral adequada
acerca da sintaxe SQL. Alm disso, deve ser capaz de gravar consultas SQL utilizando
a sintaxe correta. A minha experincia diz-me que compreender os conceitos bsicos
da linguagem SQL muito mais fcil do que dominar todas as complicaes desta
linguagem de base de dados, e espero que seja capaz de chegar mesma concluso.
Se estiver interessado em saber como obter dados atravs da linguagem SQL,
recomendamos que comece pela secoComandos SQL . Se pretender compreender de
que forma a linguagem SQL pode ser utilizada para manipular tabelas de bases de
dados, recomendamos que comece pela seco Manipulao de tabelas . Se pretender
obter ajuda sobre um comando SQL especfico, pode utilizar o Mapa do site para
encontrar o comando pretendido.
Esta introduo j foi suficiente. Adicione este site aos favoritos e comece a aprender
a linguagem SQL !
Hiperligaes para esta pgina: Se achar que esta pgina til, encorajamos que crie
uma hiperligao para esta pgina. Basta copiar e colar o cdigo abaixo apresentado
no seu site Web, blogue ou perfil.
Select
Para que servem os comandos SQL? Uma utilizao comum a seleo de tabelas
localizadas numa base de dados. mediatamente, visualizamos duas palavras-chave:
necessitamos de SELECT (selecionar) FROM (de) uma tabela. (Note que uma tabela
um receptculo existente numa base de dados onde os dados esto armazenados.
Para obter mais informaes sobre como manipular tabelas, consulte a seco
Manipulao de tabelas ). Deste modo, temos a estrutura SQL mais bsica:
SELECT "nome_coluna" FROM "nome_tabela"
De modo a ilustrar o exemplo acima apresentado, assuma que possumos a seguinte
tabela:
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
remos utilizar esta tabela como exemplo ao longo deste tutorial (esta tabela ir
aparecer em todas as seces). Para selecionar todas as lojas nesta tabela,
introduzimos
SELECT store_name FROM Store_nformation
Resultado:
store _ name
Los
Angeles
San Diego
Los
Angeles
oston
possvel selecionar nomes de vrias colunas, assim como selecionar nomes de
vrias tabelas.
Distinct
A palavra-chave SELECT permite-nos obter todas as informaes de uma coluna (ou
colunas) numa tabela. sso, claro, significa obrigatoriamente que existiro
redundncias. E se apenas pretendermos selecionar cada elemento D!ST!"CT? sso
facilmente concretizvel na linguagem SQL. Basta adicionar D!ST!"CT aps SELECT.
A sintaxe ser a seguinte:
SELECT D!ST!"CT "nome_coluna"
FROM "nome_tabela"
Por exemplo, para selecionar todos os armazenamentos distintos na tabela
Store_Information,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT D!ST!"CT store_name FROM Store_!nformation
Resultado:
store _ name
Los
Angeles
San Diego
oston
#$ere
Em seguida, podemos selecionar condicionalmente os dados da tabela. Por exemplo,
podemos pretender obter lojas com vendas superiores a 1.000$. Para tal, utilizamos a
palavra-chave #%ERE. A sintaxe ser a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
#%ERE "condi&'o"
Por exemplo, para selecionar todas as lojas com valores superiores a 1.000 C na
Tabela Store_Information,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT store_name
FROM Store_!nformation
#%ERE Sales ( )***
Resultado:
store _ name
Los
Angeles
And Or
Na seco anterior, vimos que a palavra-chave #%ERE pode ser utilizada para
selecionar condicionalmente dados de uma tabela. Esta condio pode ser uma
condio simples (como a apresentada na seco anterior) ou pode ser uma condio
composta. As condies compostas so constitudas por vrias condies simples
ligadas atravs de A"D ou OR. No existe qualquer limite relativamente ao nmero de
condies simples que podem estar presentes numa nica instruo SQL.
A sintaxe de uma condio composta a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
#%ERE "condi&'o sim+les"
,-A"D.OR/ "condi&'o sim+les"01
Os smbolos {}+ significam que a expresso entre parnteses ir ocorrer uma ou mais
vezes. Note que A"D e OR podem ser utilizados alternadamente. Alm disso,
podemos utilizar os sinais de parnteses ( ) para indicar a ordem da condio.
Por exemplo, podemos pretender selecionar todas as lojas com vendas superiores a 1
000 C ou todas as lojas com vendas inferiores a 500 C mas superiores a 275 C na
Tabela Store_Information,
Tabela Store_Information
store_name Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
San
Francisco
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT store_name
FROM Store_!nformation
#%ERE Sales ( )***
OR 2Sales 3 4** A"D Sales ( 5647
Resultado:
store _ name
Los Angeles
San
Francisco
!n
Na linguagem SQL, a palavra-chave !" pode ser utilizada de duas formas e esta
seco introduz uma que est relacionada com a clusula #%ERE. 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 !"
a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
#%ERE "nome_coluna" !" 28valor)89 8valor589 :::7
O nmero de valores entre parnteses pode ser um ou mais, com cada valor separado
por uma vrgula. Os valores podem ser numricos ou caracteres. Se existir apenas um
valor entre parnteses, o comando equivalente a
#%ERE "nome_coluna" ; 8valor)8
Por exemplo, podemos pretender selecionar todos os registos das lojas de Los Angeles
e San Diego na TabelaStore_Information,
Tabela Store_Information
store_name Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
San
Francisco
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT <
FROM Store_!nformation
#%ERE store_name !" 28Los Angeles89 8San Diego87
Resultado:
store_name Sales Date
Los
Angeles
)4** = *4>?an>)@@@
San Diego 54* = *6>?an>)@@@
etAeen
Enquanto a palavra-chave !" ajuda as pessoas a limitar o critrio de seleo a um ou
mais valores discretos, a palavra-chaveET#EE" permite a seleo de um intervalo.
A sintaxe da clusula ET#EE" a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
#%ERE "nome_coluna" ET#EE" 88valor)8 A"D 88valor58
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 TabelaStore_Information,
Tabel Store_Information
store_name Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
San
Francisco
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT <
FROM Store_!nformation
#%ERE Date ET#EE" 8*B>?an>)@@@8 A"D 8)*>?an>)@@@8
Note que a data pode estar armazenada em diferentes formatos em bases de dados
diferentes. Este tutorial simplesmente seleciona um dos formatos.
Resultado:
store_name Sales Date
San Diego 54* = *6>?an>)@@@
San
Francisco
C** = *D>?an>)@@@
oston 6** = *D>?an>)@@@
LKE
L!EE outra palavra-chave utilizada na clusula #%ERE. Basicamente, L!EE permite-
lhe efetuar uma procura com base num padro em vez de especificar exatamente o
pretendido (como em !") ou excluir um intervalo (como em ET#EE"). A sintaxe ser
a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
#%ERE "nome_coluna" L!EE ,FATTER"0
{PATTERN} normalmente composto por caracteres universais. A seguir so
apresentados alguns exemplos:
'A_Z': Todas as cadeias que comeam por 'A', outro carter, e terminam em 'Z'.
Por exemplo, 'ABZ' e 'A2Z' iriam ambas satisfazer a condio, enquanto 'AKKZ'
no iria (porque existem dois caracteres entre A e Z em vez de um).
'ABC%': Todas as cadeias que comeam por 'ABC'. Por exemplo, 'ABCD' e
'ABCABC' iriam satisfazer a condio.
'%XYZ': Todas as cadeias que terminam em 'XYZ'. Por exemplo, 'WXYZ' e
'ZZXYZ' iriam satisfazer a condio.
'%AN%': Todas as cadeias que contm o padro 'AN' em qualquer local. Por
exemplo, 'LOS ANGELES' e 'SAN FRANCSCO' iriam satisfazer a condio.
Suponhamos que temos a seguinte tabela:
Tabela Store_Information
store_name Sales Date
LOS
ANGELES
1500 C 05-Jan-
1999
SAN DEGO 250 C 07-Jan-
1999
SAN
FRANCSCO
300 C 08-Jan-
1999
BOSTON 700 C 08-Jan-
1999
Queremos encontrar todas as lojas cujo nome contm 'AN'. Para tal, introduzimos
SELECT <
FROM Store_!nformation
#%ERE store_name L!EE 8GA"G8
Resultado:
store_name Sales Date
LOS A"HELES )4** = *4>?an>)@@@
SA" D!EHO 54* = *6>?an>)@@@
SA"
FRA"C!SCO
C** = *D>?an>)@@@
ORDER BY
At agora, vimos como obter dados de uma tabela utilizando os comandos SELECT e
#%ERE. Contudo, frequentemente precisamos de listar os resultados por uma ordem
em particular. Pode ser por ordem ascendente, descendente, ou com base no valor
numrico ou valor de texto. Nesses casos, podemos utilizar a palavra-chave ORDER
I para alcanar o objetivo.
A sintaxe para uma instruo ORDER I a seguinte:
SELECT "nome_coluna"
FROM "nome_tabela"
-#%ERE "condi&'o"/
ORDER I "nome_coluna" -ASC9 DESC/
Os smbolos [] significam que a instruo #%ERE opcional. Contudo, se existir uma
clusula #%ERE, esta precede a clusula ORDER I. ASC significa que os
resultados sero apresentados por ordem ascendente e DESC significa que os
resultados sero apresentados por ordem descendente. Se no for especificada
qualquer uma, o padro ASC.
possvel ordenar por mais do que uma coluna. Nesse caso, a clusula ORDER I
acima torna-se
ORDER I "nome_coluna)" -ASC9 DESC/9 "nome_coluna5" -ASC9 DESC/
Assumindo que selecionamos a ordem ascendente para ambas as colunas, o resultado
ser ordenado pela ordem ascendente de acordo com a coluna 1. Se existir uma
relao para o valor da coluna 1, ordenamos por ordem ascendente a coluna 2.
Por exemplo, podemos pretender listar o contedo da Tabela Store_Information por
montante em dlares, por ordem descendente:
Tabela Store_Information
store_name Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
San
Francisco
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduzimos
SELECT store_name9 Sales9 Date
FROM Store_!nformation
ORDER I Sales DESC
Resultado:
store_name Sales Date
Los Angeles )4** = *4>?an>)@@@
oston 6** = *D>?an>)@@@
San
Francisco
C** = *D>?an>)@@@
San Diego 54* = *6>?an>)@@@
Para alm do nome da coluna, tambm podemos utilizar a posio da coluna (com
base na consulta SQL) para indicar a que coluna pretendemos aplicar a clusula
ORDER I. A primeira coluna 1, a segunda coluna 2, etc. No exemplo acima,
iremos obter os mesmos resultados atravs do seguinte comando:
SELECT store_name9 Sales9 Date
FROM Store_!nformation
ORDER I 5 DESC
FUNES
Como comeamos por lidar com nmeros, a prxima questo natural perguntar se
possvel efetuar clculos com esses nmeros, tais como som-los ou calcular a sua
mdia. A resposta sim! A linguagem SQL tem vrias funes aritmticas, sendo:
- AJH
- COK"T
- MAL
- M!"
- SKM
A sintaxe para utilizar funes :
SELECT "ti+o de fun&'o"2"nome_coluna"7
FROM "nome_tabela"
Por exemplo, se quisermos obter a soma de todas as vendas da seguinte tabela,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduziramos
SELECT SKM2Sales7 FROM Store_!nformation
Resultado:
SKM 2Sales 7
564* =
2 750 C representa a soma de todas as entradas Sales (Vendas): 1500 C + 250 C + 300
C + 700 C.
Para alm de utilizar funes, tambm possvel utilizar a linguagem SQL para efetuar
tarefas simples como a adio (+) e a subtrao (-). Para dados de caracteres, tambm
se encontram disponveis vrias funes de cadeias, tais como as funes de
concatenao, corte e subtrao. Os diferentes vendedores de sistemas RDBMS tm
diferentes implementaes de cadeias e melhor consultar as referncias relativas ao
seu sistema RDBMS para descobrir de que forma estas funes so utilizadas.
COUNT
Outra funo aritmtica COK"T. Esta permite COK"T (contar) o nmero de linhas
numa determinada tabela. A sintaxe
SELECT COK"T2"nome_coluna"7
FROM "nome_tabela"
Por exemplo, se quisermos descobrir o nmero de entradas de uma loja na nossa
tabela,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduziramos
SELECT COK"T2store_name7
FROM Store_!nformation
Resultado:
Count 2store _ name 7
M
COK"T e D!ST!"CT podem ser utilizadas em conjunto numa instruo para obter o
nmero de entradas diferentes numa tabela. Por exemplo, se quisermos descobrir o
nmero de diferentes lojas, escreveramos
SELECT COK"T2D!ST!"CT store_name7
FROM Store_!nformation
Resultado:
Count 2D!ST!"CT
store _ name 7
C
GROUP BY
Agora regressamos s funes agregadas. Lembra-se que utilizamos a palavra-chave
SKM para calcular o total de vendas de todas as lojas? E se quisermos calcular o total
de vendas de cada loja? Bem, necessitamos de duas coisas: Primeiro, necessrio
certificarmo-nos que selecionamos o nome da loja, assim como o total de vendas.
Segundo, necessrio garantir que todos os valores de vendas so HROKF I
(agrupados por) lojas. A sintaxe SQL correspondente ,
SELECT "nome_coluna)"9 SKM2"nome_coluna5"7
FROM "nome_tabela"
HROKF I "nome_coluna)"
Vamos ilustrar atravs da seguinte tabela,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Queremos descobrir o total de vendas de cada loja. Para tal, introduziramos
SELECT store_name9 SKM2Sales7
FROM Store_!nformation
HROKF I store_name
Resultado:
store _ name SKM 2Sales 7
Los
Angeles
)D** =
San Diego 54* =
oston( 6** =
A palavra-chave HROKF I utilizada ao selecionar vrias colunas a partir de uma
tabela (ou tabelas) e aparece pelo menos um operador aritmtico na instruo
SELECT. Quando isso acontece, necessrio HROKF I (agrupar por) todas as
outras colunas selecionadas, ou seja, todas as colunas exceto a(s) operada(s) pelo
operador aritmtico.
HAVNG
Outra coisa que os utilizadores podero pretender efetuar limitar os resultados com
base na respectiva soma (ou quaisquer outras funes agregadas). Por exemplo,
podemos pretender visualizar apenas as lojas com vendas superiores a 1 500 C. Em
vez de utilizarmos a clusula #%ERE na instruo SQL, necessrio utilizar a clusula
%AJ!"H, que se encontra reservada para as funes agregadas. Normalmente a
instruo %AJ!"H colocada perto do final da instruo SQL e uma instruo SQL
com a clusula %AJ!"H pode ou no incluir a clusula HROKF I. A sintaxe para
%AJ!"H
SELECT "nome_coluna)"9 SKM2"nome_coluna5"7
FROM "nome_tabela"
HROKF I "nome_coluna)"
%AJ!"H 2condi&'o da fun&'o aritmNtica7
Nota: a clusula HROKF I opcional.
No nosso exemplo, a tabela Store_Information,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
introduziramos
SELECT store_name9 SKM2sales7
FROM Store_!nformation
HROKF I store_name
%AJ!"H SKM2sales7 ( )4**
Resultado:
store _ name SKM 2Sales 7
Los
Angeles
)D** =
AL!AS
A seguir focamos a utilizao de alias. Existem dois tipos de alias que so utilizados
mais frequentemente: alias de colunas e alias de tabelas.
Resumindo, os alias de colunas existem para ajudar a organizar o resultado. No
exemplo anterior, sempre que visualizamos o total de vendas, so listados como
SKM(sales). Embora sejam compreensveis, podemos prever casos em que o
cabealho da coluna complicado (em especial se envolver vrias operaes
aritmticas). A utilizao de um alias de colunas tornaria os resultados muito mais
compreensveis.
O segundo tipo de alias o alias de tabelas. Tal obtido colocando um alias
diretamente aps o nome da tabela na clusulaFROM. sso conveniente quando
quiser obter informaes a partir de duas tabelas separadas (o termo tcnico 'efetuar
unies'). A vantagem de utilizar um alias de tabelas imediatamente aparente visvel
quando falamos em unies
Contudo, antes de abordarmos as unies, observemos a sintaxe dos alias de colunas e
tabelas:
SELECT "alias_tabela":"nome_coluna)" "aliar_coluna"
FROM "nome_tabela" "alias_tabela"
Resumidamente, ambos os tipos de alias so colocados diretamente aps o item de
alias, separados por um espao em branco. Utilizamos novamente a nossa tabela
Store_Information,
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Utilizamos os mesmos exemplos da seco GROUP BY de linguagem SQL, exceo
que colocamos alias de colunas e alias de tabelas:
SELECT A):store_name Store9 SKM2A):Sales7 "Total Sales"
FROM Store_!nformation A)
HROKF I A):store_name
Resultado:
Store Total
Sales
Los
Angeles
)D** =
San Diego 54* =
oston 6** =
Repare na diferena no resultado: os ttulos da coluna agora so diferentes. o
resultado da utilizao de utilizar alias de colunas. Repare que em vez do algo obscuro
"Sum(Sales)", agora temos "Total Sales", que muito mais compreensvel como
cabealho de uma coluna. A vantagem de utilizar um alias de tabelas no aparente
neste exemplo. Contudo, ir tornar-se evidente na prxima seco .
SQL JON
Agora iremos abordar as unies. Para efetuar unies corretas na linguagem SQL, so
necessrios muitos dos elementos introduzidos at agora. Suponhamos que temos as
duas tabelas seguintes:
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
e queremos descobrir quais as vendas por regio. Constatamos que a tabela
Geography inclui informaes sobre regies e lojas e a tabela Store_Information
contm informaes de vendas para cada loja. Para obter as informaes de vendas
por regio, necessrio combinar as informaes das duas tabelas. Examinando as
duas tabelas, descobrimos que esto ligadas atravs do campo comum, store_name.
Primeiro iremos apresentar a instruo SQL e explicar posteriormente a utilizao de
cada segmento:
SELECT A):region_name REH!O"9 SKM2A5:Sales7 SALES
FROM Heogra+$O A)9 Store_!nformation A5
#%ERE A):store_name ; A5:store_name
HROKF I A):region_name
Resultado:
REH!O SALE
" S
East 6** =
#est 5*4* =
As duas primeiras linhas dizem ao sistema SQL para selecionar dois campos, o
primeiro o campo "region_name" da tabelaGeography (com alias como REGON), e
o segundo o somatrio do campo "Sales" da tabela Store_Information (com alias
como SALES). Repare que agora os alias das tabelas so utilizados aqui: Geography
possui alias como A1, Store_Informationcom alias como A2. Sem alias, a primeira linha
seria
SELECT Heogra+$O:region_name REH!O"9 SKM2Store_!nformation:Sales7 SALES
que muito mais inadequada. Na sua essncia, os alias de tabelas tornam toda a
instruo SQL muito mais fcil de compreender, em especial quando se encontram
includas vrias tabelas.
A seguir, damos ateno linha 3, a instruo #%ERE. aqui que especificamos a
condio de unio. Neste caso, queremos garantir que o contedo de "store_name" na
tabela Geografia corresponde ao da tabela Store_Information e a forma de o fazer
defini-las de forma igual. A instruo #%ERE essencial para garantir que obtm o
resultado correto. Sem a instruo#%ERE correta, ser obtida uma Unio Cartesiana.
As unies cartesianas iro produzir uma consulta com todas as combinaes possveis
das duas (ou qualquer que seja o nmero de tabelas na instruo FROM). Nesse caso,
uma unio cartesiana iria resultar num resultado com o total de 4 x 4 = 16 linhas.
SQL OUTER JON
Anteriormente, abordamos a unio esquerda, ou unio interna, onde selecionamos
linhas comuns nas tabelas participantes para uma unio. E nos casos em que
pretendemos selecionar elementos numa tabela independentemente de estarem
presentes numa segunda tabela? Agora ser necessrio utilizar o comando SPL
OKTER ?O!".
A sintaxe para efetuar uma unio externa na linguagem SQL depende da base de
dados. Por exemplo, em Oracle, iremos colocar o sinal "(+)" na clusula #%ERE no
outro lado da tabela para a qual queremos incluir todas as linhas.
Suponhamos que temos as duas tabelas seguintes:
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
e queremos descobrir o montante de vendas de todas as lojas. Se efetuarmos uma
unio normal, no seremos capazes de obter o que pretendemos porque iremos
ignorar "New York," pois no aparece na tabela Store_Information. Como tal,
necessrio efetuar uma unio externa nas duas tabelas acima:
SELECT A):store_name9 SKM2A5:Sales7 SALES
FROM Heogra+$O A)9 Store_!nformation A5
#%ERE A):store_name ; A5:store_name 217
HROKF I A):store_name
Note que neste caso estamos a utilizar a sintaxe Oracle para a unio externa.
Resultado:
store _ name SALE
S
oston 6** =
"eA IorQ
Los
Angeles
)D** =
San Diego 54* =
Nota: NULL obtido quando no existir qualquer correspondncia na segunda tabela.
Nesse caso, "New York" no aparece na tabela Store_Information, e por isso a coluna
"SALES" correspondente NULL.
SQL CONCATENATE
Por vezes necessrio combinar (concatenar) os resultados de vrios campos
diferentes. Cada base de dados fornece um modo de o fazer:
MySQL: CONCAT( )
Oracle: CONCAT( ), ||
SQL Server: +
A sintaxe para CONCAT( ) a seguinte:
CO"CAT2str)9 str59 strC9 :::7: Concatenar str1, str2, str3 e quaisquer outras cadeias
juntas. Note que a funo Oracle CONCAT( ) apenas permite dois argumentos --
apenas duas cadeias podem ser utilizadas em simultneo aquando da utilizao desta
funo. Contudo, possvel concatenar mais de duas cadeias em simultneo no Oracle
utilizando '||'.
Observemos alguns exemplos. Assuma que temos a seguinte tabela:
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
Exemplo 1:
MOSPLROracle:
SELECT CO"CAT2region_name9store_name7 FROM Heogra+$O
#%ERE store_name ; 8oston8S
Resultado :
8Eastoston8
Exemplo 2:
Oracle:
SELECT region_name .. 8 8 .. store_name FROM Heogra+$O
#%ERE store_name ; 8oston8S
Resultado :
8East oston8
Exemplo 3:
SPL Server:
SELECT region_name 1 8 8 1 store_name FROM Heogra+$O
#%ERE store_name ; 8oston8S
Resultado :
8East oston8
SQL SUBSTRNG
A funo SUBSTRNG na linguagem SQL utilizada para obter uma parte dos dados
armazenados. Esta funo possui nomes diferentes nas diversas bases de dados:
MySQL: SUBSTR( ), SUBSTRNG( )
Oracle: SUBSTR( )
SQL Server: SUBSTRNG( )
A seguir so apresentadas as utilizaes mais frequentes (iremos utilizar SUBSTR( )
aqui):
SKSTR2str9+os7: Selecionar todos os caracteres de <str> a comear pela posio
<pos>. Note que esta sintaxe no suportada pelo SQL Server.
SKSTR2str9+os9len7: A comear pelo <pos> carter na cadeia <str> e selecionar os
caracteres <len> seguintes.
Assuma que temos a seguinte tabela:
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
Exemplo 1:
SELECT SKSTR2store_name9 C7
FROM Heogra+$O
#%ERE store_name ; 8Los Angeles8S
Resultado :
8s Angeles8
Exemplo 2:
SELECT SKSTR2store_name959M7
FROM Heogra+$O
#%ERE store_name ; 8San Diego8S
Resultado :
8an D8
SQL TRM
A funo TRM em linguagem SQL utilizada para remover prefixos ou sufixos
especificados de uma cadeia. O padro mais comum a ser removido do os espaos
em branco. Esta funo possui nomes diferentes nas diversas bases de dados:
MySQL: TRM( ), RTRM( ), LTRM( )
Oracle: RTRM( ), LTRM( )
SQL Server: RTRM( ), LTRM( )
A sintaxe para estas funes de corte :
TR!M2--LOCAT!O"/ -remstr/ FROM / str7: [LOCATON] pode ser LEADNG,
TRALNG ou BOTH. Esta funo elimina o padro [remstr] do incio de uma cadeia, do
final de uma cadeia ou ambos. Se no for especificado [remstr], os espaos em branco
so removidos.
LTR!M2str7: Remove todos os espaos em branco do incio da cadeia.
RTR!M2str7: Remove todos os espaos em branco do final da cadeia.
Exemplo 1:
SELECT TR!M28 Sam+le 87S
Resultado :
8Sam+le8
Exemplo 2:
SELECT LTR!M28 Sam+le 87S
Resultado :
8Sam+le 8
Exemplo 3:
SELECT RTR!M28 Sam+le 87S
Resultado :
8 Sam+le8
SQL LENGTH
A funo LENGTH em SQL utilizada para obter o comprimento de uma cadeia. Esta
funo possui nomes diferentes nas diversas bases de dados:
MySQL: LENGTH( )
Oracle: LENGTH( )
SQL Server: LEN( )
A sintaxe da funo LENGTH a seguinte:
Lengt$2str7: Encontrar o comprimento da cadeia str.
Observemos alguns exemplos. Assuma que temos a seguinte tabela:
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
Exemplo 1:
SELECT Lengt$2store_name7
FROM Heogra+$O
#%ERE store_name ; 8Los Angeles8S
Resultado:
))
Exemplo 2:
SELECT region_name9 Lengt$2region_name7
FROM Heogra+$OS
Resultado:
region_name Lengt$2region_name7
East M
East M
#est M
#est M
SPL REFLACE
A funo Re+lace em SQL utilizada para atualizar o contedo de uma cadeia. A
chamada de funo REPLACE( ) para MySQL, Oracle e SQL Server. A sintaxe da
funo REPLACE :
Re+lace2str)9 str59 strC7: Em str1, encontrar onde str2 ocorre e substituir por str3.
Assuma que temos a seguinte tabela:
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
Se aplicarmos a seguinte funo REPLACE:
SELECT REFLACE2region_name9 8ast89 8astern87
FROM Heogra+$OS
Resultado:
region_name
Eastern
Eastern
#est
#est
SQL DATEADD
A funo DATEADD utilizada para adicionar um intervalo a uma data. Esta funo
encontra-se disponvel no SQL Server.
A utilizao da funo DATEADD
DATEADD 2date+art9 number9 eT+ression7
em que o tipo de dados de <expression> algum tipo de data, hora ou data e hora.
<number> um nmero 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
microsecon
d
mcs
nanosecon
d
ns
TZoffset tz
SO_WEE
K
isowk,
isoww
O resultado obtido tem o mesmo tipo de dados de <expression>.
Exemplo: A instruo SQL
SELECT DATEADD2daO9 )*985***>*)>*4 **U*4U**:***87S
produz o seguinte resultado:
85***>*)>)4 **U*4U**:***8
SQL DATEDFF
A funo DATEDFF utilizada para calcular a diferena entre dois dias e utilizada no
sistema MySQL e SQL Server. A sintaxe desta funo de data diferente entre estas
duas bases de dados, pelo que cada uma delas abordada abaixo:
MOSPL:
A utilizao da funo DATEDFF no sistema MySQL
DATED!FF 2eT+ression)9 eT+ression57
em que o tipo de dados de <expression1> e <expression2> DATE ou DATETME. O
resultado <expression1> - <expression2>.
Exemplo: A instruo SQL
SELECT DATED!FF285***>*)>)*8985***>*)>*487S
produz o seguinte resultado:
4
sso deve-se ao fato de 2000-01-10 ser 5 dias aps 2000-01-05.
SPL Server:
A utilizao da funo DATEDFF no sistema SQL Server
DATED!FF 2date+art9 eT+ression)9 eT+ression57
em que o tipo de dados de <expression1> e <expression2> > um tipo de data, hora
ou data e hora. O resultado <expression2> - <expression1>. datepart pode ser um
dos seguintes:
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
microsecon
d
mcs
nanosecon
d
ns
TZoffset tz
SO_WEE
K
isowk,
isoww
Exemplo: A instruo SQL
SELECT DATED!FF2daO9 85***>*)>)*8985***>*)>*487S
produz o seguinte resultado:
>4
sso deve-se ao fato de 2000-01-05 ser 5 dias antes de 2000-01-10.
SQL DATEPART
DATEFART uma funo do SQL Server que extrai uma parte especfica do valor de
data/hora. A sua sintaxe ser a seguinte:
DATEFART 2+art_of_daO9 eT+ression7
em que part_of_day pode ser composto pelo seguinte:
datepart Afkorting
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
microsecon
d
mcs
nanosecon
d
ns
TZoffset tz
SO_WEE
K
isowk,
isoww
Exemplo 1:
SELECT DATEFART 2OOOO985***>*)>5*87S
Resultado:
5**)
Exemplo 2:
SELECT DATEFART2dO9 85***>*5>)*87S
Resultado:
M)
2000-02-01 o 41. dia do ano de 2000.
SQL GETDATE
A funo GETDATE utilizada para obter a hora do sistema atual da base de dados no
SQL Server. A sua sintaxe
HETDATE2 7
GETDATE no requer qualquer argumento.
Exemplo: A instruo SQL
SELECT HETDATE2 7S
produz o seguinte resultado:
85***>*C>)4 **U*4U*5:)5C8
A funo GETDATE muito til quando necessitamos de registar a hora em que uma
transao em particular ocorre. No SQL Server, basta introduzirmos o valor da funo
GETDATE( ) na tabela para obter o resultado. Tambm podemos definir o valor padro
de uma coluna como sendo GETDATE( ) para alcanar o mesmo objetivo.
O equivalente a GETDATE para os sistemas Oracle e MySQL SISDATE.
SQL SYSDATE
A funo SYSDATE utilizada para obter a hora do sistema atual da base de dados
nos sistemas Oracle e MySQL.
Oracle:
A sintaxe de SYSDATE em Oracle simplesmente
SISDATE
No requer qualquer argumento.
Exemplo: A instruo SQL
SELECT SISDATE FROM DKALS
produz o seguinte resultado:
8)B>?A">5***8
MOSPL:
A sintaxe de SYSDATE em MySQL simplesmente
SISDATE2 7
No requer qualquer argumento.
Exemplo: A instruo SQL
SELECT SISDATE2 7S
produz o seguinte resultado:
85***>*)>)B *@U*BU558
O equivalente a SYSDATE para o SQL Server HETDATE.
SQL CREATE TABLE
As tabelas so a estrutura bsica em que os dados so armazenados na base de
dados. Dado que na maior parte dos casos no existe uma forma de o vendedor da
base de dados saber antecipadamente quais so as suas necessidades em termos de
armazenamento de dados, provvel que seja necessrio criar tabelas na base de
dados. Muitas ferramentas de bases de dados permitem-lhe criar tabelas sem
programar em linguagem SQL, mas como as tabelas so o receptculo de todos os
dados, importante incluir a sintaxe CREATE TALE neste tutorial.
Antes de abordarmos a sintaxe SQL para CREATE TALE, boa ideia compreender a
estrutura de uma tabela. As tabelas encontram-se divididas em linhas e colunas. Cada
linha representa um dado individual e cada coluna pode ser vista como uma
representao dessa pea de dados. Assim, por exemplo, se tivermos uma tabela para
registar as informaes dos clientes, as colunas podem incluir informaes como
Primeiro Nome, Apelido, Morada, Cidade, Pas, Data de Nascimento, etc. Como tal, ao
especificarmos uma tabela, inclumos os cabealhos das colunas e os tipos de dados
para essa coluna em particular.
Assim sendo, quais so os tipos de dados? Normalmente, os dados encontram-se
disponveis numa variedade de formas. Podem ser um nmero inteiro (tal como 1), um
nmero real (tal como 0,55), uma cadeia (tal como 'sql'), uma expresso de data/hora
(tal como '2000-JAN-25 03:22:22') ou at mesmo um formato binrio. Ao
especificarmos uma tabela, necessrio especificarmos o tipo de dados associados a
cada coluna(ou seja, iremos especificar o 'Primeiro Nome' do tipo de char(50) - o que
significa uma cadeia com 50 caracteres). Um aspecto a destacar que diferentes
bases de dados relacionais permitem diferentes tipos de dados, pelo que
aconselhvel consultar primeiro um documento de referncia relativo base de dados
especfica.
A sintaxe SQL para CREATE TALE
CREATE TALE "nome_tabela"
2"coluna )" "ti+o_dados_+ara_coluna_)"9
"coluna 5" "ti+o_dados_+ara_coluna_5"9
::: 7
Assim, se pretendermos criar uma tabela de clientes conforme acima especificado,
introduziramos
CREATE TALE customer
2First_"ame c$ar24*79
Last_"ame c$ar24*79
Address c$ar24*79
CitO c$ar24*79
CountrO c$ar25479
irt$_Date date7
Por vezes, pretendemos fornecer um valor padro para cada coluna. utilizado um
valor padro quando no especificar um valor para a coluna ao introduzir dados na
tabela. Para especificar um valor padro, adicione "Default [valor]" aps a declarao
do tipo de dados. No exemplo acima, que quiser que o padro da coluna "Address"
passe para "Unknown" e "City" para "Mumbai", escreveria
CREATE TALE customer
2First_"ame c$ar24*79
Last_"ame c$ar24*79
Address c$ar24*7 default 8KnQnoAn89
CitO c$ar24*7 default 8Mumbai89
CountrO c$ar25479
irt$_Date date7
Tambm pode limitar o tipo de informaes que uma tabela/coluna pode suportar. Esse
passo efetuado atravs da palavra-chave CO"STRA!"T, abordada a seguir.
SQL CONSTRANT
Pode colocar restries para limitar o tipo de dados a introduzir numa tabela. Essas
restries podem ser especificadas quando a tabela for primeiro criada atravs da
instruo CREATE TABLE ou aps a tabela j ter sido criada atravs da instruoALTER
TABLE.
Alguns tipos comuns de restries incluem o seguinte:
NOT NULL Constraint : Garante que uma coluna no pode ter o valor NULL.
DEFAULT Constraint : Fornece um valor padro para uma coluna quando nenhum
especificado.
UNQUE Constraint : Garante que todos os valores numa coluna so diferentes.
CHECK Constraint : Garante que todos os valores numa coluna satisfazem um
determinado critrio.
Primary Key Constraint : Utilizado para identificar de forma nica uma linha na
tabela.
Foreign Key Constraint : Utilizado para garantir a integridade referencial dos dados.
Cada restrio abordada nas prximas seces.
SQL NOT NULL
Por defeito, uma coluna pode suportar NULL. Se no quiser permitir o valor NULL
numa coluna, dever colocar uma restrio nessa coluna a especificar que NULL agora
no um valor permitido.
Por exemplo, na seguinte instruo,
CREATE TALE Customer
2S!D integer "OT "KLL9
Last_"ame varc$ar 2C*7 "OT "KLL9
First_"ame varc$ar2C*77S
As colunas "SD" e "Last_Name" no podem incluir NULL, enquanto "First_Name" pode
incluir NULL.
Uma tentativa de execuo a seguinte instruo SQL,
!"SERT !"TO Customer 2Last_"ame9 First_"ame7 values 28#ong898Een87S
ir provocar um erro porque ir fazer com que a coluna "SD" seja NULL, o que viola a
restrio NOT NULL nessa coluna.
SQL DEFAULT
A restrio DEFAULT fornece um valor padro a uma coluna quando a instruo
NSERT NTO no fornecer um valor especfico. Por exemplo, se criarmos uma tabela
conforme abaixo apresentado:
CREATE TALE Student
2Student_!D integer KniVue9
Last_"ame varc$ar 2C*79
First_"ame varc$ar 2C*79
Score DEFAKLT D*7S
e executarmos a seguinte instruo SQL,
!"SERT !"TO Student 2Student_!D9 Last_"ame9 First_"ame7 values
28)*898?o$nson898RicQ87S
A tabela ir ter o seguinte aspecto:
Student_
D
Last_Na
me
First_Na
me
Scor
e
10 Johnson Rick 80
Embora no tenhamos especificado um valor para a coluna "Score" na instruo
NSERT NTO, no lhe atribudo o valor padro 80 porque j definimos 80 como o
valor padro desta coluna.
SQL UNQUE
A restrio UNQUE garante que todos os valores numa coluna so diferentes.
Por exemplo, na seguinte instruo CREATE TABLE,
CREATE TALE Customer
2S!D integer KniVue9
Last_"ame varc$ar 2C*79
First_"ame varc$ar2C*77S
a coluna "SD" tem uma restrio nica e, por conseguinte, no pode incluir valores
duplicados. Tal restrio no suporta as colunas "Last_Name" e "First_Name". Assim
sendo, se a tabela j possuir as seguintes linhas:
SD Last_Na
me
First_Na
me
1 Johnson Stella
2 James Gina
3 Aaron Ralph
Executar a seguinte instruo SQL,
!"SERT !"TO Customer values 28C898Lee898Hrace87S
ir provocar um erro, pois '3' j existe na coluna SD e, como tal, tentar introduzir outra
linha com esse valor viola a restrio UNQUE.
Note que uma coluna que seja especificada como chave primria tambm deve ser
nica. Ao mesmo tempo, uma coluna que seja nica pode ou no pode ser uma chave
primria. Alm disso, possvel definir vrias restries UNQUE numa tabela.
SQL CHECK CONSTRANT
A restrio CHECK garante que todos os valores numa coluna satisfazem
determinadas condies. Uma vez definida, a base de dados apenas ir introduzir uma
nova linha ou atualizar uma existente se o novo valor satisfizer a restrio CHECK. A
restrio CHECK utilizada para garantir a qualidade dos dados.
Por exemplo, na seguinte instruo CREATE TABLE,
CREATE TALE Customer
2S!D integer C%ECE 2S!D ( *79
Last_"ame varc$ar 2C*79
First_"ame varc$ar2C*77S
A coluna "SD" tem uma restrio -- o seu valor apenas deve incluir nmeros inteiros
superiores a 0. Como tal, tentar executar a seguinte instruo
!"SERT !"TO Customer values 28>C898HonWales898LOnn87S
ir dar origem a um erro, pois os valores de SD devem ser superiores a 0.
Note que desta vez a restrio C%ECE no importa por linguagem MySQL.
SQL PRMARY KEY
Uma chave primria utilizada da identificar de forma nica cada linha numa tabela.
Pode fazer parte do prprio registo atual ou pode ser um campo artificial (um que no
tenha nada que ver com o registo atual). Uma chave primria pode ser composta por
um ou mais campos numa tabela. Quando so utilizados vrios campos como chave
primria, so denominados por chave composta.
As chaves primrias podem ser especificadas quando a tabela criada (utilizando
CREATE TABLE ) ou alterando a estrutura da tabela existente (utilizando ALTER TABLE ).
Abaixo so apresentados exemplos para a especificao de uma chave primria ao
criar uma tabela:
MOSPL:
CREATE TALE Customer
2S!D integer9
Last_"ame varc$ar2C*79
First_"ame varc$ar2C*79
FR!MARI EEI 2S!D77S
Oracle:
CREATE TALE Customer
2S!D integer FR!MARI EEI9
Last_"ame varc$ar2C*79
First_"ame varc$ar2C*77S
SPL Server:
CREATE TALE Customer
2S!D integer FR!MARI EEI9
Last_"ame varc$ar2C*79
First_"ame varc$ar2C*77S
Abaixo so apresentados exemplos para a especificao de uma chave primria ao
alterar uma tabela:
MOSPL:
ALTER TALE Customer ADD FR!MARI EEI 2S!D7S
Oracle:
ALTER TALE Customer ADD FR!MARI EEI 2S!D7S
SPL Server:
ALTER TALE Customer ADD FR!MARI EEI 2S!D7S
Nota: Antes de utilizar o comando ALTER TABLE para adicionar uma chave primria,
deve certificar-se de que o campo se encontra definido como 'NOT NULL' -- por outras
palavras, NULL no pode ser um valor aceite para esse campo.
SQL FOREGN KEY
Uma chave externa um campo (ou campos) que aponta para a chave primria de
outra tabela. O objetivo da chave externa garantir a integridade referencial dos dados
Por outras palavras, apenas os valores suportados que supostamente devem aparecer
na base de dados so permitidos.
Por exemplo, suponhamos que temos duas tabelas, uma tabela CUSTOMER que inclui
todos os dados dos clientes e uma tabela ORDERS que inclui todas as encomendas
dos clientes. A restrio prende-se com o fato de todas as encomendas deverem ser
associadas a um cliente que j esteja na tabela CUSTOMER. Nesse caso, iremos
colocar uma chave externa na tabela ORDERS e fazer com que se relacione com a
chave primria da tabela CUSTOMER. Deste modo, podemos garantir que todas as
encomendas na tabela ORDERS esto relacionadas com um cliente na tabela
CUSTOMER. Por outras palavras, a tabela ORDERS no pode conter informaes
sobre um cliente que no se encontre na tabela CUSTOMER.
A estrutura destas duas tabelas seria a seguinte:
Tabela CUSTOMER
kolom_naa
m
kenmerk
SD Chave
Primria
Last_Name
First_Name
Tabela ORDERS
kolom_naam kenmerk
Order_D Chave
Primria
Order_Date
Customer_S
D
Chave
Externa
Amount
No exemplo acima apresentado, a coluna SD_cliente na tabela ENCOMENDAS uma
chave externa a apontar para a coluna SD na tabela CUSTOMER.
Abaixo so apresentados exemplos de como especificar uma chave externa ao criar a
tabela ORDERS:
MOSPL:
CREATE TALE ORDERS
2Order_!D integer9
Order_Date date9
Customer_S!D integer9
Amount double9
FrimarO EeO 2Order_!D79
Foreign EeO 2Customer_S!D7 references CKSTOMER2S!D77S
Oracle:
CREATE TALE ORDERS
2Order_!D integer +rimarO QeO9
Order_Date date9
Customer_S!D integer references CKSTOMER2S!D79
Amount double7S
SPL Server:
CREATE TALE ORDERS
2Order_!D integer +rimarO QeO9
Order_Date datetime9
Customer_S!D integer references CKSTOMER2S!D79
Amount double7S
Abaixo so apresentados exemplos para a especificao de uma chave EXTERNA ao
alterar uma tabela. sso assume que a tabela ORDERS foi criada e que a chave
externa ainda no foi introduzida:
MOSPL:
ALTER TALE ORDERS
ADD FORE!H" EEI 2customer_sid7 REFERE"CES CKSTOMER2S!D7S
Oracle:
ALTER TALE ORDERS
ADD 2CO"STRA!"T fQ_orders)7 FORE!H" EEI 2customer_sid7 REFERE"CES
CKSTOMER2S!D7S
SPL Server:
ALTER TALE ORDERS
ADD FORE!H" EEI 2customer_sid7 REFERE"CES CKSTOMER2S!D7S
SQL CREATE VEW
As vistas podem ser consideradas como tabelas virtuais. Regra geral, uma tabela tem
um conjunto de definies e armazena fisicamente os dados. Uma vista tambm tem
um conjunto de definies, que so criadas sobre tabela(s) ou outra(s) vista(s), e no
armazena fisicamente os dados.
A sintaxe para criar uma vista a seguinte:
CREATE J!E# "nome_vista" AS "!nstru&'o SPL"
"nstruo SQL" pode ser qualquer uma das instrues SQL abordadas neste tutorial.
Utilizemos um exemplo simples como ilustrao. Assuma que temos a seguinte tabela:
Tabela Customer
2First_"ame c$ar24*79
Last_"ame c$ar24*79
Address c$ar24*79
CitO c$ar24*79
CountrO c$ar25479
irt$_Date date7
e que queremos criar uma vista denominada V_Customer que contenha apenas as
colunas Primeiro_nome, Apelido e Pas desta tabela, escreveramos
CREATE J!E# J_Customer
AS SELECT First_"ame9 Last_"ame9 CountrO
FROM Customer
Agora possumos uma vista denominada V_Customer com a seguinte estrutura:
JieA V_Customer
2First_"ame c$ar24*79
Last_"ame c$ar24*79
CountrO c$ar25477
Tambm podemos utilizar uma vista para aplicar unies a duas tabelas. Nesse caso, os
utilizadores apenas visualizam uma em vez de duas tabelas e a instruo SQL que os
utilizadores devem emitir torna-se muito mais simples. Suponhamos que temos as duas
tabelas seguintes:
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Tabela Geography
region_na
me
store_nam
e
East Boston
East New York
West Los
Angeles
West San Diego
e queremos criar uma vista com informaes de vendas por regio. ramos emitir a
seguinte instruo SQL:
CREATE J!E# J_REH!O"_SALES
AS SELECT A):region_name REH!O"9 SKM2A5:Sales7 SALES
FROM Heogra+$O A)9 Store_!nformation A5
#%ERE A):store_name ; A5:store_name
HROKF I A):region_name
Assim obtemos uma vista, V_REGIO_S!"ES, que foi definida para armazenar
registos de vendas por regio. Se quisermos descobrir o contedo desta vista,
escrevemos
SELECT < FROM J_REH!O"_SALES
Resultado:
REH!O
"
SALE
S
East 6** =
#est 5*4* =
SQL CREATE NDEX
Os ndices ajudam-nos a obter mais rapidamente dados das tabelas. Usemos um
exemplo para ilustrar este ponto: Digamos que estamos interessados em ler sobre
como cultivar pimentos num livro de jardinagem. Em vez de lermos o livro do incio ao
fim at encontrarmos uma seco sobre pimentos, muito mais fcil utilizar a seco
do ndice no final do livro, localizar as pginas que contm informaes sobre pimentos
e, em seguida, consultar diretamente essas pginas. Consultar primeiro o ndice
permite poupar tempo e o mtodo mais eficiente para localizar as informaes
necessrias.
O mesmo princpio aplicvel para a obteno de dados a partir de uma tabela de
base de dados. Sem um ndice, o sistema da base de dados l toda a tabela (este
processo denominado 'pesquisa da tabela') para localizar as informaes
pretendidas. Atravs de um ndice adequado, o sistema da base de dados pode
percorrer primeiro o ndice para descobrir onde obter os dados e, em seguida, aceder
diretamente aos locais para obter os dados necessrios. Assim muito mais rpido.
Como tal, muitas vezes prefervel criar ndices nas tabelas. Um ndice pode abranger
uma ou mais colunas. A sintaxe geral para criar um ndice :
CREATE !"DEL "nome_indice" O" "nome_tabela" 2nome_coluna7
Suponhamos que temos a seguinte tabela:
TALE Customer
2First_"ame c$ar24*79
Last_"ame c$ar24*79
Address c$ar24*79
CitO c$ar24*79
CountrO c$ar25479
irt$_Date date7
e queremos criar um ndice da coluna Apelido, escreveramos
CREATE !"DEL !DL_CKSTOMER_LAST_"AME
on CKSTOMER 2Last_"ame7
Se quisermos criar um ndice de Cidade e Pas, escreveramos
CREATE !"DEL !DL_CKSTOMER_LOCAT!O"
on CKSTOMER 2CitO9 CountrO7
No existe uma regra rgida sobre qual o nome a atribuir a um ndice. O mtodo
geralmente aceite colocar um prefixo, tal como "DX_", antes de um nome de ndice
de modo a evitar confuses com outros objetos da base de dados. Tambm boa ideia
fornecer informaes sobre que tabela e coluna(s) o ndice utilizado.
Note que a sintaxe exata para CREATE !"DEL pode ser diferente para diferentes
bases de dados. Deve consultar o manual de referncia da sua base de dados para
obter a sintaxe precisa.
SQL ALTER TABLE
Assim que uma tabela for criada na base de dados, muitas vezes o utilizador poder
querer alterar a estrutura da tabela. Os casos tpicos incluem o seguinte:
- Adicionar uma coluna
- Remover uma coluna
- Alterar o nome de uma coluna
- Alterar o tipo de dados de uma coluna
Note que o acima apresentado no constitui uma lista exaustiva. Existem outros
momentos em que ALTER TABLE utilizado para alterar a estrutura da tabela, tal
como alterar a especificao da chave primria ou adicionar uma restrio nica a uma
coluna.
A sintaxe SQL para ALTER TALE :
ALTER TALE "nome_tabela"
-alter s+ecification/
[alter specification] depende do tipo de alterao que pretendemos efetuar. Para os fins
acima citados, as instrues [alter specification] so:
Adicionar uma coluna: ADD "coluna 1" "tipo de dados para a coluna 1"
Remover uma coluna: DROP "coluna 1"
Alterar o nome de uma coluna: CHANGE "antigo nome da coluna" "novo nome
da coluna" "tipo de dados para novo nome da coluna"
Alterar o tipo de dados de uma coluna: MODFY "coluna 1" "novo tipo de dados"
Analisemos cada um dos exemplos acima apresentados utilizando a tabela "customer"
na seco CREATE TABLE :
Tabela #ustomer
Column
Name
Data
Type
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date date
Primeiro, queremos adicionar uma coluna denominada "Gender" a esta tabela. Para tal,
introduzimos:
ALTER table customer add Hender c$ar2)7
Estrutura da tabela obtida:
Tabela #ustomer
Column
Name
Data
Type
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)
A seguir, queremos renomear "Address" para "Addr". Para tal, introduzimos:
ALTER table customer c$ange Address Addr c$ar24*7
Estrutura da tabela obtida:
Tabela #ustomer
Column
Name
Data
Type
First_Name char(50)
Last_Name char(50)
Addr char(50)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)
Em seguida, queremos alterar o tipo de dados de "Addr" para char(30). Para tal,
introduzimos:
ALTER table customer modifO Addr c$ar2C*7
Estrutura da tabela obtida:
Tabela #ustomer
Column
Name
Data
Type
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)
Finalmente, queremos eliminar a coluna "Gender". Para tal, introduzimos:
ALTER table customer dro+ Hender
Estrutura da tabela obtida:
Tabela #ustomer
Column
Name
Data
Type
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date date
SQL DROP TABLE
Por vezes podemos pretender remover uma tabela da base de dados por qualquer
motivo. De fato, seria problemtico se tal no fosse possvel, pois poderia ser um
pesadelo para o DBA (administrador da base de dados). Felizmente, a linguagem SQL
permite-nos faz-lo atravs do comando DROF TALE. A sintaxe para DROF TALE

DROF TALE "nome_tabela"


Assim, se quisermos eliminar a tabela denominada "customer" que criamos na seco
CREATE TABLE , basta escrever
DROF TALE customer.
SQL TRUNCATE TABLE
Por vezes queremos remover todos os dados de uma tabela. Uma forma de o fazer
atravs do comando DROF TALE, abordado na seco anterior . Mas e se apenas
quisermos remover todos os dados , mas no a prpria tabela? Para tal, podemos
utilizar o comando TRK"CATE TALE. A sintaxe para TRK"CATE TALE
TRK"CATE TALE "nome_tabela"
Assim, se quisermos truncar a tabela denominada "customer" que criamos em SQL
CREATE TABLE , basta escrever
TRK"CATE TALE customer
SQL NSERT NTO
Nas seces anteriores, vimos como obter informaes das tabelas. Mas de que forma
estas linhas de dados so introduzidas inicialmente nas tabelas? isso que esta
seco, que aborda a instruo !"SERT e a seco seguinte, que aborda a
instruoKFDATE, explicam.
Na linguagem SQL, existem essencialmente duas formas de !"SERT (nserir) dados
numa tabela: Uma inserir uma linha de cada vez, a outra inserir vrias linhas em
simultneo. Vamos abordar como podemos !"SERT (nserir) dados numa linha de
cada vez:
A sintaxe para inserir dados numa linha da tabela de cada vez a seguinte:
!"SERT !"TO "nome_tabela" 2"coluna )"9 "coluna 5"9 :::7
JALKES 2"valor )"9 "valor 5"9 :::7
Assumindo que temos uma tabela com a seguinte estrutura,
Tabela Store_Information
Column
Name
Data
Type
store_name char(50)
Sales float
Date datetime
e agora quisermos inserir uma linha adicional na tabela a representando os dados de
vendas de Los Angeles no dia 10 de Janeiro de 1999. Nesse dia, esta loja efetuou
vendas no valor de 900 C. Deste modo, iremos utilizar o seguinte script SQL:
!"SERT !"TO Store_!nformation 2store_name9 Sales9 Date7
JALKES 28Los Angeles89 @**9 8)*>?an>)@@@87
O segundo tipo de instruo !"SERT !"TO permite-nos inserir vrias linhas numa
tabela. Ao contrrio do exemplo anterior, em que inserimos uma nica linha
especificando os seus valores para todas as colunas, agora utilizamos uma instruo
SELECTpara especificar os dados que queremos inserir na tabela. Se estiver a pensar
que isso significa utilizar informaes de outra tabela, est certo. A sintaxe ser a
seguinte:
!"SERT !"TO "tabela )" 2"coluna )"9 "coluna 5"9 :::7
SELECT "coluna C"9 "coluna M"9 :::
FROM "tabela 5"
Note que esta a forma simples. A instruo completa pode facilmente conter as
clusulas #%ERE, HROKF I, e %AJ!"H, assim como alias e unies de tabelas.
Assim, por exemplo, se pretendermos uma tabela, Store_Information, que recolha as
informaes de vendas para o ano de 1998 e j souber que os dados de origem se
encontram na tabela Sales_Information, iremos escrever:
!"SERT !"TO Store_!nformation 2store_name9 Sales9 Date7
SELECT store_name9 Sales9 Date
FROM Sales_!nformation
#%ERE Iear2Date7 ; )@@D
Aqui foi utilizada a sintaxe do sistema Servidor SQL para extrair a informao do ano
de uma data. Outras bases de dados relacionadas tero uma sintaxe diferente. Por
exemplo, no sistema Oracle, ir utilizar to_char(date,'yyyy')=1998.
SQL UPDATE
Assim que existirem dados na tabela, podemos chegar concluso que necessrio
modificar os dados. Par tal, podemos utilizar o comando KFDATE. A sintaxe para tal
KFDATE "nome_tabela"
SET "coluna )" ; -novo valor/
#%ERE ,condi&'o0
Por exemplo, se possuirmos atualmente uma tabela conforme abaixo apresentado:
Tabela Store_Information
store_nam
e
Sales Date
Los 1500 C 05-Jan-
Angeles 1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
e descobrirmos que as vendas em Los Angeles no dia 01/08/1999 foram realmente de
500 C e no de 300 C e, como tal, essa entrada em particular deve ser atualizada. Para
tal, utilizamos a seguinte instruo SQL:
KFDATE Store_!nformation
SET Sales ; 4**
#%ERE store_name ; "Los Angeles"
A"D Date ; "*D>?an>)@@@"
A tabela obtida seria semelhante a
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
500 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
Neste caso, existe apenas uma linha que satisfaz a condio da clusula #%ERE. Se
existirem vrias filas que satisfaam a condio, necessrio modific-las todas.
Tambm possvel KFDATE (Atualizar) vrias colunas em simultneo. Nesse caso, a
sintaxe seria semelhante seguinte:
KFDATE "nome_tabela"
SET Qolom ) ; -valor )/9 Qolom 5 ; -valor 5/
#%ERE ,condi&'o0
SQL DELETE FROM
Por vezes, podemos pretender remover registos de uma tabela. Par tal, podemos
utilizar o comando DELETE FROM. A sintaxe para tal
DELETE FROM "nome_tabela"
#%ERE ,condi&'o0
mais fcil utilizar um exemplo. Se possuirmos atualmente uma tabela conforme
abaixo apresentado:
Tabela Store_Information
store_nam
e
Sales Date
Los
Angeles
1500 C 05-Jan-
1999
San Diego 250 C 07-Jan-
1999
Los
Angeles
300 C 08-Jan-
1999
Boston 700 C 08-Jan-
1999
e decidirmos no manter quaisquer informaes sobre Los Angeles nesta tabela. Para
tal, escrevemos a seguinte instruo SQL:
DELETE FROM Store_!nformation
#%ERE store_name ; "Los Angeles"
Agora o contedo da tabela seria semelhante a
Tabela Store_Information
store_nam
e
Sales Date
San Diego 250 C 07-Jan-
1999
Boston 700 C 08-Jan-
1999
update table set column = substring(column,4);
FONTE: http :// www .1 keydata .com /pt /sql

You might also like