Определения и какие-то общие вопросы Flashcards
Что такое SQL?
Язык для общения с базами данных
Что такое База данных
Контейнер для упорядоченного хранения информации
Программа базы данных это
DBMS database management system
Schema это
информация о структуре и свойствах базы данных или таблицы
Особенности primary key
Primary key - столбец или несколько, уникальный идентификатор записи. Рекомендуется создавать в каждой таблице 1)не может повторяться 2)не может отсутствовать 3)не может быть изменён 4)не может быть повторно использован
Синтаксис Селекта
–столбцы через запятую счз
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(); –выведет текущую дату
Комментарии
Вся строчка
SELECT –кусок строчки
/много
много
много
строчек/
операторы какие есть
чё да как
= 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
Wildcards это
Special characters used to match parts of a value.
Used to create search patterns для LIKE оперотора который не оператор на самом деле
% Всё что хочешь вообще что хочешь
_ один символ
[] В MySql не работает, в Microsoft SQL Server работает. список символов любой из которых может быть на данном месте [^…] то же самое что NOT
Чего нужно остерегаться При использовании LIKE в таком случе ‘г%о’?
Если допустим есть строка ‘говно’
выдаст селект его или нет зависит от того, в какой ты DBMS.
Потому что в некоторых если длина строки меньше ожидаемой они в памяти просто пишут много пробелов.
Поэтому перед сравнением надо удалять пробелы RTRIM()
Форматирование вывода селекта
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, ‘)’) ………
Функции
Синтаксис сильно различаются на разных DBMS (СУБД)
Текстовые функции
Нумерик функции |ABS() COS() EXP() PI() SIN() SQRT() TAN()
Дата и время функции |наверное самыe важные в SQL, но сильно различаются в разных DBMS
Функции форматирования
Системные функции
Aggregate Functions |Функция([DISTINCT|ALL] столб) AVG() COUNT() MAX () MIN () SUM()
/*
Все агрегатные функции могут быть использованы на нескольких столбцах сразу
если использовать математические операторы типа MAX(столб1*столб2)
….COUNT игнорирует нулл, но если использовать * то нет
*/
Группировка GROUP BY
Группируешь информацию чтобы производить агрегатные функции на каждой группе
Нельзя использовать псевдонимы(aliases) /Хотя у меня получается видимо не принято или может не везде работает короче надо в курсе быть/ Если в селекте какое-то выражение то ты должен его повторить в гроуп бай
Все columns Что есть в SEleКТе должны быть и в GROup by
строки с NULL соберутся в группу
Можно фильтровать группы с помощью HAVING (Это как WHERE только для групп)
и привыкай после него использовать ORDER BY
Subquery
Query - запрос
это любая sql команда, но обысно так говорят про SELECT
Subquery - Подзапрос
SELECT…..WHERE ыыы IN (SELECT….);
Сначала выполняются внутренние запросы потом внешние это понятно
Внутренние запросы могут возвращать ТОЛЬКО ОДНУ колонну
Например хочешь написать имена людей исколько всего они сделали заказов
СЕЛЕКТ имя, (
СЕЛЕКТ COUNT()
FROM заказы
WHERE заказы.id=имена.id
)
FROM имена;
Вот как то так
JOIN
ЭТО
максимально важно
НИКОГДА НЕ ЗАБЫВАЙ WHERE В ДЖОИНЕ!
SELECT ст, ол, бы
FROM таблA, таблB
WHERE таблA.ыйди= таблB.ыйди;
SELECT ст, ол, бы
FROM таблA
INNER JOIN таблB ON таблA.ыйди = таблB.ыйди;