SQL Flashcards

1
Q

Что такое SQL и MySQL, и в чем разница?

A

SQL - это язык запросов для управления СУБД (система управления базами данных), а MySQL - это одна из таких СУБД. В частности, помимо MySQL существуют и другие СУБД: Oracle, MS SQL Server, PostgreSQL и др. И чтобы работать (сделать выборку, вставить новую запись, добавить новую таблицу и так далее) с любой из этих СУБД необходим язык запросов, и таким языком и является SQL.
Резюме: SQL - язык запросов для управления СУБД. MySQL - это одна из множества других СУБД.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

В чем разница SQL и NoSQL?

A

В SQL хранятся структурированные данные, которые могут представлять объекты из окружающего нас мира. Так, в построенной по такой модели базе могут содержаться сведения о реальном человеке или о том, какие товары покупатель сложил в корзину в торговом центре. Эти данные обязательно группируются в таблицах в заданном формате.
NoSQL устроены по-другому. Типы хранящихся данных в них напрямую зависят от вида самой БД. Так, если речь идет о документно-ориентированной базе, данные в ней будут содержаться в формате иерархии и могут описывать самые разные объекты с произвольными характеристиками. В этом, пожалуй, одно из важнейших достоинств NoSQL — база позволяет хранить огромные объемы информации в виде единой сущности. Такой объем в условиях РБД пришлось бы разбить на несколько отдельных, хоть и взаимосвязанных, таблиц.
В NoSQL вся информация хранится без четко установленной структуры и явных связей между всеми данными. Здесь хранятся не какие-то структурированные и четкие таблицы, а любые сведения, которые могут быть представлены в виде текстового документа, аудиофайла или публикации в интернете.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Типы запросов: DDL и DML

A

операторы определения данных (Data Definition Language, DDL):
* CREATE создает объект БД (базу, таблицу, представление, пользователя и т. д.),
* ALTER изменяет объект,
* DROP удаляет объект;
операторы манипуляции данными (Data Manipulation Language, DML):
* SELECT выбирает данные, удовлетворяющие заданным условиям,
* INSERT добавляет новые данные,
* UPDATE изменяет существующие данные,
* DELETE удаляет данные

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что означает NULL в SQL?

A

NULL - специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных. NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения».
NULL означает отсутствие, неизвестность информации. Значение NULL не является значением в полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению FALSE, ни пустой строке, ни 0. При сравнении NULL с любым значением будет получен результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Разница между таблицей, полем и записью

A

Таблица — это самая распространенная и простая форма хранения данных в РБД. Данные в СУБД хранятся в объектах БД, называемых таблицами (tables). Таблица, как правило, представляет собой коллекцию связанных между собой данных и состоит из определенного количества колонок и строк.
Поле — это колонка таблицы, предназначенная для хранения определенной информации о каждой записи в таблице.
Запись или строка (record/row) — это любое единичное вхождение (entry), существующее в таблице. В таблице users 5 записей. Проще говоря, запись — это горизонтальное вхождение в таблице.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Нормализация таблиц: формы, количество, название, в чем смысл всех форм.

A

Нормализация — это процесс эффективной организации данных в БД. Существует две главных причины, обуславливающих необходимость нормализации: предотвращение записи в БД лишних данных, например, хранения одинаковых данных в разных таблицах и обеспечение “оправданной” связи между данными
Нормализация предполагает соблюдение нескольких форм. Форма — это формат структурирования БД.
Первая нормальная форма (1NF) - Отношение находится в 1NF, если значения всех его атрибутов атомарны (неделимы).
Вторая нормальная форма (2NF) - Отношение находится в 2NF, если оно находится в 1NF, и при этом все неключевые атрибуты зависят только от ключа целиком, а не от какой-то его части.
Третья нормальная форма (3NF) - Отношение находится в 3NF, если оно находится в 2NF и все неключевые атрибуты не зависят друг от друга.
Четвёртая нормальная форма (4NF) - Отношение находится в 4NF , если оно находится в 3NF и если в нем не содержатся независимые группы атрибутов, между которыми существует отношение «многие-ко-многим».
Пятая нормальная форма (5NF) - Отношение находится в 5NF, когда каждая нетривиальная зависимость соединения в ней определяется потенциальным ключом (ключами) этого отношения.
Шестая нормальная форма (6NF) - Отношение находится в 6NF, когда она удовлетворяет всем нетривиальным зависимостям соединения, т.е. когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6NF, также находится и в 5NF. Введена как обобщение пятой нормальной формы для хронологической базы данных.
Нормальная форма Бойса-Кодда, усиленная 3 нормальная форма (BCNF) - Отношение находится в BCNF, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.
Доменно-ключевая нормальная форма (DKNF) - Отношение находится в DKNF, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данное отношение.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое «денормализация»? Для чего она применяется?

A

Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

AUTO INCREMENT

A

AUTO INCREMENT - автоматическое приращение позволяет автоматически генерировать уникальное число при вставке новой записи в таблицу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Ограничения (constraints)

A

Ограничения (constraints) — это правила, применяемые к данным. Они используются для ограничения данных, которые могут быть записаны в таблицу. Это обеспечивает точность и достоверность данных в БД.
Primary key - набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.
Foreign key защищает от действий, которые могут нарушить связи между таблицами. Foreign key в одной таблице указывает на Primary key в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей Foreign key, которым не отвечают записи Primary key.
Unique обеспечивает отсутствие дубликатов в столбце или наборе столбцов.
Check используется для ограничения множества значений, которые могут быть помещены в данный столбец. Это ограничение используется для обеспечения целостности предметной области, которую описывают таблицы в базе.
Not null — колонка не может иметь нулевое значение
Default — значение колонки по умолчанию

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

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

A

Команда ALTER TABLE используется для добавления, удаления и модификации колонок существующей таблицы. Также эта команда используется для добавления и удаления ограничений.
– добавление новой колонки
ALTER TABLE tableName ADD colName datatype; – удаление колонки
ALTER TABLE tableName DROP COLUMN colName;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Перечислите основные агрегатные функции.

A

Агрегатных функции - функции, которые берут группы значений и сводят их к одиночному значению.
SQL предоставляет несколько агрегатных функций:
COUNT - производит подсчет записей, удовлетворяющих условию запроса;
SUM - вычисляет арифметическую сумму всех значений колонки;
AVG - вычисляет среднее арифметическое всех значений;
MAX - определяет наибольшее из всех выбранных значений;
MIN - определяет наименьшее из всех выбранных значений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что мы чаще всего используем с агрегатными функциями? почему нам это нужно?

A

Group BY

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Для чего используются операторы IN, BETWEEN, LIKE?

A

IN - определяет набор значений.
SELECT * FROM Persons WHERE name IN (‘Ivan’,’Petr’,’Pavel’);
BETWEEN определяет диапазон значений. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.
SELECT * FROM Persons WHERE age BETWEEN 20 AND 25;
LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. В качестве условия используются символы шаблонизации (wildkards) - специальные символы, которые могут соответствовать чему-нибудь:
* _ замещает любой одиночный символ. Например, ‘b_t’ будет соответствовать словам ‘bat’ или ‘bit’, но не будет соответствовать ‘brat’.
* % замещает последовательность любого числа символов. Например, ‘%p%t’ будет соответствовать словам ‘put’, ‘posit’, или ‘opt’, но не ‘spite’.
SELECT * FROM UNIVERSITY WHERE NAME LIKE ‘%o’;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое транзакции в базе данных?

A

Транзакция - это воздействие на базу данных, переводящее её из одного целостного состояния в другое и выражаемое в изменении данных, хранящихся в базе данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Принципы транзакции (ACID):

A

Атомарность (atomicity) гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.
Согласованность (consistency). Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных.
Изолированность (isolation). Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.
Долговечность (durability). Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Уровни изолированности транзакций

A

В порядке увеличения изолированности транзакций и, соответственно, надёжности работы с данными:
Чтение неподтверждённых данных (грязное чтение) (read uncommitted, dirty read) — чтение незафиксированных изменений как своей транзакции, так и параллельных транзакций. Нет гарантии, что данные, изменённые другими транзакциями, не будут в любой момент изменены в результате их отката, поэтому такое чтение является потенциальным источником ошибок. Невозможны потерянные изменения, возможны неповторяемое чтение и фантомы.
Чтение подтверждённых данных (read committed) — чтение всех изменений своей транзакции и зафиксированных изменений параллельных транзакций. Потерянные изменения и грязное чтение не допускается, возможны неповторяемое чтение и фантомы.
Повторяемость чтения (repeatable read, snapshot) — чтение всех изменений своей транзакции, любые изменения, внесённые параллельными транзакциями после начала своей, недоступны. Потерянные изменения, грязное и неповторяемое чтение невозможны, возможны фантомы.
Упорядочиваемость (serializable) — результат параллельного выполнения сериализуемой транзакции с другими транзакциями должен быть логически эквивалентен результату их какого-либо последовательного выполнения. Проблемы синхронизации не возникают.

17
Q

Какие проблемы могут возникать при параллельном доступе с использованием транзакций?

A

При параллельном выполнении транзакций возможны следующие проблемы:
Потерянное обновление (lost update) — при одновременном изменении одного блока данных разными транзакциями одно из изменений теряется;
«Грязное» чтение (dirty read) — чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится);
Неповторяющееся чтение (non-repeatable read) — при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными;
Фантомное чтение (phantom reads) — одна транзакция в ходе своего выполнения несколько раз выбирает множество записей по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет или удаляет записи или изменяет столбцы некоторых записей, используемых в критериях выборки первой транзакции, и успешно заканчивается. В результате получится, что одни и те же выборки в первой транзакции дают разные множества записей.

18
Q

JOIN – всё о них.

A

JOIN - оператор языка SQL, который является реализацией операции соединения реляционной алгебры. Предназначен для обеспечения выборки данных из двух таблиц и включения этих данных в один результирующий набор.
Особенностями операции соединения являются следующее:
* в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц-операндов), то есть схема результата является «сцеплением» схем операндов;
* каждая строка таблицы-результата является «сцеплением» строки из одной таблицы-операнда со строкой второй таблицы-операнда;
* при необходимости соединения не двух, а нескольких таблиц, операция соединения применяется несколько раз (последовательно).

19
Q

Какие существуют типы JOIN?

A

(INNER) JOIN - результатом объединения таблиц являются записи, общие для левой и правой таблиц. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.
LEFT (OUTER) JOIN - производит выбор всех записей первой таблицы и соответствующих им записей второй таблицы. Если записи во второй таблице не найдены, то вместо них подставляется пустой результат (NULL). Порядок таблиц для оператора важен, поскольку оператор не является симметричным.
RIGHT (OUTER) JOIN - LEFT JOIN с операндами, расставленными в обратном порядке. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.
FULL (OUTER) JOIN - результатом объединения таблиц являются все записи, которые присутствуют в таблицах. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.
CROSS JOIN (декартово произведение) - при выборе каждая строка одной таблицы объединяется с каждой строкой второй таблицы, давая тем самым все возможные сочетания строк двух таблиц. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.

20
Q

Что лучше использовать JOIN или подзапросы?

A

Обычно лучше использовать JOIN, поскольку в большинстве случаев он более понятен и лучше оптимизируется СУБД (но 100% этого гарантировать нельзя). Так же JOIN имеет заметное преимущество над подзапросами в случае, когда список выбора SELECT содержит столбцы более чем из одной таблицы.
Подзапросы лучше использовать в случаях, когда нужно вычислять агрегатные значения и использовать их для сравнений во внешних запросах.

21
Q

Для чего используется оператор HAVING?

A

HAVING используется для фильтрации результата GROUP BY по заданным логическим условиям.

22
Q

В чем различие между операторами HAVING и WHERE?

A

Основное отличие ‘WHERE’ от ‘HAVING’ заключается в том, что ‘WHERE’ сначала выбирает строки, а затем группирует их и вычисляет агрегатные функции (таким образом, она отбирает строки для вычисления агрегатов), тогда как ‘HAVING’ отбирает строки групп после группировки и вычисления агрегатных функций. Как следствие, предложение ‘WHERE’ не должно содержать агрегатных функций; не имеет смысла использовать агрегатные функции для определения строк для вычисления агрегатных функций. Предложение ‘HAVING’, напротив, всегда содержит агрегатные функции. (Строго говоря, вы можете написать предложение ‘HAVING’, не используя агрегаты, но это редко бывает полезно. То же самое условие может работать более эффективно на стадии ‘WHERE’.)

23
Q

Для чего используется оператор ORDER BY?

A

ORDER BY упорядочивает вывод запроса согласно значениям, в том или ином количестве выбранных столбцов. Многочисленные столбцы упорядочиваются один внутри другого. Возможно определять возрастание ASC или убывание DESC для каждого столбца. По умолчанию установлено - возрастание.

24
Q

Для чего используется оператор GROUP BY?

A

GROUP BY используется для агрегации записей результата по заданным признакам-атрибутам.

25
Q

Как GROUP BY обрабатывает значение NULL?

A

При использовании GROUP BY все значения NULL считаются равными.

26
Q

Что выполняется раньше: WHERE или JOIN?

A

Логический порядок обработки инструкции SELECT:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE или WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY

27
Q

Диаграммы Венна – что это?

A

Диаграмма Венна – это диаграмма, которая визуально отображает все возможные логические отношения множеств, каждое из которых, как правило представлено окружностью. Каждое множество представляет собой набор данных, у которых есть между собой нечто общее.

28
Q

Типы связей в SQL

A

Один к одному - любому значению атрибута А соответствует только одно значение атрибута В, и наоборот.
Каждый университет гарантированно имеет 1-го ректора: 1 университет → 1 ректор.
Один ко многим - любому значению атрибута А соответствует 0, 1 или несколько значений атрибута В.
В каждом университете есть несколько факультетов: 1 университет → много факультетов.
Многие ко многим - любому значению атрибута А соответствует 0, 1 или несколько значений атрибута В, и любому значению атрибута В соответствует 0, 1 или несколько значение атрибута А.
1 профессор может преподавать на нескольких факультетах, в то же время на 1-ом факультете может преподавать несколько профессоров: Несколько профессоров ↔ Несколько факультетов.

29
Q

CHAR vs VARCHAR – разница?

A

В столбце типа CHAR длина поля постоянна и задается при создании таблицы. Эта длина может принимать любое значение между 1 и 255. Величины типа CHAR при хранении дополняются справа пробелами до заданной длины. Эти концевые пробелы удаляются при извлечении хранимых величин.
Величины в столбцах VARCHAR представляют собой строки переменной длины. Так же как и для столбцов CHAR, можно задать столбец VARCHAR любой длины между 1 и 255. Однако, в противоположность CHAR, при хранении величин типа VARCHAR используется только то количество символов, которое необходимо, плюс один байт для записи длины. Хранимые величины пробелами не дополняются, наоборот, концевые пробелы при хранении удаляются. Если задаваемая в столбце CHAR или VARCHAR величина превосходит максимально допустимую длину столбца, то эта величина соответствующим образом усекается.

30
Q

В чем отличие между кластерными и некластерными индексами?

A

Индекс (index) — объект базы данных, создаваемый с целью повышения производительности выборки данных.
Некластерные индексы - данные физически расположены в произвольном порядке, но логически упорядочены согласно индексу. Такой тип индексов подходит для часто изменяемого набора данных.
При кластерном индексировании данные физически упорядочены, что серьезно повышает скорость выборок данных (но только в случае последовательного доступа к данным). Для одного набора данных может быть создан только один кластерный индекс.