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

Meta Viewport ermöglicht die Vollbildanzeige von Webseiten auf dem iPhone

In meiner Verzweiflung dachte ich plötzlich: Wie i...

Natives, benutzerdefiniertes Rechtsklickmenü von js

In diesem Artikelbeispiel wird der spezifische Co...

Fallerklärung für den Nginx-Reverse-Proxy zu Go-FastDFS

Hintergrund go-fastdfs ist ein verteiltes Dateisy...

JavaScript-Grundlagenobjekte

Inhaltsverzeichnis 1. Gegenstand 1.1 Was ist ein ...

Zusammenfassung der Methoden zum Schreiben von Urteilsaussagen in MySQL

So schreiben Sie Urteilsaussagen in MySQL: Method...

Detaillierte Erläuterung der Mybatis-Sonderzeichenverarbeitung

Vorwort: Mybatis-Sonderzeichenverarbeitung, Verar...

Lösung für Vues Unfähigkeit, Array-Änderungen zu beobachten

Inhaltsverzeichnis 1. Vue-Listener-Array 2. Situa...

Was sind Web Slices?

Neue Funktion von IE8: Web Slices (Web Slices) Mi...

Grundlegendes Einführungstutorial zu MySQL-Partitionstabellen

Vorwort In einem aktuellen Projekt mussten wir ei...

Zusammenfassung der MySQL-Slow-Log-Praxis

Langsame Protokollabfragefunktion Die Hauptfunkti...

Der HTML 5-Entwurf wurde kein formeller Standard

<br />Gestern habe ich beim W3C gesehen, das...

So erhalten/berechnen Sie den Offset eines Seitenelements mit JavaScript

Frage Durch Klicken auf ein Steuerelement wird ei...