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 трие само съдържанието.
- Богата библиотека функции: агрегиращи, математически, низови.