Skip to content

COUNT e NULL

Nesse exemplo, vamos usar o COUNT com valores nulos


DECLARE @Pessoa TABLE (
	Id INT, 
	Nome varchar(60)
)

-- inclusão de registros com valor NULL para a coluna "Nome"
INSERT @Pessoa 
VALUES(1, 'Jose'), (2, 'Maria'), (3, null)


-- contagem de todos registros 
SELECT COUNT(*) as qtd 
FROM @Pessoa 

--> Resultado: qtd = 3
-- count(*) não usa o valor de uma coluna específica, 
-- serão retornados todos registos com valores nulos e registros duplicados 



-- contagem de todos registros, informando uma coluna 
SELECT COUNT(Nome) as qtd 
FROM @Pessoa 

--> Resultado: qtd = 2
-- count(Nome_Coluna) retorna valores não nulos

NULL – comparando valores

Ao compararmos campos com valores nulos em codições WHERE, devemos tomar certos cuidados.
Exemplos:



DECLARE @Pessoa TABLE (
	Id INT, 
	Nome varchar(60)
)

-- inclusão de registros com valor NULL para a coluna "Nome"
INSERT @Pessoa 
VALUES(1, 'Jose'), (2, 'Maria'), (3, null)


-- contagem de registros, comparando com valor null 
SELECT COUNT(*) as qtd 
FROM @Pessoa 
WHERE Nome = null

--> Resultado: qtd = 1


-- mesmo resultado comparando com IS NULL
SELECT COUNT(*) as qtd 
FROM @Pessoa 
WHERE Nome is null

--> Resultado: qtd = 1


-- Vamos mudar o comportamento dos operadores de comparação ( = e <> ) para valores nulos


-- verificando o valor da sessão para ANSI_NULLS
-- resultado será = 0, devido ao valor padrão ser OFF
select 	SESSIONPROPERTY ( 'ANSI_NULLS' )


-- definindo para ON
SET ANSI_NULLS ON


SELECT COUNT(*) as qtd 
FROM @Pessoa 
WHERE Nome = null

--> Resultado: qtd = 0 (zero..)

Update com FROM e “Alias”

Hoje o post é curto, vamos ver um exemplo simples do Update com FROM e definindo um alias para a tabela que desejamos alterar o registro.


UPDATE MinhaTabela
SET MinhaTabela.campo1 = 'valor'
FROM Pessoa as MinhaTabela
-- inner join ..
-- left join ..
-- where ..
GO

Repare que é possível efetur JOINs relacionando com outras tabelas.

sys.columns X syscolumns

Qual a diferença entre sys.columns X syscolumns ?


sp_help 'sys.columns'
go

sp_help 'syscolumns'
go

SP_Help irá mostrar que ambas são views (campo Type = ‘view’).

Diferenças:

- syscolumns é uma visão que está obsoleto e será removida em uma versão futura do SQL Server.
Foi deixada por motivo de compatibilidade, quando o SQL Server 2005 foi introduzido.

Nas versões 2000 e anteriores, eram os meta-dados reais das colunas, e você poderia editar diretamente os dados!
No 2005 , tornou-se uma visão verdadeira, e a capacidade de manipular diretamente os dados de meta foi removido.

- sys.columns é uma visão que a Microsoft tem planos de manutenção, podendo adicionar mais colunas no futuro, mas as colunas e ordem do que existe hoje deve permanecer o mesmo.

Treinamento profissional Asp.Net + MVC com Guinther Pauli

Semana passada participei junto com alguns amigos, o treinamento de Asp.Net, MVC, Entity Framework, etc na Univem (Marília/SP), com o instrutor Guinther Pauli.

O treinamento foi muito bom, com conteúdo atualizado!

Logo estarei publicando conhecimentos que adquiri..

Cross Join

Hoje mostrarei um exemplo de como usar o CROSS JOIN, que pode ser útil quando queremos relacionar dados entre tabelas que não possuem campos de relacionamentos.

select *
from TipoEndereco A
go
-- (2 linha(s) afetadas)


select B.* 
from endereco B
go
 -- (43045 linha(s) afetadas)


select A.* 
from endereco A
cross join TipoEndereco B
go
-- (86090 linha(s) afetadas)

Sem a necessidade da cláusula ON, um cross join efetua um produto cartesiano (qtd. de A X qtd. de B)

Create Default X Default constraint

Olá amigos(as) :)
Hoje vou mostrar duas maneiras de como criar um valor padrão para colunas:

- CREATE DEFAULT (Transact-SQL)
- [ CONSTRAINT constraint_name ] DEFAULT constant_expression

Vamos para o exemplo de criar um default:

CREATE DEFAULT DF_DataCadastro AS GetDate();
GO

CREATE TABLE MyTempTable(Id int, DataCadastro datetime)
GO

EXEC SP_BINDEFAULT 'DF_DataCadastro','MyTempTable.DataCadastro'
-- Messagens: Default bound to column.

INSERT MyTempTable(Id) VALUES(1), (2)

SELECT * FROM MyTempTable

O resultado do SELECT exibe o valor da coluna DataCadastro sendo data/hora da inserção do registro.
Até aqui nada de diferente.

Vamos para o segundo exemplo:

CREATE TABLE MyTempTable(
  Id int, 
  DataCadastro datetime CONSTRAINT DF_MyTempTable_DataCadastro DEFAULT GetDate()
);  
GO

INSERT MyTempTable(Id) VALUES(1), (2)

SELECT * FROM MyTempTable

O que mudou foi a maneira de criarmos o valor padrão para a coluna DataCadastro.

A vantagem de associar um valor padrão para uma coluna é de podemos utilizar o mesmo nome do default criado, para outras tabelas.
Já a restrição “default constraint” deve ter seu nome seguindo as regras para identificadores, ou seja, único para cada coluna.

A “desvantagem” em associar um valor padrão, é que ele será REMOVIDO:
“Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso..”

Fonte: http://msdn.microsoft.com/en-us/library/ms173565.aspx

Espero ter esclarecido algumas dúvidas.
Até o próximo artigo!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.