W odróżnieniu od tabel, widoki na SQL Server nie zawierają i nie przechowują danych. Widoków używamy w przypadkach, gdy chcemy zapisać nasze zapytanie SQL, a następnie odwołać się do danych przy użycia krótkiego polecenia SELECT * FROM NAZWA_WIDOKU.  Do widoków możemy odwoływać się w zapytaniach SQL dokładnie w ten sam sposób, jak w odwołujey się do tabel. Tworzenie widoku rozpoczynamy poleceniem CREATE VIEW.

 CREATE VIEW NAZWA_WIDOKU AS
Select * from Tabela;

Przykład:

 use adventureworks2014 
go

CREATE VIEW NASZ_WIDOK AS
select * from [Person].[StateProvince] 
where name like 'A%' ; 

Nasz widok oparty jest o zapytanie mające wskazać nam wszystkie rekordy z tabeli StateProvince, które w kolumnie name mają wartości rozpoczynające się od litery „A”.  Widoki na SQL Server nie mogą zawierać polecenia ORDER BY. Próba wykorzystania tego polecenia wygeneruje komunikat informujący o błędzie.  Dopuszczalne jest tworzenie widoku opartego na innym widoku. Do stworzonego przez nas widoku odwołujemy, tak jak w przypadku tabel przy użyciu polecenia SELECT, jak w poniższym przykładzie.

SELECT * FROM NASZ_WIDOK;

Zmian w istniejącym widoku dokonujemy za pomocą polecenia ALTER VIEW.

 use adventureworks2014 
go

ALTER VIEW NASZ_WIDOK AS
select * from [Person].[StateProvince] 
where name like 'B%' ; 

Sam widok usuwany jest przy pomocy polecenia DROP.

 use adventureworks2014 
go

DROP VIEW NASZ_WIDOK; 

W przypadku, gdy chcemy skorzystać z danych zawartych w innej bazie danych na tym samym serwerze, odwołujemy się do danych używając odpowiedniego suffixu z nazwą bazy:

SELECT * FROM BAZA_DANYCH.SCHEMAT.TABELA

W przypadku, gdy chcemy skorzystać z danych zawartych na zewnętrznym serwerze SQL Server, najprostszą metodą jest podlinkowanie zewnętrznego serwera baz danych. Aby to zrobić, pierwszej kolejności musimy zdefiniować nasz zewnętrzny serwer podając jego pełną nazwę:

USE [master]
GO
EXEC master.dbo.sp_addlinkedserver
@server = N'NAZWA_ZEWNĘTRZNEGO_SERWERA',
@srvproduct=N'SQL Server' ;
GO

W drugiej kolejności definiujemy parametry logowania . Pamiętajmy, że login musi być wcześniej założony na zewnętrznej bazie danych. Powinien mieć także uprawnienia do odczytu baz, z których chcemy korzystać:

exec master.dbo.sp_addlinkedsrvlogin [NAZWA_ZEWNĘTRZNEGO_SERWERA] , 'false', null , 'login' ,'hasło';

Poniżej skrypt, który pozwala nam zdefiniować logowanie do zewnętrznego serwera przy użyciu poświadczeń domenowych:

exec master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'NAZWA_ZEWNĘTRZNEGO_SERWERA',
@locallogin = NULL ,
@useself = N'True' ;

W tej chwili możemy już swobodnie korzystać z danych na zewnętrznym serwerze. Dane w instrukcji SELECT wywołujemy używając nazwy serwera zewnętrznego oraz bazy danych, z której chcemy skorzystać:

SELECT *
FROM
[NAZWA_ZEWNĘTRZNEGO_SERWERA].NAZWA_BAZY.DBO.NAZWA_TABELI;

 

Tabele są podstawowymi obiektami baz danych. To właśnie na nich będą bazowały nasze skrypty. By stworzyć najprostszą tabelę na naszej bazie danych potrzebujemy podać jej nazwę, nazwy jej kolumn oraz określić typy danych dla kolumn. Samo utworzenie tabeli rozpoczynamy poleceniem CREATE TABLE.

create table PRZYKLADOWA_TABELA
(KOLUMNA_1 TYP_DANYCH,
KOLUMNA_2 TYP_DANYCH,
...
);

Dla przykładu:

create table PRACOWNICY
(ID INT,
IMIE VARCHAR(255),
NAZWISKO VARCHAR(255),
WIEK INT,
DATA_URODZENIA DATETIME
);

W ten sposób stworzyliśmy pustą tabelę. Możemy wprowadzać do niej swoje dane przy użyciu polecenia Insert.

Kolejną metodą na tworzenie tabel jest stworzenie tabeli na podstawie wyniku zapytania. Przykładowo: posiadamy zapytanie, które chcemy zapisać w formie tabeli, w tym celu stosujemy polecenie SELECT INTO, a sama konstrukcja wygląda następująco:

SELECT KOLUMNA_1
,KOLUMNA_2
INTO NAZWA_NOWEJ_TABELI
from NAZWA_ISTNIEJACEJ_TABELI
where NASZE_WARUNKI;

Dla przykładu:

SELECT distinct ProductSubcategoryID
,color INTO TABELA_Z_WYNIKU_SQL
from production.Product
where color = 'Black'
and (ProductSubcategoryID = 14 or ProductSubcategoryID = 12)
;

Tabela stworzona w ten sposób zawiera już dane. Typy danych w kolumnach nowej tabeli odpowiadają typom danych z tabeli, na której wykonaliśmy nasze zapytanie.

By zmienić naszą tabelę np poprzez dodanie, bądź usunięcie kolumn lub też zmianę typów danych dla kolumn stosujemy polecenie ALTER TABLE.  Nową kolumnę do istniejącej tabeli dodajemy poprzez użycie polecenia ADD, w którym definiujemy nazwę nowej kolumny oraz jej typ danych.

alter table PRACOWNICY
add MIASTO VARCHAR(255);

W podobny sposób możemy usunąć dowolną kolumnę z naszej tabeli. Modyfikujemy nasze zapytanie stosując polecenie DROP COLUMN:

alter table PRZYKLADOWA_TABELA
drop column MIASTO ;

Do zmiany typu danych w kolumnach naszej tabeli wykorzytujemy polecenie ALTER COLUMN. Stosując to polecenie, musimy pamiętać, by dane w naszych kolumnach były odpowiednio skonwertowane i dopasowane do nowego typu, który chcemy zastosować.

alter table PRZYKLADOWA_TABELA
alter column wiek bigint;

Zmianę nazwy kolumny w  naszej tabeli dokonujemy za pomocą polecenia  sp_RENAME. Polecenie może nam także posłużyć do zmiany nazwy całej tabeli:

sp_rename STARA_NAZWA_TABELI , NOWA_NAZWA_TABELI; --zmienia nazwę całej tabeli
sp_rename 'NAZWA_TABELI.STARA_NAZWA_KOLUMNY' , 'NOWA_NAZWA_KOLUMNY', 'COLUMN'; --zmienia nazwę wybranej kolumny

Na koniec możemy usunąć tabelę z bazy danych stosując polecenie DROP TABLE.

DROP TABLE PRZYKLADOWA_TABELA;

 

SQL Server instaluje się domyślnie bez przykładowej bazy danych (tzw. Sample database).  Przykładową bazę możemy ściągnąć ze strony Codeplex. W naszym  przypadku bazą tą będzie AdventureWorks2014. Z poniższej strony pobieramy plik o nazwie Adventure Works 2014 Full Database Backup.zip

http://msftdbprodsamples.codeplex.com/releases

Ściągnięty plik rozpakowujemy i wgrywamy na bazę poprzez „Restore database” w SQL Server Management Studio.
Instalacja przykładowej bazy danych jest bardzo ważna. To przy jej pomocy będziemy uczyć się obsługi SQL Server.

data_restore_1

Wgrywanie bazy danych

Po wybraniu opcji „Restore database” wybieramy lokalizację pliku z bazą Adventure Works, którą wcześniej ściągnęliśmy nasz komputer. Bez zaznaczania żadnych dodatkowych opcji zatwierdzamy wszytko przyciskiem OK i obserwujemy postęp odtwarzania bazy danych.

data_restore_2

Wgrywanie bazy danych

Po zakończeniu operacji możemy już korzystać z obiektów na naszej nowej bazie danych. W pierwszej kolejności w oknie zapytań ustawiamy nową bazę danych poprzez zastosowanie polecenia „USE”:

use AdventureWorks2014;

W ten sposób możemy już korzystać ze wszystkich obiektów, które oferuje nam baza AdventureWorks.

SQL Management Studio jest obecnie najpopularniejszym klientem Serwera baz danych SQL Server. To właśnie przy jego pomocy będziemy uczyć się pisać nasze zapytania do bazy danych. Narzędzie instalowane jest łącznie z serwerem, o ile wybraliśmy taką opcję podczas instalacji. Sam program uruchamiamy z menu Start.

sql_management_studio_1

SQL Management Studio

W ekranie logowania wybieramy serwer, zgodnie z nazwą, którą wybraliśmy podczas instalacji. Jeśli podczas instalacji założyliśmy użytkownika bazy, logującego się poświadczeniami domenowymi, resztę opcji możemy zostawić puste. Łączymy się z naszym serwerem.

sql_management_studio_2

SQL Management Studio – logowanie

Po zalogowaniu się do naszego serwera, spróbujmy utworzyć najprostszą bazę danych. Nazwijmy ją swoimi inicjałami. W moim przypadku będzie to „TK”. W tym celu otwieramy okno zapytań do bazy danych klikając „New Query” i wpisujemy w wierszy poleceń następujący kod, zatwierdzając go klawiszem F5.

create database tk;

Otrzymujemy komunikat o powodzeniu wykonania naszego polecenia. Następnie, by korzystać z utworzonej przez nas bazy danych wprowadzamy następujący kod:

use tk;
sql_management_studio_4

SQL Management Studio – tworzenie bazy danych

Po utworzeniu naszej bazy danych, w lewym oknie programu mamy już dostęp do obiektów naszej bazy, a wiec tabel, widoków. Możemy także tworzyć funkcje i procedury składowane.

Utworzoną w ten sposób bazę danych możemy szybko usunąć poleceniem drop database:

drop database tk;

Wyobraźmy sobie prosty przykład. Posiadamy zbiór danych. Chcemy, pokazać nasze dane tydzień po tygodniu. W tym celu chcemy zrobić z daty numer tygodnia np 01, 09, 52 itp.  Stosując poniższą konstrukcję otrzymamy wynik w formie liczby całkowitej:

select DATEPART( ISO_WEEK, '2016-01-16');

-----------
2

(1 row(s) affected)

Jeśli chcemy, by nasz wynik został wyświetlony jako tekst składający się np z dwóch znaków, z czego dla liczb z zakresu 1-9 chcemy wstawić zero wiodące, stosujemy poniższą konstrukcję:

select right('0'+CONVERT(VARCHAR(2),DATEPART( ISO_WEEK, '2016-01-16')),2) ;

----
02

(1 row(s) affected)

Operatory logiczne w SQL Server jak sama nazwa wskazuje, służą do wprowadzenia logicznych warunków do naszego zapytania. Operatory można używać oddzielnie oraz łączyć ze sobą. Poniżej przykłady.

Najczęściej używane operatory logiczne:

IN – Wskazuje wartości zawierające się w określonym przez nas zbiorze.  Dodane przed IN operatora NOT, zwróci nam rekordy, zawierjące każde inne wartości niż podane.

use adventureworks2014
go
select * from production.product
where color in ('Black','Silver', NULL)
go
select * from production.product
where color not in ('Black','Silver')
go

AND, OR, NOT – Standardowe operatory logiczne, za pomocą których możemy wprowadzić w naszym wyrażeniu składnie i, lub, nie.

use adventureworks2014
go
select * from production.product 
where (color = 'Black' or color = 'silver')
and productline not in ('M')
go

BETWEEN – Operator pomaga nam wylistować wartości zawierające się danym przedziale. Poniżej zapytanie zwracające wszystkie rekordy, które w kolumnie productid mają wartości pomiędzy 300 i 400.

use adventureworks2014
go
select * from production.product
where ProductID between 300 and 400
go

LIKE – operator służy do sprawdzania wartości podobnych. Możemy go użyć, gdy np chcemy w naszym zapytaniu wylistować rekordy, które zawierają wartości podobne do naszego warunku. „%” – zastępuje dowolną frazę, „_” – zastępuje dowolny jeden znak. Poniższe zapytanie zwraca rekordy, które w kolumnie name zawierają frazę  „PAINT”. Zamiast like można stosować NOT LIKE – wskaże nam to wynik z odwrotną logiką.

use adventureworks2014
go
select * from production.Location
where upper(name) like '%PAINT%'
GO

Pozostałe operatory logiczne:

ANY

SOME

EXIST

ALL

Do wykonywania działań arytmetycznych w SQL Server wykorzystujemy standardowe operatory dodawania, odejmowania, mnożenia, dzielenia i reszty z dzielenia:  +, -,  *, /, %.

Poza operatorami wykorzystujemy także standardowe nawiasy (). Co ważne, jeśli wykonujemy operację dzielenia na liczbach całkowitych, którego wynikiem nie będzie liczba całkowita, powinniśmy najpierw zmienić format liczb w naszym działaniu na dowolny typ przecinkowy.

Operatory + i – mogą być także wykorzystywane do dodawania i odejmowania dat o typach datetime i smalldatetime. Po odjęciu dat konwertujemy je na format liczbowy. Poniżej kilka przykładowych działań z wykorzystaniem funkcji.

use AdventureWorks2014;
go
select
(234+345) / 415 as RESULT1,
(234.0+345.0) / 415.0 as RESULT2, --działanie na liczbach całkowitych
((34434.0-3412.0) / 535.0)*(158.0+6.0) as RESULT3, --powyższe działanie na liczbach FLOAT
99 % 11 as RESULT4, --modulo -reszta z dzielenia 
CONVERT(INT, (GETDATE()) - RateChangeDate) as RESULT5
from HumanResources.EmployeePayHistory;
;
GO

 

Podobnie jak w pozostałych językach SQL,  SQL Server prezentuje szeroki zbiór funkcji matematycznych. Poniżej Przykłady wraz z wykorzystaniem.

ABS() – Zwraca wartość bezwzględną.

Pi() – Wartość liczby PI ~3,14159265358979

SQUARE() – Kwadrat liczby.

POWER(arg1, arg2) – Potęgowanie. Argument 1 określa podstawę potęgi. Argument 2 to wykładnik potęgi.

SQRT() – Pierwiastek kwadratowy z podanej wartości liczbowej.

ROUND(liczba, arg 2) – Funkcja zaokrągla liczbę do miejsc po przecinku wprowadzonych w argumencie 2. Argument może przyjmować wartość 0 – uzyskamy w ten sposób liczbę całkowitą. Argument może także przyjąć wartości ujemne – zaokrągla w ten sposób liczbę przed przecinkiem.

SIGN() – Zwraca 3 wartości w zależności od znaku liczby:  -1 / 0 / 1

RAND() – Losuje liczbę FLOAT z przedziału (0, 1)

CEILING() – Zwraca liczbę całkowitą najbardziej zbliżona do argumentu. Zaokrągla do góry.

FLOOR() – Zwraca liczbę całkowitą najbardziej zbliżona do argumentu. Zaokrągla do dołu.

EXP() – Funkcja zwraca wartość wykładniczą. Dla przykładu EXP(1) zwróci nam liczbę Eulera ~2,71828182845905

select
ABS(-10) as RES1,
PI() as RES2,
SQUARE(10) as RES3,
POWER(2, 3) as RES4,
SQRT(100) as RES5,
ROUND(2222.5544, 2) as RES6,
SIGN(-123) as RES7,
RAND() as RES8,
CEILING($333.23456) as RES9,
FLOOR($333.23456) as RES10,
exp(1) as RES11
;

SIN(), COS(), TAN(), COT(),  ASIN(), ACOS(), ATAN(), ACOT() – Zestaw funkcji trygonometrycznych i cyklometrycznych.

LOG(), LOG10() – Funkcje wykładnicze.

DEGREES() – Zwraca wartość kąta w stopniach.

RADIANS() – Zwraca wartość kąta w radianach.

ATN2(x,y) – Zwraca wartość w radianach pomiędzy punktami na osiach x i y. ~~zmienić

select
SIN(0) AS RES1,
COS(0) AS RES2,
TAN(0) AS RES3,
COT(PI()/4) AS RES4,
POWER(4, LOG(2)) AS RES5,
LOG10(10) AS RES6,
DEGREES(PI()/2) AS RES7,
RADIANS(360) AS RES8,
ATN2(1,6) AS RES9;
go

Pierwszą rzeczą, którą wykonujemy po połączeniu z naszy serverem jest wskazanie bazy danych, na której uruchamiane będą zapytania Query. Służy do tego polecenie „USE„. Wykonanie wygląda następująco:

use [adventureworks2014];
go

lub:

use adventureworks2014;

Tak jak pozostałych językach SQL, podstawowym poleceniem jest polecenie SELECT. Korzystając z bazy AdventureWorks2014, którą wgraliśmy podczas instalacji, przykładowe polecenie wygląda następująco:

USE [AdventureWorks2014];
go
SELECT 'HELLO WORLD';
go

Korzystając z klienta SQLServer Management Studio, zapytania zatwierdzamy i wykonujemy przy pomocy klawisza F5, Jak widać w powyższym zapytaniu nie określamy tabeli, z której nasze dane zostaną wywołane. Jedyne, co określamy to bazę, na której zapytanie zostanie wykonane oraz tekst, który ma pojawić się w wyniku zapytania. Odnosząc się do bazy AdventureWorks, przykładowe zapytanie z wykorzystaniem tabel wyglądać będzie następująco:

USE [AdventureWorks2014];
go
SELECT * from HumanResources.Department;
go

Wynikiem powyższego zapytania są wszystkie kolumny oraz rekordy zawarte w tabeli HumanResources.Department. Tabelę, z której wybieramy nasze dane określamy w klauzulu „FROM„. Znak gwiazdki ALL”*” używamy, gdy chcemy uzyskać wynik zawierający wszystkie kolumny w danej tabeli.  W momencie, gdy chcemy, by jedynie niektóre kolumny z naszej tabeli zostały wyświetlone, określamy je używając nazwy kolumn wymienionych po przecinku jak w poniższym zapytaniu:

USE [AdventureWorks2014];
go
SELECT
SalesOrderID,
UnitPriceDiscount,
ProductID
from Sales.SalesOrderDetail;
go

Jak widzimy wynik naszego zapytania zwraca kilkadziesiąt tysięcy rekordów. My oczywiście wszystkich nie musimy widzieć. Liczbę rekordów wyświetlanych możemy ograniczyć np do 10 stosując polecenie TOP jak w poniższym zapytaniu. Polecenie działa analogicznie jak polecenie Limit na bazach MySQL i określa nam liczbę rekordów, którą chcemy pokazać.

USE [AdventureWorks2014];
go
SELECT top 10
SalesOrderID,
UnitPriceDiscount,
ProductID
from Sales.SalesOrderDetail;
go

Powyższe zapytanie określa nam limit wyświetlanych rekordów. Co jednak, gdy chcemy określić warunki dla rekordów, które chcemy widzieć w wyniku? Wykorzystujemy do tego celu klauzulę WHERE. Za jej pomocą możemy określić, jakie warunki mają spełniać konkretne kolumny, które chcemy wyświetlić. Dla przykładu z tabeli production.Product chcemy wyświetlić wszystkie produkty, o kolorze czarnym i podkategorii o numerach 12 lub 14:

USE [AdventureWorks2014];
go
SELECT *
from production.Product
where color = 'Black'
and (ProductSubcategoryID = 14 or ProductSubcategoryID = 12)
;
go

Jak widzimy powyżej warunki możemy łączyć ze sobą, używając do tego np operatorów „AND” lub „OR„.  Dbamy o to, by warunki w połączeniu ze sobą tworzyły logiczną całość. W przypadku, gdy chcemy wyświetlić rekordy bez powtórzeń stosujemy do tego frazę DISTINCT jak w poniższym zapytaniu.

USE [AdventureWorks2014];
go
SELECT distinct ProductSubcategoryID
,color
from production.Product
where color = 'Black'
and (ProductSubcategoryID = 14 or ProductSubcategoryID = 12)
;
go

Podsumowując powyższe, proste, modelowe zapytanie SQL wygląda następująco:

USE [nasza_baza];
go
/*
Poniżej model prostego zapytania
*/
SELECT
wybrane_kolumny --określamy kolumny
from
nazwa_tabeli --określamy obiekt tabela/widok, z którego korzystamy
where
nasze_warunki;-- określamy warunki
go

Jak widzimy powyżej do tworzenia adnotacji w kodzie SQL służą nam następujące oznaczenia : — lub /**/ . Bloki kodu poprzedzone w ten sposób nie będą wykonywane. Mogą nam one posłużyć do wpisania komentarza.