Co oznacza warunek 1 =1 ?

0

Witam,

Co dokładnie oznacza warunek 1 = 1 w zapytaniu sql?

2

dokładnie to co pisze. Czego tutaj nie rozumiesz?

1

Zawsze jest prawdą.

Więc jak masz SELECT * FROM tajnabazadanych WHERE id=9 i do tego dopiszesz OR 1=1 to ten drugi zawsze jest prawdą, czyli wylecą wszystkie id, a nie jeden.

2

Warunek "1=1" stosuje się w zapytaniach które mają za zadanie zadziałać na całej tabeli, ale DBMS wymaga podania jakiegoś warunku. Jest to innymi słowy warunek pusty, nic nie znaczący, ale potrzebny.

Przykład z realnego świata:

delete from tabela1 where 1=1
0

1=1 to warunek zawsze prawdziwy, czyli tzw. tautologia. Prościej użyć zwykłego "true"

0

Ja często mam potrzebę dynamicznego dopisania warunku do selekta w skrypcie. Jeżeli wiem że w pierwotnym selekcie mam na końcu where 1=1 to potem dopisuje and <warunek1> and <warunek2> itd

0

tez uzywam w przypadku dynamicznego budowania query.
W innym przypadku np w MSSQL budowany jest dodatkowy operator typu filter dla warunku np @0=@1 (maly koszt ale zbedny).

Zobacz jak wygladaja plany zapytan z 1=1 i bez tego warunku.

0

Często używa się tego do robienia "sql injection". Jeśli masz gdzieś pole tekstowe w które można coś wpisać i np. wyszukać w bazie, a w kodzie strony masz:

select * from tabela where pole_do_szukania="tocowpisales"

A jak wpiszemy w pole tekstowe:

dupa" or "1"="1

To zapytanie zrobi się takie:

select * from tabela where pole_do_szukania="dupa" or "1"="1"
1

Używa się tez to w przypadku gdy musisz obowiązkowo podać warunek: np
DELETE from TABELA where 1=1
Delete nie działa bez warunku. Tak więc można tu wymazać wszystkie dane z danej tabeli .

0
lechk napisał(a):

Używa się tez to w przypadku gdy musisz obowiązkowo podać warunek: np
DELETE from TABELA where 1=1
Delete nie działa bez warunku. Tak więc można tu wymazać wszystkie dane z danej tabeli .

We wszystkich popularnych RDBMS "WHERE" w poleceniu DELETE FROM jest opcjonalne i nie trzeba go podawać. W przypadku braku WHERE polecenie usunie wszystkie rekordy z tabeli.

0
AdamPL napisał(a):
lechk napisał(a):

Używa się tez to w przypadku gdy musisz obowiązkowo podać warunek: np
DELETE from TABELA where 1=1
Delete nie działa bez warunku. Tak więc można tu wymazać wszystkie dane z danej tabeli .

We wszystkich popularnych RDBMS "WHERE" w poleceniu DELETE FROM jest opcjonalne i nie trzeba go podawać. W przypadku braku WHERE polecenie usunie wszystkie rekordy z tabeli.

Co nie zmienia faktu że są DBMS-y i ich stare instalacje które wymagają podania takiego warunku.
Na pewno DB2 na z/OS.

0

Nie wydaje mi się, żeby którykolwiek standard sql wymagał klauzuli where po delete... ale mogę się mylić:)

0
hyde napisał(a):

Nie wydaje mi się, żeby którykolwiek standard sql wymagał klauzuli where po delete... ale mogę się mylić:)

To żaden standard. Po prostu zdarza się w niektórych instalacjach.

0
hyde napisał(a):

Nie wydaje mi się, żeby którykolwiek standard sql wymagał klauzuli where po delete... ale mogę się mylić:)

i-am-a-dummy

1 użytkowników online, w tym zalogowanych: 0, gości: 1