Przejście do SQL.htm
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 , stanowisko text, data_zatr date, constraint klucz primary key (nr) );
Utworzenie tabeli Worker create table worker (nr integer, nazwisko text, constraint indeks foreign key (nr) references Personel(ID));
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;
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";
Dodanie kolumny (pola) PlacaPod typu liczba podwójnej precyzji Alter Table Pracownicy ADD COLUMN PlacaPod float;
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;
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;
Usunięcie całej tabeli DROP TABLE [Wykładowcy1];
Usunięcie pola ALTER TABLE Etat4 DROP COLUMN Salary;
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;
Słowo SQL | Znaczenie | Opis | Przykład |
ADD | dodawać | Dotyczy dodawania kolumny tabeli lub indeksu;występuje tylko w zapytaniach definiujących dane | ALTER TABLE Etat ADD COLUMN Salary CURRENCY; |
ALL | wszystko | Predykat określający sposób traktowania wierszy identycznych lub o identycznych wartościach w niektórych polach. Używany po słowie SELECT w zapytaniach wybierających, a także w zapytaniach z zapytaniami zagnieżdżonymi. Przyjmowany domyślnie (gdy nie występuje). | SELECT ALL * FROM Pracownicy ORDER BY NrPracownika; SELECT * FROM Pracownicy ORDER BY NrPracownika; |
ALTER | zmieniać | Podstawowe słowo w konstrukcji zapytań definiujacych dane, których zadaniem jest zmiana definicji tabeli. | ALTER TABLE
Employees ADD COLUMN Salary CURRENCY; ALTER TABLE Employees DROP COLUMN Salary; W poniższym przykładzie usuwany jest istniejący klucz obcy z tabeli "Orders" ("Zamówienia"): ALTER TABLE Orders DROP CONSTRAINT EmployeesOrders; W następnym przykładzie klucz obcy jest ponownie dodawany do tabeli "Orders" ("Zamówienia"): ALTER TABLE Orders ADD CONSTRAINT EmployeesOrders FOREIGN KEY (EmployeeID) REFERENCES Employees (EmployeeID); |
ANY | jakiś | Synonim SOME. Używany w zapytaniach z zapytaniami zagnieżdżonymi. Zapytanie główne wybiera wszystkie wiersze, które spełniają operację porównania z dowolnym, przynajmniej jednym wierszem wybranym przez zapytanie zagnieżdżone. Przykład - pracownicy zarabiający nie mniej niż najniższa pensja z podanego działu | 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ł]); |
AS | jako; za (coś) | Pozwala zmienić nazwę kolumny wyniku zapytania wybierającego. Standardowo jest nią nazwa pola tabeli żródłowej. Używane w bloku kwalifikacji po nazwie pola tabeli źródłowej. Po AS należy podać nową nazwę. | SELECT NAZWISKO AS [Last Name - nazwisko] , PLACA_POD AS [Płaca podst], ETAT AS Stanowisko from PRACOWNIK; |
ASC | (od ascending) wznoszący się | Ustala rosnące uporządkowanie wierszy w zapytaniu wybierającym. Występuje po nazwie pola, którego wartości stanowią kryterium sortowania, w klauzuli ORDER BY | SELECT NAZWISKO, PLACA_POD AS [Płaca podst] from PRACOWNIK ORDER BY Nazwisko ASC, Placa_pod DESC ; |
BY | przez (tu według) | w GROUP BY, ORDER BY | SELECT etat, avg(placa_pod) from Pracownik where etat <> 'DYREKTOR' group BY etat; |
COLUMN | kolumna | Odpowiada polu tabeli definiowanej zapytanie. Występuje wraz ze słowami ADD lub DROP | ALTER TABLE kasety ADD COLUMN
cena CURRENCY; ALTER TABLE kasety ADD COLUMN [Liczba dni] INTEGER; ALTER TABLE kasety DROP COLUMN cena; |
CONSTRAINT | skrępowanie; ograniczenie; więzy | Słowo rozpoczynajace w zapytaniach definiujących dane, blok określający pole klucza głównego i/lub powiązanie | CREATE TABLE SecondTable
(FirstName TEXT, LastName TEXT, DateOfBirth DATETIME, CONSTRAINT MyTableConstraint UNIQUE (FirstName, LastName, DateOfBirth)); CREATE TABLE ThirdTable (FirstName TEXT, LastName TEXT, SSN INTEGER CONSTRAINT MyFieldConstraint PRIMARY KEY); CREATE TABLE [Wypożyczenia1] ([Nr kasety] LONG CONSTRAINT indeks1w REFERENCES kasety(NrKasety), [Nr Klienta] LONG CONSTRAINT indeks2w REFERENCES klienci([Nr klienta]), [Data wypożyczenia] Date) |
CREATE | tworzyć | Pierwsze słowo wyrażenia określającego zapytanie definiujące dane. Występuje ze słowami TABLE i UNDEX | CREATE UNIQUE
INDEX WpisUnikatowy ON [Wypożyczenia] ([Nr kasety], [Nr Klienta], [Data wypożyczenia]) WITH DISALLOW NULL; |
DATABASE | Baza danych | Określa zewnętrzną bazędanych jako źródło wierszy dla zapytania wybierającego. Występuje w klauzuli IN, w drugiej części (FROM) bloku kwalifikacji | SELECT CustomerID FROM
Customers IN [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;] WHERE CustomerID Like A*; |
DELETE | usuwać | Kluczowe słowo w definicji zapytania usuwajacego. Zastepuje słowo SELECT w zwykłym bloku kwalifikacji | DELETE * FROM Telefony WHERE Nazwisko = 'Kowalski'; |
DESC | (od descending) schodzący | Ustala malejące uporządkowanie wierszy w zapytaniu wybierającym. Wystepuje po nazwie pola, którego wartosci stanowią kryterium sortowania, w klauzuli ORDER BY | SELECT LastName, FirstName FROM Employees ORDER BY LastName DESC; |
DISALLOW | nie pozwalać | W połączeniu ze słowem NULL nie dopuszcza pustych pól indeksu. Występuje w zapytaniach definiujących dane, dotyczących utworzenia indeksu | CREATE UNIQUE INDEX CustID ON Customers (CustomerID) WITH DISALLOW NULL; |
DISTINCT | różny | Predykat używany po słowie SELECT w zapytaniach wybierających. Jego użycie powoduje wybór jedynie tych wierszy, które zawierają różne wartości w polach, wskazywanych w bloku kwalifikacji | SELECT DISTINCT Nazwisko FROM Pracownicy; |
DISTINCTROW | różny wiersz | Zapytanie nie wybierze tylko wierszy w całości identycznych. Powtarzanie się identycznych wartości w niektórych polach nie będzie dyskwalifikujące | SELECT DISTINCTROW
NazwaFirmy FROM Klienci INNER JOIN Zamówienia ON Klienci.KodKlienta = Zamówienia.KodKlienta ORDER BY NazwaFirmy; |
DROP | usunąć | Używane w zapytaniach definiujacych dane. W połączeniu ze słowami TABLE, INDEX, COLUMN pozwala usunąć z bazy danych definicję tabeli, zaś z definicji tabeli indeks lub pole | DROP TABLE
Trainees; DROP INDEX MyIndex ON Employees; |
EXISTS | istnieć | Predykat występujacy w warunku WHERE zapytania głównego przed zapytaniem zagnieżdżonym. Warunek jest spełniony gdy rezultatem zapytania zagnieżdżonego jest choć jeden wiersz | SELECT Nazwisko, numer, szef,
etat, id_zesp from Pracownik p where EXISTS ( select numer from Pracownik where Pracownik.szef=p.numer); - Pracownicy posiadający podwładnych |
FOREIGN | obcy | Używane wraz ze słowem KEY. W zapytaniach definiujących dane określa pole tworzonej tabeli jako pole klucza obcego. | create table worker (nr integer, nazwisko text, constraint indeks FOREIGN key (nr) references Personel(ID)) ; |
FROM | od, z | Podstawowe słowo w konstrukcji bloku kwalifikacji zapytań. Wskazuje na obiekt źródłowy zapytania | |
GROUP | grupować | Używane w zapytaniach zbiorczych wraz z BY do grupowania wierszy wg identycznych wartości wskazanego pola |