Co oznacza warunek 1 =1 ?

Co oznacza warunek 1 =1 ?
PE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam,

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

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
2

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

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
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.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
delete from tabela1 where 1=1
enix
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

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

hyde
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 456
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

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
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.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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:

Kopiuj
select * from tabela where pole_do_szukania="tocowpisales"

A jak wpiszemy w pole tekstowe:

Kopiuj
dupa" or "1"="1

To zapytanie zrobi się takie:

Kopiuj
select * from tabela where pole_do_szukania="dupa" or "1"="1"
LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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 .

AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3079
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.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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.

hyde
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 456
0

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

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.