Einführung in die Verwendung von exists und except in SQL Server

Einführung in die Verwendung von exists und except in SQL Server

1. existiert

1.1 Beschreibung

Der Rückgabewert der EXISTS-Klausel (einschließlich NOT EXISTS) ist ein BOOL-Wert. Innerhalb von EXISTS gibt es eine Unterabfrageanweisung (SELECT ... FROM ...), die ich die innere Abfrageanweisung von EXIST nenne. Die Abfrageanweisung gibt einen Ergebnissatz zurück.

Die EXISTS-Klausel gibt einen Booleschen Wert zurück, abhängig davon, ob der Ergebnisset der Abfrageanweisung leer ist oder nicht.

exists: betont, ob ein Ergebnissatz zurückgegeben wird, nicht was zurückgegeben wird. Beispiel: select name from student where sex = 'm' and mark exists(select 1 from grade where ...) . Solange die von exists eingeleitete Klausel einen Ergebnissatz zurückgibt, ist die exists -Bedingung erfüllt. Bitte beachten Sie, dass das zurückgegebene Feld immer 1 ist. Wenn es select 2 from grade where ... geändert wird, ist das zurückgegebene Feld 2. Diese Zahl ist bedeutungslos. Für die „exists“-Klausel ist es also nicht wichtig, was zurückgegeben wird, sondern ob ein Ergebnissatz zurückgegeben wird. EXISTS = IN, die Bedeutung ist dieselbe, aber die Syntax ist etwas anders. Es scheint, dass die Verwendung von IN weniger effizient ist, wahrscheinlich weil der Index nicht ausgeführt wird.

Im Vergleich zum Inner Join weist Exists eine bessere Leistung auf. Wenn der erste Datensatz gefunden wird, der die Bedingungen erfüllt, wird die Suche sofort beendet und TRUE zurückgegeben.

1.2 Beispiele

--EXISTIERT
--SQL:
Wählen Sie den Namen eines Familienmitglieds aus
wobei group_level > 0
und existiert (wählen Sie 1 aus Familienstufe, wobei Familienmitgliedsname = Familienstufe.name
und Note > 90)

--Ergebnis:
Name
Kirsche

--Existiert nicht
--SQL:
Wählen Sie den Namen eines Familienmitglieds aus
wobei group_level > 0
und existiert nicht (wählen Sie 1 aus Familienstufe, wobei Familienmitgliedsname = Familienstufe.name
und Note > 90)

--Ergebnis:
Name
mazey
Kaninchen

1.3 intersect/2017-07-21

„intersect“ funktioniert ähnlich wie „exists“.

--schneiden
--SQL:
wähle den Namen aus dem Familienmitglied, bei dem die Gruppenebene > 0 ist
schneiden
Wählen Sie den Namen aus der Familienklasse, wobei die Klasse > 90 ist.

--Ergebnis:
Name
Kirsche

2. außer

2.1 Beschreibung

In den Abfrageergebnissen gilt EXCEPT = NOT EXISTS, INTERSECT = EXISTS, aber der „Abfrage-Overhead“ von EXCEPT/INTERSECT ist viel größer als der von NOT EXISTS/EXISTS.

Außer „Except“ entfernt automatisch Duplikate, „not in/not exists“ hingegen nicht.

2.2 Beispiele

--außer
--SQL:
Wählen Sie den Namen eines Familienmitglieds aus
wobei group_level > 0
außer (Name aus Familienstand auswählen)

--Ergebnis:
Name
Kaninchen

--Existiert nicht
--SQL:
Wählen Sie den Namen eines Familienmitglieds aus
wobei group_level > 0
und existiert nicht (wählen Sie den Namen aus der Familienklasse, wobei Familienmitgliedsname = Familienklassename)

--Ergebnis:
Name
Kaninchen
Kaninchen

3. Testdaten

Beim Überprüfen der Ausnahme-Deduplizierungsfunktion wird dem Familienmitglied ein Kaninchen hinzugefügt.

-- ----------------------------
-- Tabellenstruktur für family_grade
-- ----------------------------
DROP TABLE [mazeytop].[Familienqualität]
GEHEN
TABELLE ERSTELLEN [mazeytop].[family_grade] (
[id] int NICHT NULL,
[name] varchar(20) NULL ,
[Note] int NULL 
)


GEHEN

-- ----------------------------
-- Aufzeichnungen von family_grade
-- ----------------------------
INSERT INTO [mazeytop].[family_grade] ([id], [name], [klasse]) WERTE (N'1', N'mazey', N'70')
GEHEN
GEHEN
INSERT INTO [mazeytop].[family_grade] ([id], [name], [klasse]) WERTE (N'2', N'cherrie', N'93')
GEHEN
GEHEN

-- ----------------------------
-- Tabellenstruktur für Familienmitglieder
-- ----------------------------
DROP TABLE [mazeytop].[Familienmitglied]
GEHEN
TABELLE ERSTELLEN [mazeytop].[Familienmitglied] (
[id] int NICHT NULL,
[name] varchar(20) NULL ,
[Geschlecht] varchar(20) NULL ,
[Alter] int NULL ,
[Gruppenebene] int NULL 
)


GEHEN

-- ----------------------------
-- Aufzeichnungen von Familienmitgliedern
-- ----------------------------
INSERT INTO [mazeytop].[Familienmitglied] ([ID], [Name], [Geschlecht], [Alter], [Gruppenebene]) VALUES (N'1', N'mazey', N'männlich', N'23', N'1')
GEHEN
GEHEN
INSERT INTO [mazeytop].[Familienmitglied] ([ID], [Name], [Geschlecht], [Alter], [Gruppenebene]) VALUES (N'2', N'cherrie', N'weiblich', N'22', N'2')
GEHEN
GEHEN
INSERT INTO [mazeytop].[Familienmitglied] ([ID], [Name], [Geschlecht], [Alter], [Gruppenebene]) VALUES (N'3', N'Kaninchen', N'weiblich', N'15', N'3')
GEHEN
GEHEN
INSERT INTO [mazeytop].[Familienmitglied] ([ID], [Name], [Geschlecht], [Alter], [Gruppenebene]) VALUES (N'4', N'Kaninchen', N'weiblich', N'15', N'3')
GEHEN
GEHEN

-- ----------------------------
-- Tabellenstruktur für family_part
-- ----------------------------
DROP TABLE [mazeytop].[Familienteil]
GEHEN
TABELLE ERSTELLEN [mazeytop].[Familienteil] (
[id] int NICHT NULL,
[Gruppe] int NULL ,
[Gruppenname] varchar(20) NULL 
)


GEHEN

-- ----------------------------
-- Aufzeichnungen von family_part
-- ----------------------------
INSERT INTO [mazeytop].[Familienteil] ([id], [Gruppe], [Gruppenname]) WERTE (N'1', N'1', N'Vater')
GEHEN
GEHEN
INSERT INTO [mazeytop].[Familienteil] ([ID], [Gruppe], [Gruppenname]) WERTE (N'2', N'2', N'Mutter')
GEHEN
GEHEN
INSERT INTO [mazeytop].[Familienteil] ([ID], [Gruppe], [Gruppenname]) WERTE (N'3', N'3', N'Tochter')
GEHEN
GEHEN

-- ----------------------------
-- Indexstruktur für die Tabelle family_grade
-- ----------------------------

-- ----------------------------
-- Primärschlüsselstruktur für die Tabelle family_grade
-- ----------------------------
ALTER TABLE [mazeytop].[family_grade] ADD PRIMARY KEY ([id])
GEHEN

-- ----------------------------
-- Indexstruktur für die Tabelle family_member
-- ----------------------------

-- ----------------------------
--Primärschlüsselstruktur für Tabelle family_member
-- ----------------------------
ALTER TABLE [mazeytop].[Familienmitglied] ADD PRIMARY KEY ([id])
GEHEN

-- ----------------------------
-- Indexstruktur für die Tabelle family_part
-- ----------------------------

-- ----------------------------
-- Primärschlüsselstruktur für die Tabelle family_part
-- ----------------------------
ALTER TABLE [mazeytop].[Familienteil] ADD PRIMARY KEY ([id])
GEHEN

Dies ist das Ende dieses Artikels über die Verwendung von „exists“ und „except“ in SQL Server. Weitere relevante Inhalte zu „exists“ und „except“ in SQL Server finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Die Verwendung von SQLServer ist vorhanden, nicht vorhanden

<<:  Serviceverwaltung der Quellpaketinstallation unter Linux

>>:  Detaillierte Erklärung zum dynamischen Festlegen des Browsertitels in Vue

Artikel empfehlen

Erstellen eines Redis-Clusters auf Docker

Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Erst...

10 Gründe, warum Linux immer beliebter wird

Linux wird von immer mehr Benutzern geliebt. Waru...

Natives JS zur Realisierung eines einfachen Schlangenspiels

In diesem Artikel wird der spezifische Code von j...

Was Sie über MySQL-Sperren wissen müssen

1. Einleitung MySQL-Sperren können je nach Umfang...

Installations-Tutorial für VMware Workstation 12 Pro Linux

Dieser Artikel zeichnet das Linux-Tutorial zur In...

Gedanken zu copy_{to, from}_user() im Linux-Kernel

Inhaltsverzeichnis 1. Was ist copy_{to,from}_user...

Detaillierte Erläuterung der Komponentenentwicklung des Vue-Dropdown-Menüs

In diesem Artikelbeispiel wird der spezifische Co...

Erstellen einer einfachen Game-Engine mit React Native

Inhaltsverzeichnis Einführung Erste Schritte Eine...

So stellen Sie einen Redis 6.x-Cluster über Docker bereit

Systemumgebung: Redis-Version: 6.0.8 Docker-Versi...

Einführung in Javascript DOM, Knoten und Elementerfassung

Inhaltsverzeichnis DOM Knoten Elementknoten: Text...

So unterstreichen Sie das A-Tag und ändern die Farbe vor und nach dem Klicken

Code kopieren Der Code lautet wie folgt: ein:link...

Lizenzschlüssel für VMware Workstation Pro 16 mit Nutzungs-Tutorial

VMware Workstation ist eine leistungsstarke virtu...