SQL - kilka uwag
LEFT JOIN - z lewej tabeli pobierane sa wszystkie wyniki i dołączane sa wyniki z prawej pasujące do klauzuli ON lub USING.
ON - złącza dwie tabele wg. różnych kolumn
[code]
SELECT col1, col2 FROM tab1
JOIN tab2 ON (col1 = col2)
;
SELECT col1, col2 FROM tab1
JOIN tab2 ON (col1 > col2 and col1 != col3)
;
USING - złącza dwie tabele wg. kolumny o takiej samej nazwie
[code]
SELECT tab1.col, tab2.col FROM tab1
JOIN tab2 USING (col1)
;
możliwe jest kilka joinów
[code]
SELECT col1, col2, col3 FROM tab1
JOIN tab2 ON (col1=col2)
JOIN tab3 ON (col2=col3)
;
FULL JOIN pokazuje wszystkie rekordy, nawet jeśli nie mają odpowiedników
[code]
SELECT col1, col2, col3 FROM tab1
FULL JOIN tab2 ON (col1=col2)
;
Wykorzystanie JOIN w UPDATE
[code]
UPDATE tab1 JOIN tab2 USING (col)
SET (tab1.col1 = "newValue")
WHERE tab1.col2="warunek" AND tab2.col2="warunek";
;
Inny rodzaj UPDATE
[code]
UPDATE tab1, tab2
SET (tab1.col1 = "newValue")
WHERE tab1.col2="warunek" AND tab2.col2="warunek";
;
GROUP BY - przy tej klauzuli nie używa się WHERE ale HAVING
[code]
SELECT count(*), col3 FROM tab
GROUP BY col3
HAVING col3 NOT NULL
;
DISTINCT - eliminowania duplikatów mozna użyć w count (i kilku innych)
[code]
SELECT count(distinct col1), col2 FROM tab
GROUP BY col2
;
REFERENCES (col)- referencje miedzy tabelami. Złączenie dwóch tabel. Pierwsza ma nazwę myTab i posiada kolumny id, col1, col2. Druga będzie tworzona. W drugim przykładzie złączenie ma nazwę (nadaną przez CONSTRAINT). REFERENCES bez (col) będzie odnosiło sie do klucza w tabeli _parent.
[code]
CREATE TABLE myTab2 (
id NUMBER PRIMARY KEY REFERENCES myTab (id)
, col1 VARCHAR (20)
, col2 VARCHAR (20)
);
CREATE TABLE myTab2 (
id NUMBER PRIMARY KEY CONSTRAINT nazwaConstr REFERENCES myTab (id)
, col1 VARCHAR (20)
, col2 VARCHAR (20)
);
Inny rodzaj złączenia poprzez FOREIGN KEY
[code]
CREATE TABLE myTab2 (
id NUMBER PRIMARY KEY
, col1 VARCHAR (20)
, col2 VARCHAR (20)
, FOREIGN KEY (col1) REFERENCES myTab2 (nazwaKolMyTab2)
);
Nie mozna po połączeniu usunąć myTab przez DROP TABLE. Kasowanie tabel złączonych należy przeprowadzić przez:
[code]
DROP TABLE myTab CASCADE CONSTRAINTS;
Złożony klucz główny (PRIMARY KEY). Błąd jeśli wszystkie kolumny mają takie same wartości.
[code]
CREATE TABLE myTab (
id NUMBER
, col1 NUMBER
, col2 NUMBER
, CONSTRAINT nazwaConstr PRIMARY KEY (id, col1, col2)
);
Sprawdzanie wartości CHECK. Pierwszy nie pozwala col1 przyjmować wartosci <=0, drugi nie pozwala col2 przyjmować wartości takiej samej jak col1
[code]
CREATE TABLE myTab (
id NUMBER
, col1 NUMBER CHECK (col1 > 0)
, col2 NUMBER CHECK (col2 != col1)
);
Funkcje liczace SQL: MAX(col), MIN(col), AVG(col), SUM(col), COUNT(com) - kolejno: najwieksza wartość, najmniejsza wartość, średnia wartość, suma wartości, liczba rekordów (COUNT(*) zlicza także rekordy NULL, jest wydajniejsze od COUNT(col))
[code]
SELECT MAX(col1), MIN(col1), AVG(col1), SUM(col1), COUNT(*) FROM myTab;
% zastępuje dowolny ciąg znaków, _ zastępuje dowolny znak. Używane z LIKE
[code]
SELECT nazwisko FROM myTab WHERE nazwisko LIKE 'kowal%';
SELECT nazwisko FROM myTab WHERE nazwisko LIKE 'k_wa_ski';
Funkcje (ORACLE)
TO_CHAR(sysdate,'YYYY') - zmienia datę systemową (sysdate) na format tekstowy
TO_CHAR(myDate,'YYYY') - zmienia datę podana przez uzytkownika na format tekstowy
SELECT imie||" "||nazwisko FROM dane; zwróci np: JAN KOWALSKI
Kolejność składni: SELECT, FROM, JOIN, GROUP BY, HAVING (WHERE gdy nie ma GROUP BY), ORDER BY
WHERE col1 IN ('a', 'b', 'c') daje to samo co WHERE col1='a' OR col1='b' OR col1='c'
WHERE col1 BETWEEN 3000 and 5000 daje to samo co WHERE col1>3000 AND col1<5000
istnieje też NOT IN oraz NOT BETWEEN