Programy SQL z objaśnieniem - przykłady 1
// rza1.sql
// Wybierz wszystkie rekordy z tabeli pracowni
SELECT *
FROM pracowni;
// rzb1a.sql
// Zliczenie liczby rekordów (wierszy) w tabeli o nazwie "TEMAT".:
SELECT COUNT(*)
FROM TEMAT;
// To zapytanie SQL wykorzystuje funkcję agregacyjną COUNT(*) do zliczenia liczby rekordów (wierszy) w tabeli o nazwie "TEMAT".:
// rzb2.sql
// Wybor minimalnej daty urodzenia z tabeli STUDENCI;
select MIN(DATA_UR)
from STUDENCI;
//
// rzg1.sql
/* zapytanie SQL ma na celu zliczenie
liczby wystąpień każdej unikalnej oceny w tabeli "oceny",
a następnie posortowanie wyników malejąco według ocen
*/
select ocena, count(*)
from oceny
group by ocena
order by ocena desc;
/*
Objaśnienie:
SELECT ocena, COUNT(*): Wybiera kolumnę "ocena" oraz liczy liczbę wystąpień
każdej unikalnej oceny.
FROM oceny: Wskazuje tabelę, na której wykonuje się zapytanie,
w tym przypadku tabelę "oceny".
GROUP BY ocena: Grupuje wyniki według unikalnych ocen.
ORDER BY ocena DESC: Sortuje wyniki malejąco według ocen.
Wynik tego zapytania powinien przedstawiać unikalne oceny w tabeli "oceny"
wraz z liczbą ich wystąpień, posortowane malejąco według ocen
*/
// rzd1.sql
/*
Zapytanie SQL ma na celu wybranie nazwisk pracowników
(kolumna "nazwisko" z tabeli "pracowni")
oraz kwot dochodów (kolumna "kwota" z tabeli "dochody") dla tych pracowników,
którzy mają powiązane rekordy w obu tabelach.
*/
select p.nazwisko, d.kwota
from pracowni p, dochody d
where p.nrp=d.nrp
order by d.kwota desc;
/*
Objaśnienie:
SELECT p.nazwisko, d.kwota: Wybiera kolumny "nazwisko" z tabeli "pracowni"
i "kwota" z tabeli "dochody".
FROM pracowni p, dochody d: Określa, z których tabel pobierane są dane,
nadając im aliasy "p" i "d".
WHERE p.nrp = d.nrp: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "nrp".
ORDER BY d.kwota DESC: Sortuje wyniki malejąco według kolumny
"kwota" z tabeli "dochody".
Wynik tego zapytania powinien zawierać nazwiska pracowników
oraz odpowiadające im kwoty dochodów, posortowane malejąco według kwot dochodów.
*/
// rza2.sql
/* ma na celu wybranie wszystkich kolumn z tabeli "pracowni",
gdzie nazwisko pracownika zaczyna się od litery 'A'
*/
select *
from pracowni
where nazwisko like 'A%';
/*
Objaśnienie:
SELECT *: Wybiera wszystkie kolumny z tabeli "pracowni".
FROM pracowni: Wskazuje tabelę, z której pobierane są dane,
w tym przypadku tabelę "pracowni".
WHERE nazwisko LIKE 'A%': Warunek, który wybiera tylko te wiersze,
gdzie kolumna "nazwisko" zaczyna się od litery 'A'.
Operator LIKE używany jest do porównań tekstowych, a '%',
w tym przypadku, oznacza dowolny ciąg znaków.
Wynik tego zapytania powinien zawierać wszystkie kolumny z tabeli "pracowni" dla pracowników,
których nazwisko zaczyna się od litery 'A'.
*/
// rzf1a.sql
/* Ma na celu wybranie kwoty dochodu (a.kwota), nazwiska pracownika (c.nazwisko)
oraz nazwy tematu (f.nazwatemat) dla przypadków,
gdzie nazwisko pracownika to 'MISIURA' i nazwa tematu to 'DYSK'.
*/
-- Wybór kwoty dochodu, nazwiska pracownika i nazwy tematu
SELECT a.kwota, c.nazwisko, f.nazwatemat
FROM dochody a, pracowni c, temat f
WHERE c.nazwisko = 'MISIURA' AND f.nazwatemat = 'DYSK';
/*
Objaśnienie:
SELECT a.kwota, c.nazwisko, f.nazwatemat:
Wybiera odpowiednie kolumny z tabel dochody, pracowni i temat.
FROM dochody a, pracowni c, temat f:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy a, c, i f.
WHERE c.nazwisko = 'MISIURA' AND f.nazwatemat = 'DYSK':
Warunek, który filtruje wiersze, aby wybrać tylko te,
gdzie nazwisko pracownika to 'MISIURA' i nazwa tematu to 'DYSK'.
Wynik tego zapytania powinien zawierać kwotę dochodu, nazwisko pracownika
i nazwę tematu
dla przypadków spełniających warunki określone w klauzuli WHERE
*/
// rza3.sql
/*
zapytanie SQL wydaje się być poprawne i ma na celu wybranie nazwiska studenta
(s.nazwisko), numeru studenta (s.student), oraz kierunku studiów (k.kierunek)
dla przypadków, gdzie kierunek studiów to 'INFORMATYKA'
i istnieje powiązanie między tabelami "KIER_STU" i "STUDENCI
*/
-- Wybór nazwiska studenta, numeru studenta i kierunku studiów
SELECT s.nazwisko, s.student, k.kierunek
FROM KIER_STU k, STUDENCI s
WHERE s.student = k.student AND k.kierunek = 'INFORMATYKA';
/*
Objaśnienie:
SELECT s.nazwisko, s.student, k.kierunek: Wybiera odpowiednie kolumny
z tabel "STUDENCI" i "KIER_STU".
FROM KIER_STU k, STUDENCI s: Wskazuje, z których tabel pobierane są dane,
nadając im aliasy k i s.
WHERE s.student = k.student AND k.kierunek = 'INFORMATYKA':
Warunek, który filtruje wiersze, aby wybrać tylko te,
gdzie numer studenta w tabeli "STUDENCI" jest równy numerowi studenta
w tabeli "KIER_STU" i kierunek studiów to 'INFORMATYKA'.
Wynik tego zapytania powinien zawierać nazwisko studenta,
numer studenta i kierunek studiów dla przypadków spełniających warunki
określone w klauzuli WHERE.
*/
// rzg2.sql
/*
To zapytanie SQL ma na celu wybranie nazwiska studenta (s.nazwisko),
numeru studenta (s.student), oraz średniej oceny (avg(ocena))
dla każdego studenta z tabeli "oceny" i "studenci".
Następnie wyniki są grupowane według numeru studenta i nazwiska,
a na końcu są sortowane alfabetycznie według nazwiska.
*/
-- Wybór nazwiska studenta, numeru studenta i średniej oceny
SELECT s.nazwisko, s.student, AVG(ocena) as srednia_ocena
FROM oceny o, studenci s
WHERE o.student = s.student
GROUP BY s.student, s.nazwisko
ORDER BY s.nazwisko;
/*
Objaśnienie:
SELECT s.nazwisko, s.student, AVG(ocena) as srednia_ocena:
Wybiera odpowiednie kolumny z tabel "STUDENCI" i "OCENY",
oraz oblicza średnią ocenę dla każdego studenta.
FROM OCENY o, STUDENCI s: Wskazuje, z których tabel pobierane są dane,
nadając im aliasy o i s.
WHERE o.student = s.student: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "student".
GROUP BY s.student, s.nazwisko: Grupuje wyniki według numeru studenta
i nazwiska, co jest wymagane, ponieważ korzystamy z funkcji agregującej AVG().
ORDER BY s.nazwisko: Sortuje wyniki alfabetycznie według nazwiska studenta.
Wynik tego zapytania powinien zawierać nazwisko studenta, numer studenta
oraz średnią ocenę dla każdego studenta, posortowane alfabetycznie według nazwiska.
*/
// rze1.sql
/*
Twoje zapytanie SQL wydaje się być poprawne i ma na celu wybranie
nazwy tematu (t.nazwatemat),
nazwiska pracownika (p.nazwisko),
oraz numeru pracownika (p.nrp),
gdzie nazwisko pracownika to 'WILK'
i istnieją powiązania między tabelami "pracowni", "dochody" i "temat".
*/
-- Wybór nazwy tematu, nazwiska pracownika i numeru pracownika
SELECT t.nazwatemat, p.nazwisko, p.nrp
FROM temat t, dochody d, pracowni p
WHERE p.nrp = d.nrp AND d.nrt = t.nrt AND p.nazwisko = 'WILK';
/*
Objaśnienie:
SELECT t.nazwatemat, p.nazwisko, p.nrp:
Wybiera odpowiednie kolumny z tabel "TEMAT", "DOCHODY" i "PRACOWNI".
FROM TEMAT t, DOCHODY d, PRACOWNI p:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy t, d i p.
WHERE p.nrp = d.nrp AND d.nrt = t.nrt AND p.nazwisko = 'WILK':
Warunek, który łączy te trzy tabele na podstawie wspólnych kluczy
("nrp" między "PRACOWNI" i "DOCHODY", oraz "nrt" między "DOCHODY" i "TEMAT"),
a także dodaje warunek na nazwisko pracownika.
Wynik tego zapytania powinien zawierać
nazwę tematu, nazwisko pracownika i numer pracownika dla przypadków,
gdzie nazwisko pracownika to 'WILK'
oraz istnieją powiązania między tabelami "pracowni", "dochody" i "temat".
*/
// rzg3.sql
/*
zapytanie SQL ma na celu wybranie nazwy tematu (t.nazwatemat),
numeru tematu (t.nrt), oraz sumy kwot dochodów (SUM(kwota))
dla każdego tematu z tabeli "temat" i "dochody".
Wyniki są grupowane według nazwy tematu i numeru tematu,
a na końcu są sortowane alfabetycznie według nazwy tematu.
*/
-- Wybór nazwy tematu, numeru tematu i sumy kwot dochodów
SELECT t.nazwatemat, t.nrt, SUM(kwota) as suma_kwot
FROM temat t, dochody d
WHERE t.nrt = d.nrt
GROUP BY t.nazwatemat, t.nrt
ORDER BY t.nazwatemat;
/*
Objaśnienie:
SELECT t.nazwatemat, t.nrt, SUM(kwota) as suma_kwot:
Wybiera odpowiednie kolumny z tabel "temat" i "dochody",
oraz oblicza sumę kwot dochodów dla każdego tematu.
FROM temat t, dochody d: Wskazuje, z których tabel pobierane są dane,
nadając im aliasy t i d.
WHERE t.nrt = d.nrt: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "nrt".
GROUP BY t.nazwatemat, t.nrt: Grupuje wyniki według
nazwy tematu i numeru tematu,
co jest wymagane, ponieważ korzystamy z funkcji agregującej SUM().
ORDER BY t.nazwatemat: Sortuje wyniki alfabetycznie według nazwy tematu.
Wynik tego zapytania powinien zawierać
nazwę tematu, numer tematu oraz sumę kwot dochodów dla każdego tematu,
posortowane alfabetycznie według nazwy tematu
*/
// rzc1.sql
/*
Zapytanie SQL ma na celu wybranie nazwiska pracownika (nazwisko),
a także obliczenie premii (PREMIA),
która jest 25% sumy kwot dochodów (sum(kwota))
dla każdego pracownika z tabeli "pracowni" i "dochody".
Wyniki są grupowane według numeru pracownika i nazwiska pracownika,
a na końcu są sortowane alfabetycznie według nazwiska pracownika
*/
-- Wybór nazwiska pracownika i premii (25% sumy kwot dochodów)
SELECT nazwisko AS NAZW_PRAC, SUM(kwota) * 0.25 AS PREMIA
FROM pracowni p, dochody d
WHERE p.nrp = d.nrp
GROUP BY p.nrp, p.nazwisko
ORDER BY p.nazwisko;
/*
Objaśnienie:
SELECT nazwisko AS NAZW_PRAC, SUM(kwota) * 0.25 AS PREMIA:
Wybiera odpowiednie kolumny z tabel "pracowni" i "dochody",
a także oblicza premię jako 25% sumy kwot dochodów dla każdego pracownika.
FROM pracowni p, dochody d:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy p i d.
WHERE p.nrp = d.nrp: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "nrp".
GROUP BY p.nrp, p.nazwisko:
Grupuje wyniki według numeru pracownika i nazwiska pracownika,
co jest wymagane, ponieważ korzystamy z funkcji agregującej SUM().
ORDER BY p.nazwisko: Sortuje wyniki alfabetycznie według nazwiska pracownika.
Wynik tego zapytania powinien zawierać nazwisko pracownika
i obliczoną premię (25% sumy kwot dochodów) dla każdego pracownika,
posortowane alfabetycznie według nazwiska pracownika
*/
//rzh2.sql
/*
Zapytanie SQL ma na celu wybranie kierunku studiów (k.kierunek)
oraz średniej oceny (avg(o.ocena)) dla przypadków,
gdzie średnia ocena studenta na danym kierunku studiów jest mniejsza niż 4.
Wyniki są grupowane według kierunku studiów,
a następnie wyniki są filtrowane przy użyciu klauzuli HAVING
i sortowane alfabetycznie według kierunku studiów
*/
-- Wybór kierunku studiów i średniej oceny, gdzie średnia ocena jest mniejsza niż 4
SELECT k.kierunek, AVG(o.ocena) as srednia_ocena
FROM kier_stu k, oceny o
WHERE k.student = o.student
GROUP BY k.kierunek
HAVING AVG(o.ocena) < 4
ORDER BY k.kierunek;
/*
Objaśnienie:
SELECT k.kierunek, AVG(o.ocena) as srednia_ocena:
Wybiera odpowiednie kolumny z tabel "kier_stu" i "oceny",
oraz oblicza średnią ocenę dla każdego kierunku studiów.
FROM kier_stu k, oceny o: Wskazuje, z których tabel pobierane są dane,
nadając im aliasy k i o.
WHERE k.student = o.student: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "student".
GROUP BY k.kierunek: Grupuje wyniki według kierunku studiów,
co jest wymagane, ponieważ korzystamy z funkcji agregującej AVG().
HAVING AVG(o.ocena) < 4: Filtruje grupy, aby wybrać tylko te,
gdzie średnia ocena jest mniejsza niż 4.
ORDER BY k.kierunek: Sortuje wyniki alfabetycznie według kierunku studiów.
Wynik tego zapytania powinien zawierać kierunek studiów
oraz średnią ocenę dla kierunków, gdzie średnia ocena jest mniejsza niż
*/
// rzh1.sql
/*
zapytanie SQL wydaje się być poprawne i ma na celu wybranie nazwiska pracownika
(p.nazwisko), numeru pracownika (p.nrp),
oraz liczby przypisanych wykładów (count(w.nrp)) dla przypadków,
gdzie pracownik ma przypisane co najmniej 2 wykłady.
Wyniki są grupowane według numeru pracownika i nazwiska pracownika,
a następnie wyniki są filtrowane przy użyciu klauzuli HAVING
i sortowane alfabetycznie według nazwiska pracownika.
*/
-- Wybór nazwiska pracownika, numeru pracownika i liczby przypisanych wykładów
SELECT p.nazwisko, p.nrp, COUNT(w.nrp) as liczba_wykladow
FROM pracowni p, wykladow w
WHERE p.nrp = w.nrp
GROUP BY p.nrp, p.nazwisko
HAVING COUNT(w.nrp) >= 2
ORDER BY p.nazwisko;
/*
Objaśnienie:
SELECT p.nazwisko, p.nrp, COUNT(w.nrp) as liczba_wykladow:
Wybiera odpowiednie kolumny z tabel "pracowni" i "wykladow",
a także oblicza liczbę przypisanych wykładów dla każdego pracownika.
FROM pracowni p, wykladow w:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy p i w.
WHERE p.nrp = w.nrp: Warunek, który łączy te dwie tabele
na podstawie wspólnego klucza "nrp".
GROUP BY p.nrp, p.nazwisko:
Grupuje wyniki według numeru pracownika i nazwiska pracownika,
co jest wymagane, ponieważ korzystamy z funkcji agregującej COUNT().
HAVING COUNT(w.nrp) >= 2: Filtruje grupy, aby wybrać tylko te,
gdzie liczba przypisanych wykładów jest co najmniej 2.
ORDER BY p.nazwisko: Sortuje wyniki alfabetycznie według nazwiska pracownika.
Wynik tego zapytania powinien zawierać
nazwisko pracownika, numer pracownika i liczbę przypisanych wykładów
dla pracowników, którzy mają przypisane co najmniej 2 wykłady.
*/
// rzh3.sql
/*
Zapytanie SQL ma na celu wybranie nazwy zespołu (z.nazwazesp),
nazwy tematu (t.nazwatemat), oraz sumy kwot dochodów (sum(d.kwota))
dla przypadków, gdzie średnia kwota dochodów przypisanego do tematu j
est większa niż 5 000 000.
Wyniki są grupowane według nazwy zespołu i nazwy tematu,
a następnie wyniki są filtrowane przy użyciu klauzuli HAVING
i sortowane alfabetycznie według nazwy zespołu.
*/
-- Wybór nazwy zespołu, nazwy tematu i sumy kwot dochodów,
-- gdzie średnia kwota dochodów jest większa niż 5 000 000
SELECT z.nazwazesp, t.nazwatemat, SUM(d.kwota) as suma_kwot
FROM zespol z, dochody d, temat t, pracowni p
WHERE d.nrt = t.nrt AND p.nrp = d.nrp AND p.nrz = z.nrz
GROUP BY z.nazwazesp, t.nazwatemat
HAVING AVG(d.kwota) > 5000000
ORDER BY z.nazwazesp;
/*
Objaśnienie:
SELECT z.nazwazesp, t.nazwatemat, SUM(d.kwota) as suma_kwot:
Wybiera odpowiednie kolumny z tabel "zespol", "dochody", "temat" i "pracowni",
a także oblicza sumę kwot dochodów dla każdego zespołu i tematu.
FROM zespol z, dochody d, temat t, pracowni p:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy z, d, t i p.
WHERE d.nrt = t.nrt AND p.nrp = d.nrp AND p.nrz = z.nrz:
Warunek, który łączy te cztery tabele na podstawie wspólnych kluczy
("nrt" między "DOCHODY" i "TEMAT", "nrp" między "DOCHODY" i "PRACOWNI", "nrz" między "PRACOWNI" i "ZESPOL").
GROUP BY z.nazwazesp, t.nazwatemat:
Grupuje wyniki według nazwy zespołu i nazwy tematu, co jest wymagane,
ponieważ korzystamy z funkcji agregującej SUM().
HAVING AVG(d.kwota) > 5000000: Filtruje grupy,
aby wybrać tylko te, gdzie średnia kwota dochodów jest większa niż 5 000 000.
ORDER BY z.nazwazesp: Sortuje wyniki alfabetycznie według nazwy zespołu.
Wynik tego zapytania powinien zawierać nazwę zespołu, nazwę tematu
oraz sumę kwot dochodów dla przypadków,
gdzie średnia kwota dochodów jest większa niż 5 000 000,
posortowane alfabetycznie według nazwy zespołu.
*/
// rzf1.sql
/*
Zapytanie SQL ma na celu wybranie nazwy zespołu (z.nazwazesp),
nazwy tematu (t.nazwatemat), oraz sumy kwot dochodów (sum(d.kwota))
dla przypadków, gdzie średnia kwota dochodów przypisanego do tematu
jest większa niż 5 000 000.
Wyniki są grupowane według nazwy zespołu i nazwy tematu,
a następnie wyniki są filtrowane przy użyciu klauzuli HAVING
i sortowane alfabetycznie według nazwy zespołu
*/
-- Wybór nazwy zespołu, nazwy tematu i sumy kwot dochodów,
-- gdzie średnia kwota dochodów jest większa niż 5 000 000
SELECT z.nazwazesp, t.nazwatemat, SUM(d.kwota) as suma_kwot
FROM zespol z, dochody d, temat t, pracowni p
WHERE d.nrt = t.nrt AND p.nrp = d.nrp AND p.nrz = z.nrz
GROUP BY z.nazwazesp, t.nazwatemat
HAVING AVG(d.kwota) > 5000000
ORDER BY z.nazwazesp;
/*
Objaśnienie:
SELECT z.nazwazesp, t.nazwatemat, SUM(d.kwota) as suma_kwot:
Wybiera odpowiednie kolumny z tabel "zespol", "dochody", "temat" i "pracowni",
a także oblicza sumę kwot dochodów dla każdego zespołu i tematu.
FROM zespol z, dochody d, temat t, pracowni p:
Wskazuje, z których tabel pobierane są dane, nadając im aliasy z, d, t i p.
WHERE d.nrt = t.nrt AND p.nrp = d.nrp AND p.nrz = z.nrz:
Warunek, który łączy te cztery tabele na podstawie wspólnych kluczy
("nrt" między "DOCHODY" i "TEMAT", "nrp" między "DOCHODY" i "PRACOWNI", "nrz"
między "PRACOWNI" i "ZESPOL").
GROUP BY z.nazwazesp, t.nazwatemat: Grupuje wyniki według nazwy zespołu
i nazwy tematu, co jest wymagane, ponieważ korzystamy z funkcji agregującej SUM().
HAVING AVG(d.kwota) > 5000000: Filtruje grupy, aby wybrać tylko te,
gdzie średnia kwota dochodów jest większa niż 5 000 000.
ORDER BY z.nazwazesp: Sortuje wyniki alfabetycznie według nazwy zespołu.
Wynik tego zapytania powinien zawierać nazwę zespołu, nazwę tematu
oraz sumę kwot dochodów dla przypadków,
gdzie średnia kwota dochodów jest większa niż 5 000 000,
posortowane alfabetycznie według nazwy zespołu.
*/
// rz1.sql
connect baza1;
create table zesp2
(Nazwazesp char(15),
Nrz smallint not null,
Nrpkz smallint,
primary key (Nrz));
create unique index zesp2_Nrz on zesp2 (Nrz);
create table prac2
(Nrp smallint not null,
Kobieta char(1),
Data_ur timestamp not null,
Nazwisko char(15) not null,
Nrz smallint not null,
primary key (Nrp) );
create index prac2_Nrz on prac2 (Nrz);
create unique index prac2_Nrp on prac2 (Nrp);
insert into zesp2 select * from zespol;
insert into prac2 select * from pracowni;
select * from prac2;
select * from zesp2;
alter table zesp2
foreign key fk_prac2 (nrpkz) references prac2
on delete restrict;
alter table prac2
foreign key fk_zesp2 (nrz) references zesp2
on delete set null;
select * from prac2;
select * from zesp2;
insert into zesp2 values ('USM', 7, 33);
insert into zesp2 values ('USM2', 8, 1);
delete from prac2 where nrp=33;
grant connect to admin identified by admin;
connect baza1 admin/admin;
select * from zesp2;
connect baza1 sysadm/sysadm;
grant resource to admin;
select * from zesp2;
connect baza1 admin/admin;
select * from zesp2;
connect baza1 sysadm/sysadm;
grant dba to admin;
connect baza1 admin/admin;
select * from sysadm.zesp2;
use 1;
use 2;
use 3;
connect baza1 sysadm/sysadm;
select * from sysuserauth;
grant connect to prac identified by prac;
connect baza1 admin/admin;
grant connect to prac1 identified by prac1;
use 1;
grant connect to stud identified by stud;
connect baza1 admin/admin;
grant select on zesp2 to prac;
connect baza1 sysadm/sysadm;
grant select on zesp2 to prac;
select * from zesp2;
grant select on sysadm.zesp2 to prac;
disconnect all;
connect baza1 admin/admin;
create synonym zesp2 for sysadm.zesp2;
connect baza1 prac/prac;
select * from sysadm.zesp2;
create table Tem1 (nazwateamt char(30), data_odb timestamp, nrt integer not null,
nrpkt smallint not null);
/* Komentarz
Wprowadzono do zapytania wiele operacji dotyczących tworzenia tabel,
indeksów, operacji na danych, a także operacji na uprawnieniach użytkowników
w systemie baz danych. Oto krótka analiza każdej części zapytania:
Tworzenie tabel:
Utworzono ś dwie tabele: zesp2 i prac2, zdefiniowane z różnymi kolumnami.
zesp2 ma klucz główny Nrz oraz indeks unikalny na Nrz.
prac2 ma klucz główny Nrp, indeks na Nrz oraz indeks unikalny na Nrp.
Wstawianie danych:
Skopiowano dane z tabel zespol i pracowni do tabel zesp2 i `prac2
USE jest komendą specyficzną dla różnych systemów zarządzania bazą danych (DBMS),
takich jak MySQL czy SQL Server.
W zapytaniach SQL dla wielu systemów nie ma komendy USE.
Komenda ta jest używana, aby zmienić bieżącą bazę danych w trakcie sesji użytkownika.
Natomiast CONNECT jest używane do nawiązania połączenia z bazą danych.
W zapytaniu użyło CONNECT do nawiązania połączenia z
różnymi użytkownikami
(admin, sysadm, prac, itp.) i różnymi hasłami (admin, sysadm, prac, itp.).
*/