Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como usar o Operador Lógico EXISTS no SQL Server - Tutorial SQL Server / TSQL Parte 125

Exists retorna TRUE se uma subconsulta contiver alguma linha. EXISTS é usado quando queremos testar a existência de linhas especificadas por uma subconsulta.

Vamos criar dbo.Customer e dbo.Country Table e então usar EXISTS para retornar registros para diferentes cenários.

Create table dbo.Customer
 (Id int,
  FName VARCHAR(50),
  LName VARCHAR(50),
  CountryShortName CHAR(2),
  Age tinyint)
GO
insert into dbo.Customer
Values (
1,'Raza','M','PK',20),
(2,'Rita','John','US',12),
(3,'Sukhi','Singh',Null,25),
(4,'James','Smith','CA',60),
(5,'Robert','Ladson','US',54),
(6,'Alice','John','US',87),
(7,'Raza','M','US',33),
(8,'Dita','M','US',15),
(9,'Adita','M','US',29)


Create table dbo.Country ( 
CId tinyint,
CountryName VARCHAR(50),
CountryShortName CHAR(2))
go
Insert into dbo.Country 
Values 
(1,'Pakistan','Pk'),
(2,'United States of America','US')


1) EXISTS retornará TRUE se a subconsulta contiver alguma linha.

Isso mesmo, se nossa subconsulta retornar qualquer linha e tivermos usado EXISTS, a consulta externa retornará todas as linhas.

Selecione * de dbo.Customer
WHERE Exists ( Select 1)
 
 
Como usar EXISTS no SQL Server - Tutorial SQL Server / TSQL

Percebi que nossa subconsulta é uma consulta estática (Selecione 1). Como a subconsulta retornou linha e EXISTS retornou TRUE, todos os registros da tabela dbo.Customer são exibidos.

2) Use EXISTS e Join with SubQuery
O exemplo mais em tempo real de EXISTS seria quando queremos encontrar todos os registros da tabela dbo.Customer que tenha CountryShortName correspondente da tabela dbo.Country.

SELECT *
FROM dbo.Customer a
WHERE EXISTS
    (SELECT 1
     FROM dbo.Country b
     WHERE a.CountryShortName=b.CountryShortName)

Percebi que eu comparei CountryShortName de dbo.Customer e dbo.Country. Cada linha externa será comparada com os resultados da subconsulta e, se corresponder, obteremos a linha.

Podemos usar a cláusula IN para o mesmo requisito.

SELECT *
FROM dbo.Customer a
WHERE a.CountryShortName IN
    (SELECT b.CountryShortName
     FROM dbo.Country b
     WHERE a.CountryShortName=b.CountryShortName)
 
Como usar EXISTS no SQL Server para retornar registros correspondentes - SQL Server / Tutorial TSQL
 

Como usar Exists e Not Exits no SQL Server