Widziałem wiele zapytań z czymś następującym.
Select 1
From table
Co to 1
oznacza, jak zostanie wykonany i co zwróci?
Ponadto w jakich scenariuszach można to wykorzystać?
Widziałem wiele zapytań z czymś następującym.
Select 1
From table
Co to 1
oznacza, jak zostanie wykonany i co zwróci?
Ponadto w jakich scenariuszach można to wykorzystać?
Odpowiedzi:
SELECT 1 FROM TABLE_NAME
oznacza „Zwróć 1 z tabeli”. Samo w sobie jest dość zwyczajne, więc zwykle będzie używane z WHERE
i często EXISTS
(jako notatki @gbn niekoniecznie jest to najlepsza praktyka, jednak jest na tyle powszechne, że można je zauważyć, nawet jeśli nie jest to naprawdę znaczące ( to powiedziawszy, użyję go, ponieważ inni go używają i jest to „bardziej oczywiste” od razu. Oczywiście może to być problem lepkiej kury z jajkiem, ale generalnie nie rozwodzę się)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Zasadniczo powyższe zwróci wszystko z tabeli 1, która ma odpowiedni identyfikator z tabeli 2. (Jest to oczywiście sztuczny przykład, ale uważam, że przekazuje ideę. Osobiście prawdopodobnie zrobiłbym to powyżej, SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
ponieważ uważam, że jako O WIELE bardziej wyraźne dla czytelnika, chyba że istniał istotny powód, aby tego nie robić).
Właściwie jest jeden przypadek, o którym do tej pory zapomniałem. W przypadku, gdy próbujesz określić istnienie wartości w bazie danych z języka zewnętrznego, czasami SELECT 1 FROM TABLE_NAME
będzie używany. Nie zapewnia to znaczących korzyści w porównaniu z wyborem pojedynczej kolumny, ale w zależności od implementacji może oferować znaczne korzyści w porównaniu z wykonaniem a SELECT *
, po prostu dlatego, że często jest tak, że im więcej kolumn DB zwraca do języka, tym większe są dane struktura, co z kolei oznacza, że zajmie więcej czasu.
...EXISTS (SELECT 1...
select 1 from table
zwróci stałą 1 dla każdego wiersza tabeli. Jest to przydatne, gdy chcesz tanio określić, czy rekord pasuje do Twojej where
klauzuli i / lub join
.
Jeśli masz na myśli coś takiego
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
to mit, że 1
jest lepszy niż
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
1
Lub *
w EXISTS jest ignorowany i można napisać to jak na stronie 191 ANSI SQL 1992 standard :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
działa jak urok
robi to, co mówi - zawsze zwraca liczbę całkowitą 1. Służy do sprawdzania, czy istnieje rekord pasujący do Twojej klauzuli where.
select 1 from table
jest używany przez niektóre bazy danych jako zapytanie do testowania połączenia w celu sprawdzenia, czy istnieje, często używane podczas pobierania lub zwracania połączenia do / z puli połączeń.
Chociaż nie jest to powszechnie znane, zapytanie może mieć HAVING
klauzulę bez GROUP BY
klauzuli.
W takich okolicznościach HAVING
klauzula dotyczy całego zestawu. Oczywiście SELECT
klauzula nie może odnosić się do żadnej kolumny, w przeciwnym razie (poprawiłbyś) błąd „Kolumna jest nieprawidłowa w zaznaczeniu, ponieważ nie jest zawarta w GROUP BY” itd.
W związku z tym, wartość dosłowne muszą być używane (ponieważ SQL nie zezwala resultset z zerowym kolumn - dlaczego ?!), a wartość literalna 1 ( INTEGER
) jest powszechnie stosowany: jeśli HAVING
ocenia klauzula TRUE
wtedy resultset będzie jednym rzędzie z jednego kolumna pokazująca wartość 1, w przeciwnym razie otrzymasz pusty zestaw.
Przykład: aby sprawdzić, czy kolumna ma więcej niż jedną odrębną wartość:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Aby być bardziej szczegółowym, użyłbyś tego do zrobienia
SELECT 1 FROM MyUserTable WHERE user_id = 33487
zamiast robić
SELECT * FROM MyUserTable WHERE user_id = 33487
ponieważ nie zależy Ci na oglądaniu wyników. Pytanie o numer 1 jest bardzo łatwe dla bazy danych (ponieważ nie musi wyszukiwać).
Jeśli nie wiesz, czy istnieją jakieś dane w Twojej tabeli, czy nie, możesz użyć następującego zapytania:
SELECT cons_value FROM table_name;
Dla przykładu:
SELECT 1 FROM employee;
Tak więc używamy tego zapytania SQL, aby dowiedzieć się, czy w tabeli są jakieś dane, a liczba wierszy wskazuje, ile wierszy istnieje w tej tabeli.
Oznacza to, że chcesz, aby wartość " 1 " była wyjściem lub była używana przez większość czasu jako zapytania wewnętrzne, ponieważ z jakiegoś powodu chcesz obliczyć zapytania zewnętrzne na podstawie wyników zapytań wewnętrznych ... nie zawsze, gdy używasz 1, ale ty mają określone wartości ...
To statycznie da wynik jako wartość 1.
Jeśli chcesz tylko sprawdzić prawdę lub fałsz na podstawie klauzuli WHERE, wybierz 1 z tabeli, w której warunek jest najtańszym sposobem.
oznacza to po prostu, że pobierasz numer z pierwszej kolumny z tabeli ,,,, oznacza wybierz Emply_num, Empl_no From Employees; tutaj używasz wybierz 1 z Pracowników; oznacza to, że pobierasz kolumnę Emply_num. Dzięki
Powód jest inny, przynajmniej w przypadku MySQL. To pochodzi z podręcznika MySQL
InnoDB oblicza wartości liczności indeksu dla tabeli przy pierwszym dostępie do tej tabeli po uruchomieniu, zamiast przechowywać takie wartości w tabeli. Ten krok może zająć dużo czasu w systemach, które dzielą dane na wiele tabel. Ponieważ ten narzut dotyczy tylko początkowej operacji otwierania tabeli, aby „rozgrzać” tabelę do późniejszego użycia, uzyskaj do niej dostęp natychmiast po uruchomieniu, wydając instrukcję taką jak SELECT 1 FROM tbl_name LIMIT 1
Jest to używane tylko dla wygody za pomocą funkcji JEŻELI ISTNIEJE (). W przeciwnym razie możesz iść z
select * from [table_name]
Obraz W przypadku „JEŚLI ISTNIEJE” wystarczy wiedzieć, że każdy wiersz z określonym warunkiem istnieje lub nie, nie ma znaczenia, jaka jest zawartość wiersza.
select 1 from Users
powyższy przykładowy kod, zwraca nie. wierszy równa się nie. użytkowników z 1 w jednej kolumnie