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

Eine kurze Diskussion über reguläre JS-RegExp-Objekte

Inhaltsverzeichnis 1. RegExp-Objekt 2. Grammatik ...

Detaillierte Prozessanalyse der Docker-Bereitstellung des Snail-Cinema-Systems

Umwelterklärung Host-Betriebssystem: Cetnos7.9 Mi...

Lösungen für MySql-Abstürze und Dienststartfehler

Ich habe so lange mit PHP zu tun gehabt, aber die...

MySQL-Trigger: ausführliche Erklärung und einfaches Beispiel

Einfaches Beispiel für einen MySQL-Trigger Gramma...

Zusammenfassung der grundlegenden Verwendung von CSS3 @media

//Grammatik: @media Medientyp und | nicht | nur (...

JavaScript zum Erreichen eines dynamischen Farbwechsels der Tabelle

In diesem Artikel wird der spezifische Code für J...

So stellen Sie FastDFS in Docker bereit

Installieren Sie Fastdfs auf Docker Mount-Verzeic...

Beispielcode für horizontales Balkendiagramm von Echarts Bar

Inhaltsverzeichnis Horizontales Balkendiagramm Da...

Element-Beispielcode zum Implementieren dynamischer Tabellen

Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...

Detaillierte Erklärung des FreeList-Mechanismus von MySQL

1. Einleitung Nach dem Start von MySQL wird Buffe...