webentwicklung-frage-antwort-db.com.de

Was bedeutet es, 1 aus der Tabelle auszuwählen?

Ich habe viele Fragen mit etwas wie folgt gesehen.

Select 1  
From table

Was bedeutet dieser 1, wie wird er ausgeführt und was wird er zurückgeben?

Kann dies auch in welchen Szenarien verwendet werden?

109

SELECT 1 FROM TABLE_NAME bedeutet "1 aus der Tabelle zurückgeben". Es ist für sich alleine ziemlich unauffällig, daher wird es normalerweise mit WHERE und oft EXISTS verwendet (wie @gbn feststellt, ist dies nicht unbedingt die beste Praxis, es ist jedoch häufig genug, um bemerkt zu werden, selbst wenn es nicht wirklich ist bedeutungsvoll (das heißt, ich werde es verwenden, weil andere es verwenden und es "augenfälliger" sofort ist. Natürlich könnte dies ein zähflüssiges Huhn vs. Ei-Problem sein, aber ich bleibe im Allgemeinen nicht bei mir)).

 SELECT * FROM TABLE1 T1 WHERE EXISTS (
     SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
 );

Grundsätzlich wird das Obige alles aus Tabelle 1 zurückgeben, das eine entsprechende ID aus Tabelle 2 hat. (Dies ist offensichtlich ein erfundenes Beispiel, aber ich glaube, es vermittelt die Idee. Persönlich würde ich das Obige wahrscheinlich als SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2); tun, wenn ich das sehe alsWEITexpliziter für den Leser, es sei denn, es gibt einen zwingenden Grund, nicht zu.

BEARBEITEN

Es gibt tatsächlich einen Fall, den ich bis jetzt vergessen habe. In dem Fall, in dem Sie versuchen, das Vorhandensein eines Werts in der Datenbank von einer Fremdsprache zu ermitteln, wird manchmal SELECT 1 FROM TABLE_NAME verwendet. Dies bietet keinen erheblichen Vorteil gegenüber der Auswahl einer einzelnen Spalte, kann jedoch abhängig von der Implementierung erhebliche Vorteile gegenüber dem Ausführen von SELECT * bieten. Dies liegt daran, dass der DB in der Regel umso mehr Spalten enthält, je mehr Spalten der DB enthält Datenstruktur, was wiederum bedeutet, dass mehr Zeit benötigt wird.

81
cwallenpoole

select 1 from table gibt die Konstante 1 für jede Zeile der Tabelle zurück. Dies ist nützlich, wenn Sie kostengünstig ermitteln möchten, ob der Datensatz mit Ihrer where-Klausel und/oder join übereinstimmt.

68
Sahil Muthoo

Wenn du so etwas meinst

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

dann ist es ein myth, dass der 1 besser ist als

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

Der 1 oder * in den EXISTS wird ignoriert und Sie können dies gemäß Seite 191 des ANSI SQL 1992 Standard schreiben:

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 
35
gbn

es tut, was es sagt - es wird immer die ganze Zahl 1 zurückgegeben. Es wird verwendet, um zu prüfen, ob ein Datensatz vorhanden ist, der Ihrer where-Klausel entspricht.

18
Neville Kuyt

select 1 from table wird von einigen Datenbanken als Abfrage verwendet, um eine Verbindung zu testen, um festzustellen, ob sie aktiv ist. Dies wird häufig beim Abrufen oder Zurückgeben einer Verbindung zu/aus einem Verbindungspool verwendet.

17
Tom

Das Ergebnis ist 1 für jeden Datensatz in der Tabelle .  __

12
TiyebM

Obwohl es nicht allgemein bekannt ist, kann eine Abfrage eine HAVING-Klausel ohne eine GROUP BY-Klausel enthalten. 

In diesem Fall wird die HAVING-Klausel auf den gesamten Satz angewendet. Die SELECT-Klausel kann sich natürlich nicht auf eine Spalte beziehen, andernfalls würden Sie (korrigieren) den Fehler erhalten, "Spalte ist in select ungültig, da sie nicht in GROUP BY enthalten ist" usw. 

Daher muss ein Literalwert muss verwendet werden (da SQL keine Ergebnismenge mit Nullspalten zulässt - warum ?!) und der Literalwert 1 (INTEGER) häufig verwendet wird: Wenn die HAVING-Klausel TRUE auswertet, wird der Das Resultset besteht aus einer Zeile mit einer Spalte, die den Wert 1 anzeigt. Andernfalls erhalten Sie das leere Set.

Beispiel: Um herauszufinden, ob eine Spalte mehr als einen bestimmten Wert hat:

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);
8
onedaywhen

Wenn Sie nicht wissen, ob Daten Ihrer Tabelle vorhanden sind oder nicht, können Sie folgende Abfrage verwenden: 

SELECT cons_value FROM table_name;

Zum Beispiel:

SELECT 1 FROM employee;
  1. Es wird eine Spalte zurückgegeben, die die Gesamtzahl der Zeilen enthält. Alle Zeilen haben den gleichen konstanten Wert 1 (für diese Zeit gibt es 1 für alle Zeilen zurück).
  2. Wenn sich in Ihrer Tabelle keine Zeile befindet, wird nichts zurückgegeben.

Wir verwenden diese SQL-Abfrage, um zu ermitteln, ob Daten in der Tabelle vorhanden sind. Die Anzahl der Zeilen gibt an, wie viele Zeilen in dieser Tabelle vorhanden sind.

5
mahbub_siddique

Um etwas genauer zu sein, würden Sie dies verwenden

SELECT 1 FROM MyUserTable WHERE user_id = 33487

anstatt zu tun

SELECT * FROM MyUserTable WHERE user_id = 33487

weil es Ihnen egal ist, auf die Ergebnisse zu schauen. Nach der Nummer 1 zu fragen, ist für die Datenbank sehr einfach (da sie nicht nachschlagen muss).

4
Robert Martin

Dies bedeutet, dass Sie einen Wert " 1 " als Ausgabe oder die meiste Zeit als Innere Abfragen verwenden möchten, da Sie aus irgendeinem Grund die äußeren Abfragen basierend auf dem Ergebnis der inneren Abfragen berechnen möchten. Nicht immer Verwenden Sie 1 aber Sie haben bestimmte Werte ...

Dadurch werden Sie statisch als Wert 1 ausgegeben.

3
DShah

Wenn Sie nur anhand der WHERE-Klausel ein wahr oder falsch prüfen möchten, wählen Sie 1 aus der Tabelle aus, wobei die Bedingung die günstigste ist.

3
user1286465

Ich sehe es wird immer in SQL-Injection verwendet, wie:

www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;

Diese Zahlen können verwendet werden, um zu erraten, wo die Datenbank vorhanden ist, und den Spaltennamen der von Ihnen angegebenen Datenbank zu erraten.

2
EmilyAvon

Dies wird nur zur Vereinfachung bei IF EXISTS () verwendet. Ansonsten kannst du mitgehen

select * from [table_name]

Image Im Fall von 'IF EXISTS' müssen wir nur wissen, dass jede Zeile mit einer bestimmten Bedingung existiert oder nicht, egal was der Inhalt der Zeile ist.

select 1 from Users

über dem Beispielcode wird "no" zurückgegeben. Zeilenanzahl gleich Nr. von Benutzern mit 1 in einer Spalte

0
arvind singh

es bedeutet einfach, dass Sie die erste Spalte der Nummer aus der Tabelle , bedeutet, auswählen. Das heißt, Sie rufen die Spalte von Emply_num ab Danke

0
zeeshan rajput

Der Grund ist ein anderer, zumindest für MySQL. Dies ist aus dem MySQL-Handbuch

InnoDB berechnet Index-Kardinalitätswerte für eine Tabelle beim ersten Zugriff auf diese Tabelle nach dem Start, anstatt diese Werte in der Tabelle zu speichern. Dieser Schritt kann auf Systemen, die die Daten in viele Tabellen unterteilen, sehr lange dauern. Da dieser Aufwand nur für den anfänglichen Tabellenöffnungsvorgang gilt, können Sie eine Tabelle für die spätere Verwendung "aufwärmen", indem Sie unmittelbar nach dem Start darauf zugreifen, indem Sie eine Anweisung wie SELECT 1 FROM Tabellenname LIMIT 1 ausgeben

0
Ramona Morea