SELECT SELECT kolumna1, kolumna2,, kolumnan FROM tabela wybrane kolumny SELECT * FROM tabela wszystkie kolumny select * from Orders select CustomerID, CompanyName, Country from Customers WHERE SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek select * from Orders where ShipCountry='Mexico' AS (aliasy) Alias to tymczasowa nazwa zastępcza, którą możemy definiować dla tabel oraz dla kolumn. Działa także z pominięciem słowa kluczowego AS. Należy używać przy łączeniu tabel (JOIN). SELECT * FROM tabela [AS] tab SELECT kolumna [AS] kol FROM tabela select o.* from Orders as o join Customers as c on o.customerid=c.customerid where c.country='france' OR/AND SELECT * FROM tabela WHERE warunek1 OR/AND warunek2 select * from Orders where ShipCountry='Mexico' or ShipCountry='Germany' select * from Employees where Country='USA' and YEAR(BirthDate)>1955 SQL Basics Anna Zawadzka 1
DISTINCT Pozwala otrzymać unikalne wyniki. SELECT DISTINCT kolumna1 FROM tabela select distinct ShipCity from Orders LIKE Służy do porównywania łańcuchów znakowych ze wskazanym wzorcem. Znaki specjalne: % - dowolny ciąg znaków (w tym pusty), _ - dowolny pojedynczy znak. SELECT * FROM tabela WHERE kolumna [NOT] LIKE wzorzec select * from Orders where ShipCountry like 'P%' IN Sprawdzenie, czy wartości wybranej kolumny zawierają się w podanym zbiorze. SELECT * FROM tabela WHERE kolumna IN (wartość1, wartość2,, wartośćn) Powyższe zapytanie jest równoważne do następującego: SELECT * FROM tabela WHERE kolumna=wartość1 OR kolumna=wartość2 OR OR kolumna=wartośćn select * from Orders where ShipCountry in ('Mexico','Germany','Brazil') BETWEEN Sprawdzenie, czy wartości wybranej kolumny zawierają się w podanym zakresie. SELECT * FROM tabela WHERE kolumna BETWEEN wartość1 AND wartość2 select * from Orders where OrderDate between '1996-07-01' and '1996-07-31' SQL Basics Anna Zawadzka 2
YEAR, MONTH, DAY, GETDATE Funkcje YEAR(data), MONTH(data), DAY(data) zwracają odpowiednio rok, miesiąc i dzień daty podanej jako argument. Funkcja GETDATE() zwraca aktualną datę i godzinę. select GETDATE() as today, DAY(GETDATE()) as day, MONTH(GETDATE()) as month, YEAR(GETDATE()) as year DATEPART Pozwala wydobyć wybraną część z wartości typu DATETIME (SMALLDATETIME). SELECT DATEPART(część, data) Część: yy/yyyy (rok), m/mm (miesiąc), d/dd (dzień), wk/ww (tydzień), hh (godzina), n/mi (minuta), s/ss (sekunda). select GETDATE() today, DATEPART(YYYY,GETDATE()) as day, DATEPART(MM,GETDATE()) as month, DATEPART(DD,GETDATE()) as year, DATEPART(HH,GETDATE()) as hour, DATEPART(MI,GETDATE()) as minute UPPER, LOWER, SUBSTRING Fukcje UPPER(kolumna) i LOWER(kolumna) zamienia łańcuchy znakowe znajdujące się w wybranej kolumnie odpowiednio na wielkie i małe litery. SUBSTRING z wybranego napisu pobiera jego podciąg identyfikowany przez pozycję początkową oraz jego długość. SELECT SUBSTRING(kolumna, start, długość) FROM tabela select LOWER(CompanyName) as low, UPPER(CompanyName) as upp from Customers select SUBSTRING(CompanyName,1,10) from Customers SQL Basics Anna Zawadzka 3
JOIN (INNER JOIN) Pozwala na pobieranie danych z dwóch lub więcej tabel poprzez ich połączenie. SELECT * FROM tabela1 as t1 JOIN tabela2 as t2 ON warunek Jak działa JOIN? Tworzony jest iloczyn kartezjański dwóch tabel (każdy rekord z tabeli1 łączymy z każdym rekordem z tabeli2). Następnie dla każdego wiersza sprawdzane jest spełnienie warunku określonego w ON (na przykład t1.id=t2.id). Rekordy, które nie spełniają warunku zostają odrzucone. select o.* from Orders as o join Customers as c on o.customerid=c.customerid where c.country='france' EXISTS/NOT EXISTS Używa się do sprawdzenia, czy podzapytanie zwraca jakiekolwiek wyniki. SELECT * FROM tabela WHERE [NOT] EXISTS (podzapytanie) select * from customers c where not exists (select * from orders o where o.customerid=c.customerid) ORDER BY Pozwala na sortowanie wyników zapytania. SELECT * FROM tabela WHERE warunek ORDER BY kolumna1 [ASC/DESC],, kolumnan [ASC/DESC] Dla każdej kolumny możemy zdefiniować, czy ma ona być posortowana rosnąco (ASC) lub malejąco (DESC). Domyślnie rekordy sortowane są rosnąco. Gdy podajemy kilka kolumn, najpierw dane sortowane są według pierwszej podanej kolumny, następnie w ramach poszczególnych wartości pierwszej podanej kolumny dane są sortowane według kolejnej kolumny i tak dalej. Innymi słowy najpierw wszystkie dane są sortowane według kolumny N, następnie według N-1, a na koniec wszystkie dane sortowane są według pierwszej podanej kolumny. select * from Employees order by LastName SQL Basics Anna Zawadzka 4
TOP N Pozwala ograniczyć liczbę wybieranych rekordów do podanej wartości. Można określić konkretną liczbę rekordów lub wartość procentową. SELECT TOP N [PERCENT] * FROM tabela select top 30 * from Customers select top 50 percent * from Customers GROUP BY Klauzula, która umożliwia tworzenie grup rekordów. Używana w parze z funkcjami agregującymi: COUNT, SUM, MAX, MIN, AVG. Kolejność podawania kolumn przy GROUP BY nie ma znaczenia. SELECT kolumna1,, kolumnan FROM tabela WHERE warunek GROUP BY kolumna1,, kolumnam select ProductID, max(quantity) as maxquantity from [Order Details] group by ProductID select EmployeeID, count(*) NoOfOrders from Orders group by EmployeeID HAVING Pozwala na wybór grup rekordów spełniających warunek logiczny, przy czym może być skonstruowany jedynie z funkcji agregujących i/lub wyrażeń grupujących. SELECT kolumna1,, kolumnan FROM tabela WHERE warunek GROUP BY kolumna1,, kolumnam HAVING warunek select CustomerID from Orders group by CustomerID having count(*)>=20 SQL Basics Anna Zawadzka 5
INSERT Służy do dodawania nowych rekordów do tabeli. Możemy wskazać, które kolumny uzupełniamy podanymi wartościami: INSERT INTO tabela (kolumna1,, kolumnam) VALUES (wartość1,, wartośćm) Możliwe jest także użycie instrukcji bez specyfikacji kolumn, wtedy jednak należy zadbać, aby dane były zgodne ze strukturą tabeli (liczba podanych wartości, ich kolejność oraz typ danych): INSERT INTO tabela VALUES (wartość1,, wartośćm) Źródłem nowych danych może być również wynik zapytania: INSERT INTO tabela SELECT kolumna1,, kolumnam FROM innatabela insert into Categories (CategoryName, Description) values ('KategoriaX','Opis kategorii X'), ('KategoriaY','Opis kategorii Y') insert into Categories values ('KategoriaZ','Opis kategorii Z', null) SELECT INTO Instrukcja tworzy nową tabelę i wypełnia ją wynikami instrukcji SELECT. Działa podobnie do INSERT INTO SELECT, z tym, że tabela, którą chcemy uzupełnić danymi jeszcze nie istnieje. Instrukcja kopiuje strukturę tabeli i dane, natomiast nie kopiuje kluczy głównych i obcych. SELECT kolumna1,, kolumnam INTO nowatabela FROM tabela WHERE warunek Jeśli chcemy jedynie skopiować strukturę tabeli bez wypełniania danymi, ustawiamy warunek, który będzie zawsze fałszywy: SELECT kolumna1,, kolumnam INTO nowatabela FROM tabela WHERE 0=1 select CategoryID, CategoryName, Description into CategoriesNew from Categories select * into CategoriesNew from Categories where 0=1 SQL Basics Anna Zawadzka 6
UPDATE Służy do modyfikacji istniejących rekordów. UPDATE tabela SET kolumna1=wartość1 [kolumna2=wartość2, ] WHERE warunek update Orders set EmployeeID=4 where EmployeeID=1 DELETE Usuwa wybrane rekordy. DELETE FROM tabela WHERE warunek delete from Customers where CustomerID not in (select o.customerid from Orders o) SQL Basics Anna Zawadzka 7
CREATE TABLE Tworzy nową tabelę. CREATE TABLE nazwatabeli ( nazwakolumny1 typ [NOT NULL], nazwakolumny2 typ [NOT NULL], [CONSTRAINT PK_nazwaKluczaGłównego PRIMARY KEY (kolumna1 [, kolumna2, ]),] [CONSTRAINT FK_nazwaKluczaObcego FOREIGN KEY (kolumna1 [, kolumna2, ]) REFERENCES innatabela (kolumna1 [, kolumna2, ])] ) Jeśli chcemy, aby wartości danej kolumny były wstawiane i inkrementowane automatycznie przy operacji INSERT (na przykład wartości ID), po informacji o typie danych należy umieścić klauzulę IDENTITY(X,Y), gdzie X jest wartością, od której zaczyna się numeracja, a Y informuje o jaką wartość ma być powiększony kolejny numer. create table Employees ( EmployeeID int identity(1,1) not null, FirstName nvarchar(10) not null, LastName nvarchar(30) not null, BirthDate datetime, Phone nvarchar(9), BossID int constraint PK_Employees primary key (EmployeeID), constraint FK_Employees_Employees foreign key (BossID) references Employees(EmployeeID) ) DROP TABLE Usuwa istniejącą tabelę. DROP TABLE nazwatabeli drop table Employees SQL Basics Anna Zawadzka 8
ALTER TABLE Pozwala na modyfikacje istniejącej tabeli: dodanie kolumny, dodanie klucza głównego i obcego, zmianę typu danych kolumny oraz usunięcie kolumny. ALTER TABLE tabela ADD nazwakolumny typdanych ALTER TABLE tabela ADD CONSTRAINT PK_nazwaKluczaGłównego PRIMARY KEY (kolumna1 [, kolumna2, ]) ALTER TABLE tabela ADD CONSTRAINT FK_nazwaKluczaObcego FOREIGN KEY (kolumna1 [, kolumna2, ]) REFERENCES innatabela (kolumna1 [, kolumna2, ]) ALTER TABLE tabela ALTER COLUMN nazwakolumny nowytypdanych ALTER TABLE tabela DROP COLUMN nazwakolumny alter table Orders add IsCancelled bit alter table ArchivedOrderDetails add constraint PK_ArchivedOrderDetails primary key(orderid, ProductID) alter table Customers alter column CompanyName nvarchar(100) TRANSAKCJE Ich istotą jest integrowanie kilku operacji w jedną niepodzielną całość. Poziomy izolacji transakcji: - READ UNCOMMITED - READ COMMITTED (default) - REPEATABLE READ - SNAPSHOT - SERIALIZABLE [SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED READ COMMITTED REPEATABLE READ SNAPSHOT SERIALIZABLE } BEGIN TRANSACTION COMMIT ROLLBACK SQL Basics Anna Zawadzka 9
PRZYDATNE STRONY: http://www.w3schools.com/sql/ https://msdn.microsoft.com/pl-pl/library/encyklopedia-sql--typy-danych-t-sql.aspx http://www.sqlpedia.pl/laczenie-tabel-sql/ http://www.sqlpedia.pl/group-by-grupowanie-danych/ https://msdn.microsoft.com/pl-pl/library/encyklopedia-sql--klucze-glowne--primary-key-iidentity.aspx SQL Basics Anna Zawadzka 10