WHERE - klauzula używana do wybierania rekordów, które pasują do zadanych przez nas kryteriów.
W poleceniu tym możemy wybierać rekordy na różne sposoby określając konkretne warunki, które muszą spełniać nasze dane.
Składnia instrukcji WHERE jest następująca:
SELECT kolumna FROM tabela WHERE kolumna operator wartość.
Możliwe operatory to:
= równe (Przykład 1)
<> (lub) != różne (Przykład 2)
> większe niż (Przykład 3)
< mniejsze niż (Przykład 4)
>= większe lub równe niż (Przykład 5)
<= mniejsze lub równe niż (Przykład 6)
BETWEEN pomiędzy (Przykład 7)
LIKE jest "podobne" do (Przykład 8)
IN równe jednej lub kilku wartości (Przykład 9)
NOT IN różne od jednej lub kilku wartości (Przykład 10)
Uwaga!
Operator <> lub != może być obsługiwany w zależności od wersji SQL.
W klauzuli BEETWEEN będziemy określali zakres dolny (podawany jako pierwszy) oraz górny (podawany jako drugi).
W przykładach zwróćmy uwagę na pojedyncze cudzysłowy ('').
Zachęcham do dokładnego przeczytania przykładów, gdyż są one opatrzone dodatkowymi uwagami.
Przykład 1.
Wyświetlamy nazwę zawodu osoby, której numer identyfikacyjny (EMPNO) jest równy 7788.
SELECT JOB FROM EMP WHERE EMPNO = '7788';
JOB
---------------
ANALYST
1 rows selected
Przykład 2.
wyświetlamy nazwę (nazwy) zawodu (zawodów) różną od SALESMAN.
SELECT JOB FROM EMP WHERE JOB <> 'SALESMAN';
lub
SELECT JOB FROM EMP WHERE JOB != 'SALESMAN';
JOB
---------------
CLERK
MANAGER
MANAGER
MANAGER
ANALYST
PRESIDENT
CLERK
CLERK
ANALYST
CLERK
10 rows selected
Przykład 3.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają więcej niż 2500.
SELECT ENAME, SAL FROM EMP WHERE SAL > 2500;
lub
SELECT ENAME, SAL FROM EMP WHERE SAL > '2500';
ENAME SAL
--------------- ----------------------
JONES 2975
BLAKE 2850
SCOTT 3000
KING 5000
FORD 3000
5 rows selected
Przykład 4.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają mniej niż 1000.
SELECT ENAME, SAL FROM EMP WHERE SAL < 1000;
lub
SELECT ENAME, SAL FROM EMP WHERE SAL < '1000';
ENAME SAL
--------------- ----------------------
SMITH 800
JAMES 950
2 rows selected
Przykład 5.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają kwotę równą bądź większą niż 3000.
SELECT ENAME, SAL FROM EMP WHERE SAL >= 3000;
lub
SELECT ENAME, SAL FROM EMP WHERE SAL >= '3000';
ENAME SAL
--------------- ----------------------
SCOTT 3000
KING 5000
FORD 3000
3 rows selected
Przykład 6.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają kwotę równą bądź mniejszą niż 1100.
SELECT ENAME, SAL FROM EMP WHERE SAL <= 1100;
lub
SELECT ENAME, SAL FROM EMP WHERE SAL <= '1100';
ENAME SAL
--------------- ----------------------
SMITH 800
ADAMS 1100
JAMES 950
3 rows selected
Przykład 7.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają kwotę z przedziału 2500-6000.
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 2500 and 6000;
lub
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN '2500' and '6000';
ENAME SAL
--------------- ----------------------
JONES 2975
BLAKE 2850
SCOTT 3000
KING 5000
FORD 3000
5 rows selected
UWAGA!
Polecenie
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 6000 and 2500;
wyświetli 0 rekordów, gdyż zakres górny i dolny został niepoprawnie sformułowany.
KLAUZULA BETWEEN w naszym przykładzie zastępuje polecenie,
SELECT ENAME, SAL FROM EMP WHERE SAL > 2500 AND SAL < 6000;
które wyświetli taki sam wynik jak
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 2500 and 6000;
Przykład 8.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają kwotę 2400.
SELECT ENAME, SAL FROM EMP WHERE SAL LIKE '2400';
ENAME SAL
--------------- ----------------------
ALLEN 2400
1 rows selected
Klauzula LIKE ma jednak szersze zastosowanie. Używając znaku % możemy zastępować dowolny ciąg znaków.
Polecenie
SELECT ENAME, SAL FROM EMP WHERE SAL LIKE '24%';
wyświetli nam rekordy, gdzie zarobki będą równe 24, 240, 2400, 2411, 2432, 2423123, 24131231 itp.
ENAME SAL
--------------- ----------------------
ALLEN 2400
CLARK 2450
2 rows selected
Znaku % można używać zarówno na początku jak i na końcu naszego warunku.
SELECT ENAME, SAL FROM EMP WHERE SAL LIKE '0';
ENAME SAL
--------------- ----------------------
SCOTT 3000
KING 5000
FORD 3000
3 rows selected
Przykład 9.
Wyświetlamy imię oraz wynagrodzenie pracowników, którzy zarabiają kwotę 2400.
SELECT ENAME, SAL FROM EMP WHERE SAL IN '2400';
ENAME SAL
--------------- ----------------------
ALLEN 2400
1 rows selected
W klauzuli IN możemy jednak wprowadzić więcej warunków, według których przeszukujemy nasze dane. W tym celu w nawiasie wprowadzamy warunki (po przecinku).
SELECT ENAME, SAL FROM EMP WHERE SAL IN ('2400', '2450', '5000');
ENAME SAL
--------------- ----------------------
ALLEN 2400
CLARK 2450
KING 5000
3 rows selected
UWAGA!
W klauzuli IN musimy dokładnie określić dane, według których przeszukujemy nasze tabele, gdyż znak % nie jest obsługiwany w tego typu zapytaniach i użyty zwróci błąd.
SELECT ENAME, SAL FROM EMP WHERE SAL IN ('%', '2400');
Oto błąd:
Error starting at line 1 in command:
SELECT ENAME, SAL FROM EMP WHERE SAL IN ('%', '2400')
Error report:
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause:
*Action:
Przykład 10.
Wyświetlamy imię oraz nazwy zawodów pracowników, których stanowisko jest inne niż SALESMAN.
SELECT ENAME, JOB FROM EMP WHERE JOB NOT IN ('SALESMAN');
ENAME JOB
--------------- ---------------
SMITH CLERK
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK
10 rows selected
Brak komentarzy:
Prześlij komentarz