PostgreSql Flashcards

1
Q

Почему существуют разные СУБД (PostgreSQL/MySQL/HANA) с разными диалектами?

A

Потому что каждый диалект SQL, заточен под наиболее эффективное выполнение задач с данной конкретной СУБД, т.к. каждая СУБД имеет свою специфику возможностей. То есть любой универсальный запрос на SQL будет одинаково выполняться на всех таких базах, но на всех - не настолько эффективно, насколько можно было бы сделать с учетом специфики.

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

Что такое primery key?

A

Оператор БД, создающий уникальный идентификатор записи в таблице. Отличается тем, что не может принимать значение NULL и используется для соединения таблиц связью PK-FK и для того, чтобы уникально идентифицировать любую из строк.
Например: уникальный ID контрагента в таблице КА

При этом в таблице вообще может не быть первичного ключа, если ее не надо джойнить с другими. Например, логи могут храниться по времени поступления

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

Что такое unique key?

A

Оператор БД, который отвечает за ведение уникальных полей БД, но не обязательно ключевых. Например, PK - ид. КА, UK - ИНН, КПП КА
https://habr.com/ru/articles/787374/
https://habr.com/ru/companies/tensor/articles/483424/

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

Что такое foreign key?

A

Внешний ключ. Используется для ссылки подчиненной таблицы на родительскую. Может ссылаться как на первичный ключ, так и на уникальный ключ и сиквенс полей

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

Работа СУБД с JSON

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

Row Level Security

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

pattern matching

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

Задачки по Postgre

A

https://habr.com/ru/articles/423097/

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

Облачные или локальные БД, откуда выгрузить данные быстрее?

A

Выгрузить данные быстрее можно из базы, которая находится в облачном хранилище. Этот способ хранения называют DBaaS (от англ. database as a service, «база данных как сервис»). Но с такими базами возникает другая проблема: выгрузка данных из «облачных» баз часто платная, и цена зависит от объёма выгрузки. Значит, выгружать всю информацию просто невыгодно. Пора учиться получать срез данных.

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

Оператор LIMIT

A

Используется для ограничения количества выгружаемых строк из БД. В запросе по примеру ниже выгрузит от 0 до 10ти строк, хотя в БД строк, удовлетворяющих запросу, может быть больше 10ти:

SELECT поле_1,
поле_2,
поле_3

FROM таблица
LIMIT 10;

Важно! Оператор LIMIT возьмет ПЕРВЫЕ 10 записей таблицы

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

Оператор OFFSET

A

Позволяет начать читать БД, не с первой записи, а с записи n-ой, например 5ой (не включительно):

SELECT поле_1,
поле_2,
поле_3

FROM таблица
LIMIT 10 OFFSET 5;

Данный запрос выведет записи, начиная с 6ой по 15ую

Также OFSET можно использовать и САМОСТОЯТЕЛЬНО, например, если необходимо выгрузить ВСЕ записи таблицы, начиная после 5ой:

SELECT поле_1,
поле_2,
поле_3

FROM таблица
OFFSET 5;

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

Какие типы данных есть в PostgreSQL?

A

В разных СУБД типы данных могут отличаться, но часто их можно объединить в похожие группы. В PostgreSQL выделяют несколько групп типов данных:
числовые типы,
символьные типы,
логические типы,
типы для работы с датой и временем,
специализированные типы для конкретных задач.

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

Какой тип данных используется для целых чисел?

A

integer
псевдоним int4

4 - количество байтов, которое занимает тип

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

Какой тип данных используется для дробных чисел?

A

real
псевдоним float4

4 - количество байтов, которое занимает тип

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

Какой тип данных используют для текста фиксированной длины?

A

character
псевдоним char (n), где n - количество символов в строке

Если сохраняемая строка короче, чем n, символов, то оставшиеся символы будут заполнены пробелами

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

Какой тип данных используют для текста НЕфиксированной длины?

A

character varying
псевдоним varchar(n), где n - количество символов в строке. При этом значение n можно не указывать

Если сохраняемая строка короче, чем n, символов, то строка сохранится в своем естественном виде

17
Q

Какой тип данных используют для строки любой длины?

18
Q

Какие в Постгре есть таймштампы?

A

timestamp - по умолчанию подразумевает тип timestamp without time zone: ‘2004-10-19 10:23:54’
timestamptz - timestamp with time zone: ‘2004-10-19 10:23:54+02’

19
Q

Какие в Постгре есть типы для работы с датами/временем?

A

timestamp
timestamptz
date
time
interval

20
Q

Какие в Постгре есть логические типы?

21
Q

Как при выборке данных привести выбранное поле к нужному типу данных?

A

CAST
Поменять тип данных можно сразу при выгрузке. При этом тип данных поля в самой таблице не изменится. В таких случаях используют оператор CAST. Например:

SELECT CAST(track_id AS varchar),
CAST(album_id AS varchar)
FROM track;

Здесь айдишники автоматически приводятся к текстовому типу

22
Q

Что такое ER-диаграмма?

A

ER-диаграмма (от англ. entity-relationship diagram, диаграмма «сущность — связь») - графически отображает отношения таблиц в базе данных.

Пример в папке:
E:\2024\Яндекс практикум\Системный анализ[SW.BAND] [Яндекс.Практикум] Системный аналитик. Часть 2 из 8 (2022)[SW.BAND] 2 SQL для аналитиков[SW.BAND] 02 Срезы данных в SQL

23
Q

Структура блока в ER-диаграмме

A

Шапка - название таблицы
Второй слой отдельных полей - PK - первичный ключ
Третий слой полей - FK - внешний ключ и не помеченные - поля таблицы
Пример в папке:
E:\2024\Яндекс практикум\Системный анализ[SW.BAND] [Яндекс.Практикум] Системный аналитик. Часть 2 из 8 (2022)[SW.BAND] 2 SQL для аналитиков[SW.BAND] 02 Срезы данных в SQL

24
Q

Какие инструменты можно использовать, чтобы нарисовать диаграмму ER?

25
Что такое описание БД?
Просто более подробное описание таблиц и ее полей. Именно их текстовые описание, чтобы при работе с БД было понятно по названию таблицы, за что эта таблица отвечает и по названию поля, за что это поле отвечает
26
Приоритеты логических операторов. В каком порядке операторы выполняются?
Первым всегда выполняется условие с оператором NOT, за ним AND и только в последнюю очередь — условие с OR. Пример: WHERE age > 43 AND city = 'Тула' OR city = 'Пермь' AND age < 43; 1-вым выполнятся условия AND, т.е. 1)жители старше 43х И из Тулы 2)жители из Перми И моложе 43х. 2-ым выполнится условие OR и объединит эти 2 условия в (жители старше 43х И из Тулы) ИЛИ (жители из Перми И младше 43х) Иначе этот Селект можно записать так: WHERE (age > 43 AND city = 'Тула') OR (city = 'Пермь' AND age < 43);
27
Как прочитать этот запрос? Что он выведет? SELECT * FROM invoice WHERE total < 1.98 AND billing_country = 'Brazil' AND (NOT billing_city = 'Rio de Janeiro' OR customer_id = 13);
Сначала будут отобраны записи, в которых указан любой город, кроме Рио-де-Жанейро, или идентификатор 13. Потом от этих записей останутся лишь те, которые удовлетворяют двум другим условиям: total < 1.98 AND billing_country = 'Brazil'.
28
Что делает Оператор IN?
Проверяет вхождение сравниваемого значения в набор. Например: SELECT total, customer_id FROM invoice WHERE billing_city IN ('Dublin', 'London', 'Paris', 'Boston', 'Berlin', 'Stuttgart');
29
Что делает оператор LIKE?
LIKE позволяет организовать в условии поиск значений по маске, а не по конкретному значению 'text%' Значения, которые начинаются с text WHERE quotes LIKE 'кот%' 'кот просил еды' 'котелок не варит' '%text' Значения, которые заканчиваются на text WHERE quotes LIKE '%кот' 'куда пропал кот' 'двойной апперкот' '%text%' Значения, в которых text занимает любую позицию WHERE quotes LIKE '%кот%' 'кота зовут василий' 'они танцевали котильон' 'te%xt' Значения, которые начинаются на te и заканчиваются на xt WHERE quotes LIKE 'ко%т' 'кот играет' 'консультант' Важно! Поиск по шаблону учитывает и регистр, поэтому условие WHERE quotes LIKE 'Кот%' найдёт строку 'Коту подарили миску', а строку 'коту подарили рыбу' оставит без внимания. Отобрать записи, в которых, напротив, нет конкретных символов, можно конструкцией NOT LIKE. Важно! Оператор LIKE можно использовать только для строк, а для чисел он не подходит. Поэтому, для числовых типов перед поиском по маске нужно сделать перевод в varchar
30
Что делает оператор BETWEEN?
Оператор используется для поиска по диапазону. Границы диапазона указывают так: WHERE ключевое слово BETWEEN начало диапазона AND конец диапазона. Начало и конец диапазона включены в проверку условием. Пример: SELECT * FROM invoice WHERE customer_id BETWEEN 23 AND 48; Также оператор BETWEEN можно использовать, чтобы задать промежуток времени.
31
Какие есть операторы для работы с ТЕКУЩЕЙ датой и временем?
CURRENT_DATE - вернёт текущую дату, CURRENT_TIME - выведет текущее время, CURRENT_TIMESTAMP - вернёт текущие дату и время.
32
Для чего нужен оператор DATE_TRUNC?
Функция DATE_TRUNC «усекает» дату и время до необходимого значения: года, месяца или дня. Синтаксис функции такой: DATE_TRUNC('отрезок времени', поле) Отрезок времени может быть разным, главное, не забыть одинарные кавычки: 'microseconds' — микросекунды; 'milliseconds' — миллисекунды; 'second' — секунда; 'minute' — минута; 'hour' — час; 'day' — день; 'week' — неделя; 'month' — месяц; 'quarter' — квартал; 'year' — год; 'decade' — десятилетие; 'century' — век. Важно! Функция не обрезает дату-время и т.д., она оставляет тот же формат SELECT DATE_TRUNC('year', birth_date) FROM staff LIMIT 5; 01.01.1962 00:00:00 01.01.1958 00:00:00 01.01.1973 00:00:00 01.01.1947 00:00:00 01.01.1965 00:00:00 Обратите внимание, что дата отображена в том же формате, но теперь она «округлилась» до первого числа года. Если поменять значение на 'month', появится первое число месяца. SELECT DATE_TRUNC('month', birth_date) FROM staff LIMIT 5; 01.02.1962 00:00:00 01.12.1958 00:00:00 01.08.1973 00:00:00 01.09.1947 00:00:00 01.03.1965 00:00:00
33
Для чего нужен оператор EXTRACT?
Такое усечение не подойдёт для случаев, когда нужно получить конкретную часть даты: год, месяц или минуту. Она уже обрежет дату-время до нужного значения EXTRACT(отрезок времени FROM поле) Одинарные кавычки для значений внутри EXTRACT не нужны. Отрезок времени может быть представлен следующими значениями: CENTURY — век; DAY — день; DOY (от англ. day of the year) — день года, выраженный числом от 1 до 365 или 366, если год високосный; DOW (от англ. day of the week) — день недели, выраженный числом от 0 до 6, где понедельник — 1, воскресенье — 0. ISODOW (от англ. day of the week и ISO 8601) — день недели, выраженный числом от 1 до 7, где понедельник — 1, воскресенье — 7. HOUR — час; MILLISECOND — миллисекунда; MINUTE — минута; MONTH — месяц; SECOND — секунда; QUARTER — квартал; WEEK — неделя в году; YEAR — год. SELECT EXTRACT(YEAR FROM birth_date) FROM staff LIMIT 5; 1962 1958 1973 1947 1965
34
Какие есть особенности при работе с типами данных для DATE_TRUNC и EXTRACT?
Функции DATE_TRUNC и EXTRACT принимают на вход данные тех типов, которые используют для работы с датой и временем. Особенность 1: Типы date и time функции автоматически переведут в timestamp with time zone. Будьте осторожны: при автоматическом переводе date в timestamp with time zone время подстроится к часовому поясу пользователя и потому может сместиться. У этой проблемы есть решение — явно изменить тип данных на timestamp. Напомним, что в SQL так по умолчанию обозначается тип timestamp without time zone. С типом данных без часового пояса время не сместится. Особенность 2: DATE_TRUNC вернёт данные типов timestamp without timezone, timestamp with timezone или interval (зависит от того, что получит на вход) EXTRACT — данные типа numeric
35
Что за тип numeric?
Его используют для вещественных чисел, как и тип real. Отличие в том, что в тип numeric входят числа большего диапазона. Также у типа numeric точность больше, чем у типа real. Это значит, что вещественное число типа numeric может иметь больше цифр после запятой.
36
Что такое значение NULL?
NULL означает, что в ячейке вообще отсутствуют данные. Это не ноль и не пусто, это просто отсутствие данных Используется для определения аномалий, чтобы различать в полях БД пустые (визуально не отображаемые) значения (например, строку нулевой длины) и отсутствующие значения (когда в поле не записано вообще никакого значения, даже пустого).
37
Какие есть операторы для работы с NULL?
IS NULL IS NOT NULL
38
Что такое оператор CASE?
Условная конструкция, которая нужна для сортировки/сравнения и подобных операций. Так выглядит синтаксис условных конструкций в SQL: начало конструкции обозначают оператором CASE; после оператора WHEN пишут условие; после оператора THEN — возвращаемый результат; а в конце указывают оператор END. Пример: SELECT total, CASE WHEN total < 5 THEN 'маленький' WHEN total >= 5 AND total < 10 THEN 'средний' WHEN total >= 10 THEN 'крупный' END FROM invoice LIMIT 10; 1.98 маленький 3.96 маленький 5.94 средний 8.91 средний 13.86 крупный 0.99 маленький 1.98 маленький Если значение в проверяемом поле не удовлетворяет ни одному условию, результатом будет NULL. Поэтому лучше всегда использовать ELSE для значений, которые не удовлетворяют ни одному условия Важный момент — условия в запросе проверяются по порядку. Если условие выполнено, сразу выводится соответствующий результат, а остальные условия не проверяются. SELECT total, CASE WHEN total >= 5 THEN 'средний' WHEN total >= 10 THEN 'крупный' ELSE 'маленький' END FROM invoice LIMIT 10; Если заказ уже больше 5 - он будет средним. В категорию Крупный тут вообще ничего не попадет, т.к. все будет удовлетворять первой строчке