Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 4 · Урок 5

Езикът SQL — преговор с допълнение

Клаузите на SELECT с разширенията на T-SQL: TOP, HAVING, INTO, петте вида JOIN, UNION/UNION ALL, DROP/TRUNCATE и богатата библиотека от функции.

T-SQL — диалектът на MS SQL Server

Всички софтуерни инструменти за РБД предоставят заявки на език с основата на изначалния SQL, но развиват свои версии. Версията на MS SQL Server се нарича Transact SQL (T-SQL). Да преговорим основните оператори и да добавим полезните разширения.

Заявки за извличане — пълният синтаксис

SELECT [ALL|DISTINCT] [TOP(израз) [PERCENT]] списък FROM източник [AS псевдоним];

ALL (по премълчаване) — всички редове; DISTINCT — по един от повтарящите се; TOP(n) — само първите n реда (или n PERCENT — n процента). Източникът е таблица ИЛИ временна таблица от вложен SELECT; AS дава псевдоним.

  • WHERE условие — селекция; логическите операции (AND, OR, NOT) имат по-нисък приоритет от сравненията, което спестява скоби.
  • ORDER BY атрибут1 [ASC|DESC], … — сортиране; при равенство — по следващия атрибут.
  • GROUP BY атрибут1, … [HAVING условие] — групиране; HAVING е новото: агрегиращата характеристика се пресмята само за редовете/групите, удовлетворяващи условието.
  • INTO нова_таблица — създава нова ПОСТОЯННА таблица от резултата (като Make Table): SELECT атрибути INTO нова FROM източник;

Петте вида JOIN

КлаузаКакво прави
INNER JOINвътрешно: само съединените двойки
LEFT [OUTER] JOIN+ несъединените редове от ЛЯВАТА таблица (дясната се пълни с Null)
RIGHT [OUTER] JOIN+ несъединените от ДЯСНАТА
FULL [OUTER] JOIN+ несъединените и от двете
CROSS JOINкръстосано: всички двойки (декартово произведение)

Внимание

FULL JOIN и CROSS JOIN пораждат много големи таблици — използвайте ги ограничено.

Създаване и редактиране (преговор + ново)

  • CREATE TABLE, INSERT INTO … VALUES (може няколко реда наведнъж), UPDATE … SET … WHERE, DELETE FROM … WHERE — познати от Модул 3.
  • UNION — обединение на две временни таблици с еднакви сигнатури (повтарящите се редове влизат веднъж); UNION ALL — всички редове, с повторенията.
  • DROP TABLE таблица; — изтрива таблицата. Внимавайте: няма начин да я възстановите!
  • TRUNCATE TABLE таблица; — изтрива съдържанието, но не и таблицата (после може да се въвеждат нови данни).

Функциите на T-SQL

Агрегиращи

MIN, MAX, COUNT, SUM, AVG (= SUM/COUNT) и новата APPROX_COUNT_DISTINCT — приблизителният брой уникални стойности.

Математически

ABS, CEILING (горна цяла част), FLOOR (долна цяла част), SQUARE, SQRT, LOG, LOG10, RAND, PI() и тригонометричните (SIN, COS, TAN, ASIN, ACOS, ATAN, RADIANS).

За работа с низове

ФункцияКакво прави
CONCAT(низ1, низ2, …)слепва низове (CONCAT_WS — с разделител)
LEFT / RIGHT(низ, n)префикс/суфикс с дължина n
SUBSTR(низ, начало, дължина)подниз отвътре (индексиране от 1)
LEN(низ)дължината (без крайните интервали)
LOWER / UPPERмалки/главни букви
LTRIM / RTRIMмаха интервалите отляво/отдясно
REPLACE(низ, образец, нов)замества всички срещания
REPLICATE / REVERSEповтаря низа n пъти / обръща го
CHARINDEX(образец, низ)позицията на първото срещане (0 = няма)

В упражненията тук (SQLite)

Дребни разлики в диалектите: T-SQL LEN е LENGTH, TOP(n) е LIMIT n (в края на заявката). Идеите са същите.

Задачи от учебника

1) Направете си копия на таблиците (SELECT … INTO), за да ги възстановявате след неуспешна заявка. 2) INSERT INTO със SELECT за обединение. 3) Тествайте се на sql_quiz в w3schools; потърсете функциите за дати и статистическите VAR, STDEV.

Какво трябва да запомниш

  • T-SQL = SQL диалектът на MS SQL Server.
  • Ново в SELECT: TOP(n) [PERCENT], HAVING (условие върху групите), INTO (нова постоянна таблица).
  • Пет вида JOIN: INNER, LEFT, RIGHT, FULL, CROSS.
  • UNION маха повторенията; UNION ALL ги пази.
  • DROP TABLE трие безвъзвратно; TRUNCATE трие само съдържанието.
  • Богата библиотека функции: агрегиращи, математически, низови.