COMANDOS SQL[1]

23
Aula de Banco de dados COMANDOS SQL COMANDO CREATE TABLE Create table funcionario (cod_func int not null, nome_func varchar(30) not null, idade_func int not null, telefone_func varchar(9), end_func varchar(50) constraint pk_func primary key(cod_func)) COMANDO INSERT Comando para inserir valores em todos os campos da tabela. Insert into funcionario Values(1,’Andre de Almeida’,25,’5555-5555’,’Rua Florentina 56 apto 21’); Comando para inserir valores apenas nos campos obrigatórios da tabela. Insert into funcionario(cod_func,nome_func,idade_func) Values(2,’Antonio Gomes’,28,’7895-3456’,’Rua Florentina 56 apto 35’); COMANDO SELECT Comando p/ trazer algumas colunas e todas linhas de uma tabela. SELECT coluna, coluna, coluna FROM tabela; Comando p/ trazer todas as colunas e linhas da tabela cliente. SELECT * FROM tabela;

description

Banco de dados

Transcript of COMANDOS SQL[1]

  • Aula de Banco de dados

    COMANDOS SQL

    COMANDO CREATE TABLE Create table funcionario (cod_func int not null, nome_func varchar(30) not null, idade_func int not null, telefone_func varchar(9), end_func varchar(50) constraint pk_func primary key(cod_func)) COMANDO INSERT

    Comando para inserir valores em todos os campos da tabela. Insert into funcionario Values(1,Andre de Almeida,25,5555-5555,Rua Florentina 56 apto 21);

    Comando para inserir valores apenas nos campos obrigatrios da tabela. Insert into funcionario(cod_func,nome_func,idade_func) Values(2,Antonio Gomes,28,7895-3456,Rua Florentina 56 apto 35); COMANDO SELECT Comando p/ trazer algumas colunas e todas linhas de uma tabela. SELECT coluna, coluna, coluna FROM tabela; Comando p/ trazer todas as colunas e linhas da tabela cliente. SELECT * FROM tabela;

  • Aula de Banco de dados

    CLAUSULA WHERE A clausula where corresponde ao operador relacional de restrio. Ela contm as condies que as linhas da relao devem satisfazer para

    serem mostradas. O where quando utilizado deve vir aps a clausula FROM SINTAXE: SELECT colunas FROM tabela WHERE condies que devem ser respeitadas OPERADORES UTILIZADOS NA CLAUSULA WHERE

    OPERADOR OBJETIVO EXEMPLO = teste de igualdade Select * from estado where

    cod_estado = ma > maior que selct*from cliente

    where vendas >100 > = maior ou igual a

    Select * from client where vendas >=1000

    < menor que Select * from cliente where vendas

  • Aula de Banco de dados

    OPERADORES NUMRICOS

    Podemos realizar operaes numricas com colunas da tabelas. OPERADOR OPERAO EXEMPLO + Adio select vendas_acum + vendas_atuais from

    cliente; - Subtrao select vendas_acum -

    vendas_atuais from cliente; * multiplica-o select vendas_acum * comisso from cliente; / Diviso select vendas_acum / 2 from cliente;

    FUNO AVG A funo AVG calcula a mdia dos valores selecionados. SINTAXE: AVG (carga_horaria) Exemplo: SELECT AVG(carga_horaria) FROM curso;

    FUNO MIN/MAX A funo seleciona o menor ou o maior valor dos valores selecionados. SINTAXE: MIN (carga_horaria) MAX (carga_horaria) Exemplo: SELECT MIN(carga_horaria) FROM curso; SELECT MAX(carga_horaria) FROM curso;

    FUNO SUM A funo faz o somatrio dos dados extraidos da coluna especificada ignorando os valores null. SINTAXE: SUM (carga_horaria) Exemplo: SELECT SUM(carga_horaria) FROM curso;

  • Aula de Banco de dados

    FUNO COUNT

    A funo traz o numero de linhas (informaes) existentes na tabela. SINTAXE: COUNT (campo) Exemplo: SELECT COUNT(carga_horaria) FROM curso; FUNO LOWER Recupera o dado em letra minscula. SINTAXE: SELECT LOWER (coluna) FROM tabela SAIDA - LOWER (NOM_CIDADE) belo horizonte belo horizonte manaus FUNO UPPER - Recupera o dado especificado em letra maiscula. SINTAXE: SELECT UPPER (coluna) FROM TABELA SAIDA - UPPER (NOM_CIDADE) BELO HORIZONTE BELO HORIZONTE MANAUS NATAL

  • Aula de Banco de dados

    FUNO SUBSTRING A funo SUBSTRING traz uma parte do dado especificado. SINTAXE: SUBSTRING (COL/VAL, POS,N) Exemplo: SELECT SUBSTRING(SQL*PLUS,1,3),SUBSTRING(nom_cidade,1,3), SUBSTRING(nom_cidade,4,5) FROM aluno sub SUBSTRING(nom_cidade,1,3) SUBSTRING(nom_cidade,4,5) SQL BEL O HOR SQL BEL O HOR SQL MAN AUS SQL NAT L FUNO LTRIM A funo LTRIM utilizada para remover spacos a esquerda. SINTAXE: LTRIM ( CARACTER) Remove da esquerda os espaos em brancos do carater informado ou da combinao deles quando informado mais de um caracter. Exemplo: SELECT nom_cidade, LTRIM(nom_cidade),LTRIM(nom_cidade) FROM aluno Nom_cidade LTRIM(nom_cidade) LTRIM (nom_cidade) BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE MANAUS MANAUS MANAUS NATAL NATAL TAL FUNO RTRIM A funo RTRIM utilizada para remover caracteres especificados de uma coluna/valor especificado. SINTAXE: RTRIM (COL/VAL,CARACTER)

  • Aula de Banco de dados

    Remove da direita da coluna/valor a(s) ocorrencia(s) encontradas do carater informado ou da combinao deles quando informado mais de um caracter. Exemplo: SELECT nom_cidade, RTRIM(nom_cidade,S),RTRIM(nom_cidade,AUS) FROM aluno Nom_cidade RTRIM(nom_cidade,S) RTRIM (nom_cidade,AUS) BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE BELO HORIZONTE MANAUS MANAU MAN NATAL NATAL NATAL FUNO REVERSE A funo REVERSE retorna o campo ao contrario, ou seja, de tras para frente. SINTAXE: REVERSE (campo) Exemplo: SELECT RESERVE (SQL) FROM aluno; REVERSE(SQL) LQS FUNO LEN A funo LEN retorna o numero de caracteres de uma coluna/valor especificado. SINTAXE: LEN (VAL) Exemplo: SELECT LEN(ORACLE),LEN(nom_aluno)

  • Aula de Banco de dados

    FROM aluno; LEN(ORACLE) LEN(Nom_aluno) 6 4 6 5 6 4 FUNO LIKE A funo LIKE utilizada para trazer um registro que inicie por uma letra qualquer quando especificado. SINTAXE: WHERE produto LIKE P% Exemplo: SELECT * FROM aluno; WHERE nome LIKE P% OU SELECT * FROM aluno; WHERE nome LIKE %P% No exemplo acima o retorno ser todos os nome que tem a letra P.

    FUNO ROUND A funo ROUND arredonda o valor/coluna especificados com o numero de casas decimais informado. SINTAXE: ROUND (COL/VAL,N) Exemplo: SELECT ROUND(45.923,1),ROUND(45.963,1) FROM DUAL; ROUND(45.923,1) ROUND(45.963,1) 45.9 46

  • Aula de Banco de dados

    FUNO SQRT A funo SQRT faz o calculo da raiz quadrada do numero/coluna especificado. SINTAXE: SQRT (COL/VAL) Exemplo: SELECT SQRT(4) FROM curso; No exemplo acima o retorno ser 2 que a raiz quadrada de 4.

    CLAUSULA GROUP BY A clausula group by utilizada para dividir a tabela em conjuntos menores de dados relacionados entre si. Exemplo: Para contar os alunos por cidade. SELECT nom_cidade, count(*) FROM curso; group by nom_cidade; NOM_CIDADE COUNT(*) BELO HORIZONTE 2 CAMPINAS 1 CURITIBA 1

    CLAUSULA HAVING (Como se fosse o WHERE) A clausula having utilizada para selecionar os grupos retornados de uma seleo feita com group by. Exemplo: Para selecionar as cidades com mais de dois alunos. SELECT nom_cidade FROM aluno group by nom_cidade having count(*) >= 2; NOM_CIDADE BELO HORIZONTE MANAUS NATAL

  • Aula de Banco de dados

    SQL Alias

    Em SQL podemos utilizar um alias (pseudnimo) para dar um nome a uma tabela ou a uma coluna. Isto pode ser uma boa soluo se voc tiver uma tabela ou coluna com nomes muito longos ou complexos. O nome do alias pode ser qualquer coisa, mas geralmente curto.

    Sintaxe do SQL Alias para Tabelas:

    SELECT nome_coluna(s) FROM nome_tabela AS nome_alias

    Sintaxe do SQL Alias para Colunas:

    SELECT nome_coluna AS nome_alias FROM nome_tabela

    Exemplo de Alias:

    Suponhamos que temos uma tabela chamada "Pessoas" e outra tabela chamada "Ordem_Produtos". Daremos a estas tabela os aliases de "p" e "op", respectivamente. Agora queremos listar todas as ordens "Pedro Gomes" responsvel. Ns usamos a seguinte SELECT declarao:

    SELECT op.IDOrdem, p.Sobrenome, p.Nome FROM Pessoas AS p, Ordem_Produtos AS op WHERE p.Sobrenome='Gomes' and p.Nome='Pedro'

    A mesma declarao SELECT sem aliases:

    SELECT Ordem_Produtos.IDOrdem, Pessoas.Sobrenome, Pessoas.Nome FROM Pessoas, Ordem_Produtos WHERE Pessoas.Sobremone='Gomes' and Pessoas.Nome='Pedro'

    Como voc pode ver a partir das duas declaraes acima; aliases tornam mais fceis a leitura e a escrita em ambas as consultas.

  • Aula de Banco de dados

    O operador SQL LIKE O operador LIKE usado em uma clusula WHERE para procurar um determinado padro em uma coluna. Sintaxe SQL LIKE SELECT nome(s)_coluna(s) FROM nome_tabela WHERE nome_coluna LIKE padro

    Exemplo do operador LIKE

    A tabela Pessoas:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande 3 Gomes Fabio Dos Anjos, 44 Manaus Agora queremos selecionar as pessoas que vivem em uma cidade que comea com "s" a partir da tabela acima. Ns usamos a seguinte declarao SELECT: SELECT * FROM Pessoas WHERE Cidade LIKE 's%' O "%" sinal pode ser utilizado para definir caracteres coringas (letras em faltando o padro), tanto antes como depois do padro. O resultado ficar assim: ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo

    Em seguida, queremos selecionar as pessoas que vivem em uma cidade

    que termina com um "s" da tabela "Pessoas". Ns usamos a seguinte declarao SELECT:

    SELECT * FROM Pessoas

    WHERE Cidade LIKE '%s'

  • Aula de Banco de dados

    O resultado ficar assim: ID Sobrenome Nome Rua Cidade 3 Gomes Fabio Dos Anjos, 44 Manaus

    Em seguida, queremos selecionar as pessoas que vivem em uma cidade

    que contm o padro "gra" a partir da tabela "Pessoas". Ns usamos a seguinte declarao SELECT:

    SELECT * FROM Pessoas

    WHERE Cidade LIKE '%gra%'

    O resultado ficar assim:

    ID Sobrenome Nome Rua Cidade 2 Tavares Pedro Sete de Maro, 23 Campo Grande Tambm possvel selecionar as pessoas que vivem em uma cidade que no contm o padro "gra" a partir da tabela "Pessoas", usando a palavra-chave NOT. Ns usamos a seguinte declarao SELECT: SELECT * FROM Pessoas WHERE Cidade NOT LIKE '%gra%'

    O resultado ficar assim:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 3 Gomes Fabio Dos Anjos, 44 Manaus

    A clusula TOP A clusula TOP utilizada para especificar o nmero de registros de retorno de uma consulta. A clusula TOP pode ser muito til em grandes tabelas com milhares de registros. Retornando um grande nmero de registros teremos impacto no desempenho. Nota: Nem todos os sistemas de bancos de dados suportam a clusula TOP (Transact-SQL).

  • Aula de Banco de dados

    Sintaxe SQL SELECT TOP SELECT TOP nmero|porcentagem nome(s)_coluna(s) FROM nome_tabela

    Exemplo de SQL TOP :

    A tabela Pessoas:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande 3 Gomes Fabio Dos Anjos, 44 Rio de Janeiro 4 Neres Carlos Amazonas, 19 Bauru Agora queremos selecionar apenas os dois primeiros registros na tabela acima.

    Ns usamos a seguinte sentena SELECT:

    SELECT TOP 2 * FROM Pessoas

    O resultado ficar assim:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande Agora queremos selecionar apenas 50% dos registros na tabela acima. Ns usamos a seguinte declarao SELECT: SELECT TOP 50 PERCENT * FROM Pessoas

    O resultado ficar assim:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande

  • Aula de Banco de dados

    A sentena SQL UPDATE

    A sentena UPDATE utilizada para atualizar os registros existentes em uma tabela.

    Sintaxe do SQL UPDATE:

    UPDATE nome_da_tabela SET coluna1=valor1, coluna2=valor2,..., colunaN=valorN WHERE alguma_coluna=algum_valor

    Nota: Observe a clusula WHERE na sintaxe UPDATE. A clusula WHERE especifica qual registro ou registros que deveriam ser atualizadas. Se voc omitir a clusula WHERE, todos os registros sero atualizados!

    Exemplo de SQL UPDATE

    A tabela Pessoas:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande 3 Gomes Fabio Dos Anjos, 44 Rio de Janeiro 4 Neres Carlos Amazonas, 19 Bauru 5 Cardoso Ana Pedrosa, 889 Manaus

    Agora queremos atualizar a pessoa "Fabio Gomes" na tabela "Pessoas".

    Ns usamos a seguinte instruo SQL:

    UPDATE Pessoas SET Rua='Graa, 67', Cidade='Pelotas' WHERE Sobrenome='Gomes' AND Nome='Fabio'

    A tabela Pessoas ficar assim:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Capital, 32 So Paulo 2 Tavares Pedro Sete de Maro, 23 Campo Grande 3 Gomes Fabio Graa, 67 Pelotas 4 Neres Carlos Amazonas, 19 Bauru 5 Cardoso Ana Pedrosa, 889 Manaus

  • Aula de Banco de dados

    Aviso Importante para o SQL UPDATE

    Tenha cuidado ao atualizar registros. Se tivssemos a clusula WHERE omitida no exemplo acima, como este exemplo:

    UPDATE Pessoas SET Rua='Graa, 67', Cidade='Pelotas'

    A tabela Pessoas ficaria assim:

    ID Sobrenome Nome Rua Cidade 1 Silva Paulo Graa, 67 Pelotas 2 Tavares Pedro Graa, 67 Pelotas 3 Gomes Fabio Graa, 67 Pelotas 4 Neres Carlos Graa, 67 Pelotas 5 Cardoso Ana Graa, 67 Pelotas

    A funo SQL COUNT()

    A funo COUNT() retorna o nmero de linhas que corresponde a um

    determinado critrio.

    SQL COUNT(nome_coluna)

    A funo COUNT(nome_coluna) retorna o nmero de valores (valores nulos

    no sero contados) da coluna especificada:

    SELECT COUNTnome_coluna) FROM nome_tabela Sintaxe do SQL COUNT(*)

    A funo COUNT(*) retorna o nmero de registros em uma tabela:

    SELECT COUNT(*) FROM nome_tabela

    Sintaxe do SQL COUNT (DISTINCT nome_coluna)

    SELECT COUNT(DISTINCT nome_coluna) FROM nome_tabela

    Nota: COUNT (DISTINCT) trabalha com Oracle e Microsoft SQL Server, mas

    no com o Microsoft Access.

  • Aula de Banco de dados

    Exemplo do SQL COUNT (nome_coluna)

    Temos a seguinte tabela "Pedidos" : ID DataPedido PreoPedido Cliente

    1 2008/11/12 1000 Joo 2 2008/10/23 1600 Paulo 3 2008/09/02 700 Joo 4 2008/09/03 300 Joo 5 2008/08/30 2000 Pedro 6 2008/10/04 100 Paulo

    Agora queremos contar o nmero de pedidos de "Paulo". Ns usamos a seguinte instruo SQL: SELECT COUNT(Cliente) AS ClientePaulo FROM Pedidos WHERE Cliente='Paulo' O resultado do comando SQL acima ser 2, pois o cliente Paulo tem 2 pedidos feitos no total: ClientePaulo 2 A funo SQL COUNT() Exemplo do SQL COUNT (*) Se ns omitirmos a clusula WHERE, como neste exemplo: SELECT COUNT(*) AS NumerosPedidos FROM Pedidos

    O resultado ficar assim:

    NumeroPedidos 6

    com o nmero total de linhas na tabela. Exemplo do SQL COUNT (DISTINCT nome_coluna) Agora queremos contar o nmero de clientes exclusivos na tabela "Pedidos". Ns usamos a seguinte instruo SQL: SELECT COUNT(DISTINCT Cliente) AS NumeroClientes FROM Pedidos

    O resultado ficar assim:

    NumeroClientes 3

  • Aula de Banco de dados

    com o nmero de clientes exclusivos (Paulo, Joo, Pedro) na tabela "Pedidos". O Operador IN O operador IN permite especificar valores mltiplos em uma clusula WHERE. Sintaxe SQL IN SELECT nome_coluna(s) FROM nome_tabela WHERE nome_coluna IN (valor1,valor2,...) Exemplo do Operador IN A tabela Pessoas: P_Id Nome Sobrenome Endereo Cidade

    1 Jos Silva Rua das Graas, 11 Bauru 2 Carlos Peres Rua Bahia, 48 Campo Grande 3 Joo Ferreira Rua Lapa, 25 Manaus

    Agora queremos escolher as pessoas com um sobrenome igual ao "Silva" ou "Ferreira" a partir da tabela acima.

    Ns usamos a seguinte declarao SELECT: SELECT * FROM Pessoas WHERE Sobrenome IN ('Silva','Ferreira') O resultado ficar assim: P_Id Nome Sobrenome Endereo Cidade

    1 Jos Silva Rua das Graas, 11 Bauru 2 Joo Ferreira Rua Lapa, 25 Manaus

    Assim, escolhemos os sobrenomes que esto dentro da clusula IN. A Sentena SQL SELECT DISTINCT Em uma tabela, algumas das colunas podem conter valores duplicados. Este no um problema, no entanto, s vezes voc ir querer listar apenas os valores diferentes (distintos) em uma tabela. A palavra chave DISTINCT pode ser usada para retornar apenas valores distintos (diferentes). Sintaxe SQL SELECT DISTINCT SELECT DISTINCT nome_coluna(s) FROM nome_tabela Exemplo de SELECT DISTINCT A tabela "Pessoas":

  • Aula de Banco de dados

    P_Id Nome Sobrenome Endereo Cidade 1 Jos Silva Rua das Graas, 11 Bauru 2 Carlos Peres Rua Bahia, 48 Campo Grande 3 Joo Ferreira Rua Lapa, 25 Bauru

    Agora queremos selecionar apenas os valores distintos a partir da coluna chamada "Cidade" da tabela acima. Ns usamos a seguinte declarao SELECT: SELECT DISTINCT Cidade FROM Pessoas O resultado ficar assim: Cidade ( Bauru, Campo Grande) SQL Alias

    Em SQL podemos utilizar um alias (pseudnimo) para dar um nome a uma tabela ou a uma coluna. Isto pode ser uma boa soluo se voc tiver uma tabela ou coluna com nomes muito longos ou complexos. O nome do alias pode ser qualquer coisa, mas geralmente curto.

    Sintaxe do SQL Alias para Tabelas:

    SELECT nome_coluna(s) FROM nome_tabela AS nome_alias

    Sintaxe do SQL Alias para Colunas:

    SELECT nome_coluna AS nome_alias FROM nome_tabela

    Exemplo de Alias:

    Suponhamos que temos uma tabela chamada "Pessoas" e outra tabela chamada "Ordem_Produtos". Daremos a estas tabela os aliases de "p" e "op", respectivamente. Agora queremos listar todas as ordens "Pedro Gomes" responsvel. Ns usamos a seguinte SELECT declarao:

    SELECT op.IDOrdem, p.Sobrenome, p.Nome FROM Pessoas AS p, Ordem_Produtos AS op WHERE p.Sobrenome='Gomes' and p.Nome='Pedro'

  • Aula de Banco de dados

    A mesma declarao SELECT sem aliases:

    SELECT Ordem_Produtos.IDOrdem, Pessoas.Sobrenome, Pessoas.Nome FROM Pessoas, Ordem_Produtos WHERE Pessoas.Sobremone='Gomes' and Pessoas.Nome='Pedro'

    Como voc pode ver a partir das duas declaraes acima; aliases tornam mais fceis a leitura e a escrita em ambas as consultas.

    A Clusula HAVING

    A clusula HAVING foi adicionada ao SQL porque a palavra-chave WHERE no pode ser utilizada com funes agregadas.

    Sintaxe SQL do HAVING

    SELECT nome_coluna, funcao_agregada(nome_coluna) FROM nome_tabela WHERE nome_coluna operador valor GROUP BY nome_coluna HAVING funcao_agregada(nome_coluna) operador valor

    Exemplo SQL de HAVING Temos a seguinte tabela "Ordens":

    ID_Ordem Data_Ordem Preco_Ordem Cliente

    1 12/11/2008 1000 Pedro 2 23/10/2008 1600 Jos 3 2/9/2008 700 Pedro 4 3/9/2008 300 Pedro 5 30/8/2008 2000 Mauro 6 4/10/2008 100 Jos

    Agora queremos descobrir se algum dos clientes tem um total de ordens inferior a 2000.

    Ns usamos o seguinte comando SQL:

    SELECT Cliente, SUM(Preco_Ordem) FROM Ordens GROUP BY Cliente HAVING SUM(Preco_Ordem) < 2000

    O resultado ficar assim:

    Cliente SUM(Preco_Ordem) Jos 1700

  • Aula de Banco de dados

    Agora queremos descobrir se os clientes "Pedro" ou "Mauro" tem um total de ordens maior do que 1500.

    Ns adicionamos uma clusula WHERE na instruo SQL:

    SELECT Cliente, SUM(Preco_Ordem) FROM Ordens WHERE Cliente = 'Pedro' OR Cliente = 'Mauro' GROUP BY Cliente HAVING SUM(Preco_Ordem) > 1500

    O resultado ficar assim:

    Cliente SUM(Preco_Ordem) Pedro 2000 Mauro 2000

    A Funo SUM()

    A funo SUM() retorna a soma total de uma coluna numrica.

    Sintaxe SQL do SUM()

    SELECT SUM(nome_coluna) FROM nome_tabela

    Exemplo de SQL SUM()

    Temos a seguinte tabela "Ordens":

    ID_Ordem Data_Ordem Preco_Ordem Cliente

    1 12/11/2008 1000 Pedro 2 23/10/2008 1600 Jos 3 2/9/2008 700 Pedro 4 3/9/2008 300 Pedro 5 30/8/2008 2000 Mauro 6 4/10/2008 100 Jos

    Agora queremos encontrar a soma de todos os campos "Preco_Ordem".

    Ns usamos o seguinte comando SQL:

    SELECT SUM(Preco_Ordem) AS OrdemTotal FROM Ordens

    O resultado ficar assim:

    OrdemTotal 5700

  • Aula de Banco de dados

    TRABALHANDO COM DATAS - SQL SERVER

    O SQL Server suporta dois tipos de data: datetime e smalldatetime. A principal diferena entre elas : o datetime utiliza dois inteiros de quatro bytes para armazenamento. Os primeiros quatro bytes armazenam o nmero de dias antes ou depois da data base. Datas menores que 01/01/1753 no so permitidos. Os outros quatro bytes armazenam a hora do dia representado como o nmero de milissegundos aps a meia-noite. J o tipo smalldatetime utiliza dois inteiros de dois bytes. Os primeiros 2 bytes armazenam o nmero de dias aps 01/01/1900. Os outros dois bytes armazenam o nmero de minutos desde a meia-noite. Considera-se que o smalldatetime armazena data e hora com menos preciso do que o datetime. Outra diferena entre eles que o tipo de dados datetime armazena at centsimos de segundo e o smalldatetime at segundos.

    Exemplo: A execuo da SQL abaixo resultou nos dados da Tabela 1.

    INSERT INTO [TABELA] ([data_datetime] ,[data_smalldatetime]) VALUES (Getdate() ,GetDate())

    id Data_datetime Data_smalldatetime 1 2008-09-28 16:15:30.107 2008-09-28 16:16:00 2 2008-09-28 16:15:51.217 2008-09-28 16:16:00 3 2008-09-28 16:21:20.890 2008-09-28 16:21:00

    Funo CONVERT

    A funo CONVERT retorna uma data de acordo com o formato passado como parmetro (terceiro parmetro).

    SELECT CONVERT(VARCHAR,GETDATE(),0) -> retorna Sep 28 2008 4:48PM

    Veja a seguir os principais formatos retornados pela funo CONVERT:

    id Formato Exemplo 1 MM/DD/AA 09/28/08 2 AA.MM.DD 08.09.28 3 DD/MM/AA 28/09/08 4 DD.MM.AA 28.09.08 5 DD-MM-AA 28-09-08 10 MM-DD-AA 09-28-08 11 AA/MM/DD 08/09/28 12 AAMMDD 080928 14 HH:MM:SS:MS 17:02:19:873 20 AAAA-MM-DD

    HH:MM:SS 2008-09-28 17:03:34

    21 AAAA-MM-DD 2008-09-28

  • Aula de Banco de dados

    HH:MM:SS:MS 17:04:32.700 23 AAAA-MM-DD 2008-09-28 24 HH:MM:SS 17:05:28 101 MM/DD/AAAA 09/28/2008 102 AAAA.MM.DD 2008.09.28 103 DD/MM/AAAA 28/09/2008 104 DD.MM.AAAA 28.09.2008 105 DD-MM-AAAA 28-09-2008 108 HH:MM:SS 17:09:56 110 MM-DD-AAA 09-28-2008 111 AAAA/MM/DD 2008/09/28 112 AAAAMMDD 20080928 120 AAAA-MM-DD

    HH:MM:SS 2008-09-28 17:11:37

    121 AAAA-MM-DD HH:MM:SS:MS

    2008-09-28 17:12:02.467

    Referncias: http://msdn.microsoft.com/en-us/library/aa258277(SQL.80).aspx

    Utilizando a clusula Case em um Select - SQL Server

    Suponha que exista em sua aplicao, a tabela Pedidos. Esta tabela possui os seguintes campos: id, data da compra, forma de pagamento e o valor. O campo forma de pagamento (forma_pagamento) pode assumir os seguintes valores: 1 (boleto bancrio), 2 (carto de crdito VISA) ou 3 (carto de crdito MASTERCARD).

    Pedidos id data forma_pagamento valor 1 12/09/2008 1 108,00 2 17/09/2008 2 52,00 3 18/09/2008 3 328,00

    Para consultar as formas de pagamento cadastradas:

    SELECT id, nome from Forma_Pagamento

    Se quisssemos mostrar o nome da forma de pagamento escolhida, poderamos fazer da seguinte forma:

    if forma_pagamento = 1 then nome_forma_pagamento = Boleto Bancrio elseif forma_pagamento = 2 then nome_forma_pagamento = Carto de Crdito VISA else nome_forma_pagamento = Carto de Crdito MASTERCARD end if

  • Aula de Banco de dados

    Mas em vez disso, podemos utilizar o comando CASE dentro do Select. Veja:

    SELECT id, CASE id when 1 then 'Boleto Bancrio' when 2 then 'Carto de Crdito VISA' when 3 then 'Carto de Crdito MASTERCARD' end as nome FROM forma_pagamento

    Suponhamos agora, que exista a tabela Clientes. Para saber se o cliente cadastrado uma pessoa fsica ou jurdica basta olhar para o campo pessoa_fisica. Se este campo estiver setado, imprimimos Pessoa Fsica, caso contrrio, Pessoa Jurdica:

    SELECT id,nome, CASE when pessoa_fisica is not null then 'Pessoa Fsica' else 'Pessoa Jurdica' END as tipo_pessoa FROM clientes

    NEWID(): Selecionando registros aleatrios no SQL Server Para obter os dados de uma tabela de forma aleatria, o SQL Server dispe a funo NEWID(). Para isto,basta utiliz-la na clusula ORDER BY de sua consulta. Como o prprio nome diz a cada execuo gerado um novo GUID (Global Unique Identifier) e o registro ser ordenado de acordo com esse valor. Esses GUIDs so nicos, logo, a ordenao nunca ser igual. Exemplo: SELECT * FROM Clientes ORDER BY NEWID() Podemos utilizar o TOP 1 para retornar apenas o primeiro registro de forma aleatria: Veja: SELECT TOP 1 * FROM Clientes ORDER BY NEWID() A funo NEWID() pode ser usada tambm na Insero de dados na tabela. Primeiro criamos uma tabela com dois campos: GuidCol do tipo uniqueidentifier e NumCol do tipo inteiro. CREATE TABLE Minha_Tabela(GuidCol uniqueidentifier, NumCol int) Agora, faremos a insero de dados nesta tabela: INSERT INTO Minha_Tabela(NEWID(), 4) //GuidCol nunca armazenar valor iguais

  • Aula de Banco de dados

    INSERT INTO Minha_Tabela(NEWID(), 5) E por fim, selecionaremos um registro aleatrio: SELECT * TOP 1 FROM Minha_Tabela ORDER BY NEWID() // ser escolhido 1(uma) tupla inserida acima randomicamente.