Главная страница

Sql и базы данных


Скачать 1.44 Mb.
НазваниеSql и базы данных
Дата05.11.2022
Размер1.44 Mb.
Формат файлаpdf
Имя файла04_SQL_04_11.pdf
ТипДокументы
#771208
страница2 из 4
1   2   3   4
3.
Что такое TCL? Какие операции в него входят? Рассказать про них.
операторы управления транзакциями (Transaction Control Language, TCL):
● COMMIT Применяется для завершения транзакции и сохранения изменений в базе данных,
DELETE FROM developers
WHERE SPECIALTY = 'C++';
COMMIT;
● ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции,
● SAVEPOINT Создаёт точку к которой группа транзакций может откатиться, разбивает транзакцию на более мелкие.
SET TRANSACTION
Применяется для установки параметров доступа к данным в текущей транзакции указать, что транзакция предназначена только для чтения, то мы должны использовать следующий запрос:
SET TRANSACTION READ ONLY;
Команды управление транзакциями используются только для DML команд: INSERT,
UPDATE, DELETE
транкейт не используется когда в таблице есть внешние ключи надо использовать делит
4.
Что такое DCL? Какие операции в него входят? Рассказать про них.
операторы определения доступа к данным (Data Control Language, DCL):
● GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом,
● REVOKE отзывает ранее выданные разрешения,
● DENY задает запрет, имеющий приоритет над разрешением;
--
Предоставление права чтения таблицы students пользователю alex.
GRANT SELECT ON students TO alex;
--
Запрет права выборки из таблицы orders пользователя alex.
DENY SELECT ON orders TO alex;
--
Отменить запрет.
REVOKE SELECT ON total FROM piter;
5.
Нюансы работы с NULL в SQL. Как проверить поле на NULL?

NULL - специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных. NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения».
NULL означает отсутствие, неизвестность информации. Значение NULL не является значением в полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению
FALSE
, ни пустой строке, ни 0. При сравнении NULL с любым значением будет получен результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL! команды: IS NULL, IS NOT NULL
6.
Виды Join’ов?
JOIN - оператор языка SQL, который является реализацией операции соединения реляционной алгебры. Предназначен для обеспечения выборки данных из двух таблиц и включения этих данных в один результирующий набор.
Особенностями операции соединения являются следующее: в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц-операндов), то есть схема результата является «сцеплением» схем операндов; каждая строка таблицы-результата является «сцеплением» строки из одной таблицы- операнда со строкой второй таблицы-операнда; при необходимости соединения не двух, а нескольких таблиц, операция соединения применяется несколько раз (последовательно).
SELECT поля_таблиц
FROM таблица_1
[INNER] | [[LEFT | RIGHT | FULL][OUTER]] JOIN таблица_2
ON условие_соединения
[[INNER] | [[LEFT | RIGHT | FULL][OUTER]] JOIN таблица_n
ON условие_соединения] https://habr.com/ru/post/450528/
LEFT
[OUTER]
SELECT поля_таблиц
FROM левая_таблица LEFT JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ
Получение всех данных из левой таблицы, соединённых с соответствующими данными из правой
INNER JOIN, но дополнительно мы добавляем null для строк из первой таблицы, для которой ничего не нашлось во второй
RIGHT
[OUTER]
SELECT поля_таблиц
FROM левая_таблица RIGHT JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ

Получение всех данных из правой таблицы, соединённых с соответствующими данными из левой это INNER JOIN + null для строк из второй таблицы, для которой ничего не нашлось в первой
LEFT
[OUTER] правая_таблица.ключ
IS NULL
SELECT поля_таблиц
FROM левая_таблица LEFT JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ
WHERE правая_таблица.ключ IS
NULL
RIGHT
[OUTER] левая_таблица.ключ
IS NULL
SELECT поля_таблиц
FROM левая_таблица RIGHT JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ
WHERE левая_таблица.ключ IS
NULL
Получение данных, относящихся только к правой таблице
INNER
SELECT поля_таблиц
FROM левая_таблица INNER JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ тот же самый CROSS JOIN, у которого оставлены только те элементы, которые удовлетворяют условию, записанному в конструкции "ON".
FULL OUTER
SELECT поля_таблиц
FROM левая_таблица
FULL OUTER JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ

FULL OUTER
Без совместных данных
SELECT поля_таблиц
FROM левая_таблица
FULL OUTER JOIN правая_таблица
ON правая_таблица.ключ = левая_таблица.ключ
WHERE левая_таблица.ключ IS
NULL
OR правая_таблица.ключ IS
NULL
CROSS JOIN декартово произведение
При выборе каждая строка одной таблицы объединяется с каждой строкой второй таблицы, давая тем самым все возможные сочетания строк двух таблиц.
Порядок таблиц для оператора не важен, поскольку оператор является симметричным.
7.
Что лучше использовать join или подзапросы? Почему?
Обычно лучше использовать JOIN, поскольку в большинстве случаев он более понятен и лучше оптимизируется СУБД (но 100% этого гарантировать нельзя). Так же JOIN имеет заметное преимущество над подзапросами в случае, когда список выбора SELECT содержит столбцы более чем из одной таблицы.
Подзапросы лучше использовать в случаях, когда нужно вычислять агрегатные значения и использовать их для сравнений во внешних запросах.
8.
Что делает UNION?
Объединяет запросы в одну таблицу
SELECT
поля_таблиц
FROM
список_таблиц
UNION
[
ALL
]
SELECT
поля_таблиц
FROM
список_таблиц
;
UNION по умолчанию убирает повторения в результирующей таблице. Для отображения с повторением есть необязательный параметр ALL.
Не путайте операции объединения запросов с операциями объединения таблиц. Для этого служит оператор JOIN.

Не путайте операции объединения запросов с подзапросами. Подзапросы выполняются для связанных таблиц.
Объединение таблиц оператором UNION выполняется для таблиц никак не связанных, но со схожей структурой.
SELECT
DISTINCT
Goods good_name
AS
name
FROM
Goods
UNION
SELECT
DISTINCT
FamilyMembers member_name
AS
name
FROM
FamilyMembers
;
Скидывает все значения в один столбец (сначала первая таблица, потом вторая)
Для того, чтобы UNION корректно сработал нужно: чтобы результирующие таблицы каждого из SQL запросов имели одинаковое число столбцов, с одним и тем же типом данных и в той же самой последовательности.
9.
Чем WHERE отличается от HAVING ( ответа про то что используются в разных
частях запроса - недостаточно)?
Отличие HAVING от WHERE:
-WHERE
— сначала выбираются записи по условию, а затем могут быть сгруппированы, отсортированы и т.д. Это ограничивающее выражение. Оно выполняется до того, как будет получен результат операции.
-HAVING
— сначала группируются записи, а затем выбираются по условию, при этом, в отличие от WHERE, в нём можно использовать значения агрегатных функций
-
Выражения WHERE используются вместе с операциями SELECT, UPDATE, DELETE, в то время как HAVING только с SELECT и предложением GROUP BY. То есть, использовать
WHERE в запросах с агрегатными функциями нельзя, для этого и был введен HAVING.
10.
Что такое ORDER BY?
SELECT
поля_таблиц
FROM
список_таблиц
ORDER
BY
столбец_1
[
ASC
|
DESC
][,
столбец_n
[
ASC
|
DESC
]];
Правило сортировки применяется только к тому столбцу, за которым оно следует.
11.
Что такое GROUP BY?
Иногда требуется узнать информацию не о самих объектах, а об определенных группах, которые они образуют. Для этого используется оператор GROUP BY и агрегатные функции.
SELECT
family_member
,
SUM
(
unit_price
*
amount
)
FROM
Payments
GROUP
BY
family_member
;
При использовании GROUP BY все значения NULL считаются равными
Агрегатные функции применяются для значений, не равных NULL. Исключением является функция COUNT()
SUM(поле_таблицы) Возвращает сумму значений
AVG(поле_таблицы) Возвращает среднее значение
COUNT(поле_таблицы)
Возвращает количество записей
MIN(поле_таблицы) Возвращает минимальное значение
MAX(поле_таблицы) Возвращает максимальное значение
12.
Что такое DISTINCT?

Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.
Может использоваться с агрегатными функциями
SELECT COUNT(DISTINCT Singer)
AS CountOfSingers
FROM Artists
13.
Что такое LIMIT?
SELECT
поля_выборки
FROM
список_таблиц
LIMIT
[
количество_пропущенных_записей
,]
количество_записей_для_вывода
;
когда необходимо сделать отступ от начала таблицы, предназначена конструкция OFFSET
FETCH
Для того, чтобы вывести строки с 3 по 5, нужно использовать такой запрос:
SELECT
*
FROM
Company
LIMIT
2
,
3
;
14.
Что такое EXISTS?
EXISTS берет подзапрос, как аргумент, и оценивает его как TRUE, если подзапрос возвращает какие-либо записи и FALSE, если нет.
CREATE
DATABASE
IF
NOT
EXIST имя_базы_данных
;
DROP
DATABASE
IF
EXIST имя_базы_данных
;
Обычно предикат EXISTS используется в зависимых (коррелирующих) подзапросах. Этот вид подзапроса имеет внешнюю ссылку, связанную со значением в основном запросе.
Результат подзапроса может зависеть от этого значения и должен оцениваться отдельно для каждой строки запроса, в котором содержится данный подзапрос. Поэтому предикат
EXISTS может иметь разные значения для разных строк основного запроса
Найти тех производителей портативных компьютеров, которые также производят принтеры:
1.
SELECT
DISTINCT
maker
2.
FROM
Product
AS
lap_product
3.
WHERE
type =
'laptop'
AND
4.
NOT
EXISTS
(
SELECT
maker
5.
FROM
Product
6.
WHERE
type =
'printer'
AND
7. maker = lap_product.maker
8.
)
;
15.
Расскажите про операторы IN, BETWEEN, LIKE.
[NOT] IN
— позволяет узнать входит ли проверяемое значение столбца в список определённых значений
SELECT *
FROM Salespeople
WHERE city IN ( 'Barcelona', 'London' );
SELECT *
FROM Salespeople
WHERE city = 'Barcelona'
OR city = 'London';
[NOT] BETWEEN min AND max
— позволяет узнать расположено ли проверяемое значение столбца в интервале между min и max.
BETWEEN
может работать с символьными полями в терминах эквивалентов ASCII. Это означает что вы можете использовать BETWEEN чтобы выбирать ряд значений из упорядоченных по алфавиту значений.
SELECT *
FROM Salespeople
WHERE ( comm BETWEEN .10, AND .12 )
AND NOT comm IN ( .10, .12 );
SELECT *
FROM Customers
WHERE cname BETWEEN 'A' AND 'G';
[
NOT] LIKE шаблон [ESCAPE символ]
— позволяет узнать соответствует ли строка (только CHAR или VARCHAR) определённому шаблону. В качестве условия используются символы трафаретные символы (wildkards)
Трафаретные символы:
- символ подчеркивания (_), который можно применять вместо любого единичного символа в проверяемом значении
- символ процента (%) заменяет последовательность любых символов (число символов в последовательности может быть от 0 и более) в проверяемом значении.
ESCAPE- символ используется для экранирования трафаретных символов.
Например, вы хотите получить идентификаторы задач, прогресс которых равен 3%:
SELECT
job_id
FROM
Jobs
WHERE
progress
LIKE
'3!%'
ESCAPE
'!'
;
16.
Что делает оператор MERGE? Какие у него есть ограничения?
MERGE позволяет осуществить слияние данных одной таблицы с данными другой таблицы.
При слиянии таблиц проверяется условие, и если оно истинно, то выполняется UPDATE, а если нет - INSERT. При этом изменять поля таблицы в секции UPDATE, по которым идет связывание двух таблиц, нельзя.
Является командой DML.
MERGE INTO table_name USING table_reference ON (condition)
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 …]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 …]) VALUES (value1 [, value2 …]);
MERGE
INTO
person p
USING
(
SELECT
tabn, name
, age
FROM
person1) p1
ON
(p.tabn = p1.tabn)
WHEN
MATCHED
THEN
UPDATE
SET
p.age = p1.age
WHEN
NOT
MATCHED
THEN
INSERT
(p.tabn, p.
name
, p.age)
VALUES
(p1.tabn, p1.
name
, p1.age)
17.
Какие агрегатные функции вы знаете?

Агрегатных функции - функции, которые берут группы значений и сводят их к одиночному значению.
SQL предоставляет несколько агрегатных функций:
- COUNT - производит подсчет записей, удовлетворяющих условию запроса;
- SUM - вычисляет арифметическую сумму всех значений колонки;
- AVG - вычисляет среднее арифметическое всех значений;
- MAX - определяет наибольшее из всех выбранных значений;
- MIN - определяет наименьшее из всех выбранных значений
- SUBSTRING
(выражение, начальная позиция, длина) позволяет извлечь из выражения его часть заданной длины, начиная от заданной начальной позиции
- STRING_AGG - конкатенирует строки
- STRING_SPLIT выполняет операцию, обратную STRING_AGG. Она принимает на входе символьную строку и разбивает её на подстроки по заданному вторым параметром разделителю
- LOWER
(строковое выражение) и UPPER(строковое выражение) преобразуют все символы аргумента, соответственно, к нижнему и верхнему регистру
В чем разница между COUNT(*) и COUNT({column})?
COUNT (*) подсчитывает количество записей в таблице, не игнорируя значение NULL, поскольку эта функция оперирует записями, а не столбцами.
COUNT ({column}) подсчитывает количество значений в {column}. При подсчете количества значений столбца эта форма функции COUNT не принимает во внимание значение NULL.
18.
Что такое ограничения (constraints)? Какие вы знаете
Когда вы создаете таблицу ( или, когда вы ее изменяете ), вы можете помещать ограничение на значения которые могут быть введены:
CREATE TABLE < table name >
(< column name > < column constraint >,
< column name > < data type > < column constraint > ...
< table constraint > ( < column name >
[, < column name > ])... );
● PRIMARY KEY - набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.
Первичные ключи не могут позволить значений NULL
● CHECK позволяет установить свое условие, которому должно удовлетворять значение вводимое в таблицу, прежде чем оно будет принято.
● UNIQUE обеспечивает отсутствие дубликатов в столбце или наборе столбцов.
● FOREIGN KEY защищает от действий, которые могут нарушить связи между таблицами.
FOREIGN KEY в одной таблице указывает на PRIMARY KEY в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей FOREIGN KEY, которым не отвечают записи PRIMARY KEY.
[CONSTRAINT имя_ограничения]
FOREIGN KEY (столбец1, столбец2, ... столбецN)
REFERENCES главная_таблица (столбец_главной_таблицы1, столбец_главной_таблицы2,
... столбец_главной_таблицыN)
[ON DELETE действие]

[ON UPDATE действие]
- NOT NULL
Какие отличия между ограничениями PRIMARY и UNIQUE?
По умолчанию ограничение PRIMARY создает кластерный индекс на столбце, а UNIQUE - некластерный. Другим отличием является то, что PRIMARY не разрешает NULL записей, в то время как UNIQUE разрешает одну (а в некоторых СУБД несколько) NULL запись.
Кластерный индекс — это древовидная структура данных, при которой значения индекса хранятся вместе с данными, им соответствующими. И индексы, и данные при такой организации упорядочены. При добавлении новой строки в таблицу, она дописывается не в конец файла*, не в конец плоского списка, а в нужную ветку древовидной структуры, соответствующую ей по сортировке.
Может ли значение в столбце, на который наложено ограничение FOREIGN KEY, равняться
NULL?
Может, если на данный столбец не наложено ограничение NOT NULL.
19.
Что такое суррогатные ключи?
Суррога́тный ключ — понятие теории реляционных баз данных. Это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом.
Дайте определение терминам «простой», «составной» (composite), «потенциальный»
(candidate) и «альтернативный» (alternate) ключ.
Простой ключ состоит из одного атрибута (поля). Составной - из двух и более.
Потенциальный ключ - простой или составной ключ, который уникально идентифицирует каждую запись набора данных. При этом потенциальный ключ должен обладать критерием неизбыточности: при удалении любого из полей набор полей перестает уникально идентифицировать запись. Термин «candidate» подразумевает, что все такие ключи конкурируют за почётную роль «первичного ключа» (primary key), а оставшиеся назначаются
«альтернативными ключами» (alternate keys).
Из множества всех потенциальных ключей набора данных выбирают первичный ключ, все остальные ключи называют альтернативными.
Первичный ключ (primary key) в реляционной модели данных один из потенциальных ключей отношения, выбранный в качестве основного ключа (ключа по умолчанию).
Если в отношении имеется единственный потенциальный ключ, он является и первичным ключом. Если потенциальных ключей несколько, один из них выбирается в качестве первичного, а другие называют «альтернативными».
В качестве первичного обычно выбирается тот из потенциальных ключей, который наиболее удобен. Поэтому в качестве первичного ключа, как правило, выбирают тот, который имеет наименьший размер (физического хранения) и/или включает наименьшее количество атрибутов. Другой критерий выбора первичного ключа — сохранение его уникальности со временем. Поэтому в качестве первичного ключа стараются выбирать такой потенциальный ключ, который с наибольшей вероятностью никогда не утратит уникальность.
Что такое «внешний ключ» (foreign key)?

Внешний ключ (foreign key) — подмножество атрибутов некоторого отношения A, значения которых должны совпадать со значениями некоторого потенциального ключа некоторого отношения B.
1   2   3   4


написать администратору сайта