Bazy danych

Witryna zawiera podstawowe informacje odnośnie funkcji w bazach danych takich jak MySQL i Oracle oraz podstawowe informacje dotyczące zapytań.

czwartek, 26 kwietnia 2012

WHERE

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