sql >> Databasteknik >  >> RDS >> Sqlserver

Underfråga med Exists 1 eller Exists *

Nej, SQL Server är smart och vet att den används för en EXISTS, och returnerar INGA DATA till systemet.

Quoth Microsoft:http://technet.microsoft.com/en-us/library/ms189259.aspx?ppud=4

Selectlistan för en underfråga som introduceras av EXISTS består nästan alltid av en asterisk (*). Det finns ingen anledning att lista kolumnnamn eftersom du bara testar om rader som uppfyller villkoren som anges i underfrågan finns.

För att kontrollera dig själv, prova att köra följande:

SELECT whatever
  FROM yourtable
 WHERE EXISTS( SELECT 1/0
                 FROM someothertable 
                WHERE a_valid_clause )

Om det faktiskt gjorde något med SELECT-listan, skulle det ge en div med noll-fel. Det gör det inte.

EDIT:Notera, SQL-standarden talar faktiskt om detta.

ANSI SQL 1992 Standard, sid 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

3) Fall:
a) Om "*" finns helt enkelt i en som omedelbart ingår i en , sedan motsvarar ett det är en godtycklig .



  1. Ska en databasanslutning vara öppen hela tiden eller bara öppnas när det behövs?

  2. Hur man undviker att ringa utlösare i PostgreSQL 9.2.1

  3. Hantera NULLs i SQL Server

  4. Hur man väljer kapslad JSON i SQL Server med OPENJSON