Java-Interview: Enhorse
Java-Interview: Enhorse
master
java-interview / sql.md
4 contributors
SQL
Что такое «SQL»?
Какие существуют операторы SQL?
Что означает NULL в SQL?
Что такое «временная таблица»? Для чего она используется?
Что такое «представление» (view) и для чего оно применяется?
Каков общий синтаксис оператора SELECT ?
Что такое JOIN ?
Какие существуют типы JOIN ?
Что лучше использовать JOIN или подзапросы?
Для чего используется оператор HAVING ?
В чем различие между операторами HAVING и WHERE ?
Для чего используется оператор ORDER BY ?
Для чего используется оператор GROUP BY ?
Как GROUP BY обрабатывает значение NULL ?
В чем разница между операторами GROUP BY и DISTINCT ?
Перечислите основные агрегатные функции.
В чем разница между COUNT(*) и COUNT({column}) ?
Что делает оператор EXISTS ?
Для чего используются операторы IN , BETWEEN , LIKE ?
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 1/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 2/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 3/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
SELECT - оператор DML SQL, возвращающий набор данных (выборку) из базы данных,
удовлетворяющих заданному условию. Имеет следующую структуру:
SELECT
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer | column | formula}]
[HAVING where_definition]
[ORDER BY {unsigned_integer | column | formula} [ASC | DESC], ...]
к оглавлению
SELECT
field_name [,... n]
FROM
Table1
{INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 4/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Table2
{ON <condition> | USING (field_name [,... n])}
к оглавлению
(INNER) JOIN Результатом объединения таблиц являются записи, общие для левой и
правой таблиц. Порядок таблиц для оператора не важен, поскольку оператор является
симметричным.
FULL (OUTER) JOIN Результатом объединения таблиц являются все записи, которые
присутствуют в таблицах. Порядок таблиц для оператора не важен, поскольку
оператор является симметричным.
CROSS JOIN (декартово произведение) При выборе каждая строка одной таблицы
объединяется с каждой строкой второй таблицы, давая тем самым все возможные
сочетания строк двух таблиц. Порядок таблиц для оператора не важен, поскольку
оператор является симметричным.
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 5/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
к оглавлению
к оглавлению
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 6/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Если нужно удалить только дубликаты лучше использовать DISTINCT , GROUP BY лучше
использовать для определения групп записей, к которым могут применяться
агрегатные функции.
к оглавлению
к оглавлению
к оглавлению
EXISTS берет подзапрос, как аргумент, и оценивает его как TRUE , если подзапрос
возвращает какие-либо записи и FALSE , если нет.
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 7/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
LIKE применим только к полям типа CHAR или VARCHAR , с которыми он используется
чтобы находить подстроки. В качестве условия используются символы шаблонизации
(wildkards) - специальные символы, которые могут соответствовать чему-нибудь:
к оглавлению
В языке SQL ключевое слово UNION применяется для объединения результатов двух
SQL-запросов в единую таблицу, состоящую из схожих записей. Оба запроса должны
возвращать одинаковое число столбцов и совместимые типы данных в
соответствующих столбцах. Необходимо отметить, что UNION сам по себе не
гарантирует порядок записей. Записи из второго запроса могут оказаться в начале, в
конце или вообще перемешаться с записями из первого запроса. В случаях, когда
требуется определенный порядок, необходимо использовать ORDER BY .
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 8/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
FOREIGN KEY защищает от действий, которые могут нарушить связи между таблицами.
FOREIGN KEY в одной таблице указывает на PRIMARY KEY в другой. Поэтому данное
ограничение нацелено на то, чтобы не было записей FOREIGN KEY , которым не
отвечают записи PRIMARY KEY .
к оглавлению
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 9/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
к оглавлению
TRUNCATE - DDL оператор (удаляет таблицу и создает ее заново. Причем если на эту
таблицу есть ссылки FOREGIN KEY или таблица используется в репликации, то
пересоздать такую таблицу не получится).
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 10/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 11/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
к оглавлению
к оглавлению
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 12/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Например, запрос
SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;
А запрос вида
SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;
Вернёт набор
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 13/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
RANK возвращает ранг каждой записи. В данном случае, в отличие от ROW_NUMBER , идет
уже анализ значений и в случае нахождения одинаковых возвращает одинаковый ранг
с пропуском следующего.
Например:
SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;
Результат:
Ещё пример:
SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;
Результат:
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 14/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Например:
SELECT Studentname,
Subject,
Marks,
DENSE_RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;
Результат:
Ещё пример:
SELECT Studentname,
Subject,
Marks,
DENSE_RANK() OVER(PARTITION BY Subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;
Результат:
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 15/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY StudentName ORDER BY Marks ) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;
SELECT Studentname,
Subject,
Marks,
DENSE_RANK() OVER(PARTITION BY StudentName ORDER BY Marks ) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 16/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Например:
SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;
Результат:
Пример 2:
SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;
Результат:
Пример 3:
SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 17/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
Результат:
к оглавлению
к оглавлению
Напишите запрос...
SELECT id, created FROM table where id = (SELECT MAX(id) FROM table);
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 18/19
23.12.22, 18:52 java-interview/sql.md at master · enhorse/java-interview · GitHub
к оглавлению
Источники
Википедия
Quizful
https://github.com/enhorse/java-interview/blob/master/sql.md#Что-такое-sql 19/19