resumo sql

Upload: apolizeli

Post on 29-Oct-2015

18 views

Category:

Documents


0 download

TRANSCRIPT

USE [Halita]GO

CREATE TABLE [dbo].[teste10]([codigo] [int] IDENTITY(100,1) NOT NULL,[nome] [nchar](10) NULL,[valor] int NULL,)CREATE TABLE [dbo].[teste7]([codigo] [int] IDENTITY(100,1) NOT NULL,[nome] [nchar](10) NULL CONSTRAINT unique7 unique)--Tabelas temporriasCreate table #TabelaSeSimples(cod int primary key, nome varchar(100)null)Create table ##TabelaSeGlobal(cod int primary key not null,nome varchar(100)null)--RegrasCREATE TABLE [dbo].[Tab_Regras]([codigo] [int] IDENTITY(100,1) NOT NULL,[nome] [nchar](10) NULL,valor money NULL)

create rule id_chk as @id between 0 and 1000;sp_bindrule id_chk, 'Tab_Regras.valor';

--Sinonimos pesquisar - igual a "alias" - apelidos

Declare @v1 intset @v1 = 0while @v1 < 10begin select @v1 = (@v1 + 1)select @v1 as Linhaend

create procedure parmSimples @idParm intasselect codigo, nome from produto where codigo = @idparmgo

exec parmSimples @idparm = 202

--Funes:select suser_name()select x = substring('abcdefghijlm',2,3)--bcdselect raiz = sqrt(49)--7SELECT LEN(nome) FROM produto -- conta string

select mid(nome,1,1) from produto

select hoje = convert(char(10),getdate(),103)--15/05/2012 - data da consultaselect data = month('08/01/2007')--08select data = year('08/01/2007')--2007select data = day('08/01/2007')--1SELECT DATEDIFF(day,'2012-01-29','2012-01-30') AS DiffDate --Diferena de 1 dia entre as datas

select data = CONVERT(VARCHAR(19),GETDATE())select data = CONVERT(VARCHAR(10),GETDATE(),10)select data = CONVERT(VARCHAR(10),GETDATE(),110)select data = CONVERT(VARCHAR(11),GETDATE(),6)select data = CONVERT(VARCHAR(11),GETDATE(),106)select data = CONVERT(VARCHAR(24),GETDATE(),113)

--Estudar DATEADD(datepart,number,date) - Soma 6 dias apos o dia de HOJESELECT DATEADD(day,6,getdate()) AS OrderPayDate

select DATEPART(yyyy,getdate()) --Pega anoselect DATEPART(mm,getdate())--Pega messelect DATEPART(dd,getdate())--Pega dia

SELECT GETDATE() AS CurrentDateTime --Dia e Hora

declare @v datetime set @v = getdate()select @v

--Verificar como usar *******SELECT now() -- EstdarSELECT CURDATE()SELECT CURTIME()select mid(nome,1,1) from produto

SELECT LOWER(nome) FROM produtoSELECT UPPER(nome) FROM produto

SELECT AVG(valor) AS o FROM teste10 -- Calcula a media do campo informadoSELECT COUNT(*) FROM produto -- contato total de linhas

SELECT max(valor) FROM teste10 -- maximoSELECT min(valor) FROM teste10 --minimoSELECT sum(valor) FROM teste10 --soma

SELECT nome, SUM(valor) FROM teste10GROUP BY nome --Faz a soma dos valores agrupando por nome, Ex: soma todos os harison, depois soma todos os pereiras, depois soma todos os bila

SELECT nome, SUM(valor) FROM teste10 GROUP BY nome HAVING SUM(valor) 10 and valor > 5

SELECT valor FROM teste10WHERE valor > all(10,5)

--No tem preferencia, apresenta todas as linhas que encaixarem na condioselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from contato as cinner join funcionario as fon c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

--Preferencia Maior para tabela da esquerda, tabela de cima--Apresenta todas as linhas da tabela esquerda, tabela de cima, mesmo que no comparando com nada. select c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from contato as cleft join funcionario as fon c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

--Preferencia Maior para tabela da direira, tabela debaixo--Apresenta todas as linhas da tabela direira, tabela debaixo, mesmo que no comparando com nada. select c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from contato as cright join funcionario as fon c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

--No tem Preferencia --Apresenta todas as linhas da tabela direira, como da tabela da esquerda, mesmo que no tendo com o que comparar. select c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from contato as cfull join funcionario as fon c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

--Menos nivel de comparaoselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as finner join contato as con c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

select * from contatoselect * from funcionario

--Where sempre depois do ONselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as finner join contato as con c.contatoid = f.funcionarioidwhere c.cidade = 'Itapevi'order by f.funcionarioSobreNome

--Varios Joins com Wuereselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as finner join contato as con c.contatoid = f.funcionarioidinner join mercadoria as mon c.contatoid = m.mercadoriaidwhere c.cidade = 'Itapevi'order by f.funcionarioSobreNome

--Mesma regraselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as ffull outer join contato as con c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

select c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as fright outer join contato as con c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

select c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as fleft outer join contato as con c.contatoid = f.funcionarioidorder by f.funcionarioSobreNome

---Cross Join Pega tudo, tudo junto, tudo misturado, sem condioselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as fcross join contato as corder by f.funcionarioSobreNome

/* Selecina todos as linhasPara usar o UNION necessario:-Tipos de dados semelhantes-O mesmo Numero de Colunas-Mesma ordem de colunas na lista de seleo de cada consulta-Excluir resultados duplicados*/Select funcionarioid, funcionarioNome from funcionariounionselect contatoid, contatoNome from contato

--Com resultados duplicadosSelect funcionarioid, funcionarioNome from funcionariounion all select contatoid, contatoNome from contato

/* Diferena de valores entre as consultasPara usar o excep necessario:-Tipos de dados semelhantes-O mesmo Numero de Colunas-Mesma ordem de colunas na lista de seleo de cada consulta-Excluir resultados duplicados*/Select funcionarioid, funcionarioNome from funcionarioexceptselect contatoid, contatoNome from contato

/* Selciona osvalores iguais entre as consultasPara usar o intersect necessario:-Tipos de dados semelhantes-O mesmo Numero de Colunas-Mesma ordem de colunas na lista de seleo de cada consulta-Excluir resultados duplicados*/Select funcionarioid, funcionarioNome from funcionariointersectselect contatoid, contatoNome from contato

Select count(*) from funcionario --5 LinhasSelect * from funcionario TABLESAMPLE System(30 percent);

Select * from funcionario TABLESAMPLE System(3 ROWS);

--Subquerys

select funcionarioid, funcionarionome from funcionario where funcionarioid = (select count(*) from funcionario)--exemplos ilustrativo - pegar o ultimos funcionarioselect top 1 funcionarioid, funcionarionome from funcionario order by funcionarioid desc --outra forma

select funcionarioid, funcionarionome, (select sum(mercadoriapreo) from mercadoria) as [Valor das Mercadorias] from funcionario

--Pega todos os funcionarios que tiverem o mesmo codido da mercadoriaselect funcionarioid, funcionarionome from funcionario where funcionarioid in (select mercadoriaid from mercadoria)

--ESTUDARselect funcionarioid, funcionarionome from funcionario where funcionarioid >= any (select contatoid from contato) select funcionarioid, funcionarionome from funcionario where funcionarioid >= some (select contatoid from contato)select funcionarioid, funcionarionome from funcionario where funcionarioid = any (select contatoid from contato) select funcionarioid, funcionarionome from funcionario where funcionarioid in(select count(*) from contato)

--Correlacionadaselect funcionarioid, funcionarionome from funcionario f1 where funcionarioid = (select Mercadoriaid from mercadoria m where m.Mercadoriaid = f1.funcionarioid )

--Funciona como TRUE ou Falso - NOT EXISTS ou EXISTS - Se a query tiver resultado(exists) retorna valor true, seleciona a 1 query, se o resultado for false, no imprime nada.select funcionarioid, funcionarionome from funcionario where not exists(select contatonome from contato where contatonome = '')select funcionarioid, funcionarionome from funcionario where exists(select contatonome from contato)

select funcionarioid, funcionarionome from funcionario where not exists(select contatonome from contato)select funcionarioid, funcionarionome from funcionario where exists(select contatonome from contato)

--Prametros - Procedurewith procPar(contagem, nome) as (select count(*)as contagem, funcionarioNome as Nome from funcionario group by funcionarioNome)select contagem, nome from procpar order by nome asc

begin transactioncommit transactionrollback transaction

--Inserindo varias linhas da tabelainsert cliente select ClienteNome, ClienteConta from cliente

--Inserindo quanquer valor de retorno do select em uma tabela temporaria.select * into #NovaTabela from mercadoriaselect * from #NovaTabela

insert top (10) into cliente select ClienteNome, ClienteConta from cliente where ClienteNome = 'Harison'

select * from cliente--select count(*)from cliente where clienteNome = 'roany' --DELETE top (60) from cliente where clienteNome = 'roany'--select count(*)from cliente where clienteNome = 'harison' --DELETE top (3) from cliente where clienteNome = 'harison' -- Fiz o count, resultado 74, quero apagar apenas 70, select count(*)from cliente

-- Inserindo apenas duas linhas com essa condioinsert top (2) into cliente select ClienteNome, ClienteConta from cliente where ClienteNome = 'Harison'

/**truncate table - Excluir todos as linhas da tabela sem where Begin transactionTruncate TABLE clienteselect * from clienterollback transaction*/

select * from clienteupdate cliente set clienteNome = 'Harison' where clienteId = 3update top (1) cliente set clienteNome = 'Pereira' where clienteId > 1 and clienteId < 4

--Criando View - Tabela temporaria para apresentar os dados de varias consultas

if object_id('testandoView','V')is not nulldrop view testandoView;

create view testandoView2--with encryptionasselect c.contatoid, f.funcionarioNome, f.funcionarioSobrenome from funcionario as finner join contato as con c.contatoid = f.funcionarioidwhere c.cidade = 'Itapevi'--order by f.funcionarioSobreNome

--select * from testandoViewselect * from testandoView2

--Proceduresalter procedure teste1@FuncionarioName nvarchar(50),@FuncionarioSobreNome nvarchar(50)asselect * from funcionario where FuncionarioNome = @FuncionarioName;

exec teste1 @FuncionarioName = 'harison', @FuncionarioSobreNome ='carvalho';

--Procedure com retornoalter procedure teste1@mercadoriaNome nvarchar(50),@mercadoriaValorRevenda money outputasset @mercadoriaValorRevenda = (select mercadoriaValorRevenda from mercadoria where MercadoriaNome = @MercadoriaNome);

declare @mercadoriaNome nvarchar(50), @mercadoriaValorRevenda moneyset @mercadoriaNome = 'lapis'exec teste1 @mercadoriaNome,@mercadoriaValorRevenda output;

--select @mercadoriaValorRevenda

if @mercadoriaValorRevenda 0begin

set @mercadoriaValorRevenda = @mercadoriaValorRevenda - (@mercadoriaValorRevenda * 0.20)print 'Valor com Desconto - 'print @mercadoriaValorRevenda endelse--print 'falso'select * from mercadoria

--Proceduresalter procedure teste1@FuncionarioName nvarchar(50),@FuncionarioSobreNome nvarchar(50)asselect * from funcionario where FuncionarioNome = @FuncionarioName;

exec teste1 @FuncionarioName = 'harison', @FuncionarioSobreNome ='carvalho';

--Funcao--verificaralter function exemploFuncaoRetorno(@mercadoriaid int)returns int asbegin Declare @ret int;set @ret = (select MercadoriaPreo from mercadoria where mercadoriaid = @mercadoriaid);if(@ret is not null)return @retelseset @ret = 1return @ret end

declare @mercadoriaid intset @mercadoriaid = 2

select exemploFuncaoRetorno()as valor

select * from mercadoria --Funcao de datealter function data(@data datetime) returns int asbegin return datepart(weekday, @data)end;

select data('2002/02/01') as Data

--Trigger

alter Trigger ModificaTabela on clienteafter insertasraiserror('ddd',16,10)

insert into cliente(clienteNome, clienteConta) values ('H10',10)

select * from cliente