Polecenie języka SQL (niektóre; dialekt Access/Jet).

SELECT [predykat] { * | tabela.* | [tabela.]pole1 [AS alias1] [, [tabela.]pole2 [AS alias2] [, ...]] }
        FROM wyrażenie_tabelowe [, ...] [IN zewnętrzna_baza_danych]
        [WHERE... ]
        [GROUP BY... ]
        [HAVING... ]
        [ORDER BY... ]

predykat
Jeden z następujących predykatów: ALL, DISTINCT, DISTINCTROW lub TOP. Predykat służy do ograniczenia liczby zwracanych rekordów. Jeśli nie podano żadnego predykatu, domyślnie przyjmuje się predykat ALL.

*
Wskazuje, iż wybrane mają być wszystkie pola z podanej tabeli lub tabel.

tabela
Nazwa tabeli zawierającej pola, które składają się na rekordy będące rezultatem instrukcji.

pole1, pole2
Nazwy pól zawierających dane, które mają być pobrane. Jeśli podano kilka pól, są one pobierane w kolejności podanej na liście.

alias1, alias2
Nazwy, które zostaną użyte jako nagłówki kolumn w miejsce nazw kolumn z tabeli.

wyrażenie tabelowe
Nazwa tabeli lub tabel zawierających pobierane dane.

zewnętrzna baza danych
Nazwa bazy danych zawierającej tabele wymienione w wyrażeniu_tabelowym, o ile nie znajdują się one w bieżącej bazie danych.

Użycie:

Realizując tę operację, aparat bazy danych Microsoft Jet przeszukuje wskazaną tabelę lub tabele, pobiera określone kolumny, wybiera wiersze spełniające podane kryterium wyboru, po czym sortuje lub grupuje te wiersze zgodnie z określonym w instrukcji porządkiem.
Instrukcje SELECT nie zmieniają danych w bazie danych.
Słowo SELECT jest zazwyczaj pierwszym słowem instrukcji SQL. Większość instrukcji SQL to albo instrukcje SELECT, albo instrukcje SELECT...INTO.

Minimalna postać składni instrukcji SELECT jest następująca:

    SELECT pola FROM tabela

Aby wybrać wszystkie pola z tabeli, należy użyć znaku gwiazdki (*). W poniższym przykładzie wybierane są wszystkie pola z tabeli Pracownicy:

    SELECT * FROM Pracownicy;

Jeśli dana nazwa pola występuje w kilku tabelach wymienionych w klauzuli FROM, należy tę nazwę pola poprzedzić nazwą tabeli i operatorem . (kropka). W kolejnym przykładzie pole Department występuje zarówno w tabeli Pracownicy, jak i w tabeli Kierownicy. Instrukcja SQL pobiera działy z tabeli Pracownicy i nazwiska kierowników działów z tabeli Kierownicy:

    SELECT Pracownicy.Dział, Kierownicy.NazwiskoKierownika
        FROM Pracownicy INNER JOIN Kierownicy
        WHERE Pracownicy.Dział = Kierownicy.Dział;

Tworząc obiekt typu Recordset, aparat bazy danych Microsoft Jet używa nazwy pola z tabeli jako nazwy obiektu typu Field w tworzonym obiekcie Recordset. Jeśli ma być użyta inna nazwa albo jeśli nie wynika ona bezpośrednio z wyrażenia generującego pole, należy zastosować słowo zastrzeżone AS. W poniższym przykładzie słowem Urodz nazwano obiekt typu Field w wynikowym obiekcie Recordset:

    SELECT DataUrodzenia AS Urodz FROM Pracownicy;

W każdym przypadku użycia funkcji agregacji lub kwerend dających w wyniku niejednoznaczne lub powtarzające się nazwy obiektów Field należy za pomocą klauzuli AS podać inną nazwę obiektu Field. W poniższym przykładzie słowo Licznik służy do nadania nazwy zwracanemu przez kwerendę obiektowi Field w wynikowym obiekcie Recordset:

    SELECT COUNT(NrPracownika) AS Licznik FROM Pracownicy;

Pozostałe klauzule instrukcji SELECT służą do ograniczania i organizowania danych zwracanych przez kwerendę. Szczegółowe informacje można znaleźć w tematach pomocy opisujących konkretne klauzule.

 

FROM tabela_1 INNER JOIN tabela_2 ON tabela_1.pole_1 op_por tabela_2.pole_2

tabela_1, tabela_2
Nazwy tabel, których rekordy są łączone (scalane).

pole_1, pole_2
Nazwy pól sprzęgających. Jeśli pola nie są numeryczne, to muszą być tego samego typu danych i zawierać ten sam rodzaj danych; nie muszą jednak mieć tej samej nazwy.

op_por
Dowolny operator porównania: "=", "<", ">", "<=", ">=" lub "<>".

Użycie:

Operacja INNER JOIN może być użyta w dowolnej klauzuli FROM. Jest to najczęściej występujący typ sprzężenia. Sprzężenia wewnętrzne łączą rekordy z dwóch tabel, jeśli w polu wspólnym dla obu tabel znajdują się odpowiadające sobie wartości.
Operacja INNER JOIN zastosowana do tabel Działy i Pracownicy może zostać użyta do wyboru wszystkich pracowników zatrudnionych w każdym dziale. Jeśli jednak chcemy wybrać wszystkie działy (nawej jeśli w niektórych z nich nie ma pracowników) lub wszystkich pracowników (nawet jeśli niektórzy z nich nie pracują w żadnym dziale), to musimy użyć operacji LEFT JOIN lub RIGHT JOIN do utworzenia sprzężenia rozszerzonego.

Przy próbie sprzężenia pól zawierających dane typu Memo lub obiekt OLE wystąpi błąd.
Można sprząc dwa pola numeryczne podobnych typów. Na przykład, można sprząc pola Autonumer i Long, gdyż są podobnego typu. Nie można jednak sprząc pól o typach Single i Double.
Przykład przedstawiony poniżej pokazuje, w jaki sposób można sprząc tabele Kategorie i Produkty według pola NrKategorii.

    SELECT NazwaKategorii, NazwaProduktu
        FROM Kategorie INNER JOIN Produkty
        ON Kategorie.NrKategorii = Produkty.NrKategorii;

W poprzednim przykładzie pole NrKategorii jest polem sprzęgającym, lecz pomimo tego nie zostaje dołączone do wyników kwerendy, gdyż nie jest wymienione w instrukcji SELECT. Aby dołączyć pole sprzęgające, należy dodać nazwę pola do instrukcji SELECT ľ w tym przypadku Kategorie.NrKategorii.

W jednej instrukcji JOIN można umieścić wiele klauzul ON, używając następującej składni:

    SELECT pola
        FROM tabela_1 INNER JOIN tabela_2
        ON tabela_1.pole_1 op_por tabela_2.pole_1 AND
        ON tabela_1.pole_2 op_por tabela_2.pole_2 OR
        ON tabela_1.pole_3 op_por tabela_2.pole_3;

Można również zagnieżdżać instrukcje JOIN, używając następującej składni:

    SELECT pola
        FROM tabela_1 INNER JOIN
            (tabela_2 INNER JOIN tabela_3
               ON tabela_2.pole_2 op_por tabela_3.pole_3)
        ON tabela_1.pole_1 op_por tabela_2.pole_2a;

Operacje LEFT JOIN i RIGHT JOIN mogą być zagnieżdżone wewnątrz operacji INNER JOIN, lecz operacja INNER JOIN nie może być zagnieżdżona wewnątrz operacji LEFT JOIN lub RIGHT JOIN.

 

FROM tabela_1 [ LEFT | RIGHT ] JOIN tabela_2
    ON tabela_1.pole_1 op_por tabela_2.pole_2

tabela_1, tabela_2
Nazwy tabel, których rekordy są łączone.

pole_1, pole_2
Nazwy pól sprzęgających (złączających tabele). Pola muszą być tego samego typu danych i muszą zawierać ten sam rodzaj danych; nie muszą jednak mieć tej samej nazwy.
op_por Dowolny operator porównania: "=", "<", ">", "<=", ">=" lub "<>".

Użycie:

Operacja LEFT JOIN służy do tworzenia sprzężenia rozszerzonego lewego. Sprzężenia rozszerzone lewe włączają wszystkie rekordy z pierwszej (lewej) z dwóch tabel, nawet jeśli w rekordach z drugiej (prawej) tabeli nie istnieją odpowiadające im wartości.
Operacja RIGHT JOIN służy do tworzenia sprzężenia rozszerzonego prawego. Sprzężenia rozszerzone prawe włączają wszystkie rekordy z drugiej (prawej) z dwóch tabel, nawet jeśli w rekordach pierwszej (lewej) tabeli nie istnieją odpowiadające im wartości.

Na przykład, można użyć operacji LEFT JOIN dla tabel Działy (lewa) i Pracownicy (prawa) w celu wybrania wszystkich działów, w tym również nie posiadających pracowników. Aby wybrać wszystkich pracowników, w tym również nie pracujących w żadnym dziale, należy użyć operacji RIGHT JOIN.
W poniższym przykładzie pokazano, jak można dokonać sprzężenia tabel Kategorie i Produkty według pola NrKategoria. Kwerenda daje w wyniku listę wszystkich kategorii, w tym również nie zawierających żadnego produktu.

    SELECT NazwaKategorii, NazwaProduktu
        FROM Kategorie LEFT JOIN Produkty
        ON Kategorie.NrKategorii = Produkty.NrKategorii;

W powyższym przykładzie NrKategorii jest polem sprzężonym, lecz nie występuje ono w wyniku kwerendy, ponieważ nie znajduje się w instrukcji SELECT. Aby dołączyć pole sprzężone, należy w instrukcji SELECT dodać nazwę pola — w tym przypadku Kategorie.NrKategorii.

Uwagi

· Aby utworzyć kwerendę zawierającą wyłącznie rekordy, w których dane w polach sprzężonych są takie same, należy użyć operacji INNER JOIN.
· Operacje LEFT JOIN i RIGHT JOIN mogą być zagnieżdżane wewnątrz operacji INNER JOIN, lecz operacja INNER JOIN nie może być zagnieżdżana wewnątrz operacji LEFT JOIN lub RIGHT JOIN. Pod hasłem INNER JOIN można znaleźć rozważania dotyczące zagnieżdżeń sprzężeń.
· Można łączyć wiele klauzul ON. Pod hasłem INNER JOIN można znaleźć rozważania dotyczące łączenia klauzul. Wyjaśniono tam, jak należy dokonywać tej operacji.
· Nie należy sprzęgać pól zawierających dane typu Memo lub obiekt OLE, gdyż powoduje to błąd.