Ms sql сървърни заявки. Пример за създаване на заявка (Query) в база данни на MS SQL Server

Последна актуализация: 05.07.2017 г

В предишната тема беше създадена проста база данни с една таблица в SQL Management Studio. Сега нека дефинираме и изпълним първата SQL заявка. За да направите това, отворете SQL Management Studio, щракнете с десния бутон върху елемента от най-високо ниво в Object Explorer (име на сървър) и изберете New Query от контекстното меню, което се появява:

След това в централната част на програмата ще се отвори прозорец за въвеждане на SQL команди.

Нека изпълним заявка към таблицата, която беше създадена в предишната тема, по-специално, ще получим всички данни от нея. Нашата база данни се нарича университет, а таблицата е dbo.Students, така че за да получим данни от таблицата, въвеждаме следната заявка:

ИЗБЕРЕТЕ * ОТ university.dbo.Students

Операторът SELECT ви позволява да избирате данни. FROM указва източника, от който да се вземат данните. Всъщност с тази заявка казваме „ИЗБЕРЕТЕ всички ОТ таблицата university.dbo.Students“. Струва си да се отбележи, че името на таблицата използва пълния й път, указващ базата данни и схемата.

След като въведете заявката, щракнете върху бутона Изпълнение в лентата с инструменти или можете да натиснете клавиша F5.

В резултат на изпълнение на заявката, в долната част на програмата ще се появи малка таблица, която ще покаже резултатите от заявката - тоест всички данни от таблицата Students.

Ако трябва да направим множество заявки към една и съща база данни, тогава можем да използваме командата USE, за да ангажираме базата данни. В този случай, когато правите заявки за таблици, е достатъчно да посочите името им без името на базата данни и схемата:

ИЗПОЛЗВАЙТЕ университет ИЗБЕРЕТЕ * ОТ Студенти

В този случай ние изпълняваме заявката като цяло за сървъра; имаме достъп до всяка база данни на сървъра. Но също така можем да извършваме заявки само в рамките на конкретна база данни. За да направите това, щракнете с десния бутон върху желаната база данни и изберете Нова заявка от контекстното меню:

Ако в този случай искахме да направим запитване към използваната по-горе таблица Students, нямаше да се налага да указваме името и схемата на базата данни в заявката, тъй като тези стойности вече биха били ясни.

SQL Server Management Studio предоставя пълен инструмент за създаване на всички видове заявки. С негова помощ можете да създавате, записвате, зареждате и редактирате заявки. Освен това можете да работите по заявки, без да се свързвате към сървър. Този инструмент също така предоставя възможност за разработване на заявки за различни проекти.

Можете да работите със заявки, като използвате или редактора на заявки, или разтвора Explorer. Тази статия обхваща и двата инструмента. В допълнение към тези два компонента на SQL Server Management Studio, ще разгледаме отстраняването на грешки в SQL код с помощта на вградения дебъгер.

Редактор на заявки

За да отворите панела на редактора на заявки Редактор на заявки, в лентата с инструменти на SQL Server Management Studio щракнете върху бутона Нова заявка. Този панел може да бъде разширен, за да показва бутони за създаване на всички възможни заявки, а не само заявки на Database Engine. По подразбиране се създава нова заявка за Database Engine, но можете също да създадете MDX, XMLA и други заявки, като щракнете върху съответния бутон в лентата с инструменти.

Лентата на състоянието в долната част на панела на редактора на заявки показва състоянието на връзката на редактора към сървъра. Ако не се свържете автоматично със сървъра, когато стартирате Редактора на заявки, се появява диалогов прозорец Свързване към сървър, който ви позволява да изберете сървъра, към който да се свържете, и режима на удостоверяване.

Редактирането на заявки офлайн предоставя повече гъвкавост, отколкото когато сте свързани към сървър. За да редактирате заявки, не е необходимо да се свързвате със сървъра и прозорецът на редактора на заявки може да бъде прекъснат от един сървър (с помощта на командата от менюто Заявка --> Връзка --> Прекъсване на връзката) и свързан с друг, без да се отваря друг прозорец на редактора. За да изберете офлайн режим на редактиране, в диалоговия прозорец за връзка със сървъра, който се отваря, когато стартирате редактора за определен тип заявка, просто щракнете върху бутона Отказ.

Можете да използвате редактора на заявки, за да изпълните следните задачи:

    създаване и изпълнение на Transact-SQL оператори;

    запазване на създадени Transact-SQL езикови изрази във файл;

    създаване и анализиране на планове за изпълнение на общи заявки;

    графично илюстриращ плана за изпълнение на избраната заявка.

Редакторът на заявки съдържа вграден текстов редактор и лента с инструменти с набор от бутони за различни действия. Главният прозорец на редактора на заявки е разделен хоризонтално на панел за заявки (в горната част) и панел с резултати (в долната част). Transact-SQL изразите (т.е. заявките), които трябва да бъдат изпълнени, се въвеждат в горния панел, а резултатите от обработката на тези заявки от системата се показват в долния панел. Фигурата по-долу показва пример за въвеждане на заявка в редактора на заявки и резултатите от изпълнението на тази заявка:

Първият оператор на заявка USE указва да се използва базата данни SampleDb като текуща база данни. Вторият оператор, SELECT, извлича всички редове от таблицата Employee. За да изпълните тази заявка и да покажете резултатите, в лентата с инструменти на редактора на заявки щракнете върху бутона Изпълнение или натиснете F5.

Можете да отворите няколко прозореца на редактора на заявки, т.е. правете множество връзки към един или повече екземпляри на Database Engine. Създава се нова връзка чрез щракване върху бутона Нова заявка в лентата с инструменти на SQL Server Management Studio.

Лентата на състоянието в долната част на прозореца на редактора на заявки показва следната информация, свързана с изпълнението на оператори на заявки:

    състоянието на текущата операция (например „Заявката е завършена успешно“);

    име на сървър на база данни;

    текущо потребителско име и ID на процеса на сървъра;

    текущо име на база данни;

    време, прекарано в изпълнение на последната заявка;

    брой намерени редове.

Едно от основните предимства на SQL Server Management Studio е неговата лекота на използване, което се отнася и за редактора на заявки. Редакторът на заявки предоставя много функции, за да улесни кодирането на Transact-SQL изрази. По-специално, той използва подчертаване на синтаксиса, за да подобри четливостта на Transact-SQL изразите. Всички запазени думи са показани в синьо, променливите са показани в черно, низовете са показани в червено, а коментарите са показани в зелено.

В допълнение, редакторът на заявки е оборудван с контекстно-чувствителна помощ, наречена Динамична помощ, чрез които можете да получите информация за конкретна инструкция. Ако не знаете синтаксиса на дадена инструкция, изберете я в редактора и след това натиснете клавиша F1. Можете също така да маркирате параметрите на различни Transact-SQL изрази, за да получите помощ за тях от Books Online.

SQL Management Studio поддържа SQL Intellisense, който е вид инструмент за автоматично довършване. С други думи, този модул предлага най-вероятното завършване на частично въведени елементи на оператор на Transact-SQL.

Изследователят на обекти също може да ви помогне да редактирате заявки. Например, ако искате да знаете как да създадете оператор CREATE TABLE за таблицата Employee, щракнете с десния бутон върху таблицата в Object Explorer и изберете Script Table As --> CREATE to --> New Query Editor Window от контекстното меню, което таблици --> Използване на CREATE --> Нов прозорец на редактора на заявки). Прозорецът на редактора на заявки, съдържащ оператора CREATE TABLE, създаден по този начин, е показан на фигурата по-долу. Тази функция се прилага и за други обекти, като запаметени процедури и функции.

Object Browser е много полезен за графично показване на плана за изпълнение на конкретна заявка. Планът за изпълнение на заявката е опцията за изпълнение, избрана от оптимизатора на заявки сред няколко възможни опции за изпълнение на конкретна заявка. Въведете необходимата заявка в горния панел на редактора, изберете последователност от команди от менюто Query --> Display Estimated Execution Plan и планът за изпълнение на тази заявка ще бъде показан в долния панел на прозореца на редактора.

Изследовател на решения

Редактирането на заявки в SQL Server Management Studio се основава на метода на решенията. Ако създадете празна заявка с помощта на бутона Нова заявка, тя ще се базира на празно решение. Можете да видите това, като изпълните поредица от команди от менюто View --> Solution Explorer веднага след отваряне на празна заявка.

Решението може да не е свързано с нито един, един или няколко проекта. Празно решение, което не е свързано с никакъв проект. За да свържете проект с решение, затворете празното решение, Solution Explorer и Query Editor и създайте нов проект, като стартирате File --> New --> Project. В прозореца Нов проект, който се отваря, изберете опцията SQL Server Scripts в средния панел. Проектът е начин за организиране на файлове на определено място. Можете да зададете име на проекта и да изберете местоположение за местоположението му на диска. Когато създадете нов проект, автоматично се стартира ново решение. Можете да добавите проект към съществуващо решение с помощта на Solution Explorer.

За всеки създаден проект Solution Explorer показва папките Connections, Queries и Miscellaneous. За да отворите нов прозорец на редактора на заявки за даден проект, щракнете с десния бутон върху неговата папка Queries и изберете New Query от контекстното меню.

Отстраняване на грешки в SQL Server

SQL Server, започвайки с SQL Server 2008, има вграден дебъгер за код. За да започнете сесия за отстраняване на грешки, изберете Debug --> Start Debugging от главното меню на SQL Server Management Studio. Ще разгледаме как работи дебъгерът, използвайки пример, използвайки пакет от команди. Пакетът е логическа последователност от SQL изрази и процедурни разширения, която се изпраща до Database Engine, за да изпълни всички изрази, които съдържа.

Фигурата по-долу показва пакет, който отчита броя на служителите, работещи по проект p1. Ако това число е 4 или повече, тогава се показва съответното съобщение. В противен случай се показват имената и фамилиите на служителите.

За да спрете изпълнението на пакет при конкретна инструкция, можете да зададете точки на прекъсване, както е показано на фигурата. За да направите това, щракнете вляво от линията, на която искате да спрете. Когато отстраняването на грешки започне, изпълнението спира на първия ред от кода, който е маркиран с жълта стрелка. За да продължите изпълнението и отстраняването на грешки, изберете командата от менюто Debug --> Continue. Пакетните инструкции ще продължат да се изпълняват до първата точка на прекъсване и жълтата стрелка ще спре в тази точка.

Информацията, свързана с процеса на отстраняване на грешки, се показва в два панела в долната част на прозореца на редактора на заявки. Информацията за различни видове информация за отстраняване на грешки е групирана в тези панели в няколко раздела. Левият панел съдържа раздела Autos, раздела Locals и до пет раздела Watch. Десният панел съдържа разделите Стек за повиквания, Нишки, Точки на прекъсване, Команден прозорец, Незабавен прозорец и Изход. Разделът Locals показва променливи стойности, разделът Call Stack показва стойности на стека на повиквания, а разделът Breakpoints показва информация за точката на прекъсване.

За да прекратите процеса на отстраняване на грешки, изпълнете последователност от команди от главното меню Debug --> Stop Debugging или щракнете върху синия бутон в лентата с инструменти на дебъгера.

SQL Server 2012 добавя няколко нови функции към вградения дебъгер в SQL Server Management Studio. Сега можете да извършвате няколко от следните операции в него:

    Посочете условие за точка на прекъсване. Състояние на точка на прекъсванее SQL израз, чиято изчислена стойност определя дали изпълнението на кода ще спре в дадена точка или не. За да зададете условие за точка на прекъсване, щракнете с десния бутон върху червената икона на точка на прекъсване и изберете Условие от контекстното меню. Отваря се диалоговият прозорец Условие на точка на прекъсване, който ви позволява да въведете необходимия булев израз. Освен това, ако трябва да спрете изпълнението, ако изразът е верен, трябва да зададете превключвателя Is True. Ако изпълнението трябва да бъде спряно, ако изразът се е променил, тогава трябва да зададете превключвателя When Changed.

    Посочете броя на ударите в точката на прекъсване. Броят на ударите е условието за спиране на изпълнението в дадена точка въз основа на броя пъти, когато тази точка на прекъсване е била ударена по време на изпълнение. Когато се достигне посоченият брой преминавания и всяко друго условие, определено за дадена точка на прекъсване, дебъгерът изпълнява определеното действие. Условието за прекъсване на изпълнението въз основа на броя на попаденията може да бъде едно от следните:

    1. безусловно (действие по подразбиране) (Прекъсвайте винаги);

      ако броят на попаденията е равен на определената стойност (Прекъсване, когато броят му е равен на определена стойност);

      ако броят на попаденията е кратно на определена стойност (Прекъсване, когато броят на попаденията е кратно на определена стойност);

      Прекъсване, когато неговият брой е по-голям или равен на определена стойност.

    За да зададете броя на попаденията по време на отстраняване на грешки, щракнете с десния бутон върху необходимата икона на точка на прекъсване в раздела Точки на прекъсване, изберете Брой на посещенията от контекстното меню, след което изберете едно от условията в диалоговия прозорец Брой на точките на прекъсване, който се отваря от предишния списък. За опции, които изискват стойност, въведете я в текстовото поле отдясно на падащия списък с условия. За да запазите зададените условия, щракнете върху OK.

    Задайте филтър за точка на прекъсване. Филтърът за точка на прекъсване ограничава операцията на точката на прекъсване само до определени компютри, процеси или нишки. За да зададете филтър за точка на прекъсване, щракнете с десния бутон върху точката на прекъсване, която искате, и изберете Филтър от контекстното меню. След това в диалоговия прозорец Филтри за точки на прекъсване, който се отваря, посочете ресурсите, до които искате да ограничите изпълнението на тази точка на прекъсване. За да запазите зададените условия, щракнете върху OK.

    Посочете действие в точка на прекъсване. Условието When Hit указва действието, което да се предприеме, когато пакетното изпълнение достигне дадена точка на прекъсване. По подразбиране, когато както условието за броя на ударите, така и условието за спиране са изпълнени, тогава изпълнението се прекъсва. Като алтернатива може да се покаже предварително зададено съобщение.

    За да посочите какво да правите, когато бъде достигната точка на прекъсване, щракнете с десния бутон върху червената икона за точката на прекъсване и изберете При удар от контекстното меню. В отварящия се диалогов прозорец When Breakpoint is Hit изберете действието, което искате да предприемете. За да запазите зададените условия, щракнете върху OK.

    Използвайте прозореца за бързо наблюдение. Можете да видите стойността на Transact-SQL израз в прозореца QuickWatch и след това да запишете израза в прозореца Watch. За да отворите прозореца Quick Watch, изберете Quick Watch от менюто Debug. Изразът в този прозорец може да бъде избран от падащия списък Израз или да бъде въведен в това поле.

    Използвайте подсказката за бърза информация. Когато задържите курсора на мишката върху идентификатор на код, инструментът за бърза информация показва неговата декларация в изскачащ прозорец.

Таблични изразисе наричат ​​подзаявки, които се използват там, където се очаква наличието на таблица. Има два вида таблични изрази:

    производни таблици;

    обобщени таблични изрази.

Тези две форми на таблични изрази се обсъждат в следващите подраздели.

Изведени таблици

Произведена таблицае табличен израз, включен в клаузата FROM на заявка. Производните таблици могат да се използват в случаите, когато използването на псевдоними на колони не е възможно, тъй като SQL преводачът обработва друг оператор, преди псевдонимът да е известен. Примерът по-долу показва опит за използване на псевдоним на колона в ситуация, в която се обработва друга клауза, преди псевдонимът да е известен:

ИЗПОЛЗВАЙТЕ SampleDb; SELECT MONTH(EnterDate) като enter_month FROM Works_on GROUP BY enter_month;

Опитът за изпълнение на тази заявка ще върне следното съобщение за грешка:

Msg 207, ниво 16, състояние 1, ред 5 Невалидно име на колона „enter_month“. (Съобщение 207: Ниво 16, състояние 1, ред 5 Невалидно име на колона enter_month)

Причината за грешката е, че клаузата GROUP BY се обработва преди да се обработи съответният списък на оператора SELECT и псевдонимът на колоната enter_month е неизвестен, когато групата се обработва.

Този проблем може да бъде разрешен чрез използване на производна таблица, която съдържа предходната заявка (без клаузата GROUP BY), тъй като клаузата FROM се изпълнява преди клаузата GROUP BY:

ИЗПОЛЗВАЙТЕ SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Резултатът от тази заявка ще бъде така:

Обикновено табличен израз може да бъде поставен навсякъде в оператор SELECT, където може да се появи име на таблица. (Резултатът от табличен израз винаги е таблица или, в специални случаи, израз.) Примерът по-долу показва използването на табличен израз в списъка за избор на оператор SELECT:

Резултатът от тази заявка е:

Генерични таблични изрази

Общ табличен израз (OTB) (накратко CTE)е наименуван табличен израз, поддържан от езика Transact-SQL. Общите таблични изрази се използват в следните два типа заявки:

    нерекурсивен;

    рекурсивен.

Тези два типа заявки се обсъждат в следващите раздели.

OTB и нерекурсивни заявки

Нерекурсивната форма на OTB може да се използва като алтернатива на производните таблици и изгледи. Обикновено OTB се определя от С клаузии допълнителна заявка, която препраща към името, използвано в клаузата WITH. В Transact-SQL значението на ключовата дума WITH е двусмислено. За да се избегне двусмислието, операторът, предшестващ оператора WITH, трябва да бъде завършен с точка и запетая.

ИЗПОЛЗВАЙТЕ AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") И Freight > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "200 5 ")/2,5;

Заявката в този пример избира поръчки, чиито общи данъци (TotalDue) са по-големи от средната стойност на всички данъци и чиито транспортни такси (Freight) са по-големи от 40% от средните данъци. Основното свойство на тази заявка е нейната дължина, тъй като подзаявката трябва да бъде написана два пъти. Един възможен начин за намаляване на количеството конструкция на заявка е да се създаде изглед, който съдържа подзаявка. Но това решение е малко сложно, защото изисква създаване на изглед и след това изтриването му, след като заявката приключи изпълнението. По-добър подход би бил да се създаде OTB. Примерът по-долу показва използването на нерекурсивен OTB, който съкращава дефиницията на заявката по-горе:

ИЗПОЛЗВАЙТЕ AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROM price_calc) AND Freight > (SELECT year_2005 FROM цена _calc ) /2,5;

Синтаксисът на клаузата WITH в нерекурсивните заявки е както следва:

Параметърът cte_name представлява името на OTB, което дефинира получената таблица, а параметърът column_list представлява списъка с колони на израза на таблицата. (В примера по-горе OTB се нарича price_calc и има една колона, year_2005.) Параметърът inner_query представлява оператор SELECT, който указва набора от резултати на съответния табличен израз. След това дефинираният табличен израз може да се използва в outer_query. (Външната заявка в примера по-горе използва OTB price_calc и нейната колона year_2005, за да опрости двойно вложената заявка.)

OTB и рекурсивни заявки

Този раздел представя материал с повишена сложност. Ето защо, когато го четете за първи път, се препоръчва да го пропуснете и да се върнете към него по-късно. OTB могат да се използват за прилагане на рекурсии, тъй като OTB могат да съдържат препратки към себе си. Основният OTB синтаксис за рекурсивна заявка изглежда така:

Параметрите cte_name и column_list имат същото значение като в OTB за нерекурсивни заявки. Тялото на клауза WITH се състои от две заявки, комбинирани от оператора СЪЮЗ ВСИЧКИ. Първата заявка се извиква само веднъж и започва да натрупва резултата от рекурсията. Първият операнд на оператора UNION ALL не препраща към OTB. Тази заявка се нарича референтна заявка или източник.

Втората заявка съдържа препратка към OTB и представлява неговата рекурсивна част. Поради това той се нарича рекурсивен член. В първото извикване на рекурсивната част препратката към OTB представлява резултата от заявката за препратка. Рекурсивният член използва резултата от първото извикване на заявка. След това системата отново извиква рекурсивната част. Извикване към рекурсивен член спира, когато предишно извикване към него върне празен набор от резултати.

Операторът UNION ALL обединява текущо натрупаните редове, както и допълнителни редове, добавени от текущото извикване към рекурсивния член. (Наличието на оператора UNION ALL означава, че дублиращите се редове няма да бъдат премахнати от резултата.)

И накрая, параметърът outer_query указва външната заявка, която OTB използва за извличане на всички повиквания към присъединяването на двата члена.

За да демонстрираме рекурсивната форма на OTB, използваме таблицата Airplane, дефинирана и попълнена с кода, показан в примера по-долу:

ИЗПОЛЗВАЙТЕ SampleDb; CREATE TABLE Самолет (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); ВМЪКНЕТЕ В СТОЙНОСТИ на самолет („Самолет“, „Фюзелаж“, 1, 10); INSERT INTO Самолет СТОЙНОСТИ ("Самолет", "Крила", 1, 11); ВМЪКНЕТЕ В СТОЙНОСТИ на самолет ("Самолет", "Опашка", 1, 12); ВМЪКНЕТЕ В СТОЙНОСТИТЕ на самолета („Фюзелаж“, „Салон“, 1, 13); ВМЪКНЕТЕ В СТОЙНОСТИТЕ на самолета („Фюзелаж“, „Кокпит“, 1, 14); ВМЪКНЕТЕ В СТОЙНОСТИТЕ на самолета („Фюзелаж“, „Нос“, 1, 15); INSERT INTO Airplane VALUES("Salon", NULL, 1,13); ВМЪКНЕТЕ В СТОЙНОСТИ на самолет ("Кокпит", NULL, 1, 14); ВМЪКНЕТЕ В СТОЙНОСТИ на самолет ("Нос", NULL, 1, 15); INSERT INTO Airplane VALUES ("Wings", NULL,2, 11); ВМЪКНЕТЕ В СТОЙНОСТИ на самолет ("Опашка", NULL, 1, 12);

Таблицата Самолет има четири колони. Колоната ContainingAssembly идентифицира сглобката, а колоната ContainedAssembly идентифицира частите (една по една), които съставляват съответния сглобка. Фигурата по-долу показва графична илюстрация на възможен тип самолет и неговите съставни части:

Таблицата Самолет се състои от следните 11 реда:

Следващият пример използва клаузата WITH, за да дефинира заявка, която изчислява общата цена на всяка компилация:

ИЗПОЛЗВАЙТЕ SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL(6,2) ) FROM list_of_parts l, Самолет a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Част", количество "Количество", цена "Цена" FROM list_of_parts;

Клаузата WITH дефинира OTB списък с име list_of_parts, състоящ се от три колони: агрегат1, количество и цена. Първият оператор SELECT в примера се извиква само веднъж, за да съхрани резултатите от първата стъпка на процеса на рекурсия. Операторът SELECT на последния ред на примера показва следния резултат.

Всеки от нас редовно се сблъсква и използва различни бази данни. Когато избираме имейл адрес, ние работим с база данни. Базите данни се използват от услуги за търсене, банки за съхраняване на клиентски данни и др.

Но въпреки постоянното използване на бази данни, дори за много разработчици на софтуерни системи все още има много слепи петна поради различни тълкувания на едни и същи термини. Ще дадем кратко определение на основните термини на бази данни, преди да покрием езика SQL. Така.

База данни - файл или колекция от файлове за съхраняване на подредени структури от данни и техните връзки. Много често системата за управление се нарича база данни - тя е само хранилище на информация в определен формат и може да работи с различни СУБД.

Таблица - Нека си представим папка, в която се съхраняват документи, групирани по определен признак, например списък с поръчки за последния месец. Това е таблица в компютър.Отделна таблица има свое уникално име.

Тип данни - вида на информацията, разрешена за съхраняване в отделна колона или ред. Това могат да бъдат числа или текст в определен формат.

Колона и ред- Всички сме работили с електронни таблици, които също имат редове и колони. Всяка релационна база данни работи с таблици по подобен начин. Редовете понякога се наричат ​​записи.

Първичен ключ- Всеки ред от таблица може да има една или повече колони за еднозначно идентифициране. Без първичен ключ е много трудно да се актуализират, променят и изтриват съответните редове.

Какво е SQL?

SQL(Английски - структуриран език за заявки) е разработен само за работа с бази данни и в момента е стандарт за всички популярни СУБД. Синтаксисът на езика се състои от малък брой оператори и е лесен за научаване. Но въпреки привидната си простота, той позволява създаването на sql заявки за сложни операции с база данни от всякакъв размер.

От 1992 г. съществува общоприет стандарт, наречен ANSI SQL. Той дефинира основния синтаксис и функциите на операторите и се поддържа от всички лидери на пазара на СУБД, като ORACLE.Невъзможно е да разгледаме всички възможности на езика в една кратка статия, така че ще разгледаме накратко само основните SQL заявки. Примерите ясно показват простотата и възможностите на езика:

  • създаване на бази данни и таблици;
  • вземане на проби от данни;
  • добавяне на записи;
  • промяна и изтриване на информация.

SQL типове данни

Всички колони в таблица на база данни съхраняват един и същи тип данни. Типовете данни в SQL са същите като в другите езици за програмиране.

Създаваме таблици и бази данни

Има два начина за създаване на нови бази данни, таблици и други заявки в SQL:

  • чрез конзолата на СУБД
  • Използване на интерактивните административни инструменти, включени в сървъра на базата данни.

Създава се нова база данни от оператора СЪЗДАВАНЕ НА БАЗА ДАННИ<наименование базы данных>; . Както можете да видите, синтаксисът е прост и кратък.

Създаваме таблици в базата данни, като използваме оператора CREATE TABLE със следните параметри:

  • име на таблица
  • имена на колони и типове данни

Като пример, нека създадем таблица за стоки със следните колони:

Създайте таблица:

СЪЗДАВАНЕ НА ТАБЛИЦА Стока

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Таблицата се състои от пет колони. След името идва типът данни, колоните са разделени със запетаи. Стойността на колоната може да приема празни стойности (NULL) или трябва да бъде попълнена (NOT NULL) и това се определя при създаването на таблицата.

Извличане на данни от таблица

Операторът за извличане на данни е най-често използваната SQL заявка. За да получим информация, трябва да посочим какво искаме да изберем от такава таблица. Първо прост пример:

ИЗБЕРЕТЕ commodity_name FROM Commodity

След оператора SELECT посочваме името на колоната, за да получим информация, а FROM дефинира таблицата.

Резултатът от заявката ще бъдат всички редове на таблицата със стойности на Commodity_name в реда, в който са въведени в базата данни, т.е. без никакво сортиране. Допълнителна клауза ORDER BY се използва за подреждане на резултата.

За да направите заявка за няколко полета, избройте ги разделени със запетаи, както в следния пример:

ИЗБЕРЕТЕ commodity_id, commodity_name, commodity_price ОТ Стока

Възможно е да получите стойността на всички колони на ред като резултат от заявка. За това се използва знакът "*":

ИЗБЕРЕТЕ * ОТ Стока

  • Освен това SELECT поддържа:
  • Сортиране на данни (изявление ORDER BY)
  • Изберете според условията (КЪДЕ)
  • Термин за групиране (ГРУПИРАНЕ ПО)

Добавете ред

За добавяне на ред към таблица се използват SQL заявки с израза INSERT. Добавянето може да стане по три начина:

  • добавете нов цял ред;
  • струнна част;
  • резултати от заявката.

За да добавите пълен ред, трябва да посочите името на таблицата и стойностите на колоните (полетата) на новия ред. Ето един пример:

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1,68", "Без алкохол ,)

Примерът добавя нов продукт към таблицата. Стойностите са изброени след VALUES за всяка колона. Ако няма съответстваща стойност за колоната, тогава трябва да се посочи NULL. Колоните се попълват със стойности в реда, посочен при създаването на таблицата.

Ако добавите само част от ред, трябва изрично да посочите имената на колоните, както в примера:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", '50", "Coca-Cola")

Въведохме само идентификаторите на продукта, доставчика и името му, а останалите полета оставихме празни.

Добавяне на резултати от заявката

INSERT се използва предимно за добавяне на редове, но може да се използва и за добавяне на резултатите от оператор SELECT.

Промяна на данни

За да промените информацията в полетата на таблица на база данни, трябва да използвате израза UPDATE. Операторът може да се използва по два начина:

  • Всички редове в таблицата се актуализират.
  • Само за конкретна линия.

АКТУАЛИЗАЦИЯТА се състои от три основни елемента:

  • таблица, в която трябва да се направят промени;
  • имена на полета и техните нови стойности;
  • условия за избор на редове за промяна.

Нека разгледаме един пример. Да приемем, че цената на продукт с ID=106 се е променила, така че този ред трябва да се актуализира. Пишем следния оператор:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Посочваме името на таблицата, в нашия случай Commodity, където ще се извършва актуализацията, след това след SET - новата стойност на колоната и намираме желания запис, като посочваме необходимата ID стойност в WHERE.

За да промените няколко колони, операторът SET е последван от няколко двойки стойност на колона, разделени със запетаи. Нека да разгледаме пример, в който името и цената на продукт се актуализират:

UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

За да премахнете информация в колона, можете да й присвоите стойността NULL, ако структурата на таблицата го позволява. Трябва да се помни, че NULL е точно „не“ стойност, а не нула под формата на текст или число. Нека премахнем описанието на продукта:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Премахване на редове

SQL заявките за изтриване на редове в таблица се изпълняват с помощта на оператора DELETE. Има два случая на употреба:

  • Определени редове в таблицата са изтрити;
  • Всички редове в таблицата се изтриват.

Пример за изтриване на един ред от таблица:

ИЗТРИВАНЕ ОТ Стока WHERE commodity_id = "106"

След DELETE FROM посочваме името на таблицата, в която ще се изтриват редовете. Клаузата WHERE съдържа условието, според което редовете ще бъдат избрани за изтриване. В примера изтриваме продуктовата линия с ID=106. Посочването WHERE е много важно, защото пропускането на този израз ще изтрие всички редове в таблицата. Това се отнася и за промяна на стойността на полетата.

Операторът DELETE не указва имена на колони или метасимволи. Изтрива напълно редове, но не може да изтрие нито една колона.

Използване на SQL в Microsoft Access

Обикновено се използва интерактивно за създаване на таблици, бази данни, за управление, модифициране, анализиране на данни в база данни и за прилагане на заявки за SQL Access чрез удобен интерактивен дизайнер на заявки (Query Designer), с помощта на който можете да създавате и незабавно да изпълнявате SQL изрази с всякаква сложност.

Поддържа се и режимът на достъп до сървъра, при който Access DBMS може да се използва като генератор на SQL заявки към всеки ODBC източник на данни. Тази функция позволява на приложенията на Access да взаимодействат с всеки формат.

SQL разширения

Тъй като SQL заявките нямат всички възможности на процедурните езици за програмиране, като цикли, разклонения и т.н., производителите на СУБД разработват своя собствена версия на SQL с разширени възможности. На първо място, това е поддръжка за съхранени процедури и стандартни оператори на процедурни езици.

Най-често срещаните диалекти на езика:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL в Интернет

MySQL DBMS се разпространява под безплатния GNU General Public License. Има търговски лиценз с възможност за разработване на персонализирани модули. Като компонент, той е включен в най-популярните сборки на интернет сървъри, като XAMPP, WAMP и LAMP, и е най-популярната СУБД за разработка на приложения в Интернет.

Той е разработен от Sun Microsystems и в момента се поддържа от Oracle Corporation. Поддържат се бази данни с размер до 64 терабайта, стандартен синтаксис SQL:2003, репликация на бази данни и облачни услуги.

SQL- Език за структурирани заявки.
В този преглед ще разгледаме най-често срещаните типове SQL заявки.
SQL стандартът е дефиниран ANSI(Американски национален институт по стандартизация).
SQL е език, насочен специално към релационни бази данни.

SQL разделяне:


DDL
(Език за дефиниране на данни) - така нареченият Schema Description Language в ANSI се състои от команди, които създават обекти (таблици, индекси, изгледи и т.н.) в базата данни.
DML(Език за манипулиране на данни) е набор от команди, които определят какви стойности са представени в таблиците във всеки даден момент.
DCD(Език за управление на данни) се състои от съоръжения, които определят дали да се позволи на потребителя да извършва определени действия или не. Те са част от ANSI DDL. Не забравяйте тези имена. Това не са различни езици, а секции от SQL команди, групирани по техните функции.

Типове данни:

SQL Server - Типове данни

Описание

bigint (int 8)

bigint (int 8)

двоичен(н)

двоичен(нито изображение

характер
(синоним въглен)

национален характерили ntext

променлив характер(синоним char вариращ varchar)

променлив национален характерили ntext

Време за среща

Време за среща

десетичен знак

известен още като числови

двойна точност

двойна точност

цяло число (int 4) (синоним: вътр)

цяло число (int 4)

национален характер(синоним: национален характер, нчар)

национален характер

Числен(синоними: десетичен знак, дек)

променлив национален характер(синоними: национален символ варира, nvarchar)

Различен национален характер

Smalldatetime

Време за среща

smallint (int 2)

smallint (int 2)

Smallmoney

sql_variant

Вече не се поддържа

Ntext
Започвайки с SQL Server 2005, не се препоръчва за употреба.

Времево клеймо

Не се поддържа

tinyint (int 1)

tinyint (int 1)

Уникален идентификатор

уникален идентификатор

varbinary(н)

varbinary(нито изображение

малка датачас

Време за среща

smallint (int 2)

smallint (int 2)

малки пари

sql_variant

Не се поддържа

клеймо за време

Не се поддържа

tinyint (int 1)

tinyint (int 1)

уникален идентификатор

уникален идентификатор

varbinary(н)

varbinary(нито изображение

Таблица с типове данни в SQL Server 2000

КАКВО Е ЗАЯВКА?

Заявкае команда, която давате на вашата програма за база данни. Заявките са част от езика DML. Всички SQL заявки се състоят от една команда. Структурата на тази команда е измамно проста, защото трябва да я разширите, за да извършвате много сложни оценки и манипулации на данни.

SELECT команда:

ИЗБЕРЕТЕ“Select” е най-често използваната команда, използва се за избор на данни от таблицата.
Тип заявка с помощта на SELECT:

ИЗБЕРЕТЕ id, user_name, city, birth_day FROM users_base;

Такава заявка ще покаже от таблицата users_base всички стойности на посочените колони, разделени със запетаи след командата SELECT. Също така можете да показвате всички колони с един знак, *, т.е. SELECT * FROM users_base; - такава заявка ще покаже всички данни от таблицата.

Командна структура SELECT:

SELECT (Имена на колони, разделени със запетаи, които трябва да бъдат показани в заявката) FROM (име на таблица в базата данни)
- Това е най-простият вид заявка. Има допълнителни команди за удобно извличане на данни (вижте по-долу „Функции“)

DML команди:

Стойностите могат да се поставят и премахват от полета с помощта на три DML (Data Manipulation Language) команди:
ВМЪКНЕТЕ(вмъкване)
АКТУАЛИЗИРАНЕ(Актуализация, модификация),
ИЗТРИЙ(Изтрий)

INSERT команда:

INSERT INTO users_base (user_name, city, birth_day) VALUES ('Alexander', 'Rostov', '06/20/1991');

Командата INSERT идва с префикс INTO (в към), след това в скоби са имената на колоните, в които трябва да вмъкнем данни, след това идва командата VALUES (стойности) и в скоби стойностите идват на свой ред (това е необходимо за спазване на реда на стойностите с колоните, стойностите трябва да са в същия ред като колоните, които сте посочили).

Команда UPDATE:

UPDATE users_base SET user_name = 'Алексей';

Командата UPDATE актуализира стойностите в таблица. Първо идва самата команда UPDATE, след това името на таблицата, след командата SET (set), след това името на колоната и нейната стойност в кавички (кавичките се поставят, ако стойността е в низов формат, ако е числова стойност и колоната не е свързан с типа данни vchar или други типове низове, кавичките нямат значение.)

Команда DELETE:

DELETE FROM users_base WHERE user_name = 'Василий';

Командата DELETE изтрива целия ред и идентифицира реда с помощта на критерия WHERE. В този случай тази заявка ще изтрие всички редове, в които стойността на колоната user_name е Vasily. Ще говорим за критерия WHERE и други малко по-късно.

Критерии, функции, условия и др. какво ни помага в SQL:

Клаузата WHERE е клауза на командата SELECT и други DML команди, която ви позволява да задавате предикати, чието условие може да бъде вярно или невярно за всеки ред в таблицата. Командата извлича само онези редове от таблицата, за които това твърдение е вярно.
Пример:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Алексей’;- такава заявка ще покаже само онези редове, които отговарят на условието WHERE, а именно всички редове, в които колоната user_name има стойност Alexey.

ORDER BY - условие за сортиране на избраните редове. Има 2 критерия ASC и DESC. ASC (сортиране от A до Z или от 0 до 9)

DESC (противоположно на ASC).
Пример:
ИЗБЕРЕТЕ id, city, birth_day FROM users_base ORDER BY user_name ASC; - такава заявка ще покаже стойности, сортирани по колоната user_name от A до Z (A-Z; 0-9)

Това условие може да се използва и във връзка с клаузата WHERE.
Пример:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Алексей’ ORDER BY id ASC;

DISTINCT е аргумент, който ви предоставя начин да премахнете двойните стойности от вашата клауза SELECT. Тези. ако имате дублиращи се стойности в колона, да речем потребителско_име, тогава DISTINCT ще ви покаже само една стойност, например имате 2 души на име Алексей във вашата база данни, тогава заявка, използваща функцията DISTINCT, ще ви покаже само 1 стойност което се среща първо...
Пример:
ИЗБЕРЕТЕ ОТДЕЛНО потребителско_име ОТ users_base;- такава заявка ще ни покаже стойностите на всички записи в колоната user_name, но те няма да се повтарят, т.е. ако сте имали безкраен брой повтарящи се стойности, те няма да бъдат показани...

И - взема две булеви (във формата A И B) като аргументи и ги оценява спрямо истината дали и двете са верни.
Пример:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- ще покаже всички стойности от таблицата, където името на града се появява в един ред (в този случай Ростов и потребителското име Александър.

ИЛИ - приема две булеви (във формата A ИЛИ B) като аргументи и оценява дали един от тях е правилен.

SELECT * FROM users_base WHERE city = 'Rostov' OR user_name = 'Alexander';- ще покаже всички стойности от таблицата, където в реда се появява името на град Ростов или потребителското име Александър.

NOT - приема едно булево значение (във формата NOT A) като аргументи и променя стойността му от false на true или true на false.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- ще покаже всички стойности от таблицата, където името на град Ростов се появява в един ред или потребителското име не е точно Александър.

IN - дефинира набор от стойности, в които дадена стойност може или не може да бъде включена.
SELECT * FROM users_base WHERE град В ('Владивосток', 'Ростов');- такава заявка ще покаже всички стойности от таблицата, които съдържат имената на посочените градове в колоната за град

Between е подобен на оператора IN. За разлика от дефинирането чрез числа от набор, както прави IN, BETWEEN дефинира диапазон, чиито стойности трябва да намалят, за да стане предикатът верен.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10;- показва всички стойности от таблицата, които ще бъдат в диапазона от 1 до 10 в колоната id

COUNT - Произвежда номерата на редовете или не-NULL стойностите на полетата, избрани от заявката.
SELECT COUNT (*) FROM users_base;- ще покаже броя на редовете в тази таблица.
ИЗБЕРЕТЕ БРОЯ (ОТДЕЛНО потребителско_име) ОТ база_потребители;- ще покаже броя на редовете с потребителски имена (не се повтарят)

SUM - произвежда аритметичната сума на всички избрани стойности за дадено поле.
SELECT SUM (id) FROM users_base;- ще покаже сумата от стойностите на всички редове на колоната id.

AVG - усреднява всички избрани стойности на това поле.
ИЗБЕРЕТЕ AVG (id) FROM users_base;- ще покаже средната стойност на всички избрани стойности на колоната id

MAX - произвежда най-голямата от всички избрани стойности за това поле.

MIN - произвежда най-малката от всички избрани стойности за това поле.

Създаване на таблици:

CREATE TABLE users_base (id integer, user_name text, city text, birth_day datetime);- изпълнението на такава команда ще доведе до създаването на таблицата, за която дадох примери... Тук всичко е просто, пишем командата CREATE TABLE, последвана от името на таблицата, която искаме да създадем, след това в скоби, разделени със запетаи, имената на колоните и техния тип данни. Това е стандартният начин за създаване на таблица в SQL. Сега ще дам пример за създаване на таблици в SQL Server 2005:

ЗАДАВАНЕ НА ANSI_NULLS ВКЛ
ОТИВАМ
НАСТРОЙТЕ QUOTED_IDENTIFIER ВКЛ
ОТИВАМ
АКО НЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ * ОТ sys.objects WHERE object_id = OBJECT_ID(N."") И въведете (N"U"))
НАЧАЛО
СЪЗДАВАНЕ НА ТАБЛИЦА.(

НЕ NULL,
НЕ NULL,
НЕ NULL,
ПЪРВИЧЕН КЛЮЧ КЛУСТЕР
A.S.C.


КРАЙ
ОТИВАМ
ЗАДАВАНЕ НА ANSI_NULLS ВКЛ
ОТИВАМ
НАСТРОЙТЕ QUOTED_IDENTIFIER ВКЛ
ОТИВАМ
АКО НЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ * ОТ sys.objects WHERE object_id = OBJECT_ID(N."") И въведете (N"U"))
НАЧАЛО
СЪЗДАВАНЕ НА ТАБЛИЦА.(
ИДЕНТИЧНОСТ(1,1) НЕ NULL,
НУЛА,
НУЛА,
ПЪРВИЧЕН КЛЮЧ КЛУСТЕР
A.S.C.
) С ВКЛЮЧЕНО (IGNORE_DUP_KEY = OFF).
) НА TEXTIMAGE_ON
КРАЙ
ОТИВАМ
ЗАДАВАНЕ НА ANSI_NULLS ВКЛ
ОТИВАМ
НАСТРОЙТЕ QUOTED_IDENTIFIER ВКЛ
ОТИВАМ
АКО НЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ * ОТ sys.objects WHERE object_id = OBJECT_ID(N."") И въведете (N"U"))
НАЧАЛО
СЪЗДАВАНЕ НА ТАБЛИЦА.(
ИДЕНТИЧНОСТ(1,1) НЕ NULL,
НУЛА,
НУЛА,
ПЪРВИЧЕН КЛЮЧ КЛУСТЕР
A.S.C.
) С ВКЛЮЧЕНО (IGNORE_DUP_KEY = OFF).
) НА
КРАЙ

Синтаксисът в SQL Server 2005 е друга тема, просто исках да покажа, че описах основите на SQL програмирането, можете да стигнете до върха, като знаете основите.

Ако имате въпроси по тази тема, моля, пишете ми