89258871 Apostila de SQL Avancado

download 89258871 Apostila de SQL Avancado

of 50

Transcript of 89258871 Apostila de SQL Avancado

  • 7/22/2019 89258871 Apostila de SQL Avancado

    1/50

    Apostila de SQL Avanado

    SQL (Linguagem de Consulta Estruturada) uma linguagem informtica destinada a armazenar,manipular e obter dados armazenados em bases de dados relacionais. A primeira encarnao dalinguagem SQL apareceu em 1974, quando um grupo dentro da IBM desenvolveu o primeiro prottipo deuma base de dados relacional. A primeira base de dados relacional comercial foi distribuda pelaRelational Software (mais tarde passou a chamar-se Oracle).

    Existem normas para a linguagem SQL. Contudo, a linguagem SQL que pode ser utilizada em cada umdos principais sistemas RDBMS possui diferentes caractersticas. Isso deve-se a duas razes: 1) A normaSQL relativamente complexa e no prtico implementar toda a norma 2) cada vendedor de bases dedados precisa de formas para diferenciar o seu produto dos outros. Neste tutorial, essas diferenas somencionadas quando apropriado.

    Este site de tutorial de SQL lista os comandos SQL utilizados mais frequentemente e encontra-se divididonas seguintes seces:

    Comandos SQL:Instrues SQL bsicas para armazenar, obter e manipular dados numa base dedados relacional.

    Manipulao de tabelas:Forma como as instrues SQL so utilizadas para gerir tabelas dentrode 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. Nofinal 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 quecompreender os conceitos bsicos da linguagem SQL muito mais fcil do que dominar todas ascomplicaes 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 comecepela secoComandos SQL.Se pretender compreender de que forma a linguagem SQL pode serutilizada para manipular tabelas de bases de dados, recomendamos que comece pela secoManipulaode tabelas.Se pretender obter ajuda sobre um comando SQL especfico, pode utilizar oMapa do site

    para encontrar o comando pretendido.

    Esta introduo j foi suficiente.Adicione este site aos favoritos ecomece a aprender a linguagemSQL!

    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.

    Comandos SQL>

    Select

    Para que servem os comandos SQL? Uma utilizao comum a seleo de tabelas localizadas numa basede dados. Imediatamente, 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 secoManipulao de tabelas). Deste modo, temos a estrutura SQL mais bsica:

    SELECT "nome_coluna" FROM "nome_tabela"

    http://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-avancados.phphttp://sql.1keydata.com/pt/sql-avancados.phphttp://sql.1keydata.com/pt/sql-sintaxe.phphttp://sql.1keydata.com/pt/sql-sintaxe.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sitemap.phphttp://sql.1keydata.com/pt/sitemap.phphttp://bookmark%28%27didacticiel%20sql%27%2C%27http//sql.1keydata.com/fr/')http://bookmark%28%27didacticiel%20sql%27%2C%27http//sql.1keydata.com/fr/')http://bookmark%28%27didacticiel%20sql%27%2C%27http//sql.1keydata.com/fr/')http://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://bookmark%28%27didacticiel%20sql%27%2C%27http//sql.1keydata.com/fr/')http://sql.1keydata.com/pt/sitemap.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-sintaxe.phphttp://sql.1keydata.com/pt/sql-avancados.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-select.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    2/50

    De modo a ilustrar o exemplo acima apresentado, assuma que possumos a seguinte tabela:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Iremos utilizar esta tabela como exemplo ao longo deste tutorial (esta tabela ir aparecer em todas asseces). Para selecionar todas as lojas nesta tabela, introduzimos

    SELECTstore_name FROMStore_Information

    Resultado:

    store_name

    Los Angeles

    San Diego

    Los Angeles

    Boston

    possvel selecionar nomes de vrias colunas, assim como selecionar nomes de vrias tabelas.

    Distinct

    A palavra-chave SELECTpermite-nos obter todas as informaes de uma coluna (ou colunas) numatabela. Isso, claro, significa obrigatoriamente que existiro redundncias. E se apenas pretendermosselecionar cada elemento DISTINCT? Isso facilmente concretizvel na linguagem SQL. Bastaadicionar DISTINCTaps SELECT. A sintaxe ser a seguinte:

    SELECT DISTINCT "nome_coluna"

    FROM "nome_tabela"

    Por exemplo, para selecionar todos os armazenamentos distintos na tabela Store_Information,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduzimos

  • 7/22/2019 89258871 Apostila de SQL Avancado

    3/50

    SELECT DISTINCT store_name FROM Store_Information

    Resultado:

    store_nameLos AngelesSan Diego

    Boston

    Where

    Em seguida, podemos selecionar condicionalmente os dados da tabela. Por exemplo, podemos pretenderobter lojas com vendas superiores a 1.000$. Para tal, utilizamos a palavra-chave WHERE. A sintaxe sera seguinte:

    SELECT "nome_coluna"

    FROM "nome_tabela"

    WHERE "condio"

    Por exemplo, para selecionar todas as lojas com valores superiores a 1.000 na Tabela

    Store_Information,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduzimos

    SELECT store_name

    FROM Store_Information

    WHERE Sales > 1000

    Resultado:

    store_nameLos Angeles

    And Or

    Na seco anterior, vimos que a palavra-chave WHEREpode ser utilizada para selecionar

    condicionalmente dados de uma tabela. Esta condio pode ser uma condio simples (como aapresentada na seco anterior) ou pode ser uma condio composta. As condies compostas soconstitudas por vrias condies simples ligadas atravs de ANDou OR. No existe qualquer limiterelativamente ao nmero de condies simples que podem estar presentes numa nica instruo SQL.

  • 7/22/2019 89258871 Apostila de SQL Avancado

    4/50

    A sintaxe de uma condio composta a seguinte:

    SELECT "nome_coluna"

    FROM "nome_tabela"

    WHERE "condio simples"

    {[AND|OR] "condio simples"}+

    Os smbolos {}+ significam que a expresso entre parnteses ir ocorrer uma ou mais vezes. Note queANDe ORpodem 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 ou todas as

    lojas com vendas inferiores a 500 mas superiores a 275 na Tabela Store_Information,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduzimos

    SELECT store_name

    FROM Store_InformationWHERE Sales > 1000

    OR (Sales < 500 AND Sales > 275)

    Resultado:

    store_nameLos AngelesSan Francisco

    In

    Na linguagem SQL, a palavra-chave INpode ser utilizada de duas formas e esta seco introduz uma queest relacionada com a clusula WHERE. Quando utilizada neste contexto, sabemos exatamente o valordos valores devolvidos que pretendemos visualizar em pelo menos uma das colunas. A sintaxe parautilizar a palavra-chave IN a seguinte:

    SELECT "nome_coluna"

    FROM "nome_tabela"

    WHERE "nome_coluna" IN ('valor1', 'valor2', ...)

    O nmero de valores entre parnteses pode ser um ou mais, com cada valor separado por uma vrgula. Osvalores podem ser numricos ou caracteres. Se existir apenas um valor entre parnteses, o comando equivalente a

  • 7/22/2019 89258871 Apostila de SQL Avancado

    5/50

    WHERE "nome_coluna" = 'valor1'

    Por exemplo, podemos pretender selecionar todos os registos das lojas de Los Angeles e San Diego naTabela Store_Information,

    Tabela Store_Information

    store_name Sales DateLos Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduzimos

    SELECT *

    FROM Store_Information

    WHERE store_name IN ('Los Angeles', 'San Diego')

    Resultado:

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Between

    Enquanto a palavra-chave INajuda as pessoas a limitar o critrio de seleo a um ou mais valoresdiscretos, a palavra-chave BETWEENpermite a seleo de um intervalo. A sintaxe da clusulaBETWEEN a seguinte:

    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 de2010 na Tabela Store_Information,

    Tabel Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

  • 7/22/2019 89258871 Apostila de SQL Avancado

    6/50

    introduzimos

    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 tutorialsimplesmente seleciona um dos formatos.

    Resultado:

    store_name Sales Date

    San Diego 250 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Like

    LIKE outra palavra-chave utilizada na clusula WHERE. Basicamente, LIKEpermite-lhe efetuar umaprocura com base num padro em vez de especificar exatamente o pretendido (como em IN) ou excluirum intervalo (como em BETWEEN). A sintaxe ser a seguinte:

    SELECT "nome_coluna"

    FROM "nome_tabela"

    WHERE "nome_coluna" LIKE {PATTERN}

    {PATTERN} normalmente composto por caracteres universais. A seguir so apresentados algunsexemplos:

    '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 doiscaracteres entre A e Z em vez de um).

    'ABC%': Todas as cadeias que comeam por 'ABC'. Por exemplo, 'ABCD' e 'ABCABC' iriamsatisfazer a condio.

    '%XYZ': Todas as cadeias que terminam em 'XYZ'. Por exemplo, 'WXYZ' e 'ZZXYZ' iriamsatisfazer a condio.

    '%AN%': Todas as cadeias que contm o padro 'AN' em qualquer local. Por exemplo, 'LOSANGELES' e 'SAN FRANCISCO' iriam satisfazer a condio.

    Suponhamos que temos a seguinte tabela:

    Tabela Store_Information

    store_name Sales Date

    LOS ANGELES 1500 05-Jan-1999

    SAN DIEGO 250 07-Jan-1999

  • 7/22/2019 89258871 Apostila de SQL Avancado

    7/50

    SAN FRANCISCO 300 08-Jan-1999

    BOSTON 700 08-Jan-1999

    Queremos encontrar todas as lojas cujo nome contm 'AN'. Para tal, introduzimos

    SELECT *FROM Store_Information

    WHERE store_name LIKE '%AN%'

    Resultado:

    store_name Sales Date

    LOS ANGELES 1500 05-Jan-1999

    SAN DIEGO 250 07-Jan-1999

    SAN FRANCISCO 300 08-Jan-1999

    Order By

    At agora, vimos como obter dados de uma tabela utilizando os comandos SELECTe WHERE.Contudo, frequentemente precisamos de listar os resultados por uma ordem em particular. Pode ser porordem ascendente, descendente, ou com base no valor numrico ou valor de texto. Nesses casos, podemosutilizar a palavra-chave ORDER BYpara alcanar o objetivo.

    A sintaxe para uma instruo ORDER BY a seguinte:

    SELECT "nome_coluna"

    FROM "nome_tabela"

    [WHERE "condio"]

    ORDER BY "nome_coluna" [ASC, DESC]

    Os smbolos [] significam que a instruo WHERE opcional. Contudo, se existir uma clusulaWHERE, esta precede a clusula ORDER BY. ASCsignifica que os resultados sero apresentados porordem ascendente e DESCsignifica que os resultados sero apresentados por ordem descendente. Se nofor especificada qualquer uma, o padro ASC.

    possvel ordenar por mais do que uma coluna. Nesse caso, a clusula ORDER BYacima torna-se

    ORDER BY "nome_coluna1" [ASC, DESC], "nome_coluna2" [ASC, DESC]

    Assumindo que selecionamos a ordem ascendente para ambas as colunas, o resultado ser ordenado pelaordem 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_Informationpor montante emdlares, por ordem descendente:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

  • 7/22/2019 89258871 Apostila de SQL Avancado

    8/50

    San Diego 250 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduzimosSELECT store_name, Sales, Date

    FROM Store_Information

    ORDER BY Sales DESC

    Resultado:

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    Boston 700 08-Jan-1999San Francisco 300 08-Jan-1999

    San Diego 250 07-Jan-1999

    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 BY. A primeira coluna 1, a segundacoluna 2, etc. No exemplo acima, iremos obter os mesmos resultados atravs do seguinte comando:

    SELECT store_name, Sales, Date

    FROM Store_Information

    ORDER BY 2 DESC

    Funes

    Como comeamos por lidar com nmeros, a prxima questo natural perguntar se possvel efetuarclculos com esses nmeros, tais como som-los ou calcular a sua mdia. A resposta sim! A linguagemSQL tem vrias funes aritmticas, sendo:

    - AVG- COUNT

    - MAX- MIN- SUM

    A sintaxe para utilizar funes :

    SELECT "tipo de funo"("nome_coluna")

    FROM "nome_tabela"

    Por exemplo, se quisermos obter a soma de todas as vendas da seguinte tabela,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

  • 7/22/2019 89258871 Apostila de SQL Avancado

    9/50

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduziramos

    SELECT SUM(Sales) FROM Store_InformationResultado:

    SUM(Sales)2750

    2 750 representa a soma de todas as entradas Sales (Vendas): 1500 + 250 + 300 + 700 .

    Para alm de utilizar funes, tambm possvel utilizar a linguagem SQL para efetuar tarefas simplescomo 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 desistemas RDBMS tm diferentes implementaes de cadeias e melhor consultar as referncias relativasao seu sistema RDBMS para descobrir de que forma estas funes so utilizadas.

    Count

    Outra funo aritmtica COUNT. Esta permite COUNT(contar) o nmero de linhas numa determinadatabela. A sintaxe

    SELECT COUNT("nome_coluna")

    FROM "nome_tabela"

    Por exemplo, se quisermos descobrir o nmero de entradas de uma loja na nossa tabela,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999Boston 700 08-Jan-1999

    introduziramos

    SELECT COUNT(store_name)

    FROM Store_Information

    Resultado:

    Count(store_name)4

    COUNTe DISTINCTpodem ser utilizadas em conjunto numa instruo para obter o nmero deentradas diferentes numa tabela. Por exemplo, se quisermos descobrir o nmero de diferentes lojas,

  • 7/22/2019 89258871 Apostila de SQL Avancado

    10/50

    escreveramos

    SELECT COUNT(DISTINCT store_name)

    FROM Store_Information

    Resultado:

    Count(DISTINCT store_name)

    3

    Group By

    Agora regressamos s funes agregadas. Lembra-se que utilizamos a palavra-chave SUMpara calcular ototal de vendas de todas as lojas? E se quisermos calcular o total de vendas de cadaloja? 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 GROUPBY(agrupados por) lojas. A sintaxe SQL correspondente ,

    SELECT "nome_coluna1", SUM("nome_coluna2")

    FROM "nome_tabela"

    GROUP BY "nome_coluna1"

    Vamos ilustrar atravs da seguinte tabela,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Queremos descobrir o total de vendas de cada loja. Para tal, introduziramos

    SELECT store_name, SUM(Sales)

    FROM Store_Information

    GROUP BY store_name

    Resultado:

    store_name SUM(Sales)

    Los Angeles1800

    San Diego 250

    Boston> 700

    A palavra-chave GROUP BY utilizada ao selecionar vrias colunas a partir de uma tabela (ou tabelas) eaparece pelo menos um operador aritmtico na instruo SELECT. Quando isso acontece, necessrioGROUP BY(agrupar por) todas as outras colunas selecionadas, ou seja, todas as colunas exceto a(s)operada(s) pelo operador aritmtico.

  • 7/22/2019 89258871 Apostila de SQL Avancado

    11/50

    Having

    Outra coisa que os utilizadores podero pretender efetuar limitar os resultados com base na respectivasoma (ou quaisquer outras funes agregadas). Por exemplo, podemos pretender visualizar apenas as lojascom vendas superiores a 1 500 . Em vez de utilizarmos a clusula WHEREna instruo SQL, necessrio utilizar a clusula HAVING, que se encontra reservada para as funes agregadas.

    Normalmente a instruo HAVING colocada perto do final da instruo SQL e uma instruo SQLcom a clusula HAVINGpode ou no incluir a clusula GROUP BY. A sintaxe para HAVING

    SELECT "nome_coluna1", SUM("nome_coluna2")FROM "nome_tabela"

    GROUP BY "nome_coluna1"

    HAVING (condio da funo aritmtica)

    Nota: a clusula GROUP BY opcional.

    No nosso exemplo, a tabela Store_I nformation,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    introduziramos

    SELECT store_name, SUM(sales)FROM Store_Information

    GROUP BY store_name

    HAVING SUM(sales) > 1500

    Resultado:

    store_name SUM(Sales)

    Los Angeles 1800

    Alias

    A seguir focamos a utilizao de alias. Existem dois tipos de alias que so utilizados maisfrequentemente: alias de colunas e alias de tabelas.

    Resumindo, os alias de colunas existem para ajudar a organizar o resultado. No exemplo anterior, sempreque visualizamos o total de vendas, so listados como SUM(sales). Embora sejam compreensveis,

    podemos prever casos em que o cabealho da coluna complicado (em especial se envolver vriasoperaes aritmticas). A utilizao de um alias de colunas tornaria os resultados muito maiscompreensveis.

    O segundo tipo de alias o alias de tabelas. Tal obtido colocando um alias diretamente aps o nome databela na clusula FROM. Isso conveniente quando quiser obter informaes a partir de duas tabelasseparadas (o termo tcnico 'efetuar unies'). A vantagem de utilizar um alias de tabelas imediatamente

  • 7/22/2019 89258871 Apostila de SQL Avancado

    12/50

    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_coluna1" "aliar_coluna"

    FROM "nome_tabela" "alias_tabela"

    Resumidamente, ambos os tipos de alias so colocados diretamente aps o item de alias, separados porum espao em branco. Utilizamos novamente a nossa tabela Store_Information,

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 70008-Jan-1999

    Utilizamos os mesmos exemplos da secoGROUP BYde linguagem SQL, exceo que colocamosalias de colunas e alias de tabelas:

    SELECT A1.store_name Store, SUM(A1.Sales) "Total Sales"

    FROM Store_Information A1

    GROUP BY A1.store_name

    Resultado:

    Store Total SalesLos Angeles 1800

    San Diego 250

    Boston 700

    Repare na diferena no resultado: os ttulos da coluna agora so diferentes. o resultado da utilizao deutilizar 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 detabelas no aparente neste exemplo. Contudo, ir tornar-se evidente naprxima seco.

    Join

    Agora iremos abordar as unies. Para efetuar unies corretas na linguagem SQL, so necessrios muitosdos elementos introduzidos at agora. Suponhamos que temos as duas tabelas seguintes:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    http://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-group-by.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    13/50

    Tabela Geography

    region_name store_name

    East Boston

    East New York

    West Los AngelesWest San Diego

    e queremos descobrir quais as vendas por regio. Constatamos que a tabela Geographyincluiinformaes sobre regies e lojas e a tabela Store_Informationcontm informaes de vendas para cadaloja. Para obter as informaes de vendas por regio, necessrio combinar as informaes das duastabelas. 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 cadasegmento:

    SELECT A1.region_name REGION, SUM(A2.Sales) SALES

    FROM Geography A1, Store_Information A2

    WHERE A1.store_name = A2.store_name

    GROUP BY A1.region_name

    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 somatrio do campo"Sales" da tabela Store_I nformation(com alias como SALES). Repare que agora os alias das tabelas soutilizados aqui: Geographypossui alias como A1, Store_Informationcom alias como A2. Sem alias, a

    primeira linha seria

    SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES

    que muito mais inadequada. Na sua essncia, os alias de tabelas tornam toda a instruo SQL muitomais fcil de compreender, em especial quando se encontram includas vrias tabelas.

    A seguir, damos ateno linha 3, a instruo WHERE. aqui que especificamos a condio de unio.Neste caso, queremos garantir que o contedo de "store_name" na tabela Geografia corresponde ao databela Store_Informatione a forma de o fazer defini-las de forma igual. A instruo WHEREessencial para garantir que obtm o resultado correto. Sem a instruo WHEREcorreta, ser obtida umaUnio Cartesiana. As unies cartesianas iro produzir uma consulta com todas as combinaes possveisdas duas (ou qualquer que seja o nmero de tabelas na instruo FROM). Nesse caso, uma uniocartesiana iria resultar num resultado com o total de 4 x 4 = 16 linhas.

    Outer Join

    Anteriormente, abordamos a unio esquerda, ou unio interna, onde selecionamos linhas comuns nastabelas participantes para uma unio. E nos casos em que pretendemos selecionar elementos numa tabelaindependentemente de estarem presentes numa segunda tabela? Agora ser necessrio utilizar o comando

  • 7/22/2019 89258871 Apostila de SQL Avancado

    14/50

    SQL OUTER JOIN.

    A sintaxe para efetuar uma unio externa na linguagem SQL depende da base de dados. Por exemplo, emOracle, iremos colocar o sinal "(+)" na clusula WHEREno outro lado da tabela para a qual queremosincluir todas as linhas.

    Suponhamos que temos as duas tabelas seguintes:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    TabelaGeography

    region_name store_name

    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 natabela Store_Information. Como tal, necessrio efetuar uma unio externa nas duas tabelas acima:

    SELECT A1.store_name, SUM(A2.Sales) SALES

    FROM Geography A1, Store_Information A2

    WHERE A1.store_name = A2.store_name (+)

    GROUP BY A1.store_name

    Note que neste caso estamos a utilizar a sintaxe Oracle para a unio externa.

    Resultado:

    store_nameSALESBoston 700 New YorkLos Angeles1800 San Diego 250

    Nota: NULL obtido quando no existir qualquer correspondncia na segunda tabela. Nesse caso, "NewYork" no aparece na tabela Store_Information, e por isso a coluna "SALES" correspondente NULL.

    Funo Concatenate

    Por vezes necessrio combinar (concatenar) os resultados de vrios campos diferentes. Cada base de

  • 7/22/2019 89258871 Apostila de SQL Avancado

    15/50

    dados fornece um modo de o fazer:

    MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: +

    A sintaxe para CONCAT() a seguinte:

    CONCAT(str1, str2, str3, ...): Concatenar str1, str2, str3 e quaisquer outras cadeias juntas. Note que afuno Oracle CONCAT() apenas permite dois argumentos -- apenas duas cadeias podem ser utilizadasem simultneo aquando da utilizao desta funo. Contudo, possvel concatenar mais de duas cadeiasem simultneo no Oracle utilizando '||'.

    Observemos alguns exemplos. Assuma que temos a seguinte tabela:

    Tabela Geography

    region_name store_name

    East BostonEast New York

    West Los Angeles

    West San Diego

    Exemplo 1:

    MySQL/Oracle:SELECT CONCAT(region_name,store_name) FROM Geography

    WHERE store_name = 'Boston';

    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'

  • 7/22/2019 89258871 Apostila de SQL Avancado

    16/50

    Funo Substring

    A funo SUBSTRING na linguagem SQL utilizada para obter uma parte dos dados armazenados. Estafuno possui nomes diferentes nas diversas bases de dados:

    MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING()

    A seguir so apresentadas as utilizaes mais frequentes (iremos utilizar SUBSTR() aqui):

    SUBSTR(str,pos): Selecionar todos os caracteres de a comear pela posio . Note que estasintaxe no suportada pelo SQL Server.

    SUBSTR(str,pos,len): A comear pelo carter na cadeia e selecionar os caracteres seguintes.

    Assuma que temos a seguinte tabela:

    TabelaGeography

    region_name store_name

    East Boston

    East New York

    West Los Angeles

    West San Diego

    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'

    Funo Trim

    A funo TRIM em linguagem SQL utilizada para remover prefixos ou sufixos especificados de umacadeia. O padro mais comum a ser removido do os espaos em branco. Esta funo possui nomesdiferentes nas diversas bases de dados:

    MySQL: TRIM(), RTRIM(), LTRIM()

  • 7/22/2019 89258871 Apostila de SQL Avancado

    17/50

    Oracle: RTRIM(), LTRIM() SQL Server: RTRIM(), LTRIM()

    A sintaxe para estas funes de corte :

    TRIM([[LOCATION] [remstr] FROM ] str): [LOCATION] pode ser LEADING, TRAILING ouBOTH. 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.

    LTRIM(str): Remove todos os espaos em branco do incio da cadeia.

    RTRIM(str): Remove todos os espaos em branco do final da cadeia.

    Exemplo 1:

    SELECT TRIM(' Sample ');

    Resultado:

    'Sample'

    Exemplo 2:

    SELECT LTRIM(' Sample ');

    Resultado:

    'Sample '

    Exemplo 3:

    SELECT RTRIM(' Sample ');

    Resultado:

    ' Sample'

    Funo Length

    A funo LENGTH em SQL utilizada para obter o comprimento de uma cadeia. Esta funo possuinomes diferentes nas diversas bases de dados:

    MySQL: LENGTH() Oracle: LENGTH() SQL Server: LEN()

    A sintaxe da funo LENGTH a seguinte:

    Length(str): Encontrar o comprimento da cadeiastr.

    Observemos alguns exemplos. Assuma que temos a seguinte tabela:

  • 7/22/2019 89258871 Apostila de SQL Avancado

    18/50

    Tabela Geography

    region_name store_name

    East Boston

    East New York

    West Los Angeles

    West San Diego

    Exemplo 1:

    SELECT Length(store_name)

    FROM Geography

    WHERE store_name = 'Los Angeles';

    Resultado:

    11Exemplo 2:

    SELECT region_name, Length(region_name)

    FROM Geography;

    Resultado:

    region_name Length(region_name)

    East 4

    East 4

    West 4

    West 4

    Funo Replace

    A funo Replaceem 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 :

    Replace(str1, str2, str3): Em str1, encontrar onde str2 ocorre e substituir por str3.

    Assuma que temos a seguinte tabela:

    Tabela Geography

    region_name store_name

    East Boston

    East New YorkWest Los Angeles

    West San Diego

  • 7/22/2019 89258871 Apostila de SQL Avancado

    19/50

    Se aplicarmos a seguinte funo REPLACE:

    SELECT REPLACE(region_name, 'ast', 'astern')

    FROM Geography;

    Resultado:

    region_name

    Eastern

    Eastern

    West

    West

    Funo Dateadd

    A funo DATEADD utilizada para adicionar um intervalo a uma data. Esta funo encontra-sedisponvel no SQL Server.

    A utilizao da funo DATEADD

    DATEADD (datepart, number, expression)

    em que o tipo de dados de algum tipo de data, hora ou data e hora. umnmero inteiro (pode ser positivo ou negativo). 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

    TZoffset tz

    ISO_WEEK isowk, isoww

    O resultado obtido tem o mesmo tipo de dados de .

  • 7/22/2019 89258871 Apostila de SQL Avancado

    20/50

    Exemplo: A instruo SQL

    SELECT DATEADD(day, 10,'2000-01-05 00:05:00.000');

    produz o seguinte resultado:

    '2000-01-15 00:05:00.000'

    Funo Datediff

    A funo DATEDIFF utilizada para calcular a diferena entre dois dias e utilizada no sistema MySQLe SQL Server. A sintaxe desta funo de data diferente entre estas duas bases de dados, pelo que cadauma delas abordada abaixo:

    MySQL:

    A utilizao da funo DATEDIFF no sistema MySQL DATEDIFF (expression1, expression2)

    em que o tipo de dados de e DATE ou DATETIME. O resultado - .

    Exemplo: A instruo SQL

    SELECT DATEDIFF('2000-01-10','2000-01-05');

    produz o seguinte resultado:

    5

    Isso deve-se ao fato de 2000-01-10 ser 5 dias aps 2000-01-05.

    SQL Server:

    A utilizao da funo DATEDIFF no sistema SQL Server

    DATEDIFF (datepart, expression1, expression2)

    em que o tipo de dados de e > um tipo de data, hora ou data e hora. Oresultado - . datepart pode ser um dos seguintes:

    datepart Abreviatura

    year yy, yyyy

    quarter qq, q

    month mm, m

    dayofyear dy, yday dd, d

    week wk, ww

    hour hh

  • 7/22/2019 89258871 Apostila de SQL Avancado

    21/50

    minute mi, n

    second ss, s

    millisecond ms

    microsecond mcs

    nanosecond ns

    TZoffset tzISO_WEEK isowk, isoww

    Exemplo: A instruo SQL

    SELECT DATEDIFF(day, '2000-01-10','2000-01-05');

    produz o seguinte resultado:

    -5

    Isso deve-se ao fato de 2000-01-05 ser 5 dias antes de 2000-01-10.

    Funo Datepart

    DATEPART uma funo do SQL Server que extrai uma parte especfica do valor de data/hora. A suasintaxe ser a seguinte:

    DATEPART (part_of_day, expression)

    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

    microsecond mcs

    nanosecond nsTZoffset tz

    ISO_WEEK isowk, isoww

  • 7/22/2019 89258871 Apostila de SQL Avancado

    22/50

    Exemplo 1:

    SELECT DATEPART (yyyy,'2000-01-20');

    Resultado:

    2001

    Exemplo 2:

    SELECT DATEPART(dy, '2000-02-10');

    Resultado:

    41

    2000-02-01 o 41. dia do ano de 2000.

    Funo Getdate

    A funo GETDATE utilizada para obter a hora do sistema atual da base de dados no SQL Server. Asua sintaxe

    GETDATE()

    GETDATE no requer qualquer argumento.

    Exemplo: A instruo SQL

    SELECT GETDATE();

    produz o seguinte resultado:

    '2000-03-15 00:05:02.123'

    A funo GETDATE muito til quando necessitamos de registar a hora em que uma transao emparticular 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() paraalcanar o mesmo objetivo.

    O equivalente a GETDATE para os sistemas Oracle e MySQL SYSDATE.

    Funo Sysdate

    A funo SYSDATE utilizada para obter a hora do sistema atual da base de dados nos sistemas Oracle eMySQL.

    Oracle:

    A sintaxe de SYSDATE em Oracle simplesmente

    http://sql.1keydata.com/pt/sql-sysdate.phphttp://sql.1keydata.com/pt/sql-sysdate.phphttp://sql.1keydata.com/pt/sql-sysdate.phphttp://sql.1keydata.com/pt/sql-sysdate.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    23/50

    SYSDATE

    No requer qualquer argumento.

    Exemplo: A instruo SQL

    SELECT SYSDATE FROM DUAL;

    produz o seguinte resultado:

    '16-JAN-2000'

    MySQL:

    A sintaxe de SYSDATE em MySQL simplesmente

    SYSDATE()

    No requer qualquer argumento.

    Exemplo: A instruo SQL

    SELECT SYSDATE();

    produz o seguinte resultado:

    '2000-01-16 09:06:22'

    O equivalente a SYSDATE para o SQL Server GETDATE.

    Manipulao de Tabelas>

    Create Table

    As tabelas so a estrutura bsica em que os dados so armazenados na base de dados. Dado que na maiorparte dos casos no existe uma forma de o vendedor da base de dados saber antecipadamente quais so assuas 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 emlinguagem SQL, mas como as tabelas so o receptculo de todos os dados, importante incluir a sintaxeCREATE TABLEneste tutorial.

    Antes de abordarmos a sintaxe SQL para CREATE TABLE, boa ideia compreender a estrutura de umatabela. As tabelas encontram-se divididas em linhas e colunas. Cada linha representa um dado individuale cada coluna pode ser vista como uma representao dessa pea de dados. Assim, por exemplo, setivermos uma tabela para registar as informaes dos clientes, as colunas podem incluir informaescomo Primeiro Nome, Apelido, Morada, Cidade, Pas, Data de Nascimento, etc. Como tal, aoespecificarmos 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 numavariedade de formas. Podem ser um nmero inteiro (tal como 1), um nmero real (tal como 0,55), umacadeia (tal como 'sql'), uma expresso de data/hora (tal como '2000-JAN-25 03:22:22') ou at mesmo umformato binrio. Ao especificarmos uma tabela, necessrio especificarmos o tipo de dados associados acada coluna(ou seja, iremos especificar o 'Primeiro Nome' do tipo de char(50) - o que significa uma

    http://sql.1keydata.com/pt/sql-getdate.phphttp://sql.1keydata.com/pt/sql-getdate.phphttp://sql.1keydata.com/pt/sql-getdate.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-getdate.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    24/50

    cadeia com 50 caracteres). Um aspecto a destacar que diferentes bases de dados relacionais permitemdiferentes tipos de dados, pelo que aconselhvel consultar primeiro um documento de referncia relativo base de dados especfica.

    A sintaxe SQL para CREATE TABLE

    CREATE TABLE "nome_tabela"

    ("coluna 1" "tipo_dados_para_coluna_1",

    "coluna 2" "tipo_dados_para_coluna_2",

    ... )

    Assim, se pretendermos criar uma tabela de clientes conforme acima especificado, introduziramos

    CREATE TABLE customer

    (First_Name char(50),

    Last_Name char(50),

    Address char(50),

    City char(50),

    Country char(25),Birth_Date date)

    Por vezes, pretendemos fornecer um valor padro para cada coluna. utilizado um valor padro quandono 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 TABLE customer

    (First_Name char(50),

    Last_Name char(50),

    Address char(50) default 'Unknown',City char(50) default 'Mumbai',

    Country char(25),

    Birth_Date date)

    Tambm pode limitar o tipo de informaes que uma tabela/coluna pode suportar. Esse passo efetuadoatravs da palavra-chaveCONSTRAINT,abordada a seguir.

    Constraint

    Pode colocar restries para limitar o tipo de dados a introduzir numa tabela. Essas restries podem serespecificadas quando a tabela for primeiro criada atravs da instruoCREATE TABLEou aps atabela 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. UNIQUE 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.

    http://sql.1keydata.com/pt/sql-constraint.phphttp://sql.1keydata.com/pt/sql-constraint.phphttp://sql.1keydata.com/pt/sql-constraint.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-not-null.phphttp://sql.1keydata.com/pt/sql-not-null.phphttp://sql.1keydata.com/pt/sql-default.phphttp://sql.1keydata.com/pt/sql-default.phphttp://sql.1keydata.com/pt/sql-unique.phphttp://sql.1keydata.com/pt/sql-unique.phphttp://sql.1keydata.com/pt/sql-check.phphttp://sql.1keydata.com/pt/sql-check.phphttp://sql.1keydata.com/pt/sql-chave-primaria.phphttp://sql.1keydata.com/pt/sql-chave-primaria.phphttp://sql.1keydata.com/pt/sql-chave-externa.phphttp://sql.1keydata.com/pt/sql-chave-externa.phphttp://sql.1keydata.com/pt/sql-chave-externa.phphttp://sql.1keydata.com/pt/sql-chave-primaria.phphttp://sql.1keydata.com/pt/sql-check.phphttp://sql.1keydata.com/pt/sql-unique.phphttp://sql.1keydata.com/pt/sql-default.phphttp://sql.1keydata.com/pt/sql-not-null.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-constraint.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    25/50

    NOT NULL Constraint

    Por defeito, uma coluna pode suportar NULL. Se no quiser permitir o valor NULL numa coluna, devercolocar uma restrio nessa coluna a especificar que NULL agora no um valor permitido.

    Por exemplo, na seguinte instruo,

    CREATE TABLE Customer

    (SID integer NOT NULL,Last_Name varchar (30) NOT NULL,

    First_Name varchar(30));

    As colunas "SID" e "Last_Name" no podem incluir NULL, enquanto "First_Name" pode incluir NULL.

    Uma tentativa de execuo a seguinte instruo SQL,

    INSERT INTO Customer (Last_Name, First_Name) values ('Wong','Ken');

    ir provocar um erro porque ir fazer com que a coluna "SID" seja NULL, o que viola a restrio NOTNULL nessa coluna.

    DEFAULT Constraint

    A restrio DEFAULT fornece um valor padro a uma coluna quando a instruo INSERT INTO nofornecer um valor especfico. Por exemplo, se criarmos uma tabela conforme abaixo apresentado:

    CREATE TABLE Student

    (Student_ID integer Unique,Last_Name varchar (30),

    First_Name varchar (30),

    Score DEFAULT 80);

    e executarmos a seguinte instruo SQL,

    INSERT INTO Student (Student_ID, Last_Name, First_Name) values ('10','Johnson','Rick');

    A tabela ir ter o seguinte aspecto:

    Student_ID Last_Name First_Name Score10 Johnson Rick 80

    Embora no tenhamos especificado um valor para a coluna "Score" na instruo INSERT INTO, no lhe atribudo o valor padro 80 porque j definimos 80 como o valor padro desta coluna.

    UNIQUE Constraint

    A restrio UNIQUE garante que todos os valores numa coluna so diferentes.

    Por exemplo, na seguinte instruo CREATE TABLE,

    CREATE TABLE Customer

  • 7/22/2019 89258871 Apostila de SQL Avancado

    26/50

    (SID integer Unique,

    Last_Name varchar (30),

    First_Name varchar(30));

    a coluna "SID" tem uma restrio nica e, por conseguinte, no pode incluir valores duplicados. Talrestrio no suporta as colunas "Last_Name" e "First_Name". Assim sendo, se a tabela j possuir asseguintes linhas:

    SID Last_Name First_Name

    1 Johnson Stella

    2 James Gina

    3 Aaron Ralph

    Executar a seguinte instruo SQL,

    INSERT INTO Customer values ('3','Lee','Grace');

    ir provocar um erro, pois '3' j existe na coluna SID e, como tal, tentar introduzir outra linha com essevalor viola a restrio UNIQUE.

    Note que uma coluna que seja especificada como chave primria tambm deve ser nica. Ao mesmotempo, uma coluna que seja nica pode ou no pode ser uma chave primria. Alm disso, possveldefinir vrias restries UNIQUE numa tabela.

    CHECK Constraint

    A restrio CHECK garante que todos os valores numa coluna satisfazem determinadas condies. Umavez definida, a base de dados apenas ir introduzir uma nova linha ou atualizar uma existente se o novovalor satisfizer a restrio CHECK. A restrio CHECK utilizada para garantir a qualidade dos dados.

    Por exemplo, na seguinte instruo CREATE TABLE,

    CREATE TABLE Customer

    (SID integer CHECK (SID > 0),

    Last_Name varchar (30),

    First_Name varchar(30));

    A coluna "SID" tem uma restrio -- o seu valor apenas deve incluir nmeros inteiros superiores a 0.Como tal, tentar executar a seguinte instruo

    INSERT INTO Customer values ('-3','Gonzales','Lynn');

    ir dar origem a um erro, pois os valores de SID devem ser superiores a 0.

    Note que desta vez a restrio CHECKno importa por linguagem MySQL.

    Chave Primria

    Uma chave primria utilizada da identificar de forma nica cada linha numa tabela. Pode fazer parte doprprio registo atual ou pode ser um campo artificial (um que no tenha nada que ver com o registoatual). Uma chave primria pode ser composta por um ou mais campos numa tabela. Quando so

  • 7/22/2019 89258871 Apostila de SQL Avancado

    27/50

    utilizados vrios campos como chave primria, so denominados por chave composta.

    As chaves primrias podem ser especificadas quando a tabela criada (utilizandoCREATE TABLE)oualterando a estrutura da tabela existente (utilizandoALTER TABLE).

    Abaixo so apresentados exemplos para a especificao de uma chave primria ao criar uma tabela:

    MySQL:CREATE TABLE Customer

    (SID integer,

    Last_Name varchar(30),

    First_Name varchar(30),

    PRIMARY KEY (SID));

    Oracle:CREATE TABLE Customer

    (SID integer PRIMARY KEY,

    Last_Name varchar(30),

    First_Name varchar(30));

    SQL Server:CREATE TABLE Customer

    (SID integer PRIMARY KEY,

    Last_Name varchar(30),

    First_Name varchar(30));

    Abaixo so apresentados exemplos para a especificao de uma chave primria ao alterar uma tabela:

    MySQL:

    ALTER TABLE Customer ADD PRIMARY KEY (SID);

    Oracle:ALTER TABLE Customer ADD PRIMARY KEY (SID);

    SQL Server:ALTER TABLE Customer ADD PRIMARY KEY (SID);

    Nota: Antes de utilizar o comando ALTER TABLE para adicionar uma chave primria, deve certificar-sede que o campo se encontra definido como 'NOT NULL' -- por outras palavras, NULL no pode ser umvalor aceite para esse campo.

    Chave Externa

    Uma chave externa um campo (ou campos) que aponta para a chave primria de outra tabela. O objetivoda chave externa garantir a integridade referencial dos dados Por outras palavras, apenas os valoressuportados que supostamente devem aparecer na base de dados so permitidos.

    Por exemplo, suponhamos que temos duas tabelas, uma tabela CUSTOMER que inclui todos os dadosdos clientes e uma tabela ORDERS que inclui todas as encomendas dos clientes. A restrio prende-secom o fato de todas as encomendas deverem ser associadas a um cliente que j esteja na tabelaCUSTOMER. Nesse caso, iremos colocar uma chave externa na tabela ORDERS e fazer com que serelacione com a chave primria da tabela CUSTOMER. Deste modo, podemos garantir que todas asencomendas 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

    http://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-alter-table.phphttp://sql.1keydata.com/pt/sql-create-table.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    28/50

    CUSTOMER.

    A estrutura destas duas tabelas seria a seguinte:

    Tabela CUSTOMER

    kolom_naam kenmerk

    SID Chave PrimriaLast_Name

    First_Name

    Tabela ORDERS

    kolom_naam kenmerk

    Order_ID Chave Primria

    Order_Date

    Customer_SID Chave Externa

    Amount

    No exemplo acima apresentado, a coluna SID_cliente na tabela ENCOMENDAS uma chave externa aapontar para a coluna SID na tabela CUSTOMER.

    Abaixo so apresentados exemplos de como especificar uma chave externa ao criar a tabela ORDERS:

    MySQL:CREATE TABLE ORDERS

    (Order_ID integer,

    Order_Date date,

    Customer_SID integer,

    Amount double,

    Primary Key (Order_ID),

    Foreign Key (Customer_SID) references CUSTOMER(SID));

    Oracle:CREATE TABLE ORDERS

    (Order_ID integer primary key,

    Order_Date date,Customer_SID integer references CUSTOMER(SID),

    Amount double);

    SQL Server:CREATE TABLE ORDERS

    (Order_ID integer primary key,

    Order_Date datetime,

    Customer_SID integer references CUSTOMER(SID),

    Amount double);

    Abaixo so apresentados exemplos para a especificao de uma chave EXTERNA ao alterar uma tabela.Isso assume que a tabela ORDERS foi criada e que a chave externa ainda no foi introduzida:

    MySQL:ALTER TABLE ORDERS

  • 7/22/2019 89258871 Apostila de SQL Avancado

    29/50

    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

    Oracle:ALTER TABLE ORDERS

    ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES

    CUSTOMER(SID);

    SQL Server:ALTER TABLE ORDERS

    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

    Create View

    As vistas podem ser consideradas como tabelas virtuais. Regra geral, uma tabela tem um conjunto dedefinies e armazena fisicamente os dados. Uma vista tambm tem um conjunto de definies, que socriadas sobre tabela(s) ou outra(s) vista(s), e no armazena fisicamente os dados.

    A sintaxe para criar uma vista a seguinte:

    CREATE VIEW "nome_vista" AS "Instruo SQL"

    "Instruo 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

    (First_Name char(50),

    Last_Name char(50),

    Address char(50),City char(50),

    Country char(25),

    Birth_Date date)

    e que queremos criar uma vista denominada V_Customerque contenha apenas as colunasPrimeiro_nome, Apelido e Pas desta tabela, escreveramos

    CREATE VIEW V_Customer

    AS SELECT First_Name, Last_Name, Country

    FROM Customer

    Agora possumos uma vista denominada V_Customercom a seguinte estrutura:

    View V_Customer

    (First_Name char(50),

    Last_Name char(50),

    Country char(25))

    Tambm podemos utilizar uma vista para aplicar unies a duas tabelas. Nesse caso, os utilizadores apenasvisualizam uma em vez de duas tabelas e a instruo SQL que os utilizadores devem emitir torna-se muitomais simples. Suponhamos que temos as duas tabelas seguintes:

    Tabela Store_Information

    store_name Sales Date

  • 7/22/2019 89258871 Apostila de SQL Avancado

    30/50

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Tabela Geography

    region_name store_name

    East Boston

    East New York

    West Los Angeles

    West San Diego

    e queremos criar uma vista com informaes de vendas por regio. Iramos emitir a seguinte instruoSQL:

    CREATE VIEW V_REGION_SALES

    AS SELECT A1.region_name REGION, SUM(A2.Sales) SALES

    FROM Geography A1, Store_Information A2

    WHERE A1.store_name = A2.store_name

    GROUP BY A1.region_name

    Assim obtemos uma vista, V_REGION_SALES, que foi definida para armazenar registos de vendas porregio. Se quisermos descobrir o contedo desta vista, escrevemos

    SELECT * FROM V_REGION_SALES

    Resultado:

    REGIONSALESEast 700 West 2050

    Create Index

    Os ndices ajudam-nos a obter mais rapidamente dados das tabelas. Usemos um exemplo para ilustrar esteponto: 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 maisfcil 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 poupartempo 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 umndice, o sistema da base de dados l toda a tabela (este processo denominado 'pesquisa da tabela') paralocalizar 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 maiscolunas. A sintaxe geral para criar um ndice :

  • 7/22/2019 89258871 Apostila de SQL Avancado

    31/50

    CREATE INDEX "nome_indice" ON "nome_tabela" (nome_coluna)

    Suponhamos que temos a seguinte tabela:

    TABLE Customer

    (First_Name char(50),

    Last_Name char(50),

    Address char(50),

    City char(50),

    Country char(25),

    Birth_Date date)

    e queremos criar um ndice da coluna Apelido, escreveramos

    CREATE INDEX IDX_CUSTOMER_LAST_NAME

    on CUSTOMER (Last_Name)

    Se quisermos criar um ndice de Cidade e Pas, escreveramos

    CREATE INDEX IDX_CUSTOMER_LOCATION

    on CUSTOMER (City, Country)

    No existe uma regra rgida sobre qual o nome a atribuir a um ndice. O mtodo geralmente aceite colocar um prefixo, tal como "IDX_", antes de um nome de ndice de modo a evitar confuses com outrosobjetos 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 INDEXpode ser diferente para diferentes bases de dados. Deveconsultar o manual de referncia da sua base de dados para obter a sintaxe precisa.

    Alter Table

    Assim que uma tabela for criada na base de dados, muitas vezes o utilizador poder querer alterar aestrutura 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 queALTER 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 TABLE:

    ALTER TABLE "nome_tabela"

    [alter specification]

    [alter specification] depende do tipo de alterao que pretendemos efetuar. Para os fins acima citados, asinstrues [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

  • 7/22/2019 89258871 Apostila de SQL Avancado

    32/50

    de dados para novo nome da coluna" Alterar o tipo de dados de uma coluna: MODIFY "coluna 1" "novo tipo de dados"

    Analisemos cada um dos exemplos acima apresentados utilizando a tabela "customer" na secoCREATE TABLE:

    Tabela customer

    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 Gender char(1)

    Estrutura da tabela obtida:

    Tabela customer

    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 change Address Addr char(50)

    Estrutura da tabela obtida:

    Tabela customer

    Column Name Data Type

    First_Name char(50)

    Last_Name char(50)

    Addr char(50)City char(50)

    Country char(25)

    Birth_Date date

    http://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    33/50

    Gender char(1)

    Em seguida, queremos alterar o tipo de dados de "Addr" para char(30). Para tal, introduzimos:

    ALTER table customer modify Addr char(30)

    Estrutura da tabela obtida:

    Tabela customer

    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 drop Gender

    Estrutura da tabela obtida:

    Tabela customer

    Column Name Data Type

    First_Name char(50)

    Last_Name char(50)

    Addr char(30)

    City char(50)

    Country char(25)

    Birth_Date date

    Drop Table

    Por vezes podemos pretender remover uma tabela da base de dados por qualquer motivo. De fato, seriaproblemtico se tal no fosse possvel, pois poderia ser um pesadelo para o DBA (administrador da basede dados). Felizmente, a linguagem SQL permite-nos faz-lo atravs do comando DROP TABLE. Asintaxe para DROP TABLE

    DROP TABLE "nome_tabela"

    Assim, se quisermos eliminar a tabela denominada "customer" que criamos na secoCREATETABLE,basta escrever

    DROP TABLE customer.

    http://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    34/50

    Truncate Table

    Por vezes queremos remover todos os dados de uma tabela. Uma forma de o fazer atravs do comandoDROP TABLE, abordado naseco anterior.Mas e se apenas quisermos remover todos os dados , masno a prpria tabela? Para tal, podemos utilizar o comando TRUNCATE TABLE. A sintaxe paraTRUNCATE TABLE

    TRUNCATE TABLE "nome_tabela"

    Assim, se quisermos truncar a tabela denominada "customer" que criamos emSQL CREATE TABLE,basta escrever

    TRUNCATE TABLE customer

    Insert Into

    Nas seces anteriores, vimos como obter informaes das tabelas. Mas de que forma estas linhas dedados so introduzidas inicialmente nas tabelas? isso que esta seco, que aborda a instruo INSERTe a seco seguinte, que aborda a instruo UPDATE, explicam.

    Na linguagem SQL, existem essencialmente duas formas de INSERT(Inserir) dados numa tabela: Uma inserir uma linha de cada vez, a outra inserir vrias linhas em simultneo. Vamos abordar como

    podemos INSERT(Inserir) dados numa linha de cada vez:

    A sintaxe para inserir dados numa linha da tabela de cada vez a seguinte:

    INSERT INTO "nome_tabela" ("coluna 1", "coluna 2", ...)

    VALUES ("valor 1", "valor 2", ...)

    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 LosAngeles no dia 10 de Janeiro de 1999. Nesse dia, esta loja efetuou vendas no valor de 900 . Deste modo,iremos utilizar o seguinte script SQL:

    INSERT INTO Store_Information (store_name, Sales, Date)

    VALUES ('Los Angeles', 900, '10-Jan-1999')

    O segundo tipo de instruo INSERT INTOpermite-nos inserir vrias linhas numa tabela. Ao contrriodo exemplo anterior, em que inserimos uma nica linha especificando os seus valores para todas ascolunas, agora utilizamos uma instruo SELECTpara especificar os dados que queremos inserir natabela. Se estiver a pensar que isso significa utilizar informaes de outra tabela, est certo. A sintaxe ser

    a seguinte:

    INSERT INTO "tabela 1" ("coluna 1", "coluna 2", ...)

    SELECT "coluna 3", "coluna 4", ...

    http://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-drop-table.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    35/50

    FROM "tabela 2"

    Note que esta a forma simples. A instruo completa pode facilmente conter as clusulas WHERE,GROUP BY, e HAVING, assim como alias e unies de tabelas.

    Assim, por exemplo, se pretendermos uma tabela, Store_I nformation, que recolha as informaes devendas para o ano de 1998 e j souber que os dados de origem se encontram na tabela Sales_Information,iremos escrever:

    INSERT INTO Store_Information (store_name, Sales, Date)

    SELECT store_name, Sales, Date

    FROM Sales_Information

    WHERE Year(Date) = 1998

    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, irutilizar to_char(date,'yyyy')=1998.

    Update

    Assim que existirem dados na tabela, podemos chegar concluso que necessrio modificar os dados.Par tal, podemos utilizar o comando UPDATE. A sintaxe para tal

    UPDATE "nome_tabela"

    SET "coluna 1" = [novo valor]

    WHERE {condio}

    Por exemplo, se possuirmos atualmente uma tabela conforme abaixo apresentado:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    e descobrirmos que as vendas em Los Angeles no dia 01/08/1999 foram realmente de 500 e no de 300 e, como tal, essa entrada em particular deve ser atualizada. Para tal, utilizamos a seguinte instruo

    SQL:

    UPDATE Store_Information

    SET Sales = 500

    WHERE store_name = "Los Angeles"

    AND Date = "08-Jan-1999"

    A tabela obtida seria semelhante a

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

  • 7/22/2019 89258871 Apostila de SQL Avancado

    36/50

    San Diego 250 07-Jan-1999

    Los Angeles 500 08-Jan-1999

    Boston 700 08-Jan-1999

    Neste caso, existe apenas uma linha que satisfaz a condio da clusula WHERE. Se existirem vriasfilas que satisfaam a condio, necessrio modific-las todas.

    Tambm possvel UPDATE(Atualizar) vrias colunas em simultneo. Nesse caso, a sintaxe seriasemelhante seguinte:

    UPDATE "nome_tabela"

    SET kolom 1 = [valor 1], kolom 2 = [valor 2]

    WHERE {condio}

    Delete From

    Por vezes, podemos pretender remover registos de uma tabela. Par tal, podemos utilizar o comandoDELETE FROM. A sintaxe para tal

    DELETE FROM "nome_tabela"

    WHERE {condio}

    mais fcil utilizar um exemplo. Se possuirmos atualmente uma tabela conforme abaixo apresentado:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    e decidirmos no manter quaisquer informaes sobre Los Angeles nesta tabela. Para tal, escrevemos aseguinte instruo SQL:

    DELETE FROM Store_Information

    WHERE store_name = "Los Angeles"

    Agora o contedo da tabela seria semelhante a

    Tabela Store_Information

    store_name Sales Date

    San Diego 250 07-Jan-1999

    Boston 700 08-Jan-1999

    SQL Avanados

    Nesta seco, abordamos as palavras-chave e conceitos SQL:

  • 7/22/2019 89258871 Apostila de SQL Avancado

    37/50

    SQL UNION SQL UNION ALL SQL INTERSECT SQL MINUS SQL Subquery SQL EXISTS SQL CASE SQL NULL SQL ISNULL SQL IFNULL SQL NVL SQL COALESCE SQL NULLIF

    Union

    O objetivo do comando SQL UNION combinar os resultados de duas consultas. A este respeito,UNION algo semelhante aJOIN,pois ambos so utilizados para relacionar informaes de vriastabelas. Uma restrio de UNION que todas as colunas correspondentes devem possuir o mesmo tipo dedados. Alm disso, ao utilizar UNION, apenas so selecionados valores diferentes (semelhante aSELECTDISTINCT).

    A sintaxe ser a seguinte:

    [Instruo SQL 1]

    UNION

    [Instruo SQL 2]

    Assuma que temos as seguintes duas tabelas:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Tabela I nternet_Sales

    Date Sales

    07-Jan-1999 250

    10-Jan-1999 535

    11-Jan-1999 320

    12-Jan-1999 750

    e quisermos descobrir todas as datas em que ocorreram transaes de vendas. Para tal, utilizamos aseguinte instruo SQL:

    http://sql.1keydata.com/pt/sql-union.phphttp://sql.1keydata.com/pt/sql-union.phphttp://sql.1keydata.com/pt/sql-union-all.phphttp://sql.1keydata.com/pt/sql-union-all.phphttp://sql.1keydata.com/pt/sql-intersect.phphttp://sql.1keydata.com/pt/sql-intersect.phphttp://sql.1keydata.com/pt/sql-minus.phphttp://sql.1keydata.com/pt/sql-minus.phphttp://sql.1keydata.com/pt/sql-subquery.phphttp://sql.1keydata.com/pt/sql-subquery.phphttp://sql.1keydata.com/pt/sql-exists.phphttp://sql.1keydata.com/pt/sql-exists.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-null.phphttp://sql.1keydata.com/pt/sql-null.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-nvl.phphttp://sql.1keydata.com/pt/sql-nvl.phphttp://sql.1keydata.com/pt/sql-coalesce.phphttp://sql.1keydata.com/pt/sql-coalesce.phphttp://sql.1keydata.com/pt/sql-nullif.phphttp://sql.1keydata.com/pt/sql-nullif.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-join.phphttp://sql.1keydata.com/pt/sql-nullif.phphttp://sql.1keydata.com/pt/sql-coalesce.phphttp://sql.1keydata.com/pt/sql-nvl.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-null.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-exists.phphttp://sql.1keydata.com/pt/sql-subquery.phphttp://sql.1keydata.com/pt/sql-minus.phphttp://sql.1keydata.com/pt/sql-intersect.phphttp://sql.1keydata.com/pt/sql-union-all.phphttp://sql.1keydata.com/pt/sql-union.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    38/50

    SELECT Date FROM Store_Information

    UNION

    SELECT Date FROM Internet_Sales

    Resultado:

    Date

    05-Jan-199907-Jan-199908-Jan-199910-Jan-199911-Jan-199912-Jan-1999

    Note que se escrevermos "SELECT DISTINCT Date" para uma ou ambas as instrues SQL, iremosobter o mesmo conjunto de resultados.

    Union All

    O objetivo do comando SQL UNION ALLtambm combinar os resultados de duas consultas. Adiferena entre UNION ALLe UNION que enquanto UNIONapenas seleciona valores diferentes,UNION ALLseleciona todos os valores.

    De syntaxis voor UNION ALLis als volgt:

    [Instruo SQL 1]

    UNION ALL

    [Instruo SQL 2]Vamos utilizar um exemplo igual ao da seco anterior para ilustrar a diferena. Suponhamos que temosas duas tabelas seguintes:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999Boston 700 08-Jan-1999

    Tabela I nternet_Sales

    Date Sales

    07-Jan-1999 250

    10-Jan-1999 535

    11-Jan-1999 320

    12-Jan-1999 750

    e quisermos descobrir todas as datas em que ocorreram transaes de vendas na loja, assim como as datas

  • 7/22/2019 89258871 Apostila de SQL Avancado

    39/50

    em que ocorreram vendas atravs da Internet. Para tal, utilizamos a seguinte instruo SQL:

    SELECT Date FROM Store_Information

    UNION ALL

    SELECT Date FROM Internet_Sales

    Resultado:

    Date05-Jan-199907-Jan-199908-Jan-199908-Jan-199907-Jan-199910-Jan-199911-Jan-199912-Jan-1999

    Intersect

    Semelhante ao comando UNION, INTERSECTtambm funciona com duas instrues SQL. Adiferena que enquanto UNIONUNION essencialmente funciona como um operador OR(o valor selecionado se aparecer na primeira ou na segunda instruo), o comando INTERSECTfunciona comoum operador AND(o valor apenas selecionado se aparecer em ambas as instrues).

    A sintaxe ser a seguinte:

    [Instruo SQL 1]INTERSECT

    [Instruo SQL 2]

    Suponhamos que temos as duas tabelas seguintes:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Tabela I nternet_Sales

    Date Sales

    07-Jan-1999 250

    10-Jan-1999 535

    11-Jan-1999 320

    12-Jan-1999 750

    e queremos descobrir todas as datas em que ocorreram vendas na loja e atravs da Internet. Para tal,

  • 7/22/2019 89258871 Apostila de SQL Avancado

    40/50

    utilizamos a seguinte instruo SQL:

    SELECT Date FROM Store_Information

    INTERSECT

    SELECT Date FROM Internet_Sales

    Resultado:

    Date07-Jan-1999

    Note que o comando INTERSECTapenas ir apresentar valores diferentes.

    Minus

    O comando MINUSfunciona com duas instrues SQL. Recolhe todos os resultados da primeirainstruo SQL e, em seguida, subtrai as que esto presentes na segunda instruo SQL de modo a obter o

    resultado final. Se a segunda instruo SQL incluir resultados que no esto presentes na primeirainstruo SQL, esses resultados so ignorados.

    A sintaxe ser a seguinte:

    [Instruo SQL 1]

    MINUS

    [Instruo SQL 2]

    Vamos prosseguir com o mesmo exemplo:

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Tabela I nternet_Sales

    Date Sales

    07-Jan-1999 250

    10-Jan-1999 535

    11-Jan-1999 320

    12-Jan-1999 750

    e queremos descobrir todas as datas em que ocorreram vendas na loja, mas no atravs da Internet. Paratal, utilizamos a seguinte instruo SQL:

    SELECT Date FROM Store_Information

    MINUS

    SELECT Date FROM Internet_Sales

  • 7/22/2019 89258871 Apostila de SQL Avancado

    41/50

    Resultado:

    Date05-Jan-199908-Jan-1999

    "05-Jan-1999", "07-Jan-1999",e "08-Jan-1999" so valores diferentes obtidos atravs de "SELECT Date

    FROM Store_Information." "07-Jan-1999" tambm obtido atravs da segunda instruo SQL,"SELECT Date FROM Internet_Sales," pelo que excludo do conjunto de resultados finais.

    Note que o comando MINUSapenas ir apresentar valores diferentes.

    Algumas bases de dados podem utilizar EXCEPTem vez de MINUS. Consulte a documentaoespecifica sobre a sua base de dados para obter informaes sobre uma utilizao correta.

    Subquery

    possvel integrar uma instruo SQL noutra. Quando tal efetuado nas instrues WHEREouHAVING, possuem uma construo de consulta secundria.

    A sintaxe ser a seguinte:

    SELECT "nome_coluna1"

    FROM "nome_tabela1"

    WHERE "nome_coluna2" [Comparison Operator]

    (SELECT "nome_coluna3"

    FROM "nome_tabela2"

    WHERE [condio])

    [Comparison Operator] pode ser um operador de igualdade como =, >, =,

  • 7/22/2019 89258871 Apostila de SQL Avancado

    42/50

    e pretendemos utilizar uma consulta secundria para descobrir as vendas de todas as lojas na regio West.Para tal, utilizamos a seguinte instruo SQL:

    SELECT SUM(Sales) FROM Store_Information

    WHERE Store_name IN

    (SELECT store_name FROM Geography

    WHERE region_name = 'West')

    Resultado:

    SUM(Sales)2050

    Neste exemplo, em vez de unir diretamente as duas tabelas e, em seguida, adicionar apenas o montante devendas para as lojas na regio West, primeiro utilizamos a consulta secundria para descobrir que lojas seencontram na regio West e, em seguida, somamos o montante de vendas dessas lojas.

    No exemplo acima, a consulta interna executada em primeiro lugar e o resultado ento fornecido consulta externa. Este tipo de consulta secundria denomina-se consulta secundria simples. Se aconsulta interna estiver dependente da consulta externa, iremos obter uma consulta secundriacorrelacionada. Abaixo apresentado um exemplo de uma consulta secundria correlacionada:

    SELECT SUM(a1.Sales) FROM Store_Information a1

    WHERE a1.Store_name IN

    (SELECT store_name FROM Geography a2

    WHERE a2.store_name = a1.store_name)

    Repare na clusula WHEREna consulta interna, enquanto a condio envolve uma tabela da consulta

    externa.

    Exists

    Na seco anterior, utilizamos INpara ligar a consulta interna e a consulta externa numa instruosubsequente. INno a nica forma de faz-lo -- possvel utilizar muitos operadores como >,

  • 7/22/2019 89258871 Apostila de SQL Avancado

    43/50

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    Los Angeles 300 08-Jan-1999

    Boston 700 08-Jan-1999

    Tabela Geography

    region_name store_name

    East Boston

    East New York

    West Los Angeles

    West San Diego

    e emitimos a seguinte consulta SQL:

    SELECT SUM(Sales) FROM Store_Information

    WHERE EXISTS

    (SELECT * FROM Geography

    WHERE region_name = 'West')

    Iremos obter o seguinte resultado:

    SUM(Sales)2750

    No incio, isto pode parecer confuso porque a consulta secundria inclui a condio [region_name ='West'], embora a consulta tenha somado as lojas de todas as regies. Aps uma inspeco mais atenta,descobrimos que como a consulta secundria apresenta mais de 0 linhas, a condio EXISTSverdadeira e a condio existente na consulta interna no influencia a forma como a consulta externa executada.

    Case

    CASE utilizado para fornecer o tipo de lgica "if-then-else" linguagem SQL. A sua sintaxe :

    SELECT CASE ("nome_coluna")

    WHEN "condio1" THEN "resultado1"

    WHEN "condio2" THEN "resultado2"

    ...

    [ELSE "resultadoN"]

    END

    FROM "nome_tabela"

    "condio" pode ser um valor esttico ou uma expresso. A clusula ELSE opcional.

    No nosso exemplo, a Tabela Store_I nformation,

  • 7/22/2019 89258871 Apostila de SQL Avancado

    44/50

    Tabela Store_Information

    store_name Sales Date

    Los Angeles 1500 05-Jan-1999

    San Diego 250 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    se quisermos multiplicar o montante de vendas de 'Los Angeles' por 2 e o montante de vendas de 'SanDiego' por 1,5, escrevemos,

    SELECT store_name, CASE store_name

    WHEN 'Los Angeles' THEN Sales * 2

    WHEN 'San Diego' THEN Sales * 1.5

    ELSE Sales

    END

    "New Sales",

    Date

    FROM Store_Information

    "New Sales" o nome dado coluna com a instruo CASE.

    Resultado:

    store_name New Sales Date

    Los Angeles 3000 05-Jan-1999

    San Diego 375 07-Jan-1999

    San Francisco 300 08-Jan-1999

    Boston 700 08-Jan-1999

    NULL

    Na linguagem SQL, NULLsignifica que os dados no existem. NULL no igual a 0 ou uma cadeiavazia. Tanto 0 como uma cadeia vazia representam um valor, enquanto NULLno tem qualquer valor.

    Todas as operaes matemticas efetuadas com NULLiro ter como resultado NULL. Por exemplo,

    10 + NULL = NULL

    As funes agregadas, tais como SUM, COUNT, AVG, MAX e MIN excluem os valores NULL. No provvel que provoque quaisquer problemas com os comandos SUM, MAX e MIN. Contudo, podeprovocar confuses com AVG e COUNT.

    Observemos o seguinte exemplo:

    Tabela Sales_Data

  • 7/22/2019 89258871 Apostila de SQL Avancado

    45/50

    store_name Sales

    Store A 300

    Store B 200

    Store C 100

    Store D NULL

    Abaixo so apresentados os resultados de cada funo agregada:

    SUM (Sales) = 600

    AVG (Sales) = 200

    MAX (Sales) = 300

    MIN (Sales) = 100

    COUNT (Sales) = 3Note que a funo AVG conta apenas 3 linhas (a linha NULL excluda), pelo que a mdia 600 / 3 =200 e no 600 / 4 = 150. A funo COUNT tambm ignora a linha NULL, pelo que COUNT (Sales) = 3.

    Funo ISNULL

    A funo ISNULL encontra-se disponvel nos sistemas Servidor SQL e MySQL. Contudo, as suasutilizaes so diferentes:

    SQL Server

    No SQL Server, a funo ISNULL() utilizada para substituir o valor NULL por outro valor.

    Por exemplo, se tivermos a seguinte tabela,

    Tabela Sales_Data

    store_name Sales

    Store A 300Store B NULL

    A seguinte instruo SQL,

    SELECT SUM(ISNULL(Sales,100)) FROM Sales_Data;

    apresenta o valor 400. Isso deve-se ao fato de NULL ter sido substitudo por 100 atravs da funoISNULL.

    MySQL

    No sistema MySQL, a funo ISNULL() utilizada para testar se uma expresso NULL. Se a expressofor NULL, esta funo apresenta o valor 1. Caso contrrio, esta funo apresenta o valor 0.

  • 7/22/2019 89258871 Apostila de SQL Avancado

    46/50

    Por exemplo,

    ISNULL(3*3) apresenta o valor 0

    ISNULL(3/0) apresenta o valor 1

    Funo IFNULL

    A funo IFNULL() encontra-se disponvel no sistema MySQL, mas no nos sistemas SQL Server ouOracle. Esta funo requer dois argumentos. Se o primeiro argumento no for NULL, a funo apresentao primeiro argumento. Caso contrrio, apresentado o segundo argumento. Normalmente esta funo utilizada para substituir o valor NULL por outro valor. semelhante funo NVLno sistema Oracle e funo ISNULLno SQL Server.

    Por exemplo, se tivermos a seguinte tabela,

    Tabela Sales_Data

    store_name Sales

    Store A 300

    Store B NULL

    A seguinte instruo SQL,

    SELECT SUM(IFNULL(Sales,100)) FROM Sales_Data;

    apresenta o valor 400. Isso deve-se ao fato de NULL ter sido substitudo por 100 atravs da funoISNULL.

    Funo NVL

    A funo NVL() encontra-se disponvel no sistema Oracle, mas no nos sistemas MySQL ou SQL Server.Esta funo utilizada para substituir o valor NULL por outro valor. semelhante funo IFNULLnosistema MySQL e funo ISNULLno SQL Server.

    Por exemplo, se tivermos a seguinte tabela,

    Tabela Sales_Data

    store_name Sales

    Store A 300

    Store B NULL

    Store C 150

    A seguinte instruo SQL,

    SELECT SUM(NVL(Sales,100)) FROM Sales_Data;

    apresenta 550. Isso deve-se ao fato de NULL ter sido substitudo por 100 atravs da funo ISNULL, pelo

    http://sql.1keydata.com/pt/sql-nvl.phphttp://sql.1keydata.com/pt/sql-nvl.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-ifnull.phphttp://sql.1keydata.com/pt/sql-isnull.phphttp://sql.1keydata.com/pt/sql-nvl.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    47/50

    que a soma das 3 linhas 300 + 100 + 150 = 550.

    Funo Coalesce

    A funo COALESCEna linguagem SQL apresenta a primeira expresso no-NULL entre os seusargumentos.

    Passa-se o mesmo com a seguinte instruoCASE:

    SELECT CASE ("nome_coluna")

    WHEN "expresso 1 is not NULL" THEN "expresso 1"

    WHEN "expresso 2 is not NULL" THEN "expresso 2"

    ...

    [ELSE "NULL"]

    END

    FROM "nome_tabela"

    Por exemplo, se tivermos a seguinte tabela,

    Tabela Contact_Info

    Name Business_Phone Cell_Phone Home_Phone

    Jeff 531-2531 622-7813 565-9901

    Laura NULL 772-5588 312-4088

    Peter NULL NULL 594-7477

    e quisermos descobrir a melhor forma de contactar cada pessoa de acordo com as seguintes regras:

    1. Se uma pessoa possuir um telefone da empresa, utilizar o nmero de telefone da empresa.

    2. Se uma pessoa no possuir um telefone da empresa e possuir um telemvel, utilizar o nmero dotelemvel.

    3. Se uma pessoa no possuir um telefone da empresa, nem telemvel, mas possuir telefone em casa,utilizar o nmero de telefone de casa.

    possvel utilizar a funo COALESCEpara atingir o objetivo:

    SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone) Contact_Phone

    FROM Contact_Info;

    Resultado:

    Name Contact_Phone

    Jeff 531-2531

    Laura 772-5588

    Peter 594-7477

    http://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    48/50

    Funo NULLIF

    A funo NULLIFrequer dois argumentos. Se os dois argumentos forem iguais, ser obtido NULL. Casocontrrio, apresentado o primeiro argumento.

    Passa-se o mesmo com a seguinte instruoCASE:

    SELECT CASE ("nome_coluna")

    WHEN "expresso 1 = expresso 2 " THEN "NULL"[ELSE "expresso 1"]

    END

    FROM "nome_tabela"

    Por exemplo, suponhamos que temos uma tabela que regista as vendas actuais e o objectivo de vendasconforme abaixo:

    Tabela Sales_Data

    Store_name Actual GoalStore A 50 50

    Store B 40 50

    Store C 25 30

    Pretendemos mostrar NULL se as vendas actuais forem iguais ao objectivo de vendas e mostrar as vendasactuais se os dois valores forem diferentes. Para tal, utilizamos a seguinte instruo SQL:

    SELECT Store_name, NULLIF(Actual,Goal) FROM Sales_Data;

    O resultado :

    Store_name NULLIF(Actual,Goal)

    Store A NULL

    Store B 40

    Store C 25

    SQL Sintaxe

    Nesta pgina, listamos a sintaxe SQL para cada um dos comandos SQL presentes neste tutorial. Paraobter explicaes detalhadas sobre cada sintaxe SQL, consulte a seco individual clicando na palavra-chave.

    O objectivo desta pgina obter uma referncia rpida acerca da sintaxe SQL. Sugerimos que adicioneesta pgina aos favoritos premindo Control-Dpara que possa aceder rapidamente a esta pgina desintaxe.

    SelectSELECT "nome_coluna" FROM "nome_tabela"

    DistinctSELECT DISTINCT "nome_coluna"FROM "nome_tabela"

    http://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-case.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-distinct.phphttp://sql.1keydata.com/pt/sql-select.phphttp://sql.1keydata.com/pt/sql-case.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    49/50

    WhereSELECT "nome_coluna"FROM "nome_tabela"WHERE "condio"

    And/OrSELECT "nome_coluna"FROM "nome_tabela"WHERE "condio simples"{[AND|OR] "condio simples"}+

    InSELECT "nome_coluna"FROM "nome_tabela"WHERE "nome_coluna" IN ('valor1', 'valor2', ...)

    BetweenSELECT "nome_coluna"

    FROM "nome_tabela"WHERE "nome_coluna" BETWEEN 'valor1' AND 'valor2'

    LikeSELECT "nome_coluna"FROM "nome_tabela"WHERE "nome_coluna" LIKE {PATROON}

    Order BySELECT "nome_coluna"FROM "nome_tabela"

    [WHERE "condio"]ORDER BY "nome_coluna" [ASC, DESC]

    CountSELECT COUNT("nome_coluna")FROM "nome_tabela"

    Group BySELECT "nome_coluna 1", SUM("nome_coluna 2")FROM "nome_tabela"GROUP BY "nome_coluna 1"

    HavingSELECT "nome_coluna 1", SUM("nome_coluna 2")FROM "nome_tabela"GROUP BY "nome_coluna 1"HAVING (condio da funo aritmtica)

    Create TableCREATE TABLE "nome_tabela"("coluna 1" "tipo_dados_para_coluna_1","coluna 2" "tipo_dados_para_coluna_2",... )

    Drop TableDROP TABLE "nome_tabela"

    http://sql.1keydata.com/pt/sql-where.phphttp://sql.1keydata.com/pt/sql-where.phphttp://sql.1keydata.com/pt/sql-and-or.phphttp://sql.1keydata.com/pt/sql-and-or.phphttp://sql.1keydata.com/pt/sql-in.phphttp://sql.1keydata.com/pt/sql-in.phphttp://sql.1keydata.com/pt/sql-between.phphttp://sql.1keydata.com/pt/sql-between.phphttp://sql.1keydata.com/pt/sql-like.phphttp://sql.1keydata.com/pt/sql-like.phphttp://sql.1keydata.com/pt/sql-order-by.phphttp://sql.1keydata.com/pt/sql-order-by.phphttp://sql.1keydata.com/pt/sql-count.phphttp://sql.1keydata.com/pt/sql-count.phphttp://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-having.phphttp://sql.1keydata.com/pt/sql-having.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-drop-table.phphttp://sql.1keydata.com/pt/sql-create-table.phphttp://sql.1keydata.com/pt/sql-having.phphttp://sql.1keydata.com/pt/sql-group-by.phphttp://sql.1keydata.com/pt/sql-count.phphttp://sql.1keydata.com/pt/sql-order-by.phphttp://sql.1keydata.com/pt/sql-like.phphttp://sql.1keydata.com/pt/sql-between.phphttp://sql.1keydata.com/pt/sql-in.phphttp://sql.1keydata.com/pt/sql-and-or.phphttp://sql.1keydata.com/pt/sql-where.php
  • 7/22/2019 89258871 Apostila de SQL Avancado

    50/50

    Truncate TableTRUNCATE TABLE "nome_tabela"

    Insert IntoINSERT INTO "nome_tabela" ("coluna 1", "coluna 2", ...)VALUES ("valor 1", "valor 2", ...)

    UpdateUPDATE "nome_tabela"SET "coluna 1" = [novo valor]WHERE {condio}

    Delete FromDELETE FROM "nome_tabela"WHERE {condio}

    http://sql.1keydata.com/pt/sql-truncate-table.phphttp://sql.1keydata.com/pt/sql-truncate-table.phphttp://sql.1keydata.com/pt/sql-insert-into.phphttp://sql.1keydata.com/pt/sql-insert-into.phphttp://sql.1keydata.com/pt/sql-update.phphttp://sql.1keydata.com/pt/sql-update.phphttp://sql.1keydata.com/pt/sql-delete.phphttp://sql.1keydata.com/pt/sql-delete.phphttp://sql.1keydata.com/pt/sql-delete.phphttp://sql.1keydata.com/pt/sql-update.phphttp://sql.1keydata.com/pt/sql-insert-into.phphttp://sql.1keydata.com/pt/sql-truncate-table.php