Como usar o CASE SQL Expressões NULLIF e COALESCE
A única coisa que você pode ter certeza neste mundo é a mudança. Felizmente, o SQL é responsável por isso. termodinâmica clássica e teoria do caos moderno ambos indicam que sistemas naturalmente migrar de um estado conhecido, ordenou em um estado desordenado que ninguém pode prever. Qualquer pessoa que tenha monitorado o estado de quarto de um adolescente por um período de uma semana após o quarto é limpo posso garantir para essas teorias.
tabelas de banco de dados tem valores definidos em campos que contêm conteúdos conhecidos. Normalmente, se o valor de um campo é desconhecido, o campo contém o valor nulo. Em SQL, você pode usar um CASO expressão de alterar o conteúdo de um campo de tabela a partir de um valor definido para um valor nulo. O valor nulo indica que você não sabe mais o valor do campo. Considere o seguinte exemplo.
Imagine que você possui uma pequena companhia aérea que oferece voos entre o sul da Califórnia e de Washington. Até recentemente, alguns dos seus voos parou no Aeroporto Internacional de San Jose para reabastecer antes de continuar. Infelizmente, você acabou de perder seu direito de voar para San Jose. A partir de agora, você deve fazer o seu reabastecimento parar em qualquer Aeroporto Internacional de San Francisco ou do Aeroporto Internacional de Oakland.
Neste ponto, você não sabe que os voos parar em qual aeroporto, mas você sabe que nenhum dos vôos estão parando em San Jose. Você tem um banco de dados de voo que contém informações importantes sobre suas rotas, e agora você deseja atualizar o banco de dados para remover todas as referências a San Jose. O exemplo a seguir mostra uma maneira de fazer isso:
ATUALIZAÇÃO FLIGHTSET RefuelStop = CASEWHEN RefuelStop = 'San Jose'THEN NULLELSE RefuelStopEND -
Porque ocasiões como este - em que você deseja substituir um valor conhecido com um valor nulo - surgem frequentemente, SQL oferece uma notação abreviada para realizar essa tarefa. O exemplo anterior, expressa nesta forma abreviada, se parece com isso:
ATUALIZAÇÃO FLIGHTSET RefuelStop = NULLIF (RefuelStop, 'San Jose') -
Você pode traduzir esta expressão para o Inglês como, # 147-atualizar a tabela de VOO, definindo a RefuelStop coluna para NULL se o valor existente RefuelStop é 'São José'. Caso contrário, fazer nenhuma mudança # 148.;
NULLIF é ainda mais prático se você está convertendo dados originalmente acumulada para uso com um programa escrito em uma linguagem de programação padrão, como C ++ ou Java. linguagens de programação padrão não têm valores nulos, portanto, uma prática comum é usar valores especiais para representar o conceito de # 147-não conhecido # 148- ou # 147 não se aplica # 148-.
A numérico -1 pode representar um valor não-conhecido por SALÁRIO, por exemplo, e uma cadeia de caracteres # 147 - *** # 148- pode representar um valor não conhecido ou não-aplicável para JOBCODE. Se você deseja representar esses estados não-conhecidos e não-aplicáveis em um banco de dados SQL compatível usando valores nulos, você tem que converter os valores especiais para valores nulos. O exemplo a seguir faz esta conversão para uma tabela de funcionários, em que alguns valores salariais são desconhecidos:
ATUALIZAÇÃO EMPSET Salário = CASE SalaryWHEN -1 então NULLELSE SalaryEND -
Você pode executar esta conversão mais convenientemente usando NULLIF, do seguinte modo:
ATUALIZAÇÃO EMPSET Salário = NULLIF (Salário, -1) -
COALESCE, gostar NULLIF, é uma forma abreviada de uma determinada CASO expressão. COALESCE lida com uma lista de valores que podem ou não podem ser nulo. Veja como funciona:
Se um dos valores da lista não é nula: o COALESCE expressão assume esse valor.
Se mais de um valor na lista não é nulo: A expressão assume o valor do primeiro item não nulo na lista.
Se todos os valores na lista são nulos: A expressão assume o valor nulo.
UMA CASO expressão com esta função tem o seguinte formato:
CASEWHEN value1 NÃO É NULLTHEN value1WHEN value2 NÃO É value2 NULLTHEN ... quando o valorn NÃO É NULLTHEN valornNULLEND ELSE
O correspondente COALESCE taquigrafia parece com isso:
COALESCE (valor1, valor2, ..., valorn)
Você pode querer usar um COALESCE expressão depois de efectuar uma OUTER JOIN operação. Em tais casos, COALESCE você pode salvar um monte de digitação.