Определения и какие-то общие вопросы Flashcards

1
Q

Что такое SQL?

A

Язык для общения с базами данных

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

Что такое База данных

A

Контейнер для упорядоченного хранения информации

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

Программа базы данных это

A

DBMS database management system

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

Schema это

A

информация о структуре и свойствах базы данных или таблицы

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

Особенности primary key

A

Primary key - столбец или несколько, уникальный идентификатор записи. Рекомендуется создавать в каждой таблице 1)не может повторяться 2)не может отсутствовать 3)не может быть изменён 4)не может быть повторно использован

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

Синтаксис Селекта

A

–столбцы через запятую счз
SELECT [DISTINCT|ALL] счз [AS имя (после каждого столбца если хочешь переименовать)]
FROM назв табл –Если селектишь данные из таблицы
WHERE усл фильтра –фильтр для записей
GROUP BY –Если тебе надо применить агрегатные функции на группах
HAVING усл фильтра –фильтр для групп
ORDER BY счз –можно номерами ВЫБРАННЫХ столбцов типа того 1,2
[DESC] –descending order в обратном порядке. Для каждого столбца отдельно
LIMIT кол OFFSET кол;

С помощью SELECT можно так же испытывать математические функции, если не использовать FROM
SELECT 3 * 2; –выведет 6
SELECT Trim(‘ abc ‘); –выведет abc
SELECT Curdate(); –выведет текущую дату

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

Комментарии

A

Вся строчка

SELECT –кусок строчки
/много
много
много
строчек
/

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

операторы какие есть
чё да как

A

= Equality
<> Nonequality
!= Nonequality
<
<=
!< Not less than
>
>=
!> Not greater than
NOT NOT negates whatever condition comes next
BETWEEN Between two specified values (что-то BETWEEN 5 AND 8)
IS NULL Is a NULL value
IN range of conditions (что-то IN (‘гавно’,’мочи’))ин быстрее нескольких оров. внутри так же может быть ещё один селект
LIKE Технически LIKE это Predicate, а не оператор. Возвращает тру если значения похожи на search pattern

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

Wildcards это

A

Special characters used to match parts of a value.
Used to create search patterns для LIKE оперотора который не оператор на самом деле
% Всё что хочешь вообще что хочешь
_ один символ
[] В MySql не работает, в Microsoft SQL Server работает. список символов любой из которых может быть на данном месте [^…] то же самое что NOT

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

Чего нужно остерегаться При использовании LIKE в таком случе ‘г%о’?

A

Если допустим есть строка ‘говно’
выдаст селект его или нет зависит от того, в какой ты DBMS.
Потому что в некоторых если длина строки меньше ожидаемой они в памяти просто пишут много пробелов.
Поэтому перед сравнением надо удалять пробелы RTRIM()

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

Форматирование вывода селекта

A

SQL Server uses + for concatenation. DB2, Oracle, PostgreSQL, and SQLite support ||.
SELECT vend_name + ‘(‘ + vend_country + ‘)’ ………….
SELECT vend_name || ‘(‘ || vend_country || ‘)’ ………….
MySQL or MariaDB:
SELECT Concat(vend_name, ‘ (‘, vend_country, ‘)’) ………

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

Функции

A

Синтаксис сильно различаются на разных DBMS (СУБД)
Текстовые функции
Нумерик функции |ABS() COS() EXP() PI() SIN() SQRT() TAN()
Дата и время функции |наверное самыe важные в SQL, но сильно различаются в разных DBMS
Функции форматирования
Системные функции

Aggregate Functions |Функция([DISTINCT|ALL] столб) AVG() COUNT() MAX () MIN () SUM()
/*
Все агрегатные функции могут быть использованы на нескольких столбцах сразу
если использовать математические операторы типа MAX(столб1*столб2)
….COUNT игнорирует нулл, но если использовать * то нет
*/

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

Группировка GROUP BY

A

Группируешь информацию чтобы производить агрегатные функции на каждой группе
Нельзя использовать псевдонимы(aliases) /Хотя у меня получается видимо не принято или может не везде работает короче надо в курсе быть/ Если в селекте какое-то выражение то ты должен его повторить в гроуп бай
Все columns Что есть в SEleКТе должны быть и в GROup by
строки с NULL соберутся в группу
Можно фильтровать группы с помощью HAVING (Это как WHERE только для групп)
и привыкай после него использовать ORDER BY

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

Subquery

A

Query - запрос
это любая sql команда, но обысно так говорят про SELECT
Subquery - Подзапрос
SELECT…..WHERE ыыы IN (SELECT….);
Сначала выполняются внутренние запросы потом внешние это понятно
Внутренние запросы могут возвращать ТОЛЬКО ОДНУ колонну

Например хочешь написать имена людей исколько всего они сделали заказов
СЕЛЕКТ имя, (
СЕЛЕКТ COUNT()
FROM заказы
WHERE заказы.id=имена.id
)
FROM имена;
Вот как то так

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

JOIN

A

ЭТО

максимально важно
НИКОГДА НЕ ЗАБЫВАЙ WHERE В ДЖОИНЕ!

SELECT ст, ол, бы
FROM таблA, таблB
WHERE таблA.ыйди= таблB.ыйди;

SELECT ст, ол, бы
FROM таблA
INNER JOIN таблB ON таблA.ыйди = таблB.ыйди;

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

ADVANCED JOINS
какие типы есть

A

self join natural join outer join

17
Q

|Self join|

A

Если тебе нужно обратиться к одной таблице больше чем один раз в одном запросе
Типа хочешь вывести всех людей, которые работают в той же компании что и конкретный.
Можно добиться результата с помощью подзапроса, но джоины обрабатываются быстрее.
Для использования селфджоинов надо использовать псевдонимы для таблиц.
(используется только во время исполнения селект запроса, пользователь не видит
чисто чтобы проще писать было)
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1, Customers AS c2
WHERE ……..условия и тд.

18
Q

|Natural join|

A

innerjoin возвращает все колонны, даже те, которые дублируются.
В натурал джоине ты сам указываешь из какой таблицы вернуть все столбцы,
и какие конкретно из других таблиц.
SELECT C.*, O.order_num, O.order_date, OI.prod_id, OI.quantity, OI.item_price
……..

19
Q

|Outer join|

A

innerjoin соединяет записи с соответствующими значениями,
но иногда тебе надо включить также и записи без соответствий
SELECT A.s, B.x
FROM Customers
LEFT OUTER JOIN Orders ON A.id = B.id;
лефт значит будут включены все записи из левой таблицы

20
Q

Compound queries. Unions

A

Когда запросы объединяются в один.(это тебе не подзапросы. Ты в столбце вперемешку выводишь строки из разных таблиц)
Когда они нужны:
-Если хочешь получить информацию с похожей структорой из разных таблиц в одном запросе
-Если хочешь выполнить несколько запросов к одной таблице и разом получить все результаты
Запросы объединяются оператором UNION
SELECT a, b, c
FROM T
WHERE ……….
UNION
SELECT a, b, c
FROM T
WHERE ……….
По сути это то же самое что и написать сложное условие(WHERE …. OR ….)
но когда информация из нескольких таблиц и у тебя сложные условия
то использовать UNION будет проще
Каждый запрос в юнионе должен содержать одинаковые колонны, выражения или агрегатные функции.
Типы данных должны быть совместимыми. Твоя дбмс должна суметь скрыто конвертировать эти типы.
UNION удаляет дубликаты. Если нужны используй UNION ALL.
Разультаты этого запроса не могут быть получены несколькими Where.
Хотя я реально не понимаю зачем это надо.
ORDER BY можно использовать только один раз в самом конце
Чтобы объеденить данные из нескольких таблиц если не совпадают имена столбцов можно использовать псевдонимы.

21
Q

INSERT

A

Можно вставить
как часть так и полную строку ну это понятно
Результаты запроса (что очень круто)
INSERT INTO Tablica(названиеСтолбца1, аыва, впдцушкр, ыыыыыыыыыыыыыыыыы) –ВСЕГДА ПИШИ СПИСОК НАЗВАНИЙ КОЛОНН
VALUES(а, у, ы, э);
Инсёрт селект:
INSERT INTO Tablica(названиеСтолбца1, аыва, впдцушкр, ыыыыыыыыыыыыыыыыы)
SELECT ……………

Ещё один способ скопировать одну таблицу в другую
CREATE TABLE NewTabl AS SELECT * FROM Tabl;

22
Q

UPDATE

A

ОЧЕНЬ АККУРАТНО ИСПОЛЬЗОВАТЬ
WHERE ОБЯЗАТЕЛЕН ИЛИ ТЫ ОБНОВИШЬ ВООБЩЕ ВСЕ ЗАПИСИ

UPDATE Tabl
SET Kol1 = значение, Kol2 = значение
WHERE условие;

23
Q

DELETE

A

КАПЕЦ АККУРАТНО ИСПОЛЬЗОВАТЬ
WHERE ОБЯЗАТЕЛЕН ИЛИ ТЫ УДАЛИШЬ НАХРЕН ВСЕ ЗАПИСИ

DELETE FROM Tabl
WHERE условие;

DBMS скажет если попытаешься удалить запись которая важна для других таблиц
Поэтому всегда прописывай Foreign Keys
Если хочешь удалить все записи таблицы то используй TRUNCATE TABLE
Сработает быстрее так как не выводит данные в лог

24
Q

CREATING AND MANIPULATING TABLES

A

Не забывай, что Ctrl+z сделать нельзя
Перед редактированием таблицы делай копию схемы и данных.
А лучше всего редактируй именно копию потом просто меняй названия таблицы.

CREATE TABLE Tablladvb
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT,
prod_desc VARCHAR(1000)
);
ALTER TABLE Tablladvb ADD vend_phone CHAR(20);
ALTER TABLE Tablladvb DROP COLUMN prod_desc;
DROP TABLE Tablladvb;

25
Q

VIEW

A

View содержит запрос, который срабатывает при просмотре
Причины использования:
- Повторно использовать запрос
- Упростить сложные SQL операции
- Показывать только часть таблицы вместо целой
- Обезопасить информацию
- Форматировать информацию

CREATE VIEW viewname AS
SELECT ………….
# Написано что нельзя использовать ORDER BY но у меня работает. Короче видимо не рекоммендуется
DROP VIEW viewname

26
Q

STORED PROCEDURES

A

в книге ничего не понятно плохо разъяснили
я так понимаю я просто должен быть ознакомлен

Зачем их использовать?
- Упростить сложные операции
- Постоянство данных
- Профилактика ошибок
- Упростить мэнэджмент изменений(Если изменится название таблицы бизнес логика или что угодно) То надо будет изменить только код процедуры
- Безопасность. Ограничивает доступ к информации с помощью сторед процедурес
- Они храняться с скомпилированной форме и дбмс не будет делать лишнюю работу
- Писать более гибкий код
### Минусы
- Синтаксис сильно различается в разных дбмс
- Сложно написать

В книге не было рабочего синтаксиса для MySql поэтому вот работающий у меня пример написал по ролику на ютубе

DROP PROCEDURE IF EXISTS sp_foo;
CREATE PROCEDURE sp_foo(
OUT ListCount INTEGER
)
BEGIN
SELECT COUNT(*) INTO ListCount
FROM customers
WHERE cust_id in(SELECT cust_id
FROM orders);
END;
CALL sp_foo(@number);
SELECT @number;

27
Q

TRANSACTIONS

A

Нужны для поддержания целостности базы данных. Убеждаются в том что серия SQL запросов выполняется целиком или не выполняется вообще.
Опять же не практике ничего сделать не могу но ознакомлен
### Термины
- Transaction—A block of SQL statements
- Rollback—The process of undoing specified SQL statements
- Commit—Writing unsaved SQL statements to the database tables
- Savepoint—A temporary placeholder in a transaction set to which you can issue a rollback (as opposed to rolling back an entire transaction)
INSERT, UPDATE, DELETE ты можешь роллбэкнуть. Внутри блока транзакции они никогда не финальные.
START TRANSACTION
………
Транзакция продолжается до тех пор пока что-то её не завершит.
COMMIT или ROLLBACK

START TRANSACTION;
DELETE ………
SAVEPOINT delete2;
DELETE ……….
ROLLBACK TO delete2;

28
Q

CURSORS

A

КУРСОРЫ
Курсор - результаты SELECT запроса которые храняться в DBMS
В разных DBMS разные функции.
У меня почему-то не работает
### Этапы использования курсора
- Создание курсора ты его объявляешь пишешь SQL зарпос
- Открываешь его для использования
- Пока он открыт можешь использовать FETCH Чтобы получать отдельные необходимые слобцы
- Закрываешь

29
Q

CONSTRAINTS

A

Primary key / Foreign keys
ALTER TABLE t
ADD CONSTRAINT PRIMARY KEY (id);
CREATE TABLE t1
(
a INTEGER NOT NULL PRIMARY KEY,
b DATETIME NOT NULL,
c CHAR(10) NOT NULL REFERENCES t(id)
);
#### Unique Constraints
Объявляются так же как. Ты например нот нулл пишешь Unique пишешь в конце и вот

  • может быть несколько
  • может быть NULL
  • может быть изменено/использовано заново
  • в отличие от праймари кийс не могут быть использованы как форейн кейс
    #### Check constraints
    чекаешь по условию круто
    CREATE TABLE t
    (
    a INTEGER NOT NULL,
    b INTEGER NOT NULL,
    c CHAR(10) NOT NULL,
    d INTEGER NOT NULL CHECK (quantity > 0),
    e MONEY NOT NULL
    );
    ALTER TABLE t
    ADD CONSTRAINT CHECK (gender LIKE ‘[MF]’);
30
Q

INDEXES

A

Насколько я понял когда объявляешь столбец индексным DBMS хранит отсортированную версию, чтобы потом можно было быстро находить значения в изначальной таблице.
(Primary key автоматически отсортирован таким образом чтобы по ключу можно было очень быстро получать данные)
особенности индексов:
- Быстрое чтение информации, медленное добавление редактирование и удаление
- может занимать много памяти
- недостаточно уникальная инфа не получит ничего от индекса(ну типа страна проживания. Будет дохрена записей с одинаковым значением особо это дело не ускорит процесс поиска)
- используется для фильтрование и сортировки информации. Если ты часто сортируешь какую-то инфу то может быть стоит её проиндексировать.
- Внутри индекса может быть несколько колонн (Если сортирвешь по нескольким столбцам)
CREATE INDEX prod_name_ind
ON Products (prod_name);

Регулярно перепроверяй индексы так как со временем то что раньше было идеально может стать неэффективным

31
Q

TRIGGERS

A

Автоматически срабатывают когда происходит конкретное событие
Привязаны к определённой таблице

Внутри триггеров тебе доступна:
- Новая инфа в инсерте
- Новая и старая инфа в UPDATE операциях
- Удалённая инфа в DELETE
Используется для:
- Постоянства инфы(типа во время инсерта форматируешь как надо)
- Меняешь другие таблицы при изменениях в одной
- Дополнительные проверки и откаты даннах
- Рассчёт значений колонн или изменение таймстампов
синтаксис вообще везде разный но вот что-то типа такого

CREATE TRIGGER customer_state
ON Customers
FOR INSERT, UPDATE
AS
UPDATE Customers
SET cust_state = Upper(cust_state)
WHERE Customers.cust_id = inserted.cust_id;

Constraints быстрее триггеров. Так что используй их когда можешь.