Ho visto molte domande con qualcosa come segue.
Select 1
From table
Cosa 1
significa, come verrà eseguito e cosa restituirà?
Inoltre, in quale tipo di scenari, può essere utilizzato?
Ho visto molte domande con qualcosa come segue.
Select 1
From table
Cosa 1
significa, come verrà eseguito e cosa restituirà?
Inoltre, in quale tipo di scenari, può essere utilizzato?
Risposte:
SELECT 1 FROM TABLE_NAME
significa "Ritorna 1 dalla tabella". È abbastanza insignificante da solo, quindi normalmente verrà usato con WHERE
e spesso EXISTS
(come osserva @gbn, questa non è necessariamente una buona pratica, è, tuttavia, abbastanza comune da essere notato, anche se non è davvero significativo ( detto questo, lo userò perché altri lo usano ed è immediatamente "più ovvio". Naturalmente, potrebbe trattarsi di un problema viscoso tra pollo e uova, ma in genere non mi soffro)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Fondamentalmente, quanto sopra restituirà tutto dalla tabella 1 che ha un ID corrispondente dalla tabella 2. (Questo è un esempio inventato, ovviamente, ma credo che trasmetta l'idea. Personalmente, probabilmente farei quanto sopra SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
come vedo che come Molto più esplicito per il lettore a meno che non ci fosse una ragione convincentemente convincente a non farlo).
In realtà c'è un caso di cui mi sono dimenticato fino ad ora. Nel caso in cui si stia tentando di determinare l'esistenza di un valore nel database da una lingua esterna, a volte SELECT 1 FROM TABLE_NAME
verrà utilizzato. Ciò non offre un vantaggio significativo rispetto alla selezione di una singola colonna, ma, a seconda dell'implementazione, può offrire vantaggi sostanziali rispetto all'esecuzione di una SELECT *
, semplicemente perché spesso accade che più colonne restituiscono il DB in una lingua, maggiori sono i dati struttura, che a sua volta significa che ci vorrà più tempo.
...EXISTS (SELECT 1...
select 1 from table
restituirà la costante 1 per ogni riga della tabella. È utile quando si desidera determinare in modo economico se il record corrisponde alla propria where
clausola e / o join
.
Se vuoi dire qualcosa del genere
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
allora è un mito che 1
è meglio di
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
Il 1
o *
nel esiste è ignorato e si può scrivere questo come da pagina 191 del 1992 ANSI SQL standard :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
funziona come un incantesimo
fa quello che dice - restituirà sempre il numero intero 1. Viene utilizzato per verificare se esiste un record corrispondente alla clausola where.
select 1 from table
viene utilizzato da alcuni database come query per testare una connessione per vedere se è attiva, spesso utilizzata durante il recupero o la restituzione di una connessione a / da un pool di connessioni.
Sebbene non sia ampiamente noto, una query può avere una HAVING
clausola senza una GROUP BY
clausola.
In tali circostanze, la HAVING
clausola viene applicata all'intero set. Chiaramente, la SELECT
clausola non può fare riferimento a nessuna colonna, altrimenti si otterrebbe (corretto) l'errore "La colonna non è valida nella selezione perché non è contenuta in GROUP BY" ecc.
Pertanto, è necessario utilizzare un valore letterale (perché SQL non consente un gruppo di risultati con zero colonne - perché ?!) e il valore letterale 1 ( INTEGER
) è comunemente usato: se la HAVING
clausola viene valutata, TRUE
il gruppo di risultati sarà una riga con uno colonna che mostra il valore 1, altrimenti si ottiene il set vuoto.
Esempio: per scoprire se una colonna ha più di un valore distinto:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Per essere leggermente più specifico, lo useresti per farlo
SELECT 1 FROM MyUserTable WHERE user_id = 33487
invece di fare
SELECT * FROM MyUserTable WHERE user_id = 33487
perché non ti interessa guardare i risultati. Richiedere il numero 1 è molto semplice per il database (poiché non deve effettuare alcuna ricerca).
Se non sai che esistono dei dati nella tabella o meno, puoi utilizzare la seguente query:
SELECT cons_value FROM table_name;
Per un esempio:
SELECT 1 FROM employee;
Quindi, usiamo questa query SQL per sapere se ci sono dati nella tabella e il numero di righe indica quante righe esistono in questa tabella.
Ciò significa che si desidera un valore " 1 " come output o il più delle volte utilizzato come query interne perché per qualche motivo si desidera calcolare le query esterne in base al risultato delle query interne .. non tutte le volte che si utilizza 1 ma si hanno alcuni valori specifici ...
Ciò fornirà staticamente un output come valore 1.
Se si desidera solo verificare un valore vero o falso in base alla clausola WHERE, selezionare 1 dalla tabella in cui condizione è il modo più economico.
Vedo che viene sempre utilizzato nell'iniezione SQL, come ad esempio:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Questi numeri possono essere utilizzati per indovinare dove esiste il database e indovinare il nome della colonna del database specificato e i valori delle tabelle.
significa semplicemente che stai recuperando il numero della prima colonna dalla tabella ,,,, significa selezionare Emply_num, Empl_no dai dipendenti; qui stai usando seleziona 1 da Dipendenti; ciò significa che stai recuperando la colonna Emply_num. Grazie
Il motivo è un altro, almeno per MySQL. Questo è dal manuale di MySQL
InnoDB calcola i valori di cardinalità dell'indice per una tabella la prima volta che si accede a tale tabella dopo l'avvio, anziché archiviare tali valori nella tabella. Questo passaggio può richiedere molto tempo sui sistemi che suddividono i dati in molte tabelle. Poiché questo sovraccarico si applica solo all'operazione iniziale di apertura della tabella, per "riscaldare" una tabella per un uso successivo, accedervi immediatamente dopo l'avvio emettendo un'istruzione come SELECT 1 FROM tbl_name LIMIT 1
Questo è solo usato per comodità con IF EXISTS (). Altrimenti puoi andare con
select * from [table_name]
Immagine Nel caso di "SE ESISTE", dobbiamo solo sapere che esiste una riga con la condizione specificata o meno, indipendentemente dal contenuto della riga.
select 1 from Users
sopra il codice di esempio, restituisce no. di righe è uguale a no. di utenti con 1 in singola colonna