Instrução condicional IF…ELSE do SQL Server: Exemplo de seleção em T-SQL
⚡ Resumo Inteligente
IF…ELSE é uma instrução de controle de fluxo no SQL Server que executa um bloco de T-SQL quando uma condição booleana é avaliada como verdadeira e um bloco alternativo opcional quando a mesma condição é avaliada como falsa.
Por que você precisa de declarações condicionais?
As instruções condicionais no SQL Server ajudam você a definir diferentes lógicas e ações para diferentes condições. Elas permitem que você execute ações distintas com base nas condições definidas na instrução. Na vida real, realizamos muitas ações que dependem do resultado de alguma outra atividade ou situação.
Alguns exemplos em tempo real de uma instrução condicional são:
- Se chover amanhã, vou planejar uma viagem de carro.
- Se as passagens aéreas da minha cidade custarem menos de 400 dólares, irei passar férias na Europa; caso contrário, darei preferência a um ponto turístico próximo.
Aqui, você pode ver que uma ação, como a viagem de carro acima, depende condicionalmente do resultado de outra atividade, que é "se vai chover ou não amanhã". Da mesma forma, MS SQL Server Também oferece a capacidade de executar uma instrução T-SQL condicionalmente.
Instrução IF…ELSE no SQL Server
Em MS SQL, IF…ELSE é um tipo de instrução condicional. Qualquer instrução T-SQL pode ser executada condicionalmente usando IF…ELSE. A figura abaixo explica como os ramos IF e ELSE funcionam no SQL Server:
- Se a condição for avaliada como Verdadeira, as instruções T-SQL que seguem a condição IF no SQL Server serão executadas.
- Se a condição for avaliada como Falsa, as instruções T-SQL que seguem a palavra-chave ELSE serão executadas.
- Após a execução das instruções T-SQL IF ou ELSE, as demais instruções T-SQL incondicionais continuam a ser executadas.
Sintaxe e regras do IF…ELSE em SQL
Sintaxe:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
Regras:
- A condição deve ser uma expressão booleana, ou seja, a condição resulta em um valor booleano quando avaliada.
- Uma instrução IF…ELSE em SQL pode lidar condicionalmente com uma única instrução T-SQL ou com um bloco de instruções T-SQL.
- Um bloco de instruções deve começar com a palavra-chave BEGIN e terminar com a palavra-chave END.
- O uso de BEGIN e END ajuda o SQL Server a identificar o bloco de instruções que precisa ser executado e a separá-lo do restante das instruções T-SQL que não fazem parte do bloco IF…ELSE.
- ELSE é opcional.
IF…ELSE com apenas um valor numérico na expressão booleana
Neste primeiro exemplo, a expressão booleana usa apenas valores numéricos. Considere a condição abaixo, que é sempre verdadeira porque 1 é igual a 1.
Condição: VERDADEIRO
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Executar a consulta com a condição verdadeira (1=1) imprime a mensagem do ramo IF:
Condição: FALSO
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Com a condição falsa (1=2), o ramo ELSE é executado em vez disso:
Suponha que você tenha uma tabela chamada 'Guru99' com duas colunas e quatro linhas, conforme mostrado abaixo. Usaremos este 'GuruTabela 99 nos exemplos que se seguem.
IF…ELSE com uma variável em uma expressão booleana
Em vez de números constantes, a expressão booleana pode comparar um variávelO exemplo a seguir declara uma variável inteira e testa seu valor.
Condição: VERDADEIRO
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Como @Course_ID é igual a 4, o ramo IF é executado e retorna a linha onde Tutorial_ID é 4:
Condição: FALSO
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Aqui a condição é falsa, então o ramo ELSE é executado e retorna todas as linhas onde Tutorial_ID não é 4:
SE…SENÃO com INÍCIO…FIM
Quando um ramo precisa executar mais de uma instrução, envolva as instruções em um bloco BEGIN…END. O exemplo abaixo executa duas instruções SELECT em cada ramo.
Condição: VERDADEIRO
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Como @Course_ID é menor ou igual a 2, o bloco IF executa ambas as instruções SELECT dentro de BEGIN…END:
Condição: FALSO
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Desta vez, a condição é falsa, portanto o bloco ELSE executa suas duas instruções SELECT:
Declaração IF sem ELSE
Você pode usar uma instrução IF em SQL sem a parte ELSE, pois a parte ELSE é opcional. Por exemplo:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Ele imprime a seguinte linha única:
Executar a condição falsa não produz nenhum resultado. Considere a seguinte consulta:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
O resultado é vazio, como mostrado abaixo:
Instruções IF…ELSE aninhadas
Ao contrário de outras linguagens de programaçãoO SQL Server não fornece uma instrução ELSE IF dentro de uma condição IF…ELSE. Em vez disso, você pode aninhar um IF…ELSE dentro de outro, como demonstrado abaixo:
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
Para uma idade de 60 anos, a estrutura IF…ELSE aninhada imprime o seguinte resultado:
- O código imprime 'menor de idade' se o valor de @age for inferior a 18.
- Caso contrário, a parte ELSE é executada. A parte ELSE contém uma estrutura IF…ELSE aninhada.
- Se o valor de @age for menor que 50, o código imprime 'Você tem menos de 50 anos'. Se nenhuma dessas condições for verdadeira, o código imprime 'Sênior'.












