I. Przykładowe bazy danych

Można ściągnąć i rozpakować bazy danych, przeglądnąć tabele, ich projekty oraz inne obiekty (kwerendy, formularze, raporty, makra...)

1. Firma
2. Biblioteka (O'Reilly)
3. Kadry
4. Geodezja - azymuty i długości


I . Baza Firma1.mdb




II. Baza danych Uczniowie.mdb

Zadania:

1. Tabele:

Założyć bazę danych uczniowie.mdb o strukturze danych:
Uczniowie-dane - zip
Uczniowie1_dane - zip
uczzsbd1.mdb

1) UCZNIOWIE (NRU, nazwisko, imie)

a) Wpisać  polecenie kwerendy przy pomocy języka SQL

Zapytanie, Nowe zapytanie,
Widok SQL,
Wpisać lub skopiować poniższe polecenie:

create table Uczniowie ( NRU integer,  nazwisko text(20) , imie text(20), data_ur date,   constraint klucz primary key (NRU) );

Zapisac kwerendę pod nazwą Create Uczniowie
Wykonac komendę - kwerenda tworząca tabelę - !

Uzupełnić warunki  na pola w tabeli projektu UCZNIOWIE:

Klucz - NRU

Pole NRU:
Nr ucz

Pole nazwisko
Nazwisko

Pole Imie
Imię


Pole data_ur

SELECT DISTINCTROW Uczniowie.NRU, Uczniowie.nazwisko, Przedmioty.nazwap, Oceny.Ocena
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
ORDER BY Uczniowie.NRU;
Data urodz

W polu Opis można wprowadzić odpowiedni komentarz, np. NRU --> Nr dzienniika


b) wykorzystać istniejącą tabelę wykonaną w programie dBase  o schemacie:  UCZNIOWIE (NRU, imie, nazwisko, inne_dane),
- zaimportować:
Plik, pobierz dane zewnętrzne, importuj - wskazać źródło i nazwę pliku danych
i zmodyfikowac do wersji podanej wyżej


Wprowadzić nowe tabele Przedmioty i Oceny:
Tabela, Nowy, Nowa tabela, wprowadzić pola z ograniczeniami jak wyżej:
NRP, NRU, NRK - integer jak wyżej
nazwap - text(20)
ocena - liczba , pojedyncza precyzja, miejsca dzies: 1

2) PRZEDMIOTY (NRP, nazwap)
Klucz - NRP - numer przedmiotu
Przedmioty (NRP integer, nazwap text (40)



3) OCENY (NRK, NRU,NRP, ocena)

Oceny (NRK integer, NRU integer, NRP integer, ocena single, constraint klucz primary key (NRK))

Pola : NRK, NRU, NRP - integer j.w.
ocena - liczba pojedyncza precyzja, miejsca dzies - 1
Klucz - NRK - nr kolejny.
Założyć formularze na podstawie tabel i wprowadzić dane ze swojej klasy lub uzupełnic jeśli zaimportowano część danych.

Tabele te można utworzyć tez dokładając do schematu tabeli słowo CREATE i uruchomić SQL

4)  Utorzyć tabelę konta (IdK, PESEL, Nazwisko, Stan)

W polu PESEL uwzględnić właściwości pola jak na rys. poniżej

Właściwości

W polach Nazwisko w we właściwościach pola na pozycji Format wprowadzić znak > (zamiana na duże litery)

W polu stan wprowadzić we właściwościach pola Wygenerować i uruchomić kwerendę przy kryteriach:

Stan

Wprowadzić 2 pozycje do tabeli  KONTA

2. Kwerendy (zapytania)

2.1. KWERENDY WYBIERAJACE

Służą do uzyskiwania informacji z bazy danych wg określonych kryteriów

Najprostsze zapytanie oparte na jednej tabeli UCZNIOWIE

1 metoda - przy wykorzystaniu okna projektu kwerendy - QBE - Query By Example - sposób wizualny

Kwerenda z tabeli Uczniowie

II metoda - Widok zapytania w języku SQL
Structured Query Language

SELECT Uczniowie.* FROM Uczniowie;

lub
SELECT * FROM Uczniowie;




1a) Wyprowadzić listę uczniów wraz z przedmiotami i ocenami w układzie:
nr ucznia, nazwisko, przedmiot, ocena (kwerenda wybierająca)

1 metoda - przy wykorzystaniu okna projektu kwerendy - QBE - sposób wizualny

Kwerendy, Nowy, Widok projektu, Tabele - dodaj, wskazujemy tabele: Uczniowie, Przedmioty, Oceny,
Przeciągamy pola: NRU, nazwisko  z tabeli Uczniowie (lub klikamy 2 razy - wskoczy)
nazwap z tabeli Przedmioty
i ocena z  tabeli Oceny
Ewentualnie w kolumnie NRU lub  nazwisko zaznaczamy Sortuj rosnaco.

Kwerenda wybierająca

II metoda - Widok zapytania w języku SQL

SELECT DISTINCTROW Uczniowie.NRU, Uczniowie.nazwisko, Przedmioty.nazwap, Oceny.Ocena
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
ORDER BY Uczniowie.NRU;


1b) Zapytania - kryteria

1
b1)  Wygenerować i uruchomić kwerendę przy kryteriach:

Nazwisko na litere i - Like "*i"              - gwiazdka oznacza wszystkie znaki, na końcu i

    lub imię na literę a - Like "*a"

Zapis warunków w 2 liniach oznacza kruterium OR - LUB
a w jednej linii - kryterium AND czyli I

Kryteria

W SQL
SELECT DISTINCTROW Oceny.NRK, Oceny.NRU, Uczniowie.nazwisko, Uczniowie.imie, Oceny.NRP, Przedmioty.nazwap, Oceny.Ocena
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
WHERE ((Uczniowie.nazwisko Like "*i")) OR ((Uczniowie.imie Like "*a"))
ORDER BY Oceny.NRU;


1b2)   Wygenerować i uruchomić kwerendę przy kryteriach:

 NRU <10 i Ocena < 2 lub Ocena >4

Kryteria

W języku SQL
SELECT DISTINCTROW Oceny.NRK, Oceny.NRU, Uczniowie.nazwisko, Uczniowie.imie, Oceny.NRP, Przedmioty.nazwap, Oceny.Ocena
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
WHERE ((Oceny.NRU<10) AND (Oceny.Ocena<2 Or Oceny.Ocena>4));



2) Wyprowadzić średnie ocen każdego ucznia:

a) Utworzenie kwerendy w oknie projektu kwerendy i formuły QBE - Query By Example

Oceny średnie

b)  Kwerenda powyższa widoczna w języku SQL - Structured Query Language

SELECT DISTINCTROW Oceny.NRU, Uczniowie.nazwisko, Avg(Oceny.Ocena) AS [Średnia:Ocena]
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
GROUP BY Oceny.NRU, Uczniowie.nazwisko;


3) Wyświetlić średnią ocen wybranego ucznia (kwerenda wybierająca z parametrem)
a) Zapytanie utworzyć w widoku projektu, następnie przejść na widok SQL

Średnia ocen ucznia

b)  Kwerenda powyższa widoczna w języku SQL - Structured Query Language
SELECT DISTINCTROW Oceny.NRU, Uczniowie.nazwisko, Avg(Oceny.Ocena) AS [Średnia:Ocena]
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
GROUP BY Oceny.NRU, Uczniowie.nazwisko
HAVING ((Oceny.NRU=[Podaj NRU]));


Możemy wykonać np. jak pokazano ponizej na rysunku



4)  Wyświetlić średnią każdego ucznia z każdego przedmiotu


Poniżej przykład realizacji zadania

Średnie ocen każdego ucznia z każdego przedmiotu

W języku SQL:
SELECT DISTINCTROW Uczniowie.NRU, Uczniowie.nazwisko, Przedmioty.nazwap, Avg(Oceny.Ocena) AS [Średnia:Ocena]
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU
GROUP BY Uczniowie.NRU, Uczniowie.nazwisko, Przedmioty.nazwap;




KWERENDY PODSUMOWUJĄCE OPARTE NA FUNKCJACH AGREGUJĄCYCH
Należą do nich zapytania krzyżowe

Zapytanie krzyżowe

4a) Sporządzić kwerendę krzyżową na podstawie kwerendy Z-Uczniowie

Zapytanie nowy, kreatory zapytań - zapytanie krzyżowe

Zapytania krzyzowe

TRANSFORM Avg([Z-Oceny].Ocena) AS Wartość
SELECT [Z-Oceny].nazwisko, [Z-Oceny].nazwap, Avg([Z-Oceny].Ocena) AS [Średnia ocena]
FROM [Z-Oceny]
GROUP BY [Z-Oceny].nazwisko, [Z-Oceny].nazwap
PIVOT [Z-Oceny].Ocena;

Przykładowy wynik zapytania

Wyniki zapytania krzyzowego


4b) Zapytania z polami obliczeniowymi

Na podstawie tabeli oceny sporządzić kwerendę z dodatkowymi polami obliczeniowymi:
Ocena_raz_poltora:=Ocena*1,5
Ocena_zaok:=Int(Ocena)
Data: Date()
Czas: Time()

Pola obliczeniowe



KWERENDY FUNKCJONALNE


Kwerenda aktualizująca

5) Zamienić oceny >5,4 na 6 (kwerenda aktualizująca)

Zapytanie aktualizujące


W SQL:

UPDATE DISTINCTROW Oceny SET Oceny.Ocena = 6
WHERE ((Oceny.Ocena>5.4));


Kwerenda tworząca tabelę
Structured Query Language
6) Utworzyć tabelę archiwalną Uczn_ocen -  zawierającą informacje wymienione w zadaniu 1) (kwerenda tworząca tabelę)

Można utworzyć najpierw kwerendę wybierającą np. Uczniowie i oceny a później przejść z niej na kwerendę tworzącą tabelę.
Kwerendy, Nowy, Widok projektu, Pokazywanie tabeli - Kwerendy, Dodaj, Wskazujemy tabelę z kwerendą, np. Uczniowie i oceny,
przeciągamy gwiazdkę, Typ kwerendy - tworząca tabelę, uruchamiamy

Kwerenda tworząca tabelę

SELECT DISTINCTROW Uczniowie.*, Przedmioty.nazwap, Oceny.Ocena INTO Uczn_ocen
FROM Uczniowie INNER JOIN (Przedmioty INNER JOIN Oceny ON Przedmioty.NRP = Oceny.NRP) ON Uczniowie.NRU = Oceny.NRU;

Zapytanie usuwające

Najlepiej utworzyć zapytanie wybierające, sprawdzić jego działanie i zamienić na zapytanie usuwajace

7) Usunąć uczniów na literę A

Kwerenda usuwająca


DELETE DISTINCTROW Uczniowie.*, Uczniowie.nazwisko
FROM Uczniowie
WHERE ((Uczniowie.nazwisko Like "A*"));

Zapytanie dołaczające

8) Dołączyć tabelę Uczn1 do tabeli Uczniowie

Utworzyć kopię tabeli Uczniowie do tabeli Uczn1
Wykasować rekordy istniejące i wprowadzić nowe, o numerach 101, 102, napisy małymi literami.
Utworzyć zapytanie dołączające
- wskazać tabelę dołączaną, wybrać zapytanie dołączające, wskazać tabelę do której będziemy dołączać - tu Uczniowie
Dołączane pole można wskazać gwiazdką - wszystkie

Zap. dołączające


3. Formularze

1) Utworzyć formularz prezentujący dane z kwerendy w której są pola:   nr ucznia, nazwisko, przedmiot, ocena 
(Wyprowadzić listę uczniów wraz z przedmiotami i ocenami )

Formularz, Nowy,
Wskazać źródło formularza, np. zapytanie: Z-oceny
Kreatory formularzy: jednokolumnowy lub  tabelaryczny - wybieramy tabelaryczny

2)
Utworzyć formularz do przeglądania, usuwania i wprowadzania danych do tabeli Uczniowie
Analogicznie j.w. Jako źródło danych wybieramy tabelę uczniowie, formularz jednokolumnowy

4) Raporty

Przygotować raport prezentujący listę uczniów

Raporty, Nowy,  wybrać źródło (tabelę lub kwerendę),  np. tabela Uczniowie
Autoraport: kolumnowy lub tabelaryczny --> utworzy się raport

albo Kreator raportów,  wybrać pola (> - jedno pole, >> - wszystkie pola), dalej, dodać ewentualne poziomy grupowania, ... , zakończ



III. Zadanie z wykorzystaniem poleceń SQL

Dane są relacje o schematach:

Pracownik ( (nr integer,  nazwisko text(12) , etat text(10), szef integer, pracuje_od date,  placa_pod Currency, placa_dod Currency, id_zesp integer,  constraint klucz primary key (nr) );

Zespol  (id_zesp integer, nazwa text(20), adres  text(13))

Etat (etat text(10, placa_min single, placa_max currency)

Schemat relacji
Relacje

Zadania:

Skopiować i rozpakować plik  Prac_dane.zip ,
skopiować plik pod nazwą Prac_Nazwisko.mdb.

Zmodyfikować szerokości pól tekstowych: nazwisko na 20, etat na 15.
Sprawdzić i ewentualnie zmodyfikować powiazania miedzy tabelami
Otworzyć tabele, dopisać kilka pozycji
Założyć formularze różnego typu (kreator, autoformularz).
Utworzyć proste kwerendy z wykorzystaniem kreatora a następnie dodać tabele do tych kweend

Wykonać zadania  zgodnie z poniższym opisem, wykorzystując kwerendy i SQL

I. Zapytania tworzące i modyfikujące dane


1. Tworzenie tabeli - komenda CREATE i SELECT FROM


Utworzenie tabeli Pracownik1(nr integer, nazwisko text(12),
 etat text(10), szef integer, pracuje_od date, placa_pod Currency, placa_dod Currency, id_zesp integer,
 z kluczem głównym nr

create table Pracownik1
(nr integer, 
nazwisko text(12),
etat text(10),
szef integer,
pracuje_od date,
placa_pod Currency,
placa_dod Currency,
id_zesp integer,
 constraint klucz primary key (nr)
 );

Utworzenie tabeli etat2

CREATE TABLE etat2
 (  etat text(10) ,
placa_min single,
placa_max double
);

 Utworzenie tabeli Pracownicy(nr integer, nazwisko text(30),    stanowisko text(20), data_zatr date)
 z kluczem głównym nr

CREATE TABLE Pracownicy
 (nr integer ,
 nazwisko text(30) ,
 stanowisko text(20),
 data_zatr date,
 constraint klucz primary key (nr)
);


Utworzenie tabeli Worker
create table worker
(nr integer,
nazwisko text,
constraint indeks
foreign key (nr) references Pracownicy(Nr));

Utworzenie nowej tabeli Etat40 z wprowadzeniem danych z tabeli żródłowej Etat
SELECT * INTO ETAT40
FROM ETAT;

SELECT * INTO ETAT10
FROM ETAT
where etat like "a*";

SELECT ETAT, PLACA_MIN INTO ETAT66
FROM ETAT
WHERE placa_max >=1600;


2. Dołączenie danych: INSERT, SELECT INTO

 Wprowadzenie do wyżej utworzonej tabeli Pracownicy danych z tabeli Pracownik dla pól
 o etatach: adiunkt, asystent, profesor

INSERT INTO Pracownicy ( nr, nazwisko, stanowisko, data_zatr )
SELECT numer, nazwisko, etat, pracuje_od
FROM pracownik
WHERE etat in ("ADIUNKT", "ASYSTENT", "Profesor");

Wprowadzenie do tabeli Etat1 wszystkich etatów z tabeli Etat na literę s
INSERT INTO ETAT1
SELECT *
FROM ETAT
WHERE etat like "s*";

Wprowadzenie 2 pól z tabeli Pracownik do tabeli Dodatki
SELECT Numer, Placa_dod  INTO Dodatki
FROM Pracownik;


Wprowadzenie do tabeli Pracownicy jednego pracownika (Mleczko) o podanych wartościach

INSERT INTO Pracownicy ( nr, nazwisko, stanowisko, data_zatr )
VALUES ("3001", "Mleczko", "portier", "1997-01-01");
lub
INSERT INTO Pracownicy ( nr, nazwisko, stanowisko, data_zatr )
SELECT "3001", "Mleczko", "portier", "1997-01-01";



3. Modyfikacja struktury tabeli istniejącej - ALTER TABLE

Dodanie kolumny (pola) PlacaPod typu liczba podwójnej precyzji
Alter Table  Pracownicy
ADD COLUMN PlacaPod float;


4. Kasowanie danych - Delete

Skasować z tabeli Pracownicy pracowników o nazwsiku zaczynającym się na Ml (np. Mleczo,
Mlaska)

DELETE *
FROM Pracownicy
WHERE nazwisko like "Ml*";

Usunięcie wszystkich danych z tabeli Personel
DELETE *
FROM Personel;


5. Aktualizacja danych - UPDATE

Wstawić wszystkim pracownikom płacę 700.25
UPDATE Pracownicy SET PlacaPod = 700.25;

Zmodyfikować płacę adiunktom i profesorom
UPDATE Pracownicy SET Pracownicy.PlacaPod = PlacaPod*1.25
WHERE (stanowisko="Profesor" Or stanowisko="Adiunkt") AND Year(Data_zatr)<1980;

Ustawienie płacy dod.  na 0 dla pola Numer równego 1050
UPDATE Pracownik SET PLACA_DOD = 0
WHERE Numer=1050;


6. DROP


Usunięcie całej tabeli
DROP TABLE [Wykładowcy1];

Usunięcie pola
ALTER TABLE Etat4
  DROP COLUMN Salary;


II. ZAPYTANIA WYBIERAJĄCE - przykłady


SELECT nazwisko, imię, dział
FROM personel
WHERE Stanowisko = 'Kierownik';


SELECT *
FROM pracownik
WHERE placa_pod > 1500 and (etat='ADIUNKT' or etat = 'ASYSTENT');

SELECT nazwisko, etat, placa_pod
FROM pracownik
WHERE etat='ADIUNKT' or placa_pod between 1000 and 2000;

SELECT [Imię] AS [First Name (Imię)], [Nazwisko] AS [Last Name - Nazwisko],
 year(Date())-Year([urodzony]) AS Wiek
FROM Personel AS [Staff - Personel];

SELECT [Imię], [Nazwisko], Year(Date())-Year([Urodzony]) AS Wiek
FROM Personel
WHERE Right([Imię],1)="a";


Porządkowanie - ORDER BY


SELECT *
FROM pracownik
ORDER BY id_zesp, placa_pod DESC;


SELECT personel.imię, nazwisko, year(date())-year([urodzony]) AS Wiek
FROM Personel
ORDER BY year(date())-year([urodzony]) DESC , [Nazwisko];

SELECT Nazwisko, Imię
FROM Personel
WHERE [Dane żony/męża] is not null;

SELECT TOP 3 *
FROM Personel
ORDER BY [Zatrudniony od];

SELECT nazwisko, imię
FROM personel
WHERE nazwisko not like  "D*";

SELECT nazwisko, imię
FROM personel
WHERE nazwisko <>  "Dąbek";

SELECT Nazwisko, Imię
FROM Personel
WHERE nazwisko >= 'K%';

SELECT nazwisko, imię
FROM Personel
WHERE nazwisko not in ('Barska','[Śliwa]');

Parametry


PARAMETERS [Podaj nazwisko:] Text;
SELECT *
FROM Personel
WHERE [Nazwisko]=[Podaj nazwisko:];

ALL, DISTINCT
SELECT [Zamieszkały]
FROM Personel
WHERE [Zamieszkały] <> "Wrocław";

SELECT DISTINCT [Zamieszkały]
FROM Personel
WHERE [Zamieszkały] <> "Wrocław";


GROUP BY...HAVING


SELECT etat, avg(placa_pod)
FROM Pracownik
WHERE etat <> 'DYREKTOR'
GROUP BY etat;

SELECT id_zesp, etat, ccur(avg(placa_pod+placa_dod)) AS [Płaca średnia]
FROM Pracownik
GROUP BY id_zesp, etat;

PARAMETERS [(K)obieta czy (M)ężczyzna?] Text;
SELECT [Dział], [Płeć], Count([Nazwisko]) AS [Ilość zatrudnionych]
FROM Personel
GROUP BY [Dział], [Płeć]
HAVING [Płeć]=[(K)obieta czy (M)ężczyzna?]
ORDER BY [Dział];

SELECT id_zesp, avg(placa_pod)
FROM pracownik
GROUP BY id_zesp
HAVING count(*) >3;


Połacznia w SQL (INNER, LEFT, RIGHT)   


SELECT *
FROM pracownik, zespol;

SELECT [ID Pracownika], Personel.Nazwisko, Personel.Imię, [Zasadnicza]
FROM Płace, Personel
WHERE Płace.[ID Pracownika]=Personel.[ID]
and Płace.Zasadnicza in (700, 1200, 1400, 1500);

SELECT [ID Pracownika], Personel.Nazwisko, Personel.Imię, [Zasadnicza]
FROM Płace, Personel
WHERE Płace.[ID Pracownika]=Personel.[ID]
and Zasadnicza between 800 and 1500;

SELECT p.[ID Pracownika], o.Nazwisko, o.Imię, p.[Zasadnicza]
FROM Płace AS p, Personel AS o
WHERE p.[ID Pracownika]=o.[ID]
and Zasadnicza between 800 and 1500;


SELECT [ID Pracownika], Personel.Nazwisko, Personel.Imię, [Zasadnicza]
FROM Płace, Personel
WHERE Płace.[ID Pracownika]=Personel.[ID]
and Personel.Nazwisko like 'B*';

SELECT pracownik.nazwisko, zespol.nazwa
FROM Pracownik, Zespol
WHERE Pracownik.id_zesp=zespol.id_zesp;

SELECT pracownik.nazwisko, zespol.nazwa
FROM Pracownik INNER JOIN zespol ON pracownik.id_zesp=zespol.id_zesp;

SELECT pracownik.nazwisko, zespol.nazwa
FROM Pracownik RIGHT JOIN zespol ON pracownik.id_zesp=zespol.id_zesp;

SELECT [ID Pracownika], Personel.Nazwisko, Personel.Imię, [Zasadnicza]
FROM Płace, Personel
WHERE Płace.[ID Pracownika]=Personel.[ID]
and Zasadnicza  not BETWEEN 800 and 1500;

SELECT Personel.Nazwisko, Personel.Imię, Płace.Zasadnicza, Personel.ID
FROM Personel INNER JOIN Płace ON Personel.ID = Płace.[ID Pracownika]
WHERE (((Personel.Nazwisko) Like 'B*') AND ((Personel.ID)=[ID Pracownika]));


Aliasy

SELECT nazwisko, nazwa
FROM Pracownik AS p, Zespol AS z
WHERE p.id_zesp=z.id_zesp;

SELECT nazwisko, nazwa
FROM Pracownik AS p INNER JOIN zespol AS z ON p.id_zesp = z.id_zesp
ORDER BY nazwisko;

SELECT nazwisko, nazwa
FROM Pracownik AS p LEFT JOIN zespol AS z ON p.id_zesp = z.id_zesp
ORDER BY nazwisko;

SELECT nazwisko, nazwa, z.id_zesp
FROM Pracownik AS p RIGHT JOIN zespol AS z ON p.id_zesp = z.id_zesp;

SELECT Personel.Nazwisko, Oferta.[Nazwa kursu]
FROM Personel
INNER JOIN (Wykładowcy
 INNER JOIN Oferta
 ON Wykładowcy.[ID Kursu] = Oferta.[ID kursu])
 ON Personel.ID = Wykładowcy.[ID Pracownika]
ORDER BY Personel.Nazwisko;

Zapytania zagnieżdżone


SELECT NAZWISKO, PLACA_POD, ETAT, ID_ZESP
FROM PRACOWNIK
WHERE PLACA_POD > ANY
 (select distinct placa_pod from Pracownik where id_zesp=30);

SELECT Personel.Dział, Format(Count([Nazwisko])/
  (SELECT Count([Nazwisko])
 FROM [Personel]),
 "0%") AS [Odsetek zatrudnionych]
FROM Personel
GROUP BY Personel.Dział;

SELECT NAZWISKO, PLACA_POD, ETAT, ID_ZESP
FROM PRACOWNIK
WHERE PLACA_POD >= ANY
 (select distinct placa_pod as placa_min from Pracownik m where id_zesp=[Podaj dział]);

SELECT Nazwisko, numer, szef, etat, id_zesp
FROM Pracownik AS p
WHERE exists
  ( select numer from Pracownik
     where Pracownik.szef=p.numer);


Zapytania SQL-właściwe


UNION
SELECT etat from Pracownik
 where id_zesp=10
UNION select etat from pracownik
where id_zesp=30;