Przejście do SQL.htm

Przykłady z SQL

I. Zapytania tworzące i modyfikujące dane

1. Tworzenie tabeli - komenda CREATE

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;

2. Dołączenie danych

 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";

4. Modyfikacja struktury tabeli istniejącej - ALTER TABLE

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

5. 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;

6. 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;

7. DROP

Usunięcie całej tabeli
DROP TABLE [Wykładowcy1];
Usunięcie pola
ALTER TABLE Etat4 
  DROP COLUMN Salary;

II. ZAPYTANIA WYBIERAJĄCE - SELECT

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;

 


Mały słownik SQL
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  

SQL.htm