jesteś w: Główna > Inne > SQL: uwagi
Ostatnia aktualizacja tej strony: 2006-08-22, 21:08:49

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

Menu

Działy:

Quick start:

Inne:

animacje Flash

Diablo 2: