Как да създадете заявка в база данни на SQL Server 2017.
Една от най-основните заявки, които можете да направите, е така:
SELECT * FROM TableName;
Тази заявка връща всички данни от дадена таблица. TableName
е името на таблицата, която искате да направите заявка. Всичко, което трябва да направите, е да го замените с името на таблица във вашата база данни, да стартирате заявката и съдържанието на тази таблица ще се покаже.
Нашата база данни се състои от три таблици. Всеки съдържа данни. Нека видим какво има във всяка таблица.
Artists
таблица:
SELECT * FROM Artists;Резултат
ArtistId ArtistName ActiveFrom -------- ---------------------- ------------------------ 1 Iron Maiden 1975-12-25T00:00:00.000Z 2 AC/DC 1973-01-11T00:00:00.000Z 3 Allan Holdsworth 1969-01-01T00:00:00.000Z 4 Buddy Rich 1919-01-01T00:00:00.000Z 5 Devin Townsend 1993-01-01T00:00:00.000Z 6 Jim Reeves 1948-01-01T00:00:00.000Z 7 Tom Jones 1963-01-01T00:00:00.000Z 8 Maroon 5 1994-01-01T00:00:00.000Z 9 The Script 2001-01-01T00:00:00.000Z 10 Lit 1988-06-26T00:00:00.000Z 11 Black Sabbath 1968-01-01T00:00:00.000Z 12 Michael Learns to Rock 1988-03-15T00:00:00.000Z 13 Carabao 1981-01-01T00:00:00.000Z 14 Karnivool 1997-01-01T00:00:00.000Z 15 Birds of Tokyo 2004-01-01T00:00:00.000Z 16 Bodyjar 1990-01-01T00:00:00.000Z 16 row(s) returned Executed in 1 ms
Albums
таблица:
SELECT * FROM Albums;Резултат
AlbumId AlbumName ReleaseDate ArtistId GenreId ------- ------------------------ ------------------------ -------- ------- 1 Powerslave 1984-09-03T00:00:00.000Z 1 1 2 Powerage 1978-05-05T00:00:00.000Z 2 1 3 Singing Down the Lane 1956-01-01T00:00:00.000Z 6 3 4 Ziltoid the Omniscient 2007-05-21T00:00:00.000Z 5 1 5 Casualties of Cool 2014-05-14T00:00:00.000Z 5 1 6 Epicloud 2012-09-18T00:00:00.000Z 5 1 31 Somewhere in Time 1986-09-29T00:00:00.000Z 1 1 32 Piece of Mind 1983-05-16T00:00:00.000Z 1 1 33 Killers 1981-02-02T00:00:00.000Z 1 1 34 No Prayer for the Dying 1990-10-01T00:00:00.000Z 1 1 35 No Sound Without Silence 2014-09-12T00:00:00.000Z 9 4 36 Big Swing Face 1967-06-01T00:00:00.000Z 4 2 37 Blue Night 2000-11-01T00:00:00.000Z 12 4 38 Eternity 2008-10-27T00:00:00.000Z 12 4 39 Scandinavia 2012-06-11T00:00:00.000Z 12 4 40 Long Lost Suitcase 2015-10-09T00:00:00.000Z 7 4 41 Praise and Blame 2010-06-26T00:00:00.000Z 7 4 42 Along Came Jones 1965-05-21T00:00:00.000Z 7 4 43 All Night Wrong 2002-05-05T00:00:00.000Z 3 2 44 The Sixteen Men of Tain 2000-03-20T00:00:00.000Z 3 2 20 row(s) returned Executed in 1 ms
Genres
таблица:
SELECT * FROM Genres;Резултат
GenreId Genre ------- ------- 1 Rock 2 Jazz 3 Country 4 Pop 5 Blues 6 Hip Hop 7 Rap 8 Punk 8 row(s) returned Executed in 1 ms
И в трите случая запитването ни беше едно и също. Единственото нещо, което се промени, беше името на таблицата.
Това е една от най-основните заявки, които можем да направим. Той просто връща всички редове и всички колони от една таблица.
Бихме могли да модифицираме тази заявка по няколко начина, за да върнем само данните, които искаме да видим. По-долу са някои често срещани начини, по които можем да модифицираме заявка, за да върне точно нужните ни резултати.
Посочете колоните
Вместо да използвате звездичката (*
), за да върнете всички колони, можете изрично да посочите само тези колони, които искате да бъдат върнати.
SELECT AlbumId, AlbumName, ArtistId FROM Albums;Резултат
AlbumId AlbumName ArtistId ------- ------------------------ -------- 1 Powerslave 1 2 Powerage 2 3 Singing Down the Lane 6 4 Ziltoid the Omniscient 5 5 Casualties of Cool 5 6 Epicloud 5 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 35 No Sound Without Silence 9 36 Big Swing Face 4 37 Blue Night 12 38 Eternity 12 39 Scandinavia 12 40 Long Lost Suitcase 7 41 Praise and Blame 7 42 Along Came Jones 7 43 All Night Wrong 3 44 The Sixteen Men of Tain 3 20 row(s) returned Executed in 1 ms
Стесняване на критериите
Можете да добавите WHERE
клауза за връщане само на онези редове, които отговарят на предоставен от вас критерии.
SELECT AlbumId, AlbumName, ArtistId FROM Albums WHERE ArtistId = 1;Резултат
AlbumId AlbumName ArtistId ------- ----------------------- -------- 1 Powerslave 1 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 5 row(s) returned Executed in 1 ms
Присъединете се към друга маса
Можете да използвате обединяване, за да върнете резултати от множество таблици, които споделят данни. Това са отношенията. По-специално, свързването обикновено се използва, когато външният ключ на една таблица съвпада с първичния ключ на друга.
SELECT AlbumId, AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE ReleaseDate < '1980-01-01';Резултат
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Ще видите, че WHERE
клаузата все още работи върху колони, които всъщност не са включени в изхода. В този случай той беше приложен към ReleaseDate
колона, въпреки че не включваме тази колона в резултатите.
Ще видите също, че квалифицираме двата ArtistId
колони с името на таблицата (т.е. Albums.ArtistId
и Artists.ArtistId
). Трябва да направим това, за да може SQL Server да знае коя таблица имаме предвид, когато препращаме към тази колона. Някои разработчици на бази данни смятат за добра практика да се квалифицират всички имена на колони във всички SQL заявки, но това е по-скоро случай на лични предпочитания или конвенция за кодиране, специфична за проекта.
Добавяне на псевдоним
Можете също да добавите псевдоними на таблици към вашите заявки, за да направите кода по-сбит. Например, можете да дадете Artists
псевдоним на ar
и Albums
псевдоним на al
(или друг низ, който харесвате).
Можете да използвате тези псевдоними, за да квалифицирате имената на колоните. Ето същата заявка като по-горе, но с всички имена на колони, квалифицирани с псевдоними на таблица:
SELECT al.AlbumId, al.AlbumName, ar.ArtistName FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE al.ReleaseDate < '1980-01-01';Резултат
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Можете също да зададете псевдоними на колони (не само на таблици). Правим това в следващия пример.
Форматирайте датата
Има много различни начини, по които датите и часовете могат да бъдат третирани в бази данни. В SQL Server има различни типове данни за съхранение на дати (като date
, time
, datetime
, smalldatetime
и т.н.) и има много различни функции за работа с дати (например SYSDATETIME()
, GETDATE( )
, CURRENT_TIMESTAMP
и др.).
В този пример ще използваме YEAR()
функция за връщане само на годината от датата.
SELECT AlbumName, YEAR(ReleaseDate) AS Year FROM Albums;Резултат
AlbumName Year ------------------------ ---- Powerslave 1984 Powerage 1978 Singing Down the Lane 1956 Ziltoid the Omniscient 2007 Casualties of Cool 2014 Epicloud 2012 Somewhere in Time 1986 Piece of Mind 1983 Killers 1981 No Prayer for the Dying 1990 No Sound Without Silence 2014 Big Swing Face 1967 Blue Night 2000 Eternity 2008 Scandinavia 2012 Long Lost Suitcase 2015 Praise and Blame 2010 Along Came Jones 1965 All Night Wrong 2002 The Sixteen Men of Tain 2000 20 row(s) returned Executed in 1 ms
В този пример ние също присвояваме псевдоним на колона. По-конкретно, ние присвояваме псевдоним на резултата от YEAR()
функция, на която предаваме ReleaseDate
колона като аргумент.
Друг момент за този пример е, че използвахме AS
ключова дума при присвояване на псевдоним. Това е по избор и бихме могли да използваме и AS
ключова дума при присвояване на псевдоним на таблица в предишния пример.
Относно SQL и Transact-SQL
Горните заявки (и другите заявки в този урок) са написани на език за структурирани заявки (SQL). По-конкретно, SQL Server използва Transact-SQL (понякога се съкращава до T-SQL ), което е собствено разширение на Microsoft и Sybase към SQL.
SQL е стандартният език за заявки, използван в повечето системи за управление на релационни бази данни. Това е стандарт на Американския национален институт по стандартизация (ANSI) и на Международната организация по стандартизация (ISO).
Докато повечето основни заявки ще работят в повечето релационни бази данни, някои заявки може да се наложи да бъдат леко модифицирани при пренасяне между една система на база данни и друга. Например, може да имате скрипт, който се изпълнява в SQL Server. Можете също да използвате този скрипт в MySQL, но може да откриете, че трябва да промените няколко неща, преди той да работи успешно.
SQL скриптовете в този урок демонстрират само малка извадка от неща, които можете да правите с SQL. За повече информация вижте моя урок по SQL или отидете в справочника за Microsoft Transact-SQL.