INSERT - polecenie to służy do dodawania rekordów do tabeli.
Postać instrukcji INSERT jest następująca:
INSERT INTO tabela
VALUES (wartosc1, wartosc2, wartosc3,...)
lub
INSERT INTO tabela (nazwa_kolumny_1, nazwa_kolumny_2, nazwa_kolumny_3,...)
VALUES (wartosc1, wartosc2, wartosc3,...)
UWAGA!
Jeżeli chcemy wprowadzić wartość pustą (null) musimy użyć operacji INSERT określając nazwy kolumy (kolumn).
W poleceniu
INSERT INTO tabela VALUES(wartosci....);
musimy podać wszystkie wartości. W przeciwnym wypadku otrzymamy błąd. (przykład 2, przykład 3)
Przykład 1.
Wyświetlamy zawartość tabeli DEPT, następnie dodajemy rekord pierwszym sposobem.
W dalszej kolejności ponownie wyświetlamy zawartość tabeli, aby sprawdzić efekt działania polecenia INSERT.
Czynność tą powtarzamy dodając rekord drugim sposobem (uwzględniając nazwy kolumn w poleceniu INSERT).
SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------------------- ------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DENVER
4 rows selected
INSERT INTO DEPT VALUES('50', 'NOWY WPIS 1', 'LOKALIZACJA 1');
1 rows inserted
SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------------------- ------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DENVER
50 NOWY WPIS 1 LOKALIZACJA 1
5 rows selected
INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES('60', 'NOWY WPIS 2', 'LOKALIZACJA 2');
1 rows inserted
SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------------------- ------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DENVER
50 NOWY WPIS 1 LOKALIZACJA 1
60 NOWY WPIS 2 LOKALIZACJA 2
6 rows selected
Przykład 2.
INSERT INTO DEPT (DEPTNO) VALUES('90');
DEPTNO DNAME LOC
---------------------- ------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DENVER
90 (null) (null)
7 rows selected
Przykład 3.
INSERT INTO DEPT VALUES('100');
Error starting at line 1 in command:
INSERT INTO DEPT VALUES('100')
Error at Command Line:1 Column:12
Error report:
SQL Error: ORA-00947: not enough values
00947. 00000 - "not enough values"
*Cause:
*Action:
Otrzymujemy błąd - not enough values!!!
Błąd jest spowodowany tym, iż struktura tabeli DEPT zawiera 3 kolumny (DEPTNO, DNAME, LOC), a w naszym INSERT została określona tylko jedna wartość.
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
AND i OR
AND i OR - operatory używane do wyświetlania danych, w zależności od wartości logicznych operatorów.
AND
Wyświetla dane, jeżeli warunki zawarte w AND są poprawne (zwracają true).
OR
Wyświetla dane, jeżeli przynajmniej jeden z warunków zawarty w OR jest poprawny (zwraca true).
Postać instrukcji zawierającej AND i OR może wyglądać następująca:
SELECT kolumna FROM TABELA WHERE kolumna1='wartosc' AND kolumna2='wartosc';
SELECT kolumna FROM TABELA WHERE kolumna1='wartosc' OR kolumna2='wartosc';
Można łączyć warunki w jeden większy warunek:
SELECT kolumna FROM TABELA WHERE (kolumna1='wartosc' AND kolumna2='wartosc') OR kolumna3='wartosc';
Wartości logiczne AND:
PRAWDA AND PRAWDA = PRAWDA (TRUE)
PRAWDA AND FAŁSZ = FAŁSZ (FALSE)
FAŁSZ AND PRAWDA = FAŁSZ (FALSE)
FAŁSZ AND FAŁSZ = FAŁSZ (FALSE)
Wartości logiczne OR:
PRAWDA OR PRAWDA = PRAWDA (TRUE)
PRAWDA OR FAŁSZ = PRAWDA (TRUE)
FAŁSZ OR PRAWDA = PRAWDA (TRUE)
FAŁSZ OR FAŁSZ = FAŁSZ (FALSE)
Najlepiej zobrazują to praktyczne przykłady.
Przykład 1.
Wyświetlamy imię oraz stanowisko osoby, której zarobki wynoszą 5000 ORAZ (!!!) stanowiskiem, które obejmuje dana osoba jest PRESIDENT.
SELECT ENAME, JOB FROM EMP WHERE SAL='5000' AND JOB='PRESIDENT';
ENAME JOB
--------------- ---------------
KING PRESIDENT
1 rows selected
Zapytanie zwróciło rekord, gdyż istnieje osoba, której zarobki wynoszą 5000 (SAL='5000' - zwróciło TRUE) oraz stanowiskiem jest PRESIDENT (JOB='PRESIDENT' - zwróciło TRUE).
Spróbujmy teraz wykonać następujące polecenie:
SELECT ENAME, JOB FROM EMP WHERE SAL='4000' AND JOB='PRESIDENT';
ENAME JOB
--------------- ---------------
0 rows selected
Zapytanie nie zwróciło rekordów, gdyż warunki zawarte pomiędzy AND nie zwróciły wartości TRUE (brak jest osób, które zarabiają 4000 - zwróciło FALSE). Mimo tego, iż istnieje osoba na stanowisku PRESIDENT wartość logiczna TRUE AND FALSE zwraca FALSE.
Przykład 2.
Wyświetlamy imię oraz stanowisko osoby, której zarobki wynoszą 3000 LUB (!!!) stanowiskiem, które obejmuje dana osoba jest SALESMAN.
SELECT SAL, JOB FROM EMP WHERE SAL='3000' OR JOB='SALESMAN';
SAL JOB
---------------------- ---------------
2400 SALESMAN
1875 SALESMAN
1875 SALESMAN
3000 ANALYST
3000 ANALYST
5 rows selected
Pierwsze trzy rekordy zostają wyświetlone dla warunku JOB='SALESMAN' (zauważmy, że zarobki są inne niż 3000), zaś ostatnie dwa rekordy zawierają inną nazwę stanowiska, jednakże zarobki wynoszą 3000.
Przykład 3.
Wyświetlamy zarobki oraz nazwę stanowiska na podstawie dwóch warunków:
- zarobki równe 5000 ORAZ nazwa stanowiska - PRESIDENT,
- zarobki mniejsze niż 1000.
SELECT SAL, JOB FROM EMP WHERE (SAL='5000' AND JOB='PRESIDENT') OR SAL < 1000;
SAL JOB
---------------------- ---------------
800 CLERK
5000 PRESIDENT
950 CLERK
3 rows selected
AND
Wyświetla dane, jeżeli warunki zawarte w AND są poprawne (zwracają true).
OR
Wyświetla dane, jeżeli przynajmniej jeden z warunków zawarty w OR jest poprawny (zwraca true).
Postać instrukcji zawierającej AND i OR może wyglądać następująca:
SELECT kolumna FROM TABELA WHERE kolumna1='wartosc' AND kolumna2='wartosc';
SELECT kolumna FROM TABELA WHERE kolumna1='wartosc' OR kolumna2='wartosc';
Można łączyć warunki w jeden większy warunek:
SELECT kolumna FROM TABELA WHERE (kolumna1='wartosc' AND kolumna2='wartosc') OR kolumna3='wartosc';
Wartości logiczne AND:
PRAWDA AND PRAWDA = PRAWDA (TRUE)
PRAWDA AND FAŁSZ = FAŁSZ (FALSE)
FAŁSZ AND PRAWDA = FAŁSZ (FALSE)
FAŁSZ AND FAŁSZ = FAŁSZ (FALSE)
Wartości logiczne OR:
PRAWDA OR PRAWDA = PRAWDA (TRUE)
PRAWDA OR FAŁSZ = PRAWDA (TRUE)
FAŁSZ OR PRAWDA = PRAWDA (TRUE)
FAŁSZ OR FAŁSZ = FAŁSZ (FALSE)
Najlepiej zobrazują to praktyczne przykłady.
Przykład 1.
Wyświetlamy imię oraz stanowisko osoby, której zarobki wynoszą 5000 ORAZ (!!!) stanowiskiem, które obejmuje dana osoba jest PRESIDENT.
SELECT ENAME, JOB FROM EMP WHERE SAL='5000' AND JOB='PRESIDENT';
ENAME JOB
--------------- ---------------
KING PRESIDENT
1 rows selected
Zapytanie zwróciło rekord, gdyż istnieje osoba, której zarobki wynoszą 5000 (SAL='5000' - zwróciło TRUE) oraz stanowiskiem jest PRESIDENT (JOB='PRESIDENT' - zwróciło TRUE).
Spróbujmy teraz wykonać następujące polecenie:
SELECT ENAME, JOB FROM EMP WHERE SAL='4000' AND JOB='PRESIDENT';
ENAME JOB
--------------- ---------------
0 rows selected
Zapytanie nie zwróciło rekordów, gdyż warunki zawarte pomiędzy AND nie zwróciły wartości TRUE (brak jest osób, które zarabiają 4000 - zwróciło FALSE). Mimo tego, iż istnieje osoba na stanowisku PRESIDENT wartość logiczna TRUE AND FALSE zwraca FALSE.
Przykład 2.
Wyświetlamy imię oraz stanowisko osoby, której zarobki wynoszą 3000 LUB (!!!) stanowiskiem, które obejmuje dana osoba jest SALESMAN.
SELECT SAL, JOB FROM EMP WHERE SAL='3000' OR JOB='SALESMAN';
SAL JOB
---------------------- ---------------
2400 SALESMAN
1875 SALESMAN
1875 SALESMAN
3000 ANALYST
3000 ANALYST
5 rows selected
Pierwsze trzy rekordy zostają wyświetlone dla warunku JOB='SALESMAN' (zauważmy, że zarobki są inne niż 3000), zaś ostatnie dwa rekordy zawierają inną nazwę stanowiska, jednakże zarobki wynoszą 3000.
Przykład 3.
Wyświetlamy zarobki oraz nazwę stanowiska na podstawie dwóch warunków:
- zarobki równe 5000 ORAZ nazwa stanowiska - PRESIDENT,
- zarobki mniejsze niż 1000.
SELECT SAL, JOB FROM EMP WHERE (SAL='5000' AND JOB='PRESIDENT') OR SAL < 1000;
SAL JOB
---------------------- ---------------
800 CLERK
5000 PRESIDENT
950 CLERK
3 rows selected
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
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
środa, 4 kwietnia 2012
ORACLE - SOUNDEX()
SOUNDEX()
SOUNDEX(string)
Opis algorytmu SOUNDEX:
Soundex używany jest do porównywania słów w języku angielskim. Słowa podobnie brzmiące (np. Robert i Rupert) będą miały ten sam 4-znakowy kod Soundex (w tym przypadku R163). Jest wykorzystywany m.in. przy poszukiwaniach genealogicznych różnych wariantów tego samego nazwiska, a obliczenie kodu Soundex umożliwiają niektóre programy genealogiczne.
Dokładny opis algorytmu:
1. Pierwsza litera wyrazu staje się pierwszym znakiem kodu.
2. Spośród pozostałych liter usuwane są a, e, h, i, o, u, w i y.
3. Pozostałym literom przypisuje się następujące liczby:
1. b, f, p, v
2. c, g, j, k, q, s, x, z
3. d, t,
4. l
5. m, n
6. r
4. Spośród kolejnych wystąpień tego samego kodu w kolejnych literach wyrazu po usunięciu h lub w usuwane są wszystkie poza pierwszym.
5. Jeżeli pozostaje więcej, niż trzy cyfry to następne są usuwane. Jeżeli jest ich mniej niż trzy, to dodawane są zera.
6. Kodem Soundex wyrazu jest jego pierwsza litera i trzy uzyskane powyżej cyfry.
(wikipedia.pl)
Przykład 1:
SELECT SOUNDEX('SMITH') FROM DUAL;
SOUNDEX('SMITH')
----------------
S530
Przykład 2:
SELECT SOUNDEX('SMYTH') FROM DUAL;
SOUNDEX('SMYTH')
----------------
S530
Zgodnie z działaniem algorytmu KOD SOUNDEX jest taki sam.
Działanie algorytmu krok po kroku:
1. Pierwsza litera - pierwszy znak kodu (S).
2. Usuwamy litery z kroku drugiego - SMT
3. Przypisujemy dla M - 5, dla T - 3.
4. Cyfr jest mniej niż 3 - dodawane jest 0.
5. Ostateczny kod to S530.
SOUNDEX(string)
Opis algorytmu SOUNDEX:
Soundex używany jest do porównywania słów w języku angielskim. Słowa podobnie brzmiące (np. Robert i Rupert) będą miały ten sam 4-znakowy kod Soundex (w tym przypadku R163). Jest wykorzystywany m.in. przy poszukiwaniach genealogicznych różnych wariantów tego samego nazwiska, a obliczenie kodu Soundex umożliwiają niektóre programy genealogiczne.
Dokładny opis algorytmu:
1. Pierwsza litera wyrazu staje się pierwszym znakiem kodu.
2. Spośród pozostałych liter usuwane są a, e, h, i, o, u, w i y.
3. Pozostałym literom przypisuje się następujące liczby:
1. b, f, p, v
2. c, g, j, k, q, s, x, z
3. d, t,
4. l
5. m, n
6. r
4. Spośród kolejnych wystąpień tego samego kodu w kolejnych literach wyrazu po usunięciu h lub w usuwane są wszystkie poza pierwszym.
5. Jeżeli pozostaje więcej, niż trzy cyfry to następne są usuwane. Jeżeli jest ich mniej niż trzy, to dodawane są zera.
6. Kodem Soundex wyrazu jest jego pierwsza litera i trzy uzyskane powyżej cyfry.
(wikipedia.pl)
Przykład 1:
SELECT SOUNDEX('SMITH') FROM DUAL;
SOUNDEX('SMITH')
----------------
S530
Przykład 2:
SELECT SOUNDEX('SMYTH') FROM DUAL;
SOUNDEX('SMYTH')
----------------
S530
Zgodnie z działaniem algorytmu KOD SOUNDEX jest taki sam.
Działanie algorytmu krok po kroku:
1. Pierwsza litera - pierwszy znak kodu (S).
2. Usuwamy litery z kroku drugiego - SMT
3. Przypisujemy dla M - 5, dla T - 3.
4. Cyfr jest mniej niż 3 - dodawane jest 0.
5. Ostateczny kod to S530.
ORACLE - RTRIM()
RTRIM()
RTRIM(string, znaki)
Funkcja RTRIM usuwa wszystkie "znaki" ze "string" zaczynając od PRAWEJ strony.
UWAGA!!!
Funkcja usuwa znaki do czasu wystąpienia innego znaku w "string", niż te zdefiniowane w "znaki". (PATRZ PRZYKŁADY!!!)
Jeżeli parametr "znaki" zostanie pominięty standardowo usuwane będą spacje.
Przykład 1:
Drugi parametr nie został okreslony, dlatego z tekstu 'Jakis tekst ' zostały usunięte wszystkie spacje z pewej strony.
SELECT rtrim('Jakis tekst ') FROM DUAL;
RTRIM('JAKISTEKST')
-------------------
Jakis tekst
Nasz tekst włącznie ze spacjami ma długość 16 znaków.
Po użyciu funkcji rtrim (usuwamy wszystkie spacje z prawej) nasz tekst ma długość 11 znaków.
SELECT LENGTH(rtrim('Jakis tekst ')) FROM DUAL;
LENGTH(RTRIM('JAKISTEKST'))
---------------------------
11
Przykład 2:
Funkcja usunie wszystkie znaki 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 z prawej strony stringu, do czasu wystąpienia innego znaku niż te zdefioniowane w drugim parametrze.
Funkcja napotyka na literę "A", która nie jest przez nas zdefiniowana, zatem usuwanie znaków jest przerywane. (patrz również przykład nastepny.
SELECT rtrim('123AAAAA123', '1234567890') FROM DUAL;
RTRIM('123AAAAA123','1234567890')
---------------------------------
123AAAAA
Przykład 3:
SELECT rtrim('123BAAAA123', '1234567890A') FROM DUAL;
RTRIM('123BAAAA123','1234567890A')
----------------------------------
123B
RTRIM(string, znaki)
Funkcja RTRIM usuwa wszystkie "znaki" ze "string" zaczynając od PRAWEJ strony.
UWAGA!!!
Funkcja usuwa znaki do czasu wystąpienia innego znaku w "string", niż te zdefiniowane w "znaki". (PATRZ PRZYKŁADY!!!)
Jeżeli parametr "znaki" zostanie pominięty standardowo usuwane będą spacje.
Przykład 1:
Drugi parametr nie został okreslony, dlatego z tekstu 'Jakis tekst ' zostały usunięte wszystkie spacje z pewej strony.
SELECT rtrim('Jakis tekst ') FROM DUAL;
RTRIM('JAKISTEKST')
-------------------
Jakis tekst
Nasz tekst włącznie ze spacjami ma długość 16 znaków.
Po użyciu funkcji rtrim (usuwamy wszystkie spacje z prawej) nasz tekst ma długość 11 znaków.
SELECT LENGTH(rtrim('Jakis tekst ')) FROM DUAL;
LENGTH(RTRIM('JAKISTEKST'))
---------------------------
11
Przykład 2:
Funkcja usunie wszystkie znaki 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 z prawej strony stringu, do czasu wystąpienia innego znaku niż te zdefioniowane w drugim parametrze.
Funkcja napotyka na literę "A", która nie jest przez nas zdefiniowana, zatem usuwanie znaków jest przerywane. (patrz również przykład nastepny.
SELECT rtrim('123AAAAA123', '1234567890') FROM DUAL;
RTRIM('123AAAAA123','1234567890')
---------------------------------
123AAAAA
Przykład 3:
SELECT rtrim('123BAAAA123', '1234567890A') FROM DUAL;
RTRIM('123BAAAA123','1234567890A')
----------------------------------
123B
ORACLE - RPAD()
RPAD()
RPAD(string, dlugosc, string1)
Funkcja stosowana głównie do formatowania wyświetlanych wyników.
string - string do przetworzenia,
dlugosc - liczba znaków, które zwracamy. Jeżeli "dlugosc" jest mniejsza, niż długość "string", to "string" będzie obcięty do liczby znaków "dlugosc".
string1 - string którym zastąpimy znaki z prawej strony, w przypadku, gdy nasz string jest krótszy niż "dlugosc". Parametr ten jest opcjonalny. Jeżeli nie zostanie podany, zostaną wstawione spacje.
Działanie funkcji najlepiej zobrazują poniższe przykłady:
Przykład 1:
Wyświetlamy tylko dwa pierwsze znaki z tekstu, stąd wynikiem będzie "12".
SELECT rpad('1234', 2,'0') FROM DUAL;
RPAD('1234',2,'0')
------------------
12
Przykład 2:
Tekst "1234" zajmuje tylko 4 pola. Chcemy wyświetlić ten tekst w 5 polach, zatem jedno pole z lewej strony zostanie puste. W naszym przypadku puste pole zastępujemy znakiem "x", więc otrzymanym wynikiem jest "x1234".
SELECT rpad ( '1234', 5, 'x') FROM DUAL;
RPAD('1234',5,'X')
------------------
1234x
RPAD(string, dlugosc, string1)
Funkcja stosowana głównie do formatowania wyświetlanych wyników.
string - string do przetworzenia,
dlugosc - liczba znaków, które zwracamy. Jeżeli "dlugosc" jest mniejsza, niż długość "string", to "string" będzie obcięty do liczby znaków "dlugosc".
string1 - string którym zastąpimy znaki z prawej strony, w przypadku, gdy nasz string jest krótszy niż "dlugosc". Parametr ten jest opcjonalny. Jeżeli nie zostanie podany, zostaną wstawione spacje.
Działanie funkcji najlepiej zobrazują poniższe przykłady:
Przykład 1:
Wyświetlamy tylko dwa pierwsze znaki z tekstu, stąd wynikiem będzie "12".
SELECT rpad('1234', 2,'0') FROM DUAL;
RPAD('1234',2,'0')
------------------
12
Przykład 2:
Tekst "1234" zajmuje tylko 4 pola. Chcemy wyświetlić ten tekst w 5 polach, zatem jedno pole z lewej strony zostanie puste. W naszym przypadku puste pole zastępujemy znakiem "x", więc otrzymanym wynikiem jest "x1234".
SELECT rpad ( '1234', 5, 'x') FROM DUAL;
RPAD('1234',5,'X')
------------------
1234x
ORACLE - REPLACE()
REPLACE()
REPLACE(string, szukany_string, string_zamiana)
Funkcja zamienia w stringu "string" dany ciąg znaków (pojedynczy znak) na inny.
string - string, w którym poszukujemy ciągu "szukany_string",
szukany_string - string, pod kątem przeszukujemy "string", aby dokonać zamiany,
string_zamiana - string, na który zamieniamy wszystkie wystąpienia "szukany_string".\
UWAGA!!!
Funkcja rozróżnia duże i małe litery.
Przykład 1:
SELECT REPLACE('Zamieniamy wszystkie litery a na 1','a','1') FROM DUAL;
REPLACE('ZAMIENIAMYWSZYSTKIELITERYANA1','A','1')
------------------------------------------------
Z1mieni1my wszystkie litery 1 n1 1
REPLACE(string, szukany_string, string_zamiana)
Funkcja zamienia w stringu "string" dany ciąg znaków (pojedynczy znak) na inny.
string - string, w którym poszukujemy ciągu "szukany_string",
szukany_string - string, pod kątem przeszukujemy "string", aby dokonać zamiany,
string_zamiana - string, na który zamieniamy wszystkie wystąpienia "szukany_string".\
UWAGA!!!
Funkcja rozróżnia duże i małe litery.
Przykład 1:
SELECT REPLACE('Zamieniamy wszystkie litery a na 1','a','1') FROM DUAL;
REPLACE('ZAMIENIAMYWSZYSTKIELITERYANA1','A','1')
------------------------------------------------
Z1mieni1my wszystkie litery 1 n1 1
ORACLE - NLS_SORT
NLS_SORT
nlsparam może przyjąć formę (parametr ten jest opcjonalny):
NLS_SORT = sort
gdzie sort określa formę sortowania w zależności od wartości podanej jako "sort".
Dostępne formy sortowania możemy wyświetlić za pomocą:
SELECT * FROM v$nls_valid_values;
Zmianę NLS_SORT wykonujemy poleceniem:
ALTER SESSION SET NLS_SORT=sortowanie;
Na przykład dla różnych wartości NLS_SORT znaki zostaną posortowane w różny sposób:
nls_sort=binary
E
Z
e
é
e
nls_sort=binary_ci
e
é
e
E
Z
nls_sort=binary_ai
é
e
e
E
Z
nlsparam może przyjąć formę (parametr ten jest opcjonalny):
NLS_SORT = sort
gdzie sort określa formę sortowania w zależności od wartości podanej jako "sort".
Dostępne formy sortowania możemy wyświetlić za pomocą:
SELECT * FROM v$nls_valid_values;
Zmianę NLS_SORT wykonujemy poleceniem:
ALTER SESSION SET NLS_SORT=sortowanie;
Na przykład dla różnych wartości NLS_SORT znaki zostaną posortowane w różny sposób:
nls_sort=binary
E
Z
e
é
e
nls_sort=binary_ci
e
é
e
E
Z
nls_sort=binary_ai
é
e
e
E
Z
ORACLE - NLS_LOWER()
NLS_LOWER()
NLS_LOWER(string, nlsparam)
Funkcja zwraca string pisany małymi literami.
Przykład 1:
SELECT NLS_LOWER('TeKSt') FROM DUAL;
NLS_LOWER('TEKST')
------------------
tekst
Przykład 2:
SELECT NLS_LOWER('abc') FROM DUAL;
NLS_LOWER('ABC')
----------------
abc
NLS_LOWER(string, nlsparam)
Funkcja zwraca string pisany małymi literami.
Przykład 1:
SELECT NLS_LOWER('TeKSt') FROM DUAL;
NLS_LOWER('TEKST')
------------------
tekst
Przykład 2:
SELECT NLS_LOWER('abc') FROM DUAL;
NLS_LOWER('ABC')
----------------
abc
ORACLE - NLS_INITCAP()
NLS_INITCAP()
NLS_INITCAP(string, nlsparam)
Funkcja NLS_INITCAP() zwraca string, w którym pierwszy znak jest pisany wielką literą, kolejne małymi literami.
(nlsparam - patrz NLSSORT)
Przykład 1:
SELECT NLS_INITCAP ('Tekst') FROM DUAL;
NLS_INITCAP('TEKST')
--------------------
Tekst
NLS_INITCAP(string, nlsparam)
Funkcja NLS_INITCAP() zwraca string, w którym pierwszy znak jest pisany wielką literą, kolejne małymi literami.
(nlsparam - patrz NLSSORT)
Przykład 1:
SELECT NLS_INITCAP ('Tekst') FROM DUAL;
NLS_INITCAP('TEKST')
--------------------
Tekst
ORACLE - LTRIM()
LTRIM()
LTRIM(string, znaki)
Funkcja LTRIM usuwa wszystkie "znaki" ze "string" zaczynając od lewej strony.
UWAGA!!!
Funkcja usuwa znaki do czasu wystąpienia innego znaku w "string", niż te zdefiniowane w "znaki". (PATRZ PRZYKŁADY!!!)
Jeżeli parametr "znaki" zostanie pominięty standardowo usuwane będą spacje.
Przykład 1:
Drugi parametr nie został okreslony, dlatego z tekstu ' Jakis tekst' zostały usunięte wszystkie spacje z lewej strony.
SELECT ltrim(' Jakis tekst') FROM DUAL;
LTRIM('JAKISTEKST')
-------------------
Jakis tekst
Przykład 2:
Funkcja usunie wszystkie znaki 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 z lewej strony stringu, do czasu wystąpienia innego znaku niż te zdefioniowane w drugim parametrze.
Funkcja napotyka na literę "T", która nie jest przez nas zdefiniowana, zatem usuwanie znaków jest przerywane. (patrz również przykład nastepny.
SELECT ltrim('123Tekst', '1234567890') FROM DUAL;
LTRIM('123TEKST','1234567890')
------------------------------
Tekst
Przykład 3:
SELECT ltrim('123Tekst', '1234567890T') FROM DUAL;
LTRIM('123TEKST','1234567890T')
-------------------------------
ekst
LTRIM(string, znaki)
Funkcja LTRIM usuwa wszystkie "znaki" ze "string" zaczynając od lewej strony.
UWAGA!!!
Funkcja usuwa znaki do czasu wystąpienia innego znaku w "string", niż te zdefiniowane w "znaki". (PATRZ PRZYKŁADY!!!)
Jeżeli parametr "znaki" zostanie pominięty standardowo usuwane będą spacje.
Przykład 1:
Drugi parametr nie został okreslony, dlatego z tekstu ' Jakis tekst' zostały usunięte wszystkie spacje z lewej strony.
SELECT ltrim(' Jakis tekst') FROM DUAL;
LTRIM('JAKISTEKST')
-------------------
Jakis tekst
Przykład 2:
Funkcja usunie wszystkie znaki 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 z lewej strony stringu, do czasu wystąpienia innego znaku niż te zdefioniowane w drugim parametrze.
Funkcja napotyka na literę "T", która nie jest przez nas zdefiniowana, zatem usuwanie znaków jest przerywane. (patrz również przykład nastepny.
SELECT ltrim('123Tekst', '1234567890') FROM DUAL;
LTRIM('123TEKST','1234567890')
------------------------------
Tekst
Przykład 3:
SELECT ltrim('123Tekst', '1234567890T') FROM DUAL;
LTRIM('123TEKST','1234567890T')
-------------------------------
ekst
Subskrybuj:
Posty (Atom)