comportamento dell'operatore SQL BETWEEN [chiuso]

-1

Questa è una specie di domanda filosofica ...

Oggi ho impiegato troppo tempo per eseguire il debug di un metodo che generava un comando SQL.

Ho capito che l'errore era dovuto al fatto che il codice stava generando qualcosa del tipo:

WHERE X BETWEEN 10 AND 5

che non restituiva alcun valore, mentre il modulo corretto era:

WHERE X BETWEEN 5 AND 10

La mia domanda è, se puoi usare la sintassi BETWEEN che è più vicina al linguaggio naturale di WHERE X >= lowerBound AND X <= upperBound non avrebbe senso averla progettata per rilevare automaticamente quale è il limite inferiore e il limite superiore?

Voglio dire, se dico che voglio numeri compresi tra 10 e 5 o tra 5 e 10 in un linguaggio naturale credo che tutti mi diranno il numero nell'intervallo [5,10]

Sto facendo finta troppo da sql?

    
posta Noya 26.08.2015 - 18:08
fonte

1 risposta

1

In effetti, stai chiedendo troppo al tuo database.

I database sono progettati per DBA e sviluppatori. Quelli non sono il tipo di persone che di solito considerano che a .. b = b .. a in un contesto di un database o di un programma e naturalmente tenderebbe a mettere il minimo al primo e il secondo al massimo.

Probabilmente per questo motivo, i progettisti del database che stai utilizzando considerano l'inverso, cioè a .. b con a > b , costituisce un caso limite che non vale un trattamento speciale. Dopotutto, l'obiettivo del motore di database è enormemente rapido e ciò significa rimuovere i casi limite dal codice.

Meno codice significa meno rischi di un errore al suo interno, meno debug, meno log, meno test e, in definitiva, meno cicli di CPU e utilizzo della memoria.

Se le stesse persone stavano progettando non un database, ma un prodotto rivolto a utenti ordinari, potrebbero aver preso la decisione opposta, considerando che un utente semplice avrebbe considerato che " a è tra b e c esattamente lo stesso come" a è tra c e b ”.

Come hanno deciso quando creare le specifiche? Forse hanno fatto un'ipotesi educata. Forse non gliene potrebbe importare di meno e considerano che non vogliono scrivere altro codice. O forse hanno effettivamente osservato i programmatori usando il loro motore di database, e hanno determinato che la frequenza dell'errore che hai fatto è troppo piccola per preoccuparsi. Per lo stesso motivo, molti database dieci anni fa rispondevano più velocemente a select a, b from c rispetto a select * from c , ma questo non è sempre vero: guardando migliaia di programmatori che usano * quando non dovrebbero, progettisti di alcuni database i motori hanno finito per gestire questo caso in modo specifico per offrire le stesse prestazioni o prestazioni simili per entrambe le query.

    
risposta data 26.08.2015 - 21:19
fonte

Leggi altre domande sui tag