Sql търсене на стойности във всички таблици. Прости SQL заявки - кратка помощ и примери

Всеки уеб разработчик трябва да знае SQL, за да пише заявки към бази данни. И въпреки че phpMyAdmin не е отменен, често е необходимо да си изцапате ръцете, за да пишете SQL на ниско ниво.

Затова сме подготвили кратка екскурзияот Основи на SQL. Да започваме!

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

Операторът CREATE TABLE се използва за създаване на таблици. Аргументите трябва да бъдат имената на колоните, както и техните типове данни.

Нека създадем проста таблица по име месец. Състои се от 3 колони:

  • документ за самоличност– Номер на месеца в календарната година (цяло число).
  • име– Име на месеца (низ, максимум 10 знака).
  • дни– Брой дни в този месец (цяло число).

Ето как би изглеждала съответната SQL заявка:

CREATE TABLE месеци (id int, име varchar(10), дни int);

Също така, когато създавате таблици, е препоръчително да добавите първичен ключ за една от колоните. Това ще запази записите уникални и ще ускори заявките за извличане. В нашия случай нека името на месеца е уникално (колона име)

CREATE TABLE месеци (id int, name varchar(10), days int, PRIMARY KEY (име));

дата и час
Тип данниОписание
ДАТАСтойности на датата
ВРЕМЕ ЗА СРЕЩАСтойностите на датата и часа са точни до минута
ВРЕМЕВремеви стойности

2. Вмъкване на редове

Сега нека попълним нашата таблица месецаполезна информация. Добавянето на записи към таблица се извършва с помощта на израза INSERT. Има два начина да напишете тази инструкция.

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

Този метод на запис е прост, но несигурен, тъй като няма гаранция, че когато проектът се разшири и таблицата се редактира, колоните ще бъдат в същия ред както преди. Безопасен (и в същото време по-тромав) начин за писане на оператор INSERT изисква указване както на стойностите, така и на реда на колоните:

Ето първата стойност в списъка СТОЙНОСТИсъвпада с първото посочено име на колона и т.н.

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

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

Най-простото използване на оператора SELECT е заявка, която връща всички колони и редове от таблица (например таблици по име герои):

ИЗБЕРЕТЕ * ОТ "знаци"

Символът звездичка (*) означава, че искаме да получим данни от всички колони. Тъй като SQL базите данни обикновено се състоят от повече от една таблица, е необходимо да се посочи ключовата дума FROM, последвана от името на таблицата, разделено с интервал.

Понякога не искаме да получаваме данни от не всички колони в таблицата. За целта вместо звездичка (*) трябва да запишем имената на желаните колони, разделени със запетаи.

ИЗБЕРЕТЕ id, име ОТ месец

Освен това в много случаи искаме получените резултати да бъдат сортирани в определен ред. В SQL правим това с помощта на ORDER BY. Може да приеме незадължителен модификатор - ASC (по подразбиране) сортиране във възходящ ред или DESC, сортиране в низходящ ред:

ИЗБЕРЕТЕ id, име FROM месец ПОРЪЧАЙТЕ ПО име DESC

Когато използвате ORDER BY, уверете се, че е на последно място в оператора SELECT. В противен случай ще се покаже съобщение за грешка.

4. Филтриране на данни

Научихте как да избирате конкретни колони от база данни с помощта на SQL заявка, но какво ще стане, ако трябва да извлечем и конкретни редове? Тук на помощ идва клаузата WHERE, която ни позволява да филтрираме данните в зависимост от условието.

В тази заявка ние избираме само тези месеци от таблицата месец, в които има повече от 30 дни с използване на оператора по-голямо от (>).

ИЗБЕРЕТЕ id, име FROM месец WHERE дни > 30

5. Разширено филтриране на данни. Оператори И и ИЛИ

Преди използвахме филтриране на данни, използвайки един критерий. За по-сложно филтриране на данни можете да използвате операторите И и ИЛИ и операторите за сравнение (=,<,>,<=,>=,<>).

Тук имаме таблица, съдържаща четирите най-продавани албума на всички времена. Нека изберем тези, които се класифицират като рок и са продадени под 50 милиона копия. Това може лесно да се направи чрез поставяне на оператор И между тези две условия.


ИЗБЕРЕТЕ * ОТ албуми WHERE жанр = "рок" И продажби_в_милиони<= 50 ORDER BY released

6. В/Между/Харесвам

WHERE поддържа и няколко специални команди, които ви позволяват бързо да проверявате най-често използваните заявки. Ето ги и тях:

  • IN – служи за указване на набор от условия, всяко от които може да бъде изпълнено
  • BETWEEN – проверява дали стойността е в посочения диапазон
  • LIKE – търси конкретни модели

Например, ако искаме да изберем албуми с попИ душамузика, можем да използваме IN("value1","value2") .

ИЗБЕРЕТЕ * ОТ албуми WHERE жанр IN ("поп","соул");

Ако искаме да получим всички албуми, издадени между 1975 и 1985 г., трябва да напишем:

ИЗБЕРЕТЕ * ОТ албуми WHERE, издадени МЕЖДУ 1975 И 1985;

7. Функции

SQL е пълен с функции, които правят всякакви полезни неща. Ето някои от най-често използваните:

  • COUNT() – връща броя на редовете
  • SUM() - връща общата сума на числова колона
  • AVG() - връща средната стойност на набор от стойности
  • MIN() / MAX() – Получава минималната/максималната стойност от колона

За да получим най-новата година в нашата таблица, трябва да напишем следната SQL заявка:

ИЗБЕРЕТЕ МАКСИМУМ (издадени) ОТ албуми;

8. Подзаявки

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

Ние знаем как да получим тези конкретни колони:

ИЗБЕРЕТЕ изпълнител, албум, издаден ОТ албуми;

Ние също знаем как да получим най-ранната година:

ИЗБЕРЕТЕ МИН. (освободен) ОТ албум;

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

ИЗБЕРЕТЕ изпълнител, албум, издаден ОТ албуми WHERE издаден = (ИЗБЕРЕТЕ МИН. (издадени) ОТ албуми);

9. Свързване на маси

В по-сложните бази данни има множество таблици, свързани една с друга. Например по-долу има две таблици за видеоигрите ( видео игри) и разработчици на видеоигри ( разработчици на игри).


На масата видео игриима колона за разработчици ( developer_id), но съдържа цяло число, а не името на разработчика. Това число представлява идентификатора ( документ за самоличност) на съответния разработчик от таблицата на разработчиците на игри ( разработчици на игри), логически свързвайки два списъка, което ни позволява да използваме информацията, съхранена и в двата едновременно.

Ако искаме да създадем заявка, която връща всичко, което трябва да знаем за игрите, можем да използваме INNER JOIN, за да свържем колони от двете таблици.

ИЗБЕРЕТЕ video_games.name, video_games.genre, game_developers.name, game_developers.country ОТ video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

Това е най-простият и често срещан тип JOIN. Има няколко други опции, но те се отнасят за по-рядко срещани случаи.

10. Псевдоними

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

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

ИЗБЕРЕТЕ games.name, games.genre, devs.name AS разработчик, devs.country ОТ video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. Актуализация на данните

Често трябва да променим данните в някои редове. В SQL това се прави с помощта на оператора UPDATE. Изявлението UPDATE се състои от:

  • Таблицата, в която се намира заместващата стойност;
  • Имена на колони и техните нови стойности;
  • Редовете, избрани чрез WHERE, които искаме да актуализираме. Ако това не бъде направено, всички редове в таблицата ще се променят.

По-долу е таблицата телевизионен сериалс телевизионни сериали и техните рейтинги. В таблицата обаче се промъкна малка грешка: въпреки че серията Игра на троновеи е описан като комедия, но всъщност не е. Нека поправим това!

Таблица с данни tv_series UPDATE tv_series SET genre = "драма" WHERE id = 2;

12. Изтриване на данни

Изтриването на ред от таблица с помощта на SQL е много прост процес. Всичко, което трябва да направите, е да изберете таблицата и реда, които искате да изтриете. Нека изтрием последния ред в таблицата от предишния пример телевизионен сериал. Това се прави с помощта на инструкцията >DELETE.

ИЗТРИВАНЕ ОТ tv_series WHERE id = 4

Бъдете внимателни, когато пишете командата DELETE и се уверете, че клаузата WHERE присъства, в противен случай всички редове в таблицата ще бъдат изтрити!

13. Изтриване на таблица

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

TRUNCATE TABLE table_name;

В случай, че всъщност искаме да изтрием както данните, така и самата таблица, тогава командата DROP ще ни бъде полезна:

DROP TABLE table_name;

Бъдете много внимателни с тези команди. Те не могат да бъдат отменени!/p>

Това приключва нашия урок по SQL! Има много неща, които не сме покрили, но това, което вече знаете, трябва да е достатъчно, за да ви даде някои практически умения за вашата уеб кариера.

Продължаваме да изследваме възможностите на SQL Server от Microsoft и следващият ни компонент е Търсене в пълен текст, в руската версия е „ Пълнотекстово търсене", а сега ще разберем за какво служи и как да приложим това пълнотекстово търсене в SQL сървър, използвайки този компонент.

И ще започнем, разбира се, като разгледаме основите на търсенето в пълен текст, т.е. какво е това и защо е необходимо?

Какво е пълнотекстово търсене?

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

Търсенето на пълен текст включва създаване на специален индекс ( той е различен от обикновените индекси) текстови данни, които са вид речник на думите, които се появяват в тези данни.

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

Възможности за пълнотекстово търсене в MS SQL Server

  • При пълнотекстово търсене на SQL Server можете да търсите не само по отделни думи или фрази, но и по префиксни изрази, например, задайте текста на началото на дума или фраза;
  • Можете също да търсите думи по словоформи, например различни форми на глаголи или съществителни в единствено и множествено число, т.е. от производни изрази;
  • Можете да създадете заявка, за да намерите думи или фрази, които са близки до други думи или фрази, т.е. чувствителни към местоположение изрази;
  • Има възможност за търсене синонимни форми на определена дума (тезаурус), т.е. например, ако тезаурусът посочва, че " Автомобил" И " Кола" са синоними, тогава при търсене на думата " Автомобил"Резултатният набор ще включва също редове, съдържащи думата " Кола»;
  • Можете да посочите думи или фрази в заявката си претеглени стойности, например, ако една заявка съдържа няколко думи или фрази, тогава те могат да получат важност от 0,0 до 1,0 ( 1.0 означава, че това е най-важната дума или фраза);
  • За да игнорирате някои думи в търсенето, можете да използвате „ списък със стоп думи“, т.е. думите, включени в този списък, няма да бъдат търсени.

Подготовка за внедряване на пълнотекстово търсене в MS SQL Server

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

  • За да реализирате търсене в пълен текст, компонентът Търсене в пълен текст ( Пълнотекстово търсене) трябва да бъде инсталиран;
  • Една таблица може да има само един индекс на пълен текст;
  • За да създадете индекс с пълен текст, таблицата трябва да съдържа един уникален индекс, който включва една колона и не позволява нулеви стойности. Препоръчително е да използвате уникален клъстерен индекс ( или само първичния ключ), чиято първа колона трябва да е целочислен тип данни;
  • Пълнотекстовият индекс може да бъде създаден върху колони с тип данни: char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary или varbinary(max);
  • За да създадете индекс с пълен текст, първо трябва да създадете каталог с пълен текст. Започвайки с SQL Server 2008, пълнотекстовият каталог е логическа концепция, която се отнася до група пълнотекстови индекси, т.е. е виртуален обект и не е част от файлова група ( има начин за създаване на индекс с пълен текст с помощта на „Съветника“, в който директорията може да бъде създадена едновременно с индекса, ще разгледаме този метод по-долу).

Забележка! Ще реализирам пълнотекстово търсене, използвайки примера на SQL Server 2008 R2. Предполага се също, че вече сте инсталирали компонента за пълнотекстово търсене; ако не, инсталирайте го, като добавите съответния компонент чрез „Център за инсталиране на SQL Server“, т.е. поставете отметка в съответното поле.

В примерите по-долу ще използвам SQL Server Management Studio като инструмент за създаване и управление на пълнотекстови каталози и индекси.

Изходни данни за създаване на пълнотекстово търсене

Да кажем, че имаме база данни TestBase и в нея има таблица TestTable, в която има само две полета, първото (id) е първичният ключ, а второто (textdata) са текстовите данни, за които ще извършете търсене в пълен текст.

CREATE TABLE TestTable(id int IDENTITY(1,1) NOT NULL, textdata varchar(500) NULL, CONSTRAINT PK_TestTable PRIMARY KEY CLUSTERED (id ASC))

Например, той ще съдържа следните данни


Създаване на пълен текстов каталог в SQL Server

За да създадете пълен текстов каталог, както и индекс, можете да използвате или графичния интерфейс на SSMS, или инструкциите на T-SQL, ние ще разгледаме и двата метода.

Създаване на пълнотекстов каталог в T-SQL

СЪЗДАВАНЕ НА ПЪЛЕН ТЕКСТОВ КАТАЛОГ TestCatalog С ACCENT_SENSITIVITY = ВКЛ. КАТО АВТОРИЗАЦИЯ ПО ПОДРАЗБИРАНЕ dbo GO

  • CREATE FULLTEXT CATALOG – команда за създаване на пълнотекстов каталог;
  • TestCatalog – името на пълнотекстовия ни каталог;
  • WITH ACCENT_SENSITIVITY (ON|OFF) – тази опция указва дали каталогът с пълен текст ще вземе под внимание диакритичните знаци за индексиране на пълен текст. По подразбиране е ВКЛЮЧЕНО;
  • AS DEFAULT – опция за указване, че директорията е директорията по подразбиране. Ако създадете индекс с пълен текст, без изрично да посочите директория, се използва директорията по подразбиране;
  • АВТОРИЗАЦИЯ dbo - задава собственика на пълнотекстовия каталог, това може да бъде потребител или роля на база данни. В този случай сме посочили ролята на dbo.

Създаване на пълнотекстов каталог в GUI на Management Studio

Точно същият пълнотекстов каталог може да бъде създаден в графичния интерфейс на Management Studio. За да направите това, отворете базата данни, отидете в папката Съхранение ->Пълнотекстови каталози, щракнете с десния бутон върху този елемент и изберете „ Създаване на пълен текстов каталог».


Ще се отвори прозорец за създаване на директория, където посочваме името на директорията и нейните опции.


Модифициране и изтриване на пълен текстов каталог в SQL Server

За да промените опциите на директорията, можете да използвате оператора ALTER FULLTEXT CATALOG, например, нека накараме нашия каталог да спре да взема под внимание диакритичните знаци, за това пишем SQL оператор, който ще възстанови нашия каталог с новата опция.

ПРОМЯНА НА ПЪЛНИЯ ТЕКСТ КАТАЛОГ TestCatalog REBUILD С ACCENT_SENSITIVITY=OFF GO

За да премахнете директория, можете да използвате например T-SQL израз

ПУСКАНЕ НА ПЪЛНИЯ ТЕКСТ КАТАЛОГ TestCatalog

Всичко това може да се направи в графичния интерфейс на Management Studio ( за промяна на параметрите на директорията „Свойства“, за изтриване на „Изтриване“)

Създаване на пълнотекстов индекс в SQL Server

След като създадете каталог с пълен текст, можете да започнете да създавате индекси с пълен текст върху него. В нашия случай искаме да създадем пълнотекстов индекс, който включва полето textdata на таблицата TestTable.

Създаване на пълнотекстов индекс в T-SQL

За да създадете индекс на пълен текст, можете да напишете следния SQL оператор

CREATE FULLTEXT INDEX ON TestTable(textdata) KEY INDEX PK_TestTable ON (TestCatalog) С (CHANGE_TRACKING AUTO) GO

  • CREATE FULLTEXT INDEX – команда за създаване на пълнотекстов индекс;
  • TestTable(textdata) – таблица и колона, включени в индекса;
  • KEY INDEX PK_TestTable – име на уникалния индекс на таблицата TestTable;
  • ON (TestCatalog) - показва, че пълнотекстовият индекс ще бъде създаден в пълнотекстовия каталог на TestCatalog. Ако не посочите този параметър, индексът ще бъде създаден в каталога с пълен текст по подразбиране;
  • WITH (CHANGE_TRACKING AUTO) - казваме, че всички промени, които ще бъдат направени в базовата таблица (TestTable) автоматично ще се появят в нашия пълнотекстови индекс, т.е. автоматично пълнене.

Създаване на индекс на пълен текст в GUI на Management Studio

Пълнотекстовият индекс може да бъде създаден с помощта на графични инструменти, отворете свойствата на пълнотекстовия каталог и отидете на елемента „; Таблици или изгледи“, изберете желаната таблица, поле, уникален индекс и метод за проследяване на промените. В нашия случай имаме само една налична таблица и едно поле.


Промяна или премахване на индекс на пълен текст

Ако е необходимо, можете да промените параметрите на индекса на пълен текст. Като пример, нека променим метода за проследяване на промените от автоматичен на ръчен. За да направите промени в графичния интерфейс, можете да използвате " Свойства на пълен текстов каталог -> Таблици или изгледи“, който използвахме за създаване на индекс на пълен текст.

Или можете да напишете следния код

ПРОМЯНА НА ИНДЕКСА НА ПЪЛНИЯ ТЕКСТ НА TestTable SET CHANGE_TRACKING = MANUAL

За да изтриете индекс с пълен текст, просто изтрийте таблицата от списъка с обекти, свързани с каталога с пълен текст в същия прозорец " Свойства на пълен текстов каталог -> Таблици или изгледи»


Или напишете T-SQL код

ПУСНЕТЕ ИНДЕКС НА ПЪЛЕН ТЕКСТ ВЪРХУ TestTable

Създаване на пълнотекстов каталог и индекс с помощта на помощник

Както споменах по-рано, пълнотекстови каталог и индекс могат да бъдат създадени с помощта на съветника, т.е. стъпка по стъпка, за да направите това, щракнете с десния бутон върху таблицата, която искаме да включим в пълнотекстово търсене и изберете „ Пълен текстов индекс -> Дефиниране на пълен текстов индекс».

Забележка! Преди да направя това, изтрих директорията и индекса, които създадохме в предишните примери.


Това ще стартира съветника за индексиране на пълен текст на SQL Server.



След това колоната, която ще бъде включена в индекса на пълния текст.


След това трябва да изберете начин за проследяване на промените.


Посочваме името на директорията и нейните опции, за да я създадем, тъй като се предполага, че нямаме директория; ако имаме, бихме могли да я изберем.


Тук можем да конфигурираме графика за попълване на пълнотекстовия каталог.


За да създадете каталог и индекс, просто щракнете върху „ Готов».


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


По този начин създадохме пълнотекстови каталог и индекс едновременно с помощта на съветника.

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

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

Ако си спомняте, нашата TestTable съдържа дефиниции на технологии, езици за програмиране, като цяло дефиниции, свързани с IT сферата. Да кажем, че искаме да получим всички записи, където се споменава Microsoft, за това пишем пълнотекстова заявка с ключовата дума CONTAINS, например:

ИЗБЕРЕТЕ * ОТ TestTable WHERE CONTAINS (textdata, ""Microsoft"")


Получихме резултата, но да кажем, че трябва да го сортираме и по уместност, с други думи, кои редове са по-подходящи за нашата заявка. За да направим това, ще използваме функцията CONTAINSTABLE, която присвоява ранг на всеки открит запис.

ИЗБЕРЕТЕ Table1.id AS ID, RowRank.Rank като, Table1.textdata като ОТ TestTable Table1 INNER JOIN CONTAINSTABLE(TestTable, textdata, ""Microsoft"") като RowRank на Table1.id=RowRank. ПОРЪЧКА ПО RowRank.RANK DESC


Както можете да видите, рангът е зададен и редовете са сортирани по него. Самият алгоритъм за класиране, както и др подробна информацияЗа информация относно пълнотекстово търсене вижте SQL Server Books Online.

Предлагам да свърша до тук, дано всичко е ясно, успех!

Заявките се пишат без екраниращи кавички, тъй като MySQL, MS SQLИ PostGreeте са различни.

SQL заявка: получаване на посочените (необходими) полета от таблицата

ИЗБЕРЕТЕ id, country_title, count_people ОТ table_name

Получаваме списък със записи: ВСИЧКИ държави и тяхното население. Имената на задължителните полета са посочени разделени със запетаи.

SELECT * FROM table_name

* обозначава всички полета. Тоест ще има предавания ВСИЧКОполета за данни.

SQL заявка: извеждане на записи от таблица, с изключение на дубликати

ИЗБЕРЕТЕ DISTINCT country_title ОТ table_name

Получаваме списък със записи: държави, в които се намират нашите потребители. Може да има много потребители от една държава. В този случай това е ваше искане.

SQL заявка: показване на записи от таблица въз основа на дадено условие

ИЗБЕРЕТЕ id, country_title, city_title FROM table_name WHERE count_people>100000000

Получаваме списък с рекорди: държави, в които броят на хората е повече от 100 000 000.

SQL заявка: извеждане на записи от таблица с подреждане

SELECT id, city_title FROM table_name ORDER BY city_title

Получаваме списък със записи: градове по азбучен ред. В началото А, в края на Z.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Получаваме списък със записи: градове наобратно ( ОПИСАНИЕ) добре. В началото I, в края A.

SQL заявка: преброяване на броя на записите

SELECT COUNT(*) FROM table_name

Получаваме броя (броя) на записите в таблицата. В този случай НЯМА списък със записи.

SQL заявка: извежда желания диапазон от записи

ИЗБЕРЕТЕ * ОТ table_name LIMIT 2, 3

Получаваме 2 (втори) и 3 (трети) записа от таблицата. Заявката е полезна при създаване на навигация на WEB страници.

SQL заявки с условия

Показване на записи от таблица въз основа на дадено условие с помощта на логически оператори.

SQL заявка: И конструкция

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

Получаваме списък със записи: градове от Русия Иимат достъп до нефт. Кога да използвате оператора И, тогава и двете условия трябва да съвпадат.

SQL заявка: ИЛИ конструкция

ИЗБЕРЕТЕ id, city_title FROM table_name WHERE country="Русия" OR country="USA"

Получаваме списък със записи: всички градове от Русия ИЛИСАЩ. Кога да използвате оператора ИЛИ, тогава ПОНЕ едно условие трябва да отговаря.

SQL заявка: И НЕ конструкция

ИЗБЕРЕТЕ id, user_login FROM table_name WHERE country="Русия" И НЕ count_comments<7

Получаваме списък със записи: всички потребители от Русия Икой направи НЕ ПО-МАЛКО 7 коментара.

SQL заявка: IN конструкция (B)

SELECT id, user_login FROM table_name WHERE държава IN ("Русия", "България", "Китай")

Получаваме списък със записи: всички потребители, които живеят в ( IN) (Русия, или България, или Китай)

SQL заявка: НЕ е в конструкцията

SELECT id, user_login FROM table_name WHERE страна НЕ В ("Русия", "Китай")

Получаваме списък със записи: всички потребители, които не живеят в ( НЕ В) (Русия или Китай).

SQL заявка: конструкция IS NULL (празни или НЕ празни стойности)

SELECT id, user_login FROM table_name WHERE status IS NULL

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

SELECT id, user_login FROM table_name WHERE state IS NOT NULL

Получаваме списък със записи: всички потребители, чийто статус е дефиниран (NOT NULL).

SQL заявка: конструкция LIKE

SELECT id, user_login FROM table_name WHERE фамилия LIKE "Ivan%"

Получаваме списък със записи: потребители, чието фамилно име започва с комбинацията „Иван“. Знакът % означава ВСЯКАКВИ брой от ВСЯКАКВИ знаци. За да намерите знака %, трябва да използвате екраниращия символ “Ivan\%”.

SQL заявка: BETWEEN конструкция

SELECT id, user_login FROM table_name WHERE заплата МЕЖДУ 25000 И 50000

Получаваме списък със записи: потребители, които получават заплата от 25 000 до 50 000 включително.

Има МНОГО логически оператори, така че проучете подробно документацията на SQL сървъра.

Сложни SQL заявки

SQL заявка: комбиниране на множество заявки

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Получаваме списък с записи: потребители, които са регистрирани в системата, както и тези потребители, които са регистрирани отделно във форума. Операторът UNION може да комбинира множество заявки. UNION действа като SELECT DISTINCT, тоест отхвърля дублиращите се стойности. За да получите абсолютно всички записи, трябва да използвате оператора UNION ALL.

SQL заявка: преброяване на стойностите на полетата MAX, MIN, SUM, AVG, COUNT

Показване на една максимална стойност на брояча в таблицата:

SELECT MAX(брояч) FROM table_name

Извеждане на една минимална стойност на брояча в таблицата:

SELECT MIN(брояч) FROM table_name

Показване на сумата от всички стойности на брояча в таблицата:

ИЗБЕРЕТЕ СУМА(брояч) ОТ име_на_таблица

Показване на средната стойност на брояча в таблицата:

ИЗБЕРЕТЕ AVG(брояч) FROM table_name

Показване на броя на броячите в таблицата:

SELECT COUNT(counter) FROM table_name

Показване на броя на измервателните уреди в цех №1 в таблицата:

SELECT COUNT(counter) FROM table_name WHERE office="Работилница № 1"

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

SQL заявка: групиране на записи

ИЗБЕРЕТЕ континент, SUM(държава_област) ОТ държава ГРУПИРАНЕ ПО континент

Получаваме списък със записи: с името на континента и сумата от площите на всичките им страни. Тоест, ако има директория с държави, където всяка страна има записана площ, тогава с помощта на конструкцията GROUP BY можете да разберете размера на всеки континент (въз основа на групиране по континенти).

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

ИЗБЕРЕТЕ o.order_no, o.amount_paid, c.company FROM поръчки AS o, клиент AS с WHERE o.custno=c.custno И c.city="Tyumen"

Получаваме списък със записи: поръчки от клиенти, които живеят само в Тюмен.

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

ИЗБЕРЕТЕ o.order_no, o.amount_paid, z.company FROM orders AS o LEFT JOIN client AS z ON (z.custno=o.custno)

Вложени подзаявки

ИЗБЕРЕТЕ * ОТ име на таблица WHERE заплата=(ИЗБЕРЕТЕ МАКС.(заплата) ОТ служител)

Получаваме един запис: информация за потребителя с максимална заплата.

внимание!Вложените подзаявки са едно от най-големите тесни места в SQL сървърите. Заедно с тяхната гъвкавост и мощност, те значително увеличават натоварването на сървъра. Което води до катастрофално забавяне за други потребители. Случаите на рекурсивни извиквания във вложени заявки са много чести. Затова силно препоръчвам да НЕ използвате вложени заявки, а да ги разделите на по-малки. Или използвайте комбинацията LEFT JOIN, описана по-горе. В допълнение, този тип искане е повишен източник на нарушения на сигурността. Ако решите да използвате вложени подзаявки, тогава трябва да ги проектирате много внимателно и да направите първоначални изпълнения на копия на бази данни (тестови бази данни).

SQL заявки, променящи данни

SQL заявка: INSERT

Инструкции ВМЪКНЕТЕви позволяват да вмъквате записи в таблица. С прости думи, създайте ред с данни в таблица.

Опция 1. Често използвана инструкция е:

INSERT INTO table_name (id, user_login) СТОЙНОСТИ (1, "иванов"), (2, "петров")

До масата" име_на_таблица„2 (два) потребителя ще бъдат вмъкнати наведнъж.

Вариант #2. По-удобно е да използвате стила:

INSERT table_name SET id=1, user_login="ivanov"; INSERT table_name SET id=2, user_login="petrov";

Това има своите предимства и недостатъци.

Основни недостатъци:

  • Много малки SQL заявки ще се изпълняват малко по-бавно от една голяма SQL заявка, но други заявки ще се редят на опашка за обслужване. Тоест, ако изпълнението на голяма SQL заявка отнема 30 минути, тогава през цялото това време останалите заявки ще пушат бамбук и ще чакат своя ред.
  • Заявката се оказва по-масова от предишната версия.

Основни предимства:

  • По време на малки SQL заявки, други SQL заявки не се блокират.
  • Лекота на четене.
  • Гъвкавост. При тази опция не е нужно да следвате структурата, а да добавите само необходимите данни.
  • Когато създавате архиви по този начин, можете лесно да копирате един ред и да го стартирате през командния ред (конзолата), като по този начин не възстановявате целия АРХИВ.
  • Стилът на писане е подобен на оператора UPDATE, което го прави по-лесен за запомняне.

SQL заявка: АКТУАЛИЗИРАНЕ

UPDATE table_name SET user_login="иванов", user_surname="Иванов" WHERE id=1

На масата " име_на_таблица"в записа с номер id=1 стойностите на полетата user_login и user_surname ще бъдат променени на посочените стойности.

SQL заявка: DELETE

DELETE FROM table_name WHERE id=3

В таблицата table_name записът с id номер 3 ще бъде изтрит.

  1. Препоръчително е всички имена на полета да се изписват с малки букви и, ако е необходимо, да се разделят с принудителен интервал “_” за съвместимост с различни езици за програмиране, като Delphi, Perl, Python и Ruby.
  2. Пишете SQL командите с ГЛАВНИ букви за четливост. Винаги помнете, че други хора могат да прочетат кода след вас и най-вероятно вие самият след N период от време.
  3. Наименувайте полетата първо със съществително име и след това с действие. Например: city_status, user_login, user_name.
  4. Опитайте се да избягвате резервни думи в различни езици, които могат да причинят проблеми в SQL, PHP или Perl, като (име, брой, връзка). Например: връзката може да се използва в MS SQL, но е запазена в MySQL.

Този материал е кратък справочник за ежедневна работа и не претендира да бъде супер мега авторитетен източник, който е оригиналният източник на SQL заявки към определена база данни.

Нека започнем с основни запитвания. Какво би било без тях? Най-лаконичната форма на SQL заявка се превежда като „Искам да получа всички данни от тази таблица“. Резултатът от следната заявка са всички записи с всички полета от таблицата D_STAFF.

ИЗБЕРЕТЕ * ОТ D_STAFF

Въвеждане на SQL заявка в програмата за обучение.

Изберете [SQL раздел] в Explorer отляво, щракнете върху [SQL бутон] над списъка вдясно, въведете заявка и щракнете върху [SQL бутон] отново. След потвърждаване на заявката списъкът вдясно ще изглежда така. В този случай всичко е по-просто: просто въведете SQL заявката в съответното поле и щракнете върху [Run].


Резултатът от изпълнението на проста SQL заявка.

Използването на (*) след оператора SELECT със сигурност е удобно, особено ако не знаете какви полета има в таблицата, но също така е скъпо - структурите, които съхраняват резултата от заявка, консумират доста "допълнителна" памет, и това само увеличава времето, прекарано в изпълнение на самата заявка. Следващата опция е много за предпочитане, ако имате нужда само от информация за пълното ви име. служител и неговия стаж. Преводът е нещо подобно: „Искам да знам само това и това за всички в таблицата...“

ИЗБЕРЕТЕ S_NAME, S_EXPERIENCE ОТ D_STAFF

Резултатът от последната SQL заявка заема значително по-малко място по ширина.


Избор на стойности за конкретни полета на таблицата.

Стъпка 2. SQL заявка с прост критерий за избор

Най-простите заявки практически не са приложими на практика, тъй като те „изваждат“ абсолютно всички записи от посочената таблица и може да има стотици хиляди от тях. СУБД може просто да откаже да изпълни такава заявка и може просто да няма достатъчно RAM на машината на клиента. Какво да правим с резултатите от такива заявки, дори ако са изпълнени правилно, не винаги е ясно, въпреки че за някои ще работи. За да наложи ограничения върху избора на необходимите записи, SQL използва ключовата дума WHERE. Заявката по-долу избира само служители с по-малко от 5 години опит.

ИЗБЕРЕТЕ S_NAME, S_EXPERIENCE ОТ D_STAFF WHERE S_EXPERIENCE


Използване прост критерийизбор на записи.

Стъпка 3. SQL заявка със съставни критерии за избор

За какво са те? комбинирани критерии за подборзаписи, мисля, че няма нужда да обяснявам. За същата цел като заявките с прости критерии. Условията се комбинират с помощта на логически операции съюзиИ дизюнкции(оператори И и ИЛИ) и са групирани с помощта на скоби. Следната заявка ще върне записи на служители с по-малко от 5 години опит и с допълнително ограничение на позицията, която заемат.

ИЗБЕРЕТЕ S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) И D_STAFF.S_EXPERIENCE


Използване комплексен критерийизбор на записи.

Стъпка 4. Оператор BETWEEN

Операторът BETWEEN опростява синтаксиса за описание на критерии, които определят диапазона от приемливи стойности. Вместо BETWEEN 3 AND 7 по-долу можете да напишете D_STAFF.S_EXPERIENCE >=3 AND D_STAFF.S_EXPERIENCE<=7 . Первый вариант способствует наглядности запроса – это раз, поиск на стороне СУБД может выполняться по отдельному алгоритму, специально оптимизированному для подобного вида ограничений – это два.

ИЗБЕРЕТЕ S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) И D_STAFF.S_EXPERIENCE BETWEEN 3 AND 7


Използване на оператора BETWEEN.

Стъпка 5: Оператор LIKE

Този прекрасен оператор ви позволява да ограничите стойностите на текстовите полета с помощта на заместващи знаци. Няма да обяснявам синтаксиса, мисля, че всичко е ясно от примера. Търсим служители с трите имена. започвайки с "С", трябва да се срещнат в средата "Вал"и всичко трябва да приключи с „ич“. В някои СУБД ключовата дума LIKE може също да се използва със стойности за дата и час.

SELECT S_NAME FROM D_STAFF WHERE S_NAME LIKE "C%" AND S_NAME LIKE "%Val%" AND S_NAME LIKE "%ich"

SELECT S_NAME FROM D_STAFF WHERE S_NAME LIKE "S%Val%ich"


Използване на оператора LIKE.

Стъпка 6: Псевдоними на таблици и полета

Имената на таблиците и полетата, използвани в заявката, могат да бъдат определени псевдоними. Как се прави това е показано по-долу. Защо се прави това ще бъде показано в следващите стъпки, включително стъпка 7, а този пример илюстрира най-очевидните използване на псевдоними в SQL– форматиране на резултата от заявката в съответствие с изискванията за лесно възприемане от човек. За да дефинирате псевдоним за таблица или поле в SQL, се използва ключовата дума AS. Резултатът от заявката (заглавието на таблицата) в тази версия изглежда по-подходящ за изготвяне на отчет въз основа на него.

ИЗБЕРЕТЕ S_NAME КАТО Служител, S_EXPERIENCE КАТО [Трудов опит], S_POSITION КАТО позиция ОТ D_STAFF КАТО ПЕРСОНАЛ


Прилагане на псевдоними на таблици и полета.

Стъпка 7. Връзка „Шеф - подчинен“

Този пример завършва „първите стъпки“ на изучаване на SQL заявки с най-сложните от тях. Тук „програмираме“ изхода на списък от служители заедно с тяхното непосредствено ръководство. Трудността е, че записите и за двете се съхраняват в една и съща таблица и тук не можете без псевдоними. СУБД, по време на обработката на заявката, ще има достъп до таблицата D_STAFF, сякаш са две различни таблици (под псевдонимите STAFF и CHIEF), за да комбинира записите в един кортежна базата на връзката “началник-подчинен”. Връзката се моделира по следния начин: стойността на полето S_CHIEF_ID на подчинен съответства на стойността на полето XD_IID на неговия началник.

ИЗБЕРЕТЕ STAFF.S_NAME AS Подчинен, STAFF.S_POSITION AS [Подчинена позиция], CHIEF.S_NAME AS Началник, CHIEF.S_POSITION AS [Позиция на ръководител] FROM D_STAFF AS STAFF, D_STAFF AS CHIEF WHERE STAFF.S_CHIEF_ID=CHIEF.XD_IID


Получаване на йерархията "висшестоящ - подчинен" с помощта на псевдоним на таблица в SQL заявка.