Skip to content

Commit 6862878

Browse files
authored
Update sql.md
1 parent c805652 commit 6862878

1 file changed

Lines changed: 30 additions & 7 deletions

File tree

sql.md

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,17 @@ __Временная таблица__ - это объект базы данны
8989
[к оглавлению](#sql)
9090

9191
## Что такое _«представление» (view)_ и для чего оно применяется?
92-
__Представление__, View - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом.
92+
__Представление__, View - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом. Представления широко используются когда необходимо представить структуру базы данных в удобном для восприятия человеком виде, а так же в соображениях безопасности, предоставляя пользователям возможность обращаться к данным, но не разрешая им доступ к исходным таблицам.
9393

9494
В действительности представление – всего лишь результат выполнения оператора `SELECT`, который хранится в структуре памяти, напоминающей SQL таблицу. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления значительно расширяют возможности управления данными. Это способ дать публичный доступ к некоторой (но не всей) информации в таблице.
9595

96-
`Create view`
96+
Для создания представления используется оператор SQL CREATE и синтаксис выглядит следующим образом:
97+
```java
98+
CREATE VIEW view_name
99+
AS SELECT column_name
100+
FROM table_name
101+
WHERE condition
102+
```
97103

98104
[к оглавлению](#sql)
99105

@@ -165,9 +171,18 @@ __CROSS JOIN (декартово произведение)__
165171
[к оглавлению](#sql)
166172

167173
## В чем различие между операторами `HAVING` и `WHERE`?
168-
`WHERE` - это ограничивающее выражение. Оно выполняется до того, как будет получен результат операции.
174+
`WHERE` - это ограничивающее выражение. Оно выполняется до того, как будет получен результат операции. WHERE служит для задания дополнительного условия выборки, операций вставки, редактирования и удаления записей. Условие (condition) может включать в себя предикаты AND, OR, NOT, LIKE, BETWEEN, IS, IN, ключевое слово NULL, операторы сравнения и равенства (<, >, =).
175+
```java
176+
SELECT * FROM Planets WHERE Radius BETWEEN 3000 AND 9000
177+
```
169178

170-
`HAVING` - фильтрующее выражение. Оно применяется к результату операции и выполняется уже после того как этот результат будет получен, в отличии от where.
179+
`HAVING` - Оператор SQL HAVING является указателем на результат выполнения агрегатных функций. Агрегатной функцией в языке SQL называется функция, возвращающая какое-либо одно значение по набору значений столбца. Такими функциями являются: SQL COUNT(), SQL MIN(), SQL MAX(), SQL AVG(), SQL SUM().
180+
```java
181+
SELECT Singer, SUM(Sale)
182+
FROM Artists
183+
GROUP BY Singer
184+
HAVING SUM(Sale) > 2000000
185+
```
171186

172187
Выражения WHERE используются вместе с операциями SELECT, UPDATE, DELETE, в то время как HAVING только с SELECT и предложением GROUP BY.
173188

@@ -190,8 +205,12 @@ __ORDER BY__ упорядочивает вывод запроса согласн
190205
[к оглавлению](#sql)
191206

192207
## В чем разница между операторами `GROUP BY` и `DISTINCT`?
193-
`DISTINCT` указывает, что для вычислений используются только уникальные значения столбца. `NULL` считается как отдельное значение.
194-
`GROUP BY` создает отдельную группу для всех возможных значений (включая значение `NULL`).
208+
`DISTINCT` указывает, что для вычислений используются только уникальные значения столбца. `NULL` считается как отдельное значение. DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.
209+
```java
210+
SELECT DISTINCT column_name FROM table_name
211+
```
212+
213+
`GROUP BY` используется для объединения результатов выборки по одному или нескольким столбцам. создает отдельную группу для всех возможных значений (включая значение `NULL`).
195214

196215
Если нужно удалить только дубликаты лучше использовать `DISTINCT`, `GROUP BY` лучше использовать для определения групп записей, к которым могут применяться агрегатные функции.
197216

@@ -293,7 +312,11 @@ CREATE INDEX index_name ON table_name (column_name)
293312
## В чем отличие между операторами `DELETE` и `TRUNCATE`?
294313
`DELETE` - оператор DML, удаляет записи из таблицы, которые удовлетворяют критерию `WHERE` при этом задействуются триггеры, ограничения и т.д.
295314

296-
`TRUNCATE` - DDL оператор (удаляет таблицу и создает ее заново. Причем если на эту таблицу есть ссылки `FOREGIN KEY` или таблица используется в репликации, то пересоздать такую таблицу не получится).
315+
`TRUNCATE` - DDL оператор. удаляет таблицу (для мгновенной очистки всех строк) и создает ее заново. Причем если на эту таблицу есть ссылки `FOREGIN KEY` или таблица используется в репликации, то пересоздать такую таблицу не получится.
316+
317+
+ Оператор SQL TRUNCATE не ведет запись об удаленных данных в журнал событий.
318+
+ SQL DELETE осуществляет блокировку построчно, оператор SQL TRUNCATE по всей странице целиком. Вследствие этого, оператор SQL TRUNCATE не возвращает никакого значения, SQL DELETE же, возвращает количество удаленных строк.
319+
+ После применения оператора SQL DELETE возможно сделать откат операции и восстановить удаленные данные (команда ROLLBACK). При применении оператора SQL TRUNCATE этого сделать нельзя, однако в СУБД MS SQL Server, оператор может применяться в транзакциях.
297320

298321
[к оглавлению](#sql)
299322

0 commit comments

Comments
 (0)