Краткое руководство по sql

Предлагаем вашему вниманию статью с кричащим названием «SQL за 20 минут». Конечно, весь SQL за 20 минут вы не освоите, но хороший старт получите.

Каждый уважающий себя веб-разработчик должен знать SQL. Хоть он и существует аж с 70-х годов прошлого века, он до сих пор очень широко используется, и без него будет сложно создать нечто серьёзное. Большинство full-stack фреймворков умеют работать с SQL. В их числе: ActiveRecord, Doctrine, Hibernate и многие другие. Несмотря на это, иногда приходится «замарать руки» и пуститься в настоящий SQL.

Именно поэтому мы подготовили короткое вступление, в котором мы пройдёмся по фундаментальным вещам в SQL. Мы настоятельно рекомендуем вам попробовать все приведённые ниже примеры самостоятельно, ведь, как известно, теория — ничто без практики.

Что ж, приступим!

Создаём таблицу

Для того, чтобы создать таблицу в SQL, используется выражение CREATE TABLE. Он принимает в качестве параметров все колонки, которые мы хотим внести, а также их типы данных.

Давайте создадим табличку с названием «Months», в которой будет три колонки:

  • id — иными словами, порядковый номер месяца (целочисленный тип или int)
  • name — название месяца (строка или varchar(10) (10 символов — максимальная длина строки))
  • days — число дней в конкретном месяце (целочисленный тип или int)

Код будет выглядеть вот так:

CREATE TABLE months (id int, name varchar(10), days int);

Также, когда создаются таблицы, принято добавлять так называемый primary key. Это колонка, значения в которой уникальны. Чаще всего primary key колонкой является id, но в нашем случае это может быть и name, так как имена всех месяцев уникальны. Для более подробной информации предлагаем перейти по этой ссылке.

Ввод данных

Теперь давайте добавим пару месяцев в нашу табличку. Сделать это можно с помощью команды INSERT. Есть два разных способа использовать INSERT:

Первый способ не подразумевает указания названий колонок, а лишь принимает значения в том порядке, в котором они указаны в таблице.

INSERT INTO months VALUES (1,'January',31);

Первый способ короче второго, однако если в будущем мы захотим добавить дополнительные колонки, все предыдущие запросы работать не будут. Для решения данной проблемы следует использовать второй способ. Его суть в том, что перед вводом данных мы указываем названия колонок.

INSERT INTO months (id,name,days) VALUES (2,'February',29);

В случае, если мы не укажем одну из колонок, на её место будет записано NULL или заданное значение по умолчанию, но это уже совсем другая история.

Select

Данный запрос используется в случае, если нам нужно показать данные в таблице. Наверное, самым простым примером использования SELECT будет следующий запрос:

SELECT * FROM characters

Результатом данного запроса будет таблица со всеми данными в таблице characters. Знак звёздочки (*) означает то, что мы хотим показать все столбцы из таблицы без исключений. Так как в базе данных обычно больше одной таблицы, нам необходимо указывать название таблицы, данные из которой мы хотим посмотреть. Сделать это мы можем, используя ключевое слово FROM.

Когда вам нужны лишь некоторые столбцы из таблицы, то вы можете указать их имена через запятую вместо звёздочки.

SELECT name, weapon FROM characters

Также иногда нам нужно отсортировать выводимые данные. Для этого мы используем ORDER BY «название столбца». ORDER BY имеет два модификатора: ASC (по возрастанию) (по умолчанию) и DESC (по убыванию).

SELECT name, weapon FROM characters ORDER BY name DESC

Where

Теперь мы знаем, как показать только конкретные столбцы, но что если мы хотим включить в вывод лишь некоторые конкретные строки? Для этого мы используем WHERE. Данное ключевое слово позволяет нам фильтровать данные по определённому условию.

В следующем запросе мы выведем только тех персонажей, которые в качестве оружия используют пистолет.

SELECT * 
FROM characters
WHERE weapon = 'pistol';

И/или

Условия в WHERE могут быть написаны с использованием логических операторов (AND/OR) и математические операторы сравнения (=, <, >, <=, >=, <>).

К примеру, у нас есть табличка, в которой записаны данные о 4 самых продаваемых музыкальных альбомах всех времён. Давайте выведем только те, жанром которых является рок, а продажи были меньше, чем 50 миллионов копий.

SELECT * 
FROM albums 
WHERE genre = 'rock' AND sales_in_millions <= 50 
ORDER BY released

In/Between/Like

Условия в WHERE могут быть записаны с использованием ещё нескольких команд, которыми являются:

  • IN — сравнивает значение в столбце с несколькими возможными значениями и возвращает true, если значение совпадает хотя бы с одним значением
  • BETWEEN — проверяет, находится ли значение в каком-то промежутке
  • LIKE — ищет по шаблону

К примеру, мы можем сделать запрос для вывода данных об альбомах в жанре pop или soul:

SELECT * FROM albums WHERE genre IN ('pop','soul');

Если мы хотим вывести все альбомы, которые были выпущены в промежутке между 1975 и 1985 годом, мы можем использовать следующую запись:

SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;

Также, если мы хотим вывести все альбомы, в названии которых есть буква ‘R’, мы можем использовать следующую запись:

SELECT * FROM albums WHERE album LIKE '%R%';

Знак % означает любую последовательность символов (0 символов тоже считается за последовательность).

Если мы хотим вывести все альбомы, первая буква в названии которых — ‘R’, то запись слегка изменится:

SELECT * FROM albums WHERE album LIKE 'R%';

В SQL также есть инверсия. Для примера, попробуйте самостоятельно написать NOT перед любым логическим выражением в условии (NOT BETWEEN и так далее).

Функции

В SQL полно встроенных функций для выполнения разных операций. Мы же покажем вам только наиболее часто используемые:

  • COUNT() — возвращает число строк
  • SUM() — возвращает сумму всех полей с числовыми значениями в них
  • AVG() — возвращает среднее значение среди строк
  • MIN()/MAX() — возвращает минимальное/максимальное значение среди строк

Чтобы вывести год выпуска самого старого альбома, в таблице можно использовать следующий запрос:

SELECT MIN(released) FROM albums;

Обратите внимание, что если вы напишете запрос, в котором вам, к примеру, нужно будет вывести имя и среднее значение чего-либо, то вы получите ошибку на выводе.

Допустим, вы пишете такой запрос:

SELECT name, avg(age) FROM students;

Чтобы избежать ошибки, вам следует добавить следующую строку:

GROUP BY name

Причиной тому является, что запись avg(age) является совокупной (aggregated), и вам необходимо группировать значения по имени.

Вложенные Select

В предыдущих шагах мы изучили, как делать простые вычисления с данными. Если мы хотим использовать результат данных вычислений, то часто нам необходимо использовать так называемые вложенные запросы. Допустим, нам необходимо вывести артиста, альбом и год выпуска самого старого альбома в таблице.

Вывести эти столбцы можно, используя следующий запрос:

SELECT artist, album, released FROM albums;

Также мы знаем, как получить самый ранний год из имеющихся:

SELECT MIN(released) FROM album;

Объединить эти запросы можно в WHERE:

SELECT artist,album,released 
FROM albums 
WHERE released = (
 SELECT MIN(released) FROM albums
);

Присоединение таблиц

В сложных базах данных чаще всего у нас есть несколько связанных таблиц. К примеру, у нас есть две таблицы: про видеоигры и про разработчиков.

В таблице video_games есть столбец developer_id, в данном случае он является так называемым foreign_key. Чтобы было проще понять, developer_id — это связывающее звено между двумя таблицами.

Если мы хотим вывести всю информацию об игре, включая информацию о её разработчике, нам необходимо подключить вторую таблицу. Чтобы это сделать, можно использовать INNER JOIN:

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country 
FROM video_games 
INNER JOIN game_developers 
ON video_games.developer_id = game_developers.id;

Это, наверное, самый простой пример использования JOIN. Есть ещё несколько вариантов его использования. Для более подробной информации предлагаем перейти по этой ссылке.

Псевдонимы

Если вы взгляните на предыдущий пример, то вы заметите, что есть два столбца, названных одинаково: «name». Часто это может запутать. Решением данной проблемы являются псевдонимы. Они, к слову, помогают сделать название столбца красивее или понятнее в случае необходимости.

Чтобы присвоить столбцу псевдоним, можно использовать ключевое слово AS:

SELECT games.name, games.genre, devs.name AS developer, devs.country 
FROM video_games AS games 
INNER JOIN game_developers AS devs 
ON games.developer_id = devs.id;

Update

Зачастую нам нужно изменить данные в таблице. В SQL это делается с помощью UPDATE.

Использование UPDATE включает в себя:

  • выбор таблицы, в которой находится поле, которое мы хотим изменить
  • запись нового значения
  • использование WHERE, чтобы обозначить конкретное место в таблице

Предположим, у нас есть таблица с самыми высокооценёнными сериалами всех времён. Однако у нас есть проблема: «Игра Престолов» обозначена как комедия и нам определённо нужно это изменить:

UPDATE tv_series 
SET genre = 'drama' 
WHERE name = 'Game of Thrones';

Удаление записей из таблицы

Удаление записи из таблицы через SQL — очень простая операция. Всё, что нужно — это обозначить, что именно мы хотим удалить.

DELETE FROM tv_series 
WHERE id = 4;

Примечание: убедитесь, что используете WHERE, когда удаляете запись из таблицы. Иначе вы удалите все записи из таблицы, сами того не желая.

Удаление таблиц

Если мы хотим удалить все данные из таблицы, но при этом оставить саму таблицу, нам следует использовать команду TRUNCATE:

TRUNCATE TABLE table_name;

В случае, если мы хотим удалить саму таблицу, то нам следует использовать команду DROP:

DROP TABLE table_name;

Заключение

На этой ноте мы завершаем данный SQL-туториал. Само собой, это не всё, и для полного освоения нужно ещё много изучить, однако данное вступление даст вам толчок для дальнейшего изучения.

Более подробные уроки по SQL вы можете найти, перейдя по следующим ссылкам:

  • Codeacademy курс SQL
  • SQL Fiddle: онлайн-инструмент для тестирования SQL запросов

Другие статьи по теме

5 сайтов для оттачивания навыков написания SQL-запросов

Видеокурс по работе с MySQL

Больше полезной информации вы найдете на нашем телеграм-канале «Библиотека программиста».

Доброго времени суток, друзья!

Изучение настоящей шпаргалки не сделает вас мастером SQL, но позволит получить общее представление об этом языке программирования и возможностях, которые он предоставляет. Рассматриваемые в шпаргалке возможности являются общими для всех или большинства диалектов SQL.

Для более полного погружения в SQL рекомендую изучить эти руководства по MySQL и PostgreSQL от Метанита. Они хороши тем, что просты в изучении и позволяют быстро начать работу с названными СУБД.

Официальная документация по MySQL.

Официальная документация по PostreSQL (на русском языке).

Свежий туториал по SQL от Codecamp.

Свежая шпаргалка по SQL в формате PDF.

При обнаружении ошибок, опечаток и неточностей, не стесняйтесь писать мне в личку.

Содержание

  • Что такое SQL?
  • Почему SQL?
  • Процесс SQL
  • Команды SQL
  • Что такое таблица?
  • Что такое поле?
  • Что такое запись или строка?
  • Что такое колонка?
  • Что такое NULL?
  • Ограничения
  • Целостность данных
  • Нормализация БД
  • Синтаксис SQL
  • Типы данных
  • Операторы
  • Выражения
  • Создание БД
  • Удаление БД
  • Выбор БД
  • Создание таблицы
  • Удаление таблицы
  • Добавление колонок
  • Выборка полей
  • Предложение WHERE
  • Операторы AND и OR
  • Обновление полей
  • Удаление записей
  • Предложения LIKE и REGEX
  • Предложение TOP/LIMIT/ROWNUM
  • Предложения ORDER BY и GROUP BY
  • Ключевое слово DISTINCT
  • Соединения
  • Предложение UNION
  • Предложение UNION ALL
  • Синонимы
  • Индексы
  • Обновление таблицы
  • Очистка таблицы
  • Представления
  • HAVING
  • Транзакции
  • Временные таблицы
  • Клонирование таблицы
  • Подзапросы
  • Последовательности

Что такое SQL?

SQL — это язык структурированных запросов (Structured Query Language), позволяющий хранить, манипулировать и извлекать данные из реляционных баз данных (далее — РБД, БД).

↥ Наверх

Почему SQL?

SQL позволяет:

  • получать доступ к данным в системах управления РБД
  • описывать данные (их структуру)
  • определять данные в БД и управлять ими
  • взаимодействовать с другими языками через модули SQL, библиотеки и предваритальные компиляторы
  • создавать и удалять БД и таблицы
  • создавать представления, хранимые процедуры (stored procedures) и функции в БД
  • устанавливать разрешения на доступ к таблицам, процедурам и представлениям

↥ Наверх

Процесс SQL

При выполнении любой SQL-команды в любой RDBMS (Relational Database Management System — система управления РБД, СУБД, например, PostgreSQL, MySQL, MSSQL, SQLite и др.) система определяет наилучший способ выполнения запроса, а движок SQL определяет способ интерпретации задачи.

В данном процессе участвует несколького компонентов:

  • диспетчер запросов (Query Dispatcher)
  • движок оптимизации (Optimization Engines)
  • классический движок запросов (Classic Query Engine)
  • движок запросов SQL (SQL Query Engine) и т.д.

Классический движок обрабатывает все не-SQL-запросы, а движок SQL-запросов не обрабатывает логические файлы.

↥ Наверх

Команды SQL

Стандартными командами для взаимодействия с РБД являются CREATE, SELECT, INSERT, UPDATE, DELETE и DROP. Эти команды могут быть классифицированы следующим образом:

  • DDL — язык определения данных (Data Definition Language)
  • DML — язык изменения данных (Data Manipulation Language)
  • DCL — язык управления данными (Data Control Language)

Обратите внимание: использование верхнего регистра в названиях команд SQL — это всего лишь соглашение, большинство СУБД нечувствительны к регистру. Тем не менее, форма записи инструкций, когда названия команд пишутся большими буквами, а названия таблиц, колонок и др. — маленькими, позволяет быстро определять назначение производимой с данными операции.

↥ Наверх

Что такое таблица?

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

Таблица — это самая распространенная и простая форма хранения данных в РБД. Вот пример таблицы с пользователями (users):

↥ Наверх

Что такое поле?

Каждая таблица состоит из небольших частей — полей (fields). Полями в таблице users являются userId, userName, age, city и status. Поле — это колонка таблицы, предназначенная для хранения определенной информации о каждой записи в таблице.

Обратите внимание: вместо userId и userName можно было бы использовать id и name, соответственно. Но при работе с несколькими объектами, содержащими свойство id, бывает сложно понять, какому объекту принадлежит идентификатор, особенно, если вы, как и я, часто прибегаете к деструктуризации. Что касается слова name, то оно часто оказывается зарезервизованным, т.е. уже используется в среде, в которой выполняется код, поэтому я стараюсь его не использовать.

↥ Наверх

Что такое запись или строка?

Запись или строка (record/row) — это любое единичное вхождение (entry), существующее в таблице. В таблице users 5 записей. Проще говоря, запись — это горизонтальное вхождение в таблице.

↥ Наверх

Что такое колонка?

Колонка (column) — это вертикальное вхождение в таблице, содержащее всю информацию, связанную с определенным полем. В таблице users одной из колонок является city, которая содержит названия городов, в которых проживают пользователи.

↥ Наверх

Что такое нулевое значение?

Нулевое значение (NULL) — это значение поля, которое является пустым, т.е. нулевое значение — это значение поля, не имеющего значения. Важно понимать, что нулевое значение отличается от значения 0 и от значения поля, содержащего пробелы (`). Поле с нулевым значением - это такое поля, которое осталось пустым при создании записи. Также, следует учитывать, что в некоторых СУБД пустая строка (») — этоNULL`, а в некоторых — это разные значения.

↥ Наверх

Ограничения

Ограничения (constraints) — это правила, применяемые к данным. Они используются для ограничения данных, которые могут быть записаны в таблицу. Это обеспечивает точность и достоверность данных в БД.

Ограничения могут устанавливаться как на уровне колонки, так и на уровне таблицы.

Среди наиболее распространенных ограничений можно назвать следующие:

  • NOT NULL — колонка не может иметь нулевое значение
  • DEFAULT — значение колонки по умолчанию
  • UNIQUE — все значения колонки должны быть уникальными
  • PRIMARY KEY — первичный или основной ключ, уникальный идентификатор записи в текущей таблице
  • FOREIGN KEY — внешний ключ, уникальный идентификатор записи в другой таблице (таблице, связанной с текущей)
  • CHECK — все значения в колонке должны удовлетворять определенному условию
  • INDEX — быстрая запись и извлечение данных

Любое ограничение может быть удалено с помощью команды ALTER TABLE и DROP CONSTRAINT + название ограничения. Некоторые реализации предоставляют сокращения для удаления ограничений и возможность отключать ограничения вместо их удаления.

↥ Наверх

Целостность данных

В каждой СУБД существуют следующие категории целостности данных:

  • целостность объекта (Entity Integrity) — в таблице не должно быть дубликатов (двух и более строк с одинаковыми значениями)
  • целостность домена (Domain Integrity) — фильтрация значений по типу, формату или диапазону
  • целостность ссылок (Referential integrity) — строки, используемые другими записями (строки, на которые в других записях имеются ссылки), не могут быть удалены
  • целостность, определенная пользователем (User-Defined Integrity) — дополнительные правила

↥ Наверх

Нормализация БД

Нормализация — это процесс эффективной организации данных в БД. Существует две главных причины, обуславливающих необходимость нормализации:

  • предотвращение записи в БД лишних данных, например, хранения одинаковых данных в разных таблицах
  • обеспечение «оправданной» связи между данными

Нормализация предполагает соблюдение нескольких форм. Форма — это формат структурирования БД. Существует три главных формы: первая, вторая и, соответственно, третья. Я не буду вдаваться в подробности об этих формах, при желании, вы без труда найдете необходимую информацию.

↥ Наверх

Синтаксис SQL

Синтаксис — это уникальный набор правил и рекомендаций. Все инструкции SQL должны начинаться с ключевого слова, такого как SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW и т.п. и заканчиваться точкой с запятой (;) (точка с запятой не входит в синтаксис SQL, но ее наличия, как правило, требуют консольные клиенты СУБД для обозначения окончания ввода команды). SQL не чувствителен к регистру, т.е. SELECT, select и SeLeCt являются идентичными инструкицями. Исключением из этого правила является MySQL, где учитывается регистр в названии таблицы.

Примеры синтаксиса

-- выборка
SELECT col1, col2, ...colN
FROM tableName;

SELECT DISTINCT col1, col2, ...colN
FROM tableName;

SELECT col1, col2, ...colN
FROM tableName
WHERE condition;

SELECT col1, col2, ...colN
FROM tableName
WHERE condition1 AND|OR condition2;

SELECT col2, col2, ...colN
FROM tableName
WHERE colName IN (val1, val2, ...valN);

SELECT col1, col2, ...colN
FROM tableName
WHERE colName BETWEEN val1 AND val2;

SELECT col1, col2, ...colN
FROM tableName
WHERE colName LIKE pattern;

SELECT col1, col2, ...colN
FROM tableName
WHERE condition
ORDER BY colName [ASC|DESC];

SELECT SUM(colName)
FROM tableName
WHERE condition
GROUP BY colName;

SELECT COUNT(colName)
FROM tableName
WHERE condition;

SELECT SUM(colName)
FROM tableName
WHERE condition
GROUP BY colName
HAVING (function condition);

-- создание таблицы
CREATE TABLE tableName (
  col1 datatype,
  col2 datatype,
  ...
  colN datatype,
  PRIMARY KEY (одна или более колонка)
);

-- удаление таблицы
DROP TABLE tableName;

-- создание индекса
CREATE UNIQUE INDEX indexName
ON tableName (col1, col2, ...colN);

-- удаление индекса
ALTER TABLE tableName
DROP INDEX indexName;

-- получение описания структуры таблицы
DESC tableName;

-- очистка таблицы
TRUNCATE TABLE tableName;

-- добавление/удаление/модификация колонок
ALTER TABLE tableName ADD|DROP|MODIFY colName [datatype];

-- переименование таблицы
ALTER TABLE tableName RENAME TO newTableName;

-- вставка значений
INSERT INTO tableName (col1, col2, ...colN)
VALUES (val1, val2, ...valN)

-- обновление записей
UPDATE tableName
SET col1 = val1, col2 = val2, ...colN = valN
[WHERE condition];

-- удаление записей
DELETE FROM tableName
WHERE condition;

-- создание БД
CREATE DATABASE [IF NOT EXISTS] dbName;

-- удаление БД
DROP DATABASE [IF EXISTS] dbName;

-- выбор БД
USE dbName;

-- завершения транзакции
COMMIT;

-- отмена изменений
ROLLBACK;

↥ Наверх

Типы данных

Каждая колонка, переменная и выражение в SQL имеют определенный тип данных (data type). Основные категории типов данных:

Точные числовые

Приблизительные числовые

Дата и время

Строковые символьные

Строковые символьные (юникод)

Бинарные

Смешанные

↥ Наверх

Операторы

Оператор (operators) — это ключевое слово или символ, которые, в основном, используются в инструкциях WHERE для выполнения каких-либо операций. Они используются как для определения условий, так и для объединения нескольких условий в инструкции.

В дальнейших примерах мы будем исходить из предположения, что переменная a имеет значение 10, а b20.

Арифметические

Операторы сравнения

Логические операторы

↥ Наверх

Выражения

Выражение (expression) — это комбинация значений, операторов и функций для оценки (вычисления) значения. Выражения похожи на формулы, написанные на языке запросов. Они могут использоваться для извлечения из БД определенного набора данных.

Базовый синтаксис выражения выглядит так:

SELECT col1, col2, ...colN
FROM tableName
WHERE [condition|expression];

Существуют различные типы выражений: логические, числовые и выражения для работы с датами.

Логические

Логические выражения извлекают данные на основе совпадения с единичным значением.

SELECT col1, col2, ...colN
FROM tableName
WHERE выражение для поиска совпадения с единичным значением;

Предположим, что в таблице users имеются следующие записи:

Выполняем поиск активных пользователей:

SELECT * FROM users WHERE status = active;

Результат:

Числовые

Используются для выполнения арифметических операций в запросе.

SELECT numericalExpression as operationName
[FROM tableName
WHERE condition];

Простой пример использования числового выражения:

SELECT (10 + 5) AS addition;

Результат:

Существует несколько встроенных функций, таких как count(), sum(), avg(), min(), max() и др. для выполнения так называемых агрегирующих вычислений данных таблицы или колонки.

SELECT COUNT(*) AS records FROM users;

Результат:

  • AVG — вычисляет среднее значение
  • SUM — вычисляет сумму значений
  • MIN — вычисляет наименьшее значение
  • MAX — вычисляет наибольшее значение
  • COUNT — вычисляет количество записей в таблице

Также существует несколько встроенных функций для работы со строками:

  • CONCAT — объединение строк
  • LENGTH — возвращает количество символов в строке
  • TRIM — удаляет пробелы в начале и конце строки
  • SUBSTRING — извлекает подстроку из строки
  • REPLACE — заменяет подстроку в строке
  • LOWER — переводит символы строки в нижний регистр
  • UPPER — переводит символы строки в верхний регистр и т.д.

с числами:

  • ROUND — округляет число
  • TRUNCATE — обрезает дробное число до указанного количества знаков после запятой
  • CEILING — возвращает наименьшее целое число, которое больше или равно текущему значению
  • FLOOR — возвращает наибольшее целое число, которое меньше или равно текущему значению
  • POWER — возводит число в указанную степень
  • SQRT — возвращает квадратный корень числа
  • RAND — генерирует случайное число с плавающей точкой в диапазоне от 0 до 1

Выражения для работы с датами

Эти выражения, как правило, возвращают текущую дату и время.

SELECT CURRENT_TIMESTAMP;

Результат:

CURRENT_TIMESTAMP — это и выражение, и функция (CURRENT_TIMESTAMP()). Другая функция для получения текущей даты и времени — NOW().

Другие функции для получения текущей даты и времени:

  • CURDATE/CURRENT_DATE — возвращает текущую дату
  • CURTIME/CURRENT_TIME — возвращает текущее время и т.д.

Функции для разбора даты и времени:

  • DAYOFMONTH(date) — возвращает день месяца в виде числа
  • DAYOFWEEK(date) — возвращает день недели в виде числа
  • DAYOFYEAR(date) — возвращает номер дня в году
  • MONTH(date) — возвращает месяц
  • YEAR(date) — возвращает год
  • LAST_DAY(date) — возвращает последний день месяца в виде даты
  • HOUR(time) — возвращает час
  • MINUTE(time) — возвращает минуты
  • SECOND(time) — возвращает секунды и др.

Функции для манипулирования датами:

  • DATE_ADD(date, interval) — выполняет сложение даты и определенного временного интервала
  • DATE_SUB(date, interval) — выполняет вычитание из даты определенного временного интервала
  • DATEDIFF(date1, date2) — возвращает разницу в днях между двумя датами
  • TO_DAYS(date) — возвращает количество дней с 0-го дня года
  • TIME_TO_SEC(time) — возвращает количество секунд с полуночи и др.

Для форматирования даты и времени используются функции DATE_FORMAT(date, format) и TIME_FORMAT(date, format), соответственно.

↥ Наверх

Создание БД

Для создания БД используется инструкция CREATE DATABASE.

CREATE DATABASE dbName;
-- или
CREATE DATABASE IF NOT EXISTS dbName;

Условие IF NOT EXISTS позволяет избежать получения ошибки при попытке создания БД, которая уже существует.

Название БД должно быть уникальным в пределах СУБД.

Создаем БД testDB:

CREATE DATABASE testDB;

Получаем список БД:

SHOW DATABASES;

Результат:

↥ Наверх

Удаление БД

Для удаления БД используется инструкция DROP DATABASE.

DROP DATABASE dbName;
-- или
DROP DATABASE IF EXISTS dbName;

Условие IF EXISTS позволяет избежать получения ошибки при попытке удаления несуществующей БД.

Удаляем testDB:

DROP DATABASE testDB;

Обратите внимание: при удалении БД уничтожаются все данные, которые в ней хранятся, так что будьте предельно внимательны при использовании данной команды.

Проверяем, что БД удалена:

SHOW DATABASES;

Для получения списка таблиц используется инструкция SHOW TABLES.

Результат:

↥ Наверх

Выбор БД

При наличии нескольких БД, перед выполнением каких-либо операций, необходимо выбрать БД. Для этого используется инструкция USE.

USE dbName;

Предположим, что мы не удаляли testDB. Тогда мы можем выбрать ее так:

USE testDB;

↥ Наверх

Создание таблицы

Создание таблицы предполагает указание названия таблицы и определение колонок таблицы и их типов данных. Для создания таблицы используется инструкция CREATE TABLE.

CREATE TABLE tableName (
  col1 datatype,
  col2 datatype,
  ...
  colN datatype,
  PRIMARY KEY (хотя бы одна колонка)
);

Для создания таблицы путем копирования другой таблицы используется сочетание CREATE TABLE и SELECT.

Пример создания таблицы users, где первичным ключом являются идентификаторы пользователей, а поля для имени и возраста пользователя не могут быть нулевыми:

CREATE TABLE users (
  userId INT,
  userName VARCHAR(20)  NOT NULL,
  age INT           NOT NULL,
  city VARCHAR(20),
  status VARCHAR(8),
  PRIMARY KEY (id)
);

Проверяем, что таблица была создана:

DESC users;

Результат:

↥ Наверх

Удаление таблицы

Для удаления таблицы используется инструкция DROP TABLE.

Обратите внимание: при удалении таблицы, навсегда удаляются все хранящиеся в ней данные, индексы, триггеры, ограничения и разрешения, так что будьте предельно внимательны при использовании данной команды.

Удаляем таблицу users:

DROP TABLE users;

Теперь, если мы попытаемся получить описание users, то получим ошибку:

DESC users;
-- ERROR 1146 (42S02): Table 'testDB.users' doesn't exist

↥ Наверх

Добавление колонок

Для добавления в таблицу колонок используется инструкция INSERT INTO.

INSERT INTO tableName (col1, col2, ...colN)
VALUES (val1, val2, ...valN);

Названия колонок можно не указывать, однако, в этом случае значения должны перечисляться в правильном порядке.

INSERT INTO tableName VALUES (val1, val2, ...valN);

Во избежание ошибок, рекомендуется всегда перечислять названия колонок.

Предположим, что мы не удаляли таблицу users. Заполним ее пользователями:

INSERT INTO users (userId, userName, age, city, status)
VALUES (1, 'Igor', 25, 'Moscow', 'active');

INSERT INTO users (userId, userName, age, city, status)
VALUES (2, 'Vika', 26, 'Ekaterinburg', 'inactive');

INSERT INTO users (userId, userName, age, city, status)
VALUES (3, 'Elena', 27, 'Ekaterinburg', 'active');

В таблицу можно добавлять несколько строк за один раз.

INSERT INTO users (userId, userName, age, city, status)
VALUES
(1, 'Igor', 25, 'Moscow', 'active'),
(2, 'Vika', 26, 'Ekaterinburg', 'inactive'),
(3, 'Elena', 27, 'Ekaterinburg', 'active');

Также, как было отмечено, при добавлении строки названия полей можно опускать:

INSERT INTO users
VALUES (4, 'Oleg', 28, 'Moscow', 'inactive');

Результат:

Заполнение таблицы с помощью другой таблицы

INSERT INTO tableName [(col1, col2, ...colN)]
  SELECT col1, col2, ...colN
  FROM anotherTable
  [WHERE condition];

↥ Наверх

Выборка полей

Для выборки полей из таблицы используется инструкция SELECT. Она возвращает данные в виде результирующей таблицы (результирующего набора, result-set).

SELECT col1, col2, ...colN
FROM tableName;

Для выборки всех полей используется такой синтаксис:

SELECT * FROM tableName;

Произведем выборку полей userId, userName и age из таблицы users:

SELECT userId, userName, age FROM users;

Результат:

↥ Наверх

Предложение WHERE

Предложение WHERE используется для фильтрации возвращаемых данных. Оно используется совместно с SELECT, UPDATE, DELETE и другими инструкциями.

SELECT col1, col2, ...col2
FROM tableName
WHERE condition;

Условие (condition), которому должны удовлетворять возвращаемые записи, определяется с помощью операторов сравнения или логических операторов типа >, <, =, NOT, LIKE и т.д.

Сделаем выборку полей userId, userName и age активных пользователей:

SELECT userId, userName, age
FROM users
WHERE status = 'active';

Результат:

Сделаем выборку полей userId, age и city пользователя с именем Vika.

SELECT userId, age, city
FROM users
WHERE userName = 'Vika';

Результат:

Обратите внимание: строки в предложении WHERE должны быть обернуты в одинарные кавычки (''), а числа, напротив, указываются как есть.

↥ Наверх

Операторы AND и OR

Конъюнктивный оператор AND и дизъюнктивный оператор OR используются для соединения нескольких условий при фильтрации данных.

AND

SELECT col1, col2, ...colN
FROM tableName
WHERE condition1 AND condition2 ...AND conditionN;

Возвращаемые записи должны удовлетворять всем указанным условиям.

Сделаем выборку полей userId, userName и age активных пользователей старше 26 лет:

SELECT userId, userName, age
FROM users
WHERE status = active AND age > 26;

Результат:

OR

SELECT col1, col2, ...colN
FROM tableName
WHERE condition1 OR condition2 ...OR conditionN;

Возвращаемые записи должны удовлетворять хотя бы одному условию.

Сделаем выборку тех же полей неактивных пользователей или пользователей, младше 27 лет:

SELECT userId, userName, age
FROM users
WHERE status = inactive OR age < 27;

Результат:

↥ Наверх

Обновление полей

Для обновления полей используется инструкция UPDATE ... SET. Эта инструкция, обычно, используется в сочетании с предложением WHERE.

UPDATE tableName
SET col1 = val1, col2 = val2, ...colN = valN
[WHERE condition];

Обновим возраст пользователя с именем Igor:

UPDATE users
SET age = 30
WHERE username = 'Igor';

Если в данном случае опустить WHERE, то будет обновлен возраст всех пользователей.

↥ Наверх

Удаление записей

Для удаления записей используется инструкция DELETE. Эта инструкция также, как правило, используется в сочетании с предложением WHERE.

DELETE FROM tableName
[WHERE condition];

Удалим неактивных пользователей:

DELETE FROM users
WHERE status = 'inactive';

Если в данном случае опустить WHERE, то из таблицы users будут удалены все записи.

↥ Наверх

Предложения LIKE и REGEX

LIKE

Предложение LIKE используется для сравнения значений с помощью операторов с подстановочными знаками. Существует два вида таких операторов:

  • проценты (%)
  • нижнее подчеркивание (_)

% означает 0, 1 или более символов. _ означает точно 1 символ.

SELECT col1, col2, ...colN FROM tableName
WHERE col LIKE 'xxx%'
-- или
WHERE col LIKE '%xxx%'
-- или
WHERE col LIKE '%xxx'
-- или
WHERE col LIKE 'xxx_'
-- и т.д.

Примеры:

Сделаем выборку неактивных пользователей:

SELECT * FROM users
WHERE status LIKE 'in%';

Результат:

Сделаем выборку пользователей 30 лет и старше:

SELECT * FROM users
WHERE age LIKE '3_';

Результат:

REGEX

Предложение REGEX позволяет определять регулярное выражение, которому должна соответствовать запись.

SELECT col1, col2, ...colN FROM tableName
WHERE colName REGEXP регулярное выражение;

В регулярное выражении могут использоваться следующие специальные символы:

  • ^ — начало строки
  • $ — конец строки
  • . — любой символ
  • [символы] — любой из указанных в скобках символов
  • [начало-конец] — любой символ из диапазона
  • | — разделяет шаблоны

Сделаем выборку пользователей с именами Igor и Vika:

SELECT * FROM users
WHERE userName REGEXP 'Igor|Vika';

Результат:

↥ Наверх

Предложение TOP/LIMIT/ROWNUM

Данные предложения позволяют извлекать указанное количество или процент записей с начала таблицы. Разные СУБД поддерживают разные предложения.

SELECT TOP number|percent col1, col2, ...colN
FROM tableName
[WHERE condition];

Сделаем выборку первых трех пользователей:

SELECT TOP 3 * FROM users;

Результат:

В mysql:

SELECT * FROM users
LIMIT 3, [offset];

Параметр offset (смещение) определяет количество пропускаемых записей. Например, так можно извлечь первых двух пользователей, начиная с третьего:

SELECT * FROM users
LIMIT 2, 2;

В oracle:

SELECT * FROM users
WHERE ROWNUM <= 3;

↥ Наверх

Предложения ORDER BY и GROUP BY

ORDER BY

Предложение ORDER BY используется для сортировки данных по возрастанию (ASC) или убыванию (DESC). Многие СУБД по умолчанию выполняют сортировку по возрастанию.

SELECT col1, col2, ...colN
FROM tableName
[WHERE condition]
[ORDER BY col1, col2, ...colN] [ASC | DESC];

Обратите внимание: колонки для сортировки должны быть указаны в списке колонок для выборки.

Сделаем выборку пользователей, отсортировав их по городу и возрасту:

SELECT * FROM users
ORDER BY city, age;

Результат:

Теперь выполним сортировку по убыванию:

SELECT * FROM users
ORDER BY city, age DESC;

Определим собственный порядок сортировки по убыванию:

SELECT * FROM users
ORDER BY (CASE city
  WHEN 'Ekaterinburg' THEN 1
  WHEN 'Moscow' THEN 2
ELSE 100 END) ASC, city DESC;

GROUP BY

Предложение GROUP BY используется совместно с инструкцией SELECT для группировки записей. Оно указывается после WHERE и перед ORDER BY.

SELECT col1, col2, ...colN
FROM tableName
WHERE condition
GROUP BY col1, col2, ...colN
ORDER BY col1, col2, ...colN;

Сгруппируем активных пользователей по городам:

SELECT city, COUNT(city) AS amount FROM users
WHERE status = active
GROUP BY city
ORDER BY city;

Результат:

↥ Наверх

Ключевое слово DISTINCT

Ключевое слово DISTINCT используется совместно с инструкцией SELECT для возврата только уникальных записей (без дубликатов).

SELECT DISTINCT col1, col2, ...colN
FROM tableName
[WHERE condition];

Сделаем выборку городов проживания пользователей:

SELECT DISTINCT city
FROM users;

Результат:

↥ Наверх

Соединения

Соединения (joins) используются для комбинации записей двух и более таблиц.

Предположим, что кроме users, у нас имеется таблица orders с заказами пользователей следующего содержания:

Сделаем выборку полей userId, userName, age и amount из наших таблиц посредством их соединения:

SELECT userId, userName, age, amount
FROM users, orders
WHERE users.userId = orders.userId;

Результат:

При соединении таблиц могут использоваться такие операторы, как =, <, >, <>, <=, >=, !=, BETWEEN, LIKE и NOT, однако наиболее распространенным является =.

Существуют разные типы объединений:

  • INNER JOIN — возвращает записи, имеющиеся в обеих таблицах
  • LEFT JOIN — возвращает записи из левой таблицы, даже если такие записи отсутствуют в правой таблице
  • RIGHT JOIN — возвращает записи из правой таблицы, даже если такие записи отсутствуют в левой таблице
  • FULL JOIN — возвращает все записи объединяемых таблиц
  • CROSS JOIN — возвращает все возможные комбинации строк обеих таблиц
  • SELF JOIN — используется для объединения таблицы с самой собой

↥ Наверх

Предложение UNION

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

В случае с UNION, каждая инструкция SELECT должна иметь:

  • одинаковый набор колонок для выборки
  • одинаковое количество выражений
  • одинаковые типы данных колонок и
  • одинаковый порядок колонок

Однако, они могут быть разной длины.

SELECT col1, col2, ...colN
FROM table1
[WHERE condition]

UNION

SELECT col1, col2, ...colN
FROM table2
[WHERE condition];

Объединим наши таблицы users и orders:

  SELECT userId, userName, amount, date
  FROM users
  LEFT JOIN orders
  ON users.useId = orders.userId
UNION
  SELECT userId, userName, amount, date
  FROM users
  RIGHT JOIN orders
  ON users.userId = orders.userId;

Результат:

↥ Наверх

Предложение UNION ALL

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

SELECT col1, col2, ...colN
FROM table1
[WHERE condition]

UNION ALL

SELECT col1, col2, ...colN
FROM table2
[WHERE condition];

Существует еще два предложения, похожих на UNION:

  • INTERSECT — используется для комбинации результатов двух и более SELECT, но возвращаются только строки из первого SELECT, совпадающие со строками из второго SELECT
  • EXCEPT|MINUS — возвращаются только строки из первого SELECT, отсутствующие во втором SELECT

↥ Наверх

Синонимы

Синонимы (aliases) позволяют временно изменять названия таблиц и колонок. «Временно» означает, что новое название используется только в текущем запросе, в БД название остается прежним.

Синтаксис синонима таблицы:

SELECT col1, col2, ...colN
FROM tableName AS aliasName
[WHERE condition];

Синтаксис синонима колонки:

SELECT colName AS aliasName
FROM tableName
[WHERE condition];

Пример использования синонимов таблиц:

SELECT U.userId, U.userName, U.age, O.amount
FROM users AS U, orders AS O
WHERE U.userId = O.userId;

Результат:

Пример использования синонимов колонок:

SELECT userId AS user_id, userName AS user_name, age AS user_age
FROM users
WHERE status = active;

Результат:

↥ Наверх

Индексы

Создание индексов

Индексы — это специальные поисковые таблицы (lookup tables), которые используются движком БД в целях более быстрого извлечения данных. Проще говоря, индекс — это указатель или ссылка на данные в таблице.

Индексы ускоряют работу инструкции SELECT и предложения WHERE, но замедляют работу инструкций UPDATE и INSERT. Индексы могут создаваться и удаляться, не оказывая никакого влияния на данные.

Для создания индекса используется инструкция CREATE INDEX, позволяющая определять название индекса, индексируемые колонки и порядок индексации (по возрастанию или по убыванию).

К индексам можно применять ограничение UNIQUE для того, чтобы обеспечить их уникальность.

Синтаксис создания индекса:

CREATE INDEX indexName ON tableName;

Синтаксис создания индекса для одной колонки:

CREATE INDEX indexName
ON tableName (colName);

Синтакис создания уникальных индексов (такие индексы используются не только для повышения производительности, но и для обеспечения согласованности данных):

CREATE UNIQUE INDEX indexName
ON tableName (colName);

Синтаксис создания индексов для нескольких колонок (композиционный индекс):

CREATE INDEX indexName
ON tableName (col1, col2, ...colN);

Решение о создании индексов для одной или нескольких колонок следует принимать на основе того, какие колонки будут часто использоваться в запросе WHERE в качестве условия для сортировки строк.

Для ограничений PRIMARY KEY и UNIQUE автоматически создаются неявные индексы.

Удаление индексов

Для удаления индексов используется инструкция DROP INDEX:

DROP INDEX indexName;

Несмотря на то, что индексы предназначены для повышения производительности БД, существуют ситуации, в которых их использования лучше избегать.

К таким ситуациям относится следующее:

  • индексы не должны использоваться в маленьких таблицах
  • в таблицах, которые часто и в большом объеме обновляются или перезаписываются
  • в колонках, которые содержат большое количество нулевых значений
  • в колонках, над которыми часто выполняются операции

↥ Наверх

Обновление таблицы

Команда ALTER TABLE используется для добавления, удаления и модификации колонок существующей таблицы. Также эта команда используется для добавления и удаления ограничений.

Синтаксис:

-- добавление новой колонки
ALTER TABLE tableName ADD colName datatype;

-- удаление колонки
ALTER TABLE tableName DROP COLUMN colName;

-- изменение типа данных колонки
ALTER TABLE tableName MODIFY COLUMN colName newDatatype;

-- добавление ограничения `NOT NULL`
ALTER TABLE tableName MODIFY colName datatype NOT NULL;

-- добавление ограничения `UNIQUE`
ALTER TABLE tableName
ADD CONSTRAINT myUniqueConstraint UNIQUE (col1, col2, ...colN);

-- добавление ограничения `CHECK`
ALTER TABLE tableName
ADD CONSTRAINT myUniqueConstraint CHECK (condition);

-- добавление первичного ключа
ALTER TABLE tableName
ADD CONSTRAINT myPrimaryKey PRIMARY KEY (col1, col2, ...colN);

-- удаление ограничения
ALTER TABLE tableName
DROP CONSTRAINT myUniqueContsraint;

-- mysql
ALTER TABLE tableName
DROP INDEX myUniqueContsraint;

-- удаление первичного ключа
ALTER TABLE tableName
DROP CONSTRAINT myPrimaryKey;

-- mysql
ALTER TABLE tableName
DROP PRIMARY KEY;

Добавляем в таблицу users новую колонку — пол пользователя:

ALTER TABLE users ADD sex char(1);

Удаляем эту колонку:

ALTER TABLE users DROP sex;

↥ Наверх

Очистка таблицы

Команда TRUNCATE TABLE используется для очистки таблицы. Ее отличие от DROP TABLE состоит в том, что сохраняется структура таблицы (DROP TABLE полностью удаляет таблицу и все ее данные).

TRUNCATE TABLE tableName;

Очищаем таблицу users:

TRUNCATE TABLE users;

Проверяем, что users пустая:

SELECT * FROM users;
-- Empty set (0.00 sec)

↥ Наверх

Представления

Представление (view) — это не что иное, как инструкция, записанная в БД под определенным названием. Другими словами, представление — это композиция таблицы в форме предварительно определенного запроса.

Представления могут содержать все или только некоторые строки таблицы. Представление может быть создано на основе одной или нескольких таблиц (это зависит от запроса для создания представления).

Представления — это виртутальные таблицы, позволяющие делать следующее:

  • структурировать данные способом, который пользователи находят наиболее естественным или интуитивно понятным
  • ограничивать доступ к данным таким образом, что пользователь может просматривать и (иногда) модифицировать только то, что ему нужно и ничего более
  • объединять данные из нескольких таблиц для формирования отчетов

Создание представления

Для создания представления используется инструкция CREATE VIEW. Как было отмечено, представления могут создаваться на основе одной или нескольких таблиц, и даже на основе другого представления.

CREATE VIEW viewName AS
SELECT col1, col2, ...colN
FROM tableName
[WHERE condition];

Создаем представление для имен и возраста пользователей:

CREATE VIEW usersView AS
SELECT userName, age
FROM users;

Получаем данные с помощью представления:

SELECT * FROM usersView;

Результат:

WITH CHECK OPTION

WITH CHECK OPTION — это настройка инструкции CREATE VIEW. Она позволяет обеспечить соответствие всех UPDATE и INSERT условию, определенном в представлении.

Если условие не удовлетворяется, выбрасывается исключение.

CREATE VIEW usersView AS
SELECT userName, age
FROM users
WHERE age IS NOT NULL
WITH CHECK OPTION;

Обновление представления

Представление может быть обновлено при соблюдении следующих условий:

  • SELECT не содержит ключевого слова DISTINCT
  • SELECT не содержит агрегирующих функций
  • SELECT не содержит функций установки значений
  • SELECT не содержит операций установки значений
  • SELECT не содержит предложения ORDER BY
  • FROM не содержит больше одной таблицы
  • WHERE не содержит подзапросы
  • запрос не содержит GROUP BY или HAVING
  • вычисляемые колонки не обновляются
  • все ненулевые колонки из базовой таблицы включены в представление в том же порядке, в каком они указаны в запросе INSERT

Пример обновления возраста пользователя с именем Igor в представлении:

UPDATE usersView
SET age = 31
WHERE userName = 'Igor';

Обратите внимание: обновление строки в представлении приводит к ее обновлению в базовой таблице.

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

С помощью команды DELETE можно удалять строки из представления.

Удаляем из представления пользователя, возраст которого составляет 26 лет:

DELETE FROM usersView
WHERE age = 26;

Обратите внимание: удаление строки в представлении приводит к ее удалению в базовой таблице.

Удаление представления

Для удаления представления используется инструкция DROP VIEW:

DROP VIEW viewName;

Удаляем представление usersView:

DROP VIEW usersView;

↥ Наверх

HAVING

Предложение HAVING используется для фильтрации результатов группировки. WHERE используется для применения условий к колонкам, а HAVING — к группам, созданным с помощью GROUP BY.

HAVING должно указываться после GROUP BY, но перед ORDER BY (при наличии).

SELECT col1, col2, ...colN
FROM table1, table2, ...tableN
[WHERE condition]
GROUP BY col1, col2, ...colN
HAVING condition
ORDER BY col1, col2, ...colN;

↥ Наверх

Транзакции

Транзакция — это единица работы или операции, выполняемой над БД. Это последовательность операций, выполняемых в логическом порядке. Эти операции могут запускаться как пользователем, так и какой-либо программой, функционирующей в БД.

Транзакция — это применение одного или более изменения к БД. Например, при создании/обновлении/удалении записи мы выполняем транзакцию. Важно контролировать выполнение таких операций в целях обеспечения согласованности данных и обработки возможных ошибок.

На практике, запросы, как правило, не отправляются в БД по одному, они группируются и выполняются как часть транзакции.

Свойства транзакции

Транзакции имеют 4 стандартных свойства (ACID):

  • атомарность (atomicity) — все операции транзакции должны быть успешно завершены. В противном случае, транзакция прерывается, а все изменения отменяются (происходит откат к предыдущему состоянию)
  • согласованность (consistency) — состояние должно изменться в полном соответствии с операциями транзакции
  • изоляция или автономность (isolation) — транзакции не зависят друг от друга и не оказывают друг на друга никакого влияния
  • долговечность (durability) — результат звершенной транзакции должен сохраняться при поломке системы

Управление транзакцией

Для управления транзакцией используются следующие команды:

  • BEGIN|START TRANSACTION — запуск транзакции
  • COMMIT — сохранение изменений
  • ROLLBACK — отмена изменений
  • SAVEPOINT — контрольная точка для отмены изменений
  • SET TRANSACTION — установка характеристик текущей транзакции

Команды для управления транзакцией могут использоваться только совместно с такими запросами как INSERT, UPDATE и DELETE. Они не могут использоваться во время создания и удаления таблиц, поскольку эти операции автоматически отправляются в БД.

Удаляем пользователя, возраст которого составляет 26 лет, и отправляем изменения в БД:

BEGIN TRANSACTION
DELETE FROM users
WHERE age = 26;
COMMIT;

Удаляем пользователя с именем Oleg и отменяем эту операцию:

BEGIN
  DELETE FROM users
  WHERE username = 'Oleg';
ROLLBACK;

Контрольные точки создаются с помощью такого синтаксиса:

SAVEPOINT savepointName;

Возврат к контрольной точке выполняется так:

ROLLBACK TO savepointName;

Выполняем три запроса на удаление данных из users, создавая контрольные точки перед каждый удалением:

START TRANSACTION
SAVEPOINT sp1;
DELETE FROM users
WHERE age = 26;

SAVEPOINT sp2;
DELETE FROM users
WHERE userName = 'Oleg';

SAVEPOINT sp3;
DELETE FROM users
WHERE status = 'inactive';

Отменяем два последних удаления, возвращаясь к контрльной точке sp2, созданной после первого удаления:

ROLLBACK TO sp2;

Делаем выборку пользователей:

SELECT * FROM users;

Результат:

Как видим, из таблицы был удален только пользователь с возрастом 26 лет.

Для удаление контрольной точки используется команда RELEASE SAVEPOINT. Естественно, после удаления контрольной точки, к ней нельзя будет вернуться с помощью ROLLBACK TO.

Команда SET TRANSACTION используется для инициализации транзакции, т.е. начала ее выполнения. При этом, можно определять некоторые характеристики транзакции. Например, так можно определить уровень доступа транзакции (доступна только для чтения или для записи тоже):

SET TRANSACTION [READ WRITE | READ ONLY];

↥ Наверх

Временные таблицы

Некоторые СУБД поддерживают так называемые временные таблицы (temporary tables). Такие таблицы позволяют хранить и обрабатывать промежуточные результаты с помощью таких же запросов, как и при работе с обычными таблицами.

Временные таблицы могут быть очень полезными при необходимости хранения временных данных. Одной из главных особенностей таких таблиц является то, что они удаляются по завершении текущей сессии. При запуске скрипта временная таблица удаляется после завершения выполнения этого скрипта. При доступе к БД с помощью клиентской программы, такая таблица будет удалена после закрытия этой программы.

Временная таблица создается с помощью инструкции CREATE TEMPORARY TABLE, в остальном синтаксис создания таких таблиц идентичен синтаксису создания обычных таблиц.

Временная таблица удаляется точно также, как и обычная таблица, с помощью инструкции DROP TABLE.

↥ Наверх

Клонирование таблицы

Может возникнуть ситуация, когда потребуется получить точную копию существующей таблицы, а CREATE TABLE или SELECT окажется недостаточно в силу того, что мы хотим получить не только идентичную структуру, но также индексы, значения по умолчанию и т.д. копируемой таблицы.

В mysql, например, это можно сделать так:

  • вызываем команду SHOW CREATE TABLE для получения инструкции, выполненной при создании таблицы, включая индексы и прочее
  • меняем название таблицы и выполняем запрос. Получаем точную копию таблицы
  • опционально: если требуется содержимое копируемой таблицы, можно также использовать инструкции INSERT INTO или SELECT

↥ Наверх

Подзапросы

Подзапрос — это внутренний (вложенный) запрос другого запроса, встроенный (вставленный) с помощью WHERE или других инструкций.

Подзапрос используется для получения данных, которые будут использованы основным запросом в качестве условия для фильтрации возвращаемых записей.

Подзапросы могут использоваться в инструкциях SELECT, INSERT, UPDATE и DELETE, а также с операторами =, <, >, >=, <=, IN, BETWEEN и т.д.

Правила использования подзапросов:

  • они должны быть обернуты в круглые скобки
  • подзапрос должен содержать только одну колонку для выборки, если основной запрос не содержит несколько таких колонок, которые сравниваются в подзапросе
  • в подзапросе нельзя использовать команду ORDER BY, это можно сделать в основном запросе. В подзапросе для замены ORDER BY можно использовать GROUP BY
  • подзапросы, возвращающие несколько значений, могут использоваться только с операторами, которые работают с наборами значений, такими как IN
  • список SELECT не может содержать ссылки на значения, которые оцениваются (вычисляются) как BLOB, ARRAY, CLOB или NCLOB
  • подзапрос не может быть сразу передан в функцию для установки значений
  • команду BETWEEN нельзя использовать совместно с подзапросом. Тем не менее, в самомподзапросе указанную команду использовать можно

Подзапросы, обычно, используются в инструкции SELECT.

SELECT col1, col2, ...colN
FROM table1, table2, ...tableN
WHERE colName operator
  (SELECT col1, col2, ...colN
  FROM table1, table2, tableN
  [WHERE condition]);

Пример:

SELECT * FROM users
WHERE userId IN (
  SELECT userId FROM users
  WHERE status = 'active'
);

Результат:

Подзапросы могут использоваться в инструкции INSERT. Эта инструкция добавляет в таблицу данные, возвращаемые подзапросом. При этом, данные, возвращаемые подзапросом, могут быть модифицированы любыми способами.

INSERT INTO tableName col1, col2, ...colN
SELECT col1, col2, ...colN
FROM table1, table2, ...tableN
[WHERE operator [value]];

Подзапросы могут использоваться в инструкции UPDATE. При этом, данные из подзапроса могут использоваться для обновления любого количества колонок.

UPDATE tableName
SET col = newVal
[WHERE operator [value]
  (
    SELECT colName
    FROM tableName
    [WHERE condition]
  )
];

Данные, возвращаемые подзапросом, могут использоваться и для удаления записей.

DELETE FROM tableName
[WHERE operator [value]
  (
    SELECT colName
    FROM tableName
    [WHERE condition]
  )
];

↥ Наверх

Последовательности

Последовательность — это набор целых чисел (1, 2, 3 и т.д.), генерируемых автоматически. Последовательности часто используются в БД, поскольку многие приложения нуждаются в уникальных значениях, используемых для идентификации строк.

Приведенные ниже примеры рассчитаны на mysql.

Простейшим способом определения последовательности является использование AUTO_INCREMENT при создании таблицы:

CREATE TABLE tableName (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id),
  -- другие строки
);

Для того, чтобы заново пронумеровать строки с помощью автоматически генерируемых значений (например, при удалении большого количества строк), можно удалить колонку, содержащую такие значения и создать ее заново. Обратите внимание: такая таблица не должна быть частью объединения.

ALTER TABLE tableName DROP id;
ALTER TABLE tableName
ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id);

По умолчанию значения, генерируемые с помощью AUTO_INCREMENT, начинаются с 1. Для того, чтобы установить другое начальное значение достаточно указать, например, AUTO_INCREMENT = 100 — в этом случае нумерация строк начнется со 100.

↥ Наверх

Основные команды SQL не ограничиваются стандартными CREATE, UPDATE и DELETE. Данная статья будет полезна тем, кто хочет освежить свои знания по SQL перед собеседованием на работу.

Обратите внимание, что в примерах используется MySQL, поэтому в конце каждого оператора ставится точка с запятой.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Настройка базы данных

Перед началом создайте БД с тестовыми данными. Для работы вам понадобится скачать два файла: DLL.sql и InsertStatements.sql. После установите MySQL, откройте терминал и войдите в консоль MySQL с помощью команды:

mysql -u root -p

Затем введите пароль и выполните следующую команду. Назовём базу данных «university»:

CREATE DATABASE university;
USE university;
SOURCE <path_of_DLL.sql_file>;
SOURCE <path_of_InsertStatements.sql_file>;

1

SHOW DATABASES

SQL-команда, которая отвечает за просмотр доступных баз данных.

2

CREATE DATABASE

Команда для создания новой базы данных.

3

USE

С помощью этой SQL-команды USE <database_name> выбирается база данных, необходимая для дальнейшей работы с ней.

4

SOURCE

А SOURCE <file.sql> позволит выполнить сразу несколько SQL-команд, содержащихся в файле с расширением .sql.

5

DROP DATABASE

Стандартная SQL-команда для удаления целой базы данных.

6

SHOW TABLES

С помощью этой несложной команды можно увидеть все таблицы, которые доступны в базе данных.

7

CREATE TABLE

SQL-команда для создания новой таблицы:

CREATE TABLE <table_name1> (
  <col_name1><col_type1>,
  <col_name2><col_type2>,
  <col_name3><col_type3>
  PRIMARY KEY(<col_name1>),
  FOREIGN KEY(<col_name2>) REFERENCES <table_name2>(<col_name2>)
);

Ограничения целостности при использовании CREATE TABLE

Может понадобиться создать ограничения для определённых столбцов в таблице. При создании таблицы можно задать следующие ограничения:

  • ячейка таблицы не может иметь значение NULL;
  • первичный ключ — PRIMARY KEY(col_name1, col_name2, …);
  • внешний ключ — FOREIGN KEY(col_namex1, …, col_namexn) REFERENCES table_name(col_namex1, …, col_namexn).

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

Пример

Создайте таблицу «instructor»:

CREATE TABLE instructor (
  ID CHAR(5),
  name VARCHAR(20) NOT NULL,
  dept_name VARCHAR(20),
  salary NUMERIC(8,2),
  PRIMARY KEY (ID),
  FOREIGN KEY (dept_name) REFERENCES department(dept_name)
);

8

DESCRIBE

С помощью DESCRIBE <table_name> можно просмотреть различные сведения (тип значений, является ключом или нет) о столбцах таблицы.

9

INSERT

Команда INSERT INTO <table_name> в SQL отвечает за добавление данных в таблицу:

INSERT INTO <table_name> (<col_name1>, <col_name2>, <col_name3>, …)
  VALUES (<value1>, <value2>, <value3>, …); 

При добавлении данных в каждый столбец таблицы не требуется указывать названия столбцов.

INSERT INTO <table_name>
  VALUES (<value1>, <value2>, <value3>, …);

10

UPDATE

SQL-команда для обновления данных таблицы:

UPDATE <table_name>
  SET <col_name1> = <value1>, <col_name2> = <value2>, ...
  WHERE <condition>;

11

DELETE

SQL-команда DELETE FROM <table_name> используется для удаления данных из таблицы.

12

DROP TABLE

А так можно удалить всю таблицу целиком.

13

SELECT

Далее мы рассмотрим основные команды SQL, которые позволяют работать непосредственно с данными. К одной из таких SQL-команд относится SELECT для получения данных из выбранной таблицы:

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>; 

Следующей командой можно вывести все данные из таблицы:

SELECT * FROM <table_name>;

14

SELECT DISTINCT

В столбцах таблицы могут содержаться повторяющиеся данные. Используйте SELECT DISTINCT для получения только неповторяющихся данных.

SELECT DISTINCT <col_name1>, <col_name2>, …
  FROM <table_name>; 

15

WHERE

Можно использовать ключевое слово WHERE в SELECT для указания условий в запросе:

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  WHERE <condition>; 

В запросе можно задавать следующие условия:

  • сравнение текста;
  • сравнение численных значений;
  • логические операции AND (и), OR (или) и NOT (отрицание).

Пример

Попробуйте выполнить следующие команды. Обратите внимание на условия, заданные в WHERE:

SELECT * FROM course WHERE dept_name=’Comp. Sci.’;
SELECT * FROM course WHERE credits>3;
SELECT * FROM course WHERE dept_name='Comp. Sci.' AND credits>3; 

SQL-команды: пример вывода с WHERE

16

GROUP BY

Оператор GROUP BY часто используется с агрегатными функциями, такими как COUNT, MAX, MIN, SUM и AVG, для группировки выходных значений.

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  GROUP BY <col_namex>; 

Пример

Выведем количество курсов для каждого факультета:

SELECT COUNT(course_id), dept_name
  FROM course
  GROUP BY dept_name; 

SQL-команды: пример вывода с GROUP BY

17

HAVING

Ключевое слово HAVING было добавлено в SQL по той причине, что WHERE не может использоваться для работы с агрегатными функциями.

SELECT <col_name1>, <col_name2>, ...
  FROM <table_name>
  GROUP BY <column_namex>
  HAVING <condition> 

Пример

Выведем список факультетов, у которых более одного курса:

SELECT COUNT(course_id), dept_name
  FROM course
  GROUP BY dept_name
  HAVING COUNT(course_id)>1; 

SQL-команды: пример вывода с HAVING

18

ORDER BY

ORDER BY используется для сортировки результатов запроса по убыванию или возрастанию. ORDER BY отсортирует по возрастанию, если не будет указан способ сортировки ASC или DESC.

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  ORDER BY <col_name1>, <col_name2>, … ASC|DESC;

Пример

Выведем список курсов по возрастанию и убыванию количества кредитов:

SELECT * FROM course ORDER BY credits;
SELECT * FROM course ORDER BY credits DESC;

19

BETWEEN

BETWEEN используется для выбора значений данных из определённого промежутка. Могут быть использованы числовые и текстовые значения, а также даты.

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  WHERE <col_namex> BETWEEN <value1> AND <value2>;

Пример

Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000:

SELECT * FROM instructor
  WHERE salary BETWEEN 50000 AND 100000; 

20

LIKE

Оператор LIKE используется в WHERE, чтобы задать шаблон поиска похожего значения.

Есть два свободных оператора, которые используются в LIKE:

  • % (ни одного, один или несколько символов);
  • _ (один символ).
SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  WHERE <col_namex> LIKE <pattern>; 

Пример

Выведем список курсов, в имени которых содержится «to», и список курсов, название которых начинается с «CS-»:

SELECT * FROM course WHERE title LIKE ‘%to%’;
SELECT * FROM course WHERE course_id LIKE 'CS-___';

SQL-команды: пример вывода с LIKE

21

IN

С помощью IN можно указать несколько значений для оператора WHERE:

SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  WHERE <col_namen> IN (<value1>, <value2>, …);

Пример

Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.:

SELECT * FROM student
  WHERE dept_name IN (‘Comp. Sci.’, ‘Physics’, ‘Elec. Eng.’);

22

JOIN

JOIN используется для связи двух или более таблиц с помощью общих атрибутов внутри них. На изображении ниже показаны различные способы объединения в SQL. Обратите внимание на разницу между левым внешним объединением и правым внешним объединением:

SQL-команды: схема использования JOIN

SELECT <col_name1>, <col_name2>, …
  FROM <table_name1>
  JOIN <table_name2>
  ON <table_name1.col_namex> = <table2.col_namex>;

Пример

Выведем список всех обязательных курсов и детали о них:

SELECT prereq.course_id, title, dept_name, credits, prereq_id
  FROM prereq
  LEFT OUTER JOIN course
  ON prereq.course_id=course.course_id;

SQL-команды: пример вывода с JOIN

23

VIEW

VIEW — это виртуальная таблица SQL, созданная в результате выполнения выражения. Она содержит строки и столбцы и очень похожа на обычную SQL-таблицу. VIEW всегда показывает самую свежую информацию из базы данных.

Создание

CREATE VIEW <view_name> AS
  SELECT <col_name1>, <col_name2>, …
  FROM <table_name>
  WHERE <condition>;

Удаление

DROP VIEW <view_name>;

24

Агрегатные функции

Это не совсем основные команды SQL, однако знать их тоже желательно. Агрегатные функции используются для получения совокупного результата, относящегося к рассматриваемым данным:

  • COUNT(col_name) — возвращает количество строк;
  • SUM(col_name) — возвращает сумму значений в данном столбце;
  • AVG(col_name) — возвращает среднее значение данного столбца;
  • MIN(col_name) — возвращает наименьшее значение данного столбца;
  • MAX(col_name) — возвращает наибольшее значение данного столбца.

25

Вложенные подзапросы

Вложенные подзапросы — это SQL-запросы, которые включают выражения SELECT, FROM и WHERE, вложенные в другой запрос.

Пример

Найдём курсы, которые преподавались осенью 2009 и весной 2010 годов:

SELECT DISTINCT course_id
  FROM section
  WHERE semester = ‘Fall’ AND year= 2009 AND course_id IN (
    SELECT course_id
    FROM section
    WHERE semester = ‘Spring’ AND year= 2010
  ); 

Перевод статьи «SQL Recap for Interviews»

В этой статье мы рассмотрим некоторые базовые запросы SQL, с изучения которых стоит начинать новичкам в этом языке. Вы научитесь создавать базу данных и таблицы, вносить в них данные и делать выборки нужных сведений.

Аббревиатура SQL расшифровывается как «Structured Query Language» — язык структурированных запросов. С помощью этого языка вы можете работать с записями в базах данных.

SQL состоит из команд и декларативных ключевых слов, которые являются как бы инструкциями для базы данных.

При помощи команд SQL можно создавать и удалять таблицы в базах данных, добавлять в них данные или вносить изменения, искать и быстро находить нужные сведения.

В этой статье мы рассмотрим основные ключевые слова и операторы SQL и разберем, как с их помощью запрашивать конкретную информацию из базы данных.

Структура базы данных

Прежде чем мы начнем разбирать запросы, нужно, чтобы вы поняли иерархию базы данных.

База данных SQL — это набор взаимосвязанных сведений, хранящихся в таблицах. В каждой таблице есть столбцы, описывающие хранящиеся в них данные, и строки, в которых эти данные хранятся. Поле — это отдельный кусочек данных в строке. Чтобы найти нужные данные, мы должны написать, что именно мы хотим получить.

Возьмем для примера некую компанию, штат которой разбросан по всему миру. Допустим, у этой компании есть много баз данных. Чтобы увидеть их полный список, нужно набрать SHOW DATABASES;

Результат может выглядеть как-то так:

+--------------------+
|     Databases      |
+--------------------+
| mysql              |
| information_schema |
| employees          |
| test               |
| sys                |
+--------------------+

В каждой отдельной базе данных может быть много таблиц. Чтобы увидеть, какие таблицы есть в базе данных employees из нашего примера, нужно набрать SHOW TABLES in employees;. В таблицах могут содержаться данные по разным командам, что отражается в названиях: engineering, product, marketing, sales.

+----------------------+
| Tables_in_employees  |
+----------------------+
| engineering          |
| product              |
| marketing            |
| sales                |
+----------------------+

Все таблицы состоят из различных столбцов, описывающих данные.

Чтобы просмотреть столбцы таблицы Engineering, используйте Describe Engineering;. Каждый столбец этой таблицы может описывать какой-то один атрибут сотрудника, например: employee_id, first_name, last_name, email, country и salary.

Вывод:

+-----------+-------------------+--------------+
| Name      |         Null      |      Type    |  
+-----------+-------------------+--------------+
|EMPLOYEE_ID| NOT NULL          | INT(6)       |  
|FIRST_NAME | NOT NULL          |VARCHAR2(20)  |
|LAST_NAME  | NOT NULL          |VARCHAR2(25)  | 
|EMAIL      | NOT NULL          |VARCHAR2(255) |
|COUNTRY    | NOT NULL          |VARCHAR2(30)  |
|SALARY     | NOT NULL          |DECIMAL(10,2) |
+-----------+-------------------+--------------+

Таблицы также состоят из строк — отдельных записей. В нашем примере в строках будут указаны id, имена, фамилии, email, зарплата и страны проживания сотрудников. Каждая строка будет касаться одного сотрудника, допустим, из команды Engineering.

Базовые запросы SQL

Все операции, которые можно осуществлять с данными, входят в понятие «CRUD».

CRUD расшифровывается как Create, Read, Update и Delete (создать, прочесть, обновить, удалить). Это четыре основных операции, которые мы осуществляем, делая запросы к базе данных.

Мы создаем информацию в базе (CREATE), мы читаем, получаем информацию из базы (READ), мы обновляем данные или осуществляем какие-то манипуляции с ними (UPDATE) и, при желании, можем удалять данные (DELETE).

Для осуществления различных операций с данными в SQL есть специальные ключевые слова (операторы). Ниже мы рассмотрим некоторые простые запросы SQL и их синтаксис.

Ключевые слова в SQL

CREATE DATABASE

Для создания базы данных с именем engineering мы используем следующий код:

CREATE DATABASE engineering;

CREATE TABLE

Синтаксис:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype
);

Этот запрос создает новую таблицу в базе данных.

В нем задается имя таблицы, а также имена столбцов, которые нам нужны.

Что касается типов данных (datatype), они могут быть разными. Самые распространенные — INT, DECIMAL, DATETIME, VARCHAR, NVARCHAR, FLOAT и BIT.

В нашем примере запрос может быть таким:

CREATE TABLE engineering (
employee_id  int(6) NOT NULL,
first_name   varchar(20) NOT NULL,
last_name  varchar(25) NOT NULL,
email  varchar(255) NOT NULL,
country varchar(30),
salary  decimal(10,2) NOT NULL
);

Таблица, созданная по этому запросу, будет выглядеть так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY


ALTER TABLE

После создания таблицы мы можем изменять ее путем добавления столбцов.

Синтаксис:

ALTER TABLE table_name 
ADD column_name datatype;

Допустим, мы хотим добавить в только что созданную таблицу столбец с днями рождения сотрудников. Это можно сделать так:

ALTER TABLE engineering
ADD  birthday date;

Теперь таблица выглядит немного иначе:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY BIRTHDAY


INSERT

Это ключевое слово служит для вставки данных в таблицы и создания новых строк. В аббревиатуре CRUD это соответствует букве C.

Синтаксис:

INSERT INTO table_name(column1, column2, column3,..) 
VALUES(value1, 'value2', value3,..);

Этот запрос создает новую запись в таблице, т. е. новую строку.

В части INSERT INTO мы указываем столбцы, которые хотим заполнить информацией. В VALUES указана информация, которую нужно сохранить.

При вставке строковых значений их нужно брать в одинарные кавычки.

Например:

INSERT INTO table_name(employee_id,first_name,last_name,email,country,salary) 
VALUES
(1,'Timmy','Jones','timmy@gmail.com','USA',2500.00);
(2,'Kelly','Smith','ksmith@gmail.com','UK',1300.00);

Теперь таблица будет выглядеть так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

SELECT

Это ключевое слово служит для выборки данных из базы. В CRUD эта операция соответствует букве R.

Синтаксис:

SELECT  column1,column2
FROM    table_name;

В нашем примере этот запрос будет выглядеть следующим образом:

SELECT first_name,last_name
FROM   engineering;

Результат:

+-----------+----------+
|FirstName  | LastName |
+-----------+----------+
| Timmy     | Jones    |
| Kelly     | Smith    |
+-----------+----------+

Ключевое слово SELECT указывает на конкретный столбец, из которого мы хотим выбрать данные.

В части FROM определяется сама таблица.

Вот еще один пример запроса SELECT:

SELECT * FROM table_name;

Астериск (звездочка) означает, что нам нужна вся информация из указанной таблицы (а не отдельный столбец).

WHERE

WHERE позволяет составлять более специфичные (конкретные) запросы.

Например, мы можем использовать WHERE, чтобы выбрать из нашей таблицы Engineering сотрудников с определенным уровнем зарплаты.

SELECT employee_id,first_name,last_name,email,country
FROM engineering
WHERE salary > 1500

Таблица из предыдущего примера:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

Теперь вывод будет такой:

+-----------+----------+----------+----------------+------------+
|employee_id|first_name|last_name |email           |country     |
+-----------+----------+----------+----------------+------------+
|          1| Timmy    |Jones     |timmy@gmail.com | USA        |
+-----------+----------+----------+----------------+------------+

Данные отфильтрованы, и нам показывается только то, что отвечает условию. То есть в выводе мы получаем только строки, где зарплата больше 1500.

Операторы AND, OR, BETWEEN в SQL

Эти операторы позволяют еще больше уточнить запрос. С их помощью можно добавить больше критериев в блоке WHERE.

Оператор AND принимает два условия, причем, чтобы строка попала в результат, оба условия должны быть истинными.

SELECT column_name
FROM table_name
WHERE column1 =value1
    AND column2 = value2;

OR тоже принимает два условия, но чтобы строка попала в результат, достаточно истинности хотя бы одного.

SELECT column_name
FROM table_name
WHERE column_name = value1
    OR column_name = value2;

Оператор BETWEEN отфильтровывает результаты в определенном диапазоне чисел или текста.

SELECT column1,column2
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

Все эти операторы можно комбинировать друг с другом.

Допустим, наша таблица выглядит так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Если мы напишем такой запрос:

SELECT * FROM engineering
WHERE  employee_id BETWEEN 3 AND 7
        AND 
        country = 'Germany';

Мы получим следующий результат:

+------------+-----------+-----------+----------------+--------+--------+
|employee_id | first_name| last_name | email          |country |salary  |
+------------+-----------+-----------+----------------+--------+--------+
|5           |Emilia     |Fischer    |emfis@gmail.com | Germany| 2365.90|
|7           |Louis      |Meyer      |lmey@gmail.com  | Germany| 2145.70|
+------------+-----------+-----------+----------------+--------+--------+

Были выбраны все столбцы, где employee_id от 3 до 7, а страна проживания — Германия.

ORDER BY

Ключевое слово ORDER BY позволяет отсортировать выдачу по столбцам, указанным в SELECT.

Отсортированные результаты выводятся в порядке возрастания или убывания.

По умолчанию сортировка идет по возрастанию. Но мы можем указать желаемый порядок явно — при помощи команды ORDER BY column_name DESC | ASC .

SELECT employee_id, first_name, last_name,salary
FROM engineering
ORDER BY salary DESC;

В этом примере мы отсортировали зарплату сотрудников в команде engineering и представили вывод в порядке убывания числовых значений (DESC — от англ. descending — «нисходящий»).

GROUP BY

Ключевое слово GROUP BY в SQL позволяет комбинировать строки с идентичными и похожими данными.

Это полезно для приведения в порядок дублирующихся данных и записей, которые повторяются в таблице многократно.

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;

Здесь COUNT(*) подсчитывает все строки и возвращает число строк в указанной таблице, группируя строки-дубликаты.

От редакции Techrocks: о COUNT и других агрегатных функциях можно почитать в статье «Агрегатные функции в SQL: объяснение с примерами запросов».

LIMIT

При помощи LIMIT можно указать максимальное число строк, которые должны попасть в результат.

Это бывает полезно при работе с большими наборами данных. Если данных много, запрос может обрабатываться слишком долго. Но когда будет достигнут лимит результатов, обработка прекратится.

Синтаксис:

SELECT column1,column2
FROM table_name
LIMIT number;

UPDATE

Ключевое слово UPDATE позволяет обновлять записи в таблице. В CRUD этой операции соответствует буква U.

Синтаксис:

UPDATE table_name 
SET column1 = value1, 
    column2 = value2 
WHERE condition;

В условии WHERE указывается запись, которую нужно отредактировать.

UPDATE engineering
SET    country = 'Spain'
WHERE   employee_id = 1

Прежде наша таблица выглядела так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Теперь, после выполнения запроса, она выглядит так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com Spain 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Обновилась страна проживания сотрудника с id 1.

Обновить информацию можно и с помощью значений из другой таблицы. Для этого применяется ключевое слово JOIN.

UPDATE table_name
SET table_name1.column_name1 = table_name2.column_name1
    table_name1.column_name2 = table_name2.column2
FROM table_name1
JOIN table_name2 
    ON table_name1.column_name = table_2.column_name;

DELETE

Ключевое слово DELETE служит для удаления записей из таблицы. В CRUD операция удаления представлена буквой D.

Синтаксис:

DELETE FROM table_name 
WHERE condition;

Пример с нашей таблицей:

DELETE FROM engineering
WHERE employee_id = 2;

При выполнении запроса будет удалена запись о сотруднике с id 2 из команды engineering.

DROP COLUMN

Чтобы удалить из таблицы столбец, можно воспользоваться следующим кодом:

ALTER TABLE table_name 
DROP COLUMN column_name;

DROP TABLE

Для удаления всей таблицы выполните следующий запрос:

DROP TABLE table_name;

Итоги

В этой статье мы пробежались по самым базовым запросам, с которых начинают все новички в SQL.

Мы научились создавать таблицы и строки, группировать и обновлять данные и, наконец, удалять их. Попутно мы также разобрали SQL-запросы в привязке к операциям CRUD.


Перевод статьи «Learn SQL Queries – Database Query Tutorial for Beginners».

От редакции Techrocks. Вам также могут быть интересны другие статьи по теме SQL:

  • Топ-30 вопросов по SQL на технических собеседованиях
  • ТОП-10 сайтов, на которых можно потренировать SQL-запросы
  • Порядок выполнения SQL-операций
  • Выражение CASE в SQL: объяснение на примерах

SQL – Обзор

SQL – это язык для работы с базами данных; он включает в себя создание базы данных, удаление, выборку строк, изменение строк и т. д. SQL является стандартным языком ANSI (Американский национальный институт стандартов), но существует множество различных версий языка SQL.

Что такое SQL?

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

SQL является стандартным языком для реляционной системы баз данных. Все системы управления реляционными базами данных (RDMS), такие как MySQL, MS Access, Oracle, Sybase, Informix, Postgres и SQL Server, используют SQL в качестве стандартного языка баз данных.

Кроме того, они используют разные диалекты, такие как –

  • MS SQL Server с использованием T-SQL,
  • Oracle использует PL / SQL,
  • MS Access версия SQL называется JET SQL (собственный формат) и т. Д.

Почему SQL?

SQL широко популярен, потому что предлагает следующие преимущества –

  • Позволяет пользователям получать доступ к данным в системах управления реляционными базами данных.

  • Позволяет пользователям описывать данные.

  • Позволяет пользователям определять данные в базе данных и манипулировать этими данными.

  • Позволяет встраивать в другие языки, используя модули SQL, библиотеки и прекомпиляторы.

  • Позволяет пользователям создавать и удалять базы данных и таблицы.

  • Позволяет пользователям создавать представления, хранимые процедуры, функции в базе данных.

  • Позволяет пользователям устанавливать разрешения для таблиц, процедур и представлений.

Позволяет пользователям получать доступ к данным в системах управления реляционными базами данных.

Позволяет пользователям описывать данные.

Позволяет пользователям определять данные в базе данных и манипулировать этими данными.

Позволяет встраивать в другие языки, используя модули SQL, библиотеки и прекомпиляторы.

Позволяет пользователям создавать и удалять базы данных и таблицы.

Позволяет пользователям создавать представления, хранимые процедуры, функции в базе данных.

Позволяет пользователям устанавливать разрешения для таблиц, процедур и представлений.

Краткая история SQL

  • 1970 – Доктор Эдгар Ф. “Тед” Кодд из IBM известен как отец реляционных баз данных. Он описал реляционную модель для баз данных.

  • 1974 – появился язык структурированных запросов.

  • 1978 – IBM работала над развитием идей Кодда и выпустила продукт под названием System / R.

  • 1986 – IBM разработала первый прототип реляционной базы данных и стандартизировала ANSI. Первая реляционная база данных была выпущена Relational Software, которая позже стала известна как Oracle.

1970 – Доктор Эдгар Ф. “Тед” Кодд из IBM известен как отец реляционных баз данных. Он описал реляционную модель для баз данных.

1974 – появился язык структурированных запросов.

1978 – IBM работала над развитием идей Кодда и выпустила продукт под названием System / R.

1986 – IBM разработала первый прототип реляционной базы данных и стандартизировала ANSI. Первая реляционная база данных была выпущена Relational Software, которая позже стала известна как Oracle.

Процесс SQL

Когда вы выполняете команду SQL для любой СУБД, система определяет лучший способ выполнить ваш запрос, а механизм SQL выясняет, как интерпретировать задачу.

В этот процесс включены различные компоненты.

Эти компоненты –

  • Диспетчер запросов
  • Двигатели оптимизации
  • Классический Query Engine
  • SQL Query Engine и т. Д.

Классический механизм запросов обрабатывает все запросы, отличные от SQL, но механизм запросов SQL не будет обрабатывать логические файлы.

Ниже приведена простая диаграмма, показывающая архитектуру SQL:

Архитектура SQL

Команды SQL

Стандартными командами SQL для взаимодействия с реляционными базами данных являются CREATE, SELECT, INSERT, UPDATE, DELETE и DROP. Эти команды могут быть классифицированы в следующие группы в зависимости от их характера –

DDL – язык определения данных

Sr.No. Команда и описание
1

СОЗДАЙТЕ

Создает новую таблицу, представление таблицы или другой объект в базе данных.

2

ALTER

Изменяет существующий объект базы данных, например таблицу.

3

DROP

Удаляет всю таблицу, представление таблицы или других объектов в базе данных.

СОЗДАЙТЕ

Создает новую таблицу, представление таблицы или другой объект в базе данных.

ALTER

Изменяет существующий объект базы данных, например таблицу.

DROP

Удаляет всю таблицу, представление таблицы или других объектов в базе данных.

DML – язык манипулирования данными

Sr.No. Команда и описание
1

ВЫБРАТЬ

Извлекает определенные записи из одной или нескольких таблиц.

2

ВСТАВИТЬ

Создает запись.

3

ОБНОВИТЬ

Изменяет записи.

4

УДАЛЯТЬ

Удаляет записи.

ВЫБРАТЬ

Извлекает определенные записи из одной или нескольких таблиц.

ВСТАВИТЬ

Создает запись.

ОБНОВИТЬ

Изменяет записи.

УДАЛЯТЬ

Удаляет записи.

DCL – язык управления данными

Sr.No. Команда и описание
1

ГРАНТ

Предоставляет привилегию пользователю.

2

КЕУОКЕ

Возвращает привилегии, предоставленные пользователем.

ГРАНТ

Предоставляет привилегию пользователю.

КЕУОКЕ

Возвращает привилегии, предоставленные пользователем.

Концепции СУБД SQL

Что такое СУБД?

RDBMS расшифровывается как Реляционная система базы данных. СУБД является основой для SQL и для всех современных систем баз данных, таких как MS SQL Server, IBM DB2, Oracle, MySQL и Microsoft Access.

Система управления реляционными базами данных (RDBMS) – это система управления базами данных (СУБД), основанная на реляционной модели, представленной EF Codd.

Что такое стол?

Данные в СУБД хранятся в объектах базы данных, которые называются таблицами . Эта таблица в основном представляет собой набор связанных записей данных и состоит из множества столбцов и строк.

Помните, что таблица является наиболее распространенной и простой формой хранения данных в реляционной базе данных. Следующая программа является примером таблицы CUSTOMERS –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Что такое поле?

Каждая таблица разбита на более мелкие объекты, называемые полями. Поля в таблице CUSTOMERS состоят из ID, NAME, AGE, ADDRESS и SALARY.

Поле – это столбец в таблице, предназначенный для хранения конкретной информации о каждой записи в таблице.

Что такое запись или строка?

Запись также называется строкой данных – это каждая отдельная запись в таблице. Например, в приведенной выше таблице CUSTOMERS есть 7 записей. Ниже приводится одна строка данных или записи в таблице CUSTOMERS –

+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Запись – это горизонтальная сущность в таблице.

Что такое столбец?

Столбец – это вертикальная сущность в таблице, которая содержит всю информацию, связанную с конкретным полем в таблице.

Например, столбец в таблице CUSTOMERS – это ADDRESS, который представляет описание местоположения и будет таким, как показано ниже:

+-----------+
| ADDRESS   |
+-----------+
| Ahmedabad |
| Delhi     |
| Kota      |
| Mumbai    |
| Bhopal    |
| MP        |
| Indore    |
+----+------+

Что такое значение NULL?

Значение NULL в таблице – это значение в поле, которое кажется пустым, что означает, что поле со значением NULL является полем без значения.

Очень важно понимать, что значение NULL отличается от нулевого значения или поля, которое содержит пробелы. Поле со значением NULL – это поле, которое было оставлено пустым при создании записи.

Ограничения SQL

Ограничения – это правила, применяемые к столбцам данных в таблице. Они используются для ограничения типа данных, которые могут попадать в таблицу. Это обеспечивает точность и достоверность данных в базе данных.

Ограничения могут быть либо на уровне столбца, либо на уровне таблицы. Ограничения уровня столбца применяются только к одному столбцу, тогда как ограничения уровня таблицы применяются ко всей таблице.

Ниже приведены некоторые из наиболее часто используемых ограничений, доступных в SQL.

  • Ограничение NOT NULL – Гарантирует, что столбец не может иметь значение NULL.

  • DEFAULT Constraint – Предоставляет значение по умолчанию для столбца, когда ни один не указан.

  • УНИКАЛЬНОЕ Ограничение – Гарантирует, что все значения в столбце различны.

  • PRIMARY Key – уникально идентифицирует каждую строку / запись в таблице базы данных.

  • Ключ FOREIGN – уникально идентифицирует строку / запись в любой другой таблице базы данных.

  • Ограничение CHECK – ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

  • INDEX – Используется для очень быстрого создания и извлечения данных из базы данных.

Ограничение NOT NULL – Гарантирует, что столбец не может иметь значение NULL.

DEFAULT Constraint – Предоставляет значение по умолчанию для столбца, когда ни один не указан.

УНИКАЛЬНОЕ Ограничение – Гарантирует, что все значения в столбце различны.

PRIMARY Key – уникально идентифицирует каждую строку / запись в таблице базы данных.

Ключ FOREIGN – уникально идентифицирует строку / запись в любой другой таблице базы данных.

Ограничение CHECK – ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

INDEX – Используется для очень быстрого создания и извлечения данных из базы данных.

Целостность данных

В каждой СУБД существуют следующие категории целостности данных:

  • Целостность сущности – в таблице нет повторяющихся строк.

  • Целостность домена – обеспечивает допустимые записи для данного столбца, ограничивая тип, формат или диапазон значений.

  • Ссылочная целостность – Строки не могут быть удалены, которые используются другими записями.

  • Определяемая пользователем целостность – обеспечивает соблюдение некоторых конкретных бизнес-правил, которые не попадают в целостность объекта, домена или ссылки.

Целостность сущности – в таблице нет повторяющихся строк.

Целостность домена – обеспечивает допустимые записи для данного столбца, ограничивая тип, формат или диапазон значений.

Ссылочная целостность – Строки не могут быть удалены, которые используются другими записями.

Определяемая пользователем целостность – обеспечивает соблюдение некоторых конкретных бизнес-правил, которые не попадают в целостность объекта, домена или ссылки.

Нормализация базы данных

Нормализация базы данных – это процесс эффективной организации данных в базе данных. Есть две причины этого процесса нормализации –

  • Устранение избыточных данных, например, сохранение одних и тех же данных в нескольких таблицах.

  • Обеспечение зависимости данных имеет смысл.

Устранение избыточных данных, например, сохранение одних и тех же данных в нескольких таблицах.

Обеспечение зависимости данных имеет смысл.

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

Рекомендации по нормализации делятся на нормальные формы; думать о форме как о формате или о том, как выстроена структура базы данных. Цель нормальных форм – организовать структуру базы данных так, чтобы она соответствовала правилам первой нормальной формы, затем второй нормальной формы и, наконец, третьей нормальной формы.

Вы можете пойти дальше и перейти к четвертой нормальной форме, пятой нормальной форме и т. Д., Но в целом третьей нормальной формы более чем достаточно.

  • Первая нормальная форма (1NF)
  • Вторая нормальная форма (2NF)
  • Третья нормальная форма (3NF)

SQL – базы данных RDBMS

Есть много популярных РСУБД, с которыми можно работать. Этот учебник дает краткий обзор некоторых из самых популярных РСУБД. Это поможет вам сравнить их основные функции.

MySQL

MySQL – это база данных SQL с открытым исходным кодом, разработанная шведской компанией MySQL AB. MySQL произносится как «мой ess-que-ell», в отличие от SQL, произносится как «продолжение».

MySQL поддерживает множество различных платформ, включая Microsoft Windows, основные дистрибутивы Linux, UNIX и Mac OS X.

MySQL имеет бесплатные и платные версии, в зависимости от его использования (некоммерческого / коммерческого) и функций. MySQL поставляется с очень быстрым, многопоточным, многопользовательским и надежным сервером баз данных SQL.

история

  • Разработка MySQL Майклом Видениусом и Дэвидом Аксмарком началась в 1994 году.

  • Первый внутренний релиз 23 мая 1995 г.

  • Версия для Windows была выпущена 8 января 1998 года для Windows 95 и NT.

  • Версия 3.23: бета-версия с июня 2000 года, промышленный выпуск январь 2001 года.

  • Версия 4.0: бета-версия с августа 2002 г., промышленный выпуск, март 2003 г. (союзы).

  • Версия 4.1: бета-версия с июня 2004 г., промышленный выпуск, октябрь 2004 г.

  • Версия 5.0: бета-версия с марта 2005 г., промышленный выпуск, октябрь 2005 г.

  • Sun Microsystems приобрела MySQL AB 26 февраля 2008 года.

  • Версия 5.1: производственный выпуск 27 ноября 2008 г.

Разработка MySQL Майклом Видениусом и Дэвидом Аксмарком началась в 1994 году.

Первый внутренний релиз 23 мая 1995 г.

Версия для Windows была выпущена 8 января 1998 года для Windows 95 и NT.

Версия 3.23: бета-версия с июня 2000 года, промышленный выпуск январь 2001 года.

Версия 4.0: бета-версия с августа 2002 г., промышленный выпуск, март 2003 г. (союзы).

Версия 4.1: бета-версия с июня 2004 г., промышленный выпуск, октябрь 2004 г.

Версия 5.0: бета-версия с марта 2005 г., промышленный выпуск, октябрь 2005 г.

Sun Microsystems приобрела MySQL AB 26 февраля 2008 года.

Версия 5.1: производственный выпуск 27 ноября 2008 г.

Характеристики

  • Высокая производительность.
  • Высокая доступность.
  • Масштабируемость и гибкость Запускайте все что угодно.
  • Надежная поддержка транзакций.
  • Сильные стороны сети и хранилища данных.
  • Сильная защита данных.
  • Комплексная разработка приложений.
  • Легкость управления.
  • Свобода с открытым исходным кодом и поддержка 24 х 7.
  • Самая низкая общая стоимость владения.

MS SQL Server

MS SQL Server – это система управления реляционными базами данных, разработанная корпорацией Microsoft. Основные языки запросов –

  • T-SQL
  • ANSI SQL

история

  • 1987 – Sybase выпускает SQL Server для UNIX.

  • 1988 – Microsoft, Sybase и Aston-Tate переносят SQL Server на OS / 2.

  • 1989 – Microsoft, Sybase и Aston-Tate выпустили SQL Server 1.0 для OS / 2.

  • 1990 – выпущен SQL Server 1.1 с поддержкой клиентов Windows 3.0.

  • Астон – Тейт уходит из разработки SQL Server.

  • 2000 – Microsoft выпускает SQL Server 2000.

  • 2001 – Microsoft выпускает XML для SQL Server Web Release 1 (скачать).

  • 2002 – Microsoft выпускает SQLXML 2.0 (переименован из XML для SQL Server).

  • 2002 – Microsoft выпускает SQLXML 3.0.

  • 2005 – Microsoft выпускает SQL Server 2005 7 ноября 2005 г.

1987 – Sybase выпускает SQL Server для UNIX.

1988 – Microsoft, Sybase и Aston-Tate переносят SQL Server на OS / 2.

1989 – Microsoft, Sybase и Aston-Tate выпустили SQL Server 1.0 для OS / 2.

1990 – выпущен SQL Server 1.1 с поддержкой клиентов Windows 3.0.

Астон – Тейт уходит из разработки SQL Server.

2000 – Microsoft выпускает SQL Server 2000.

2001 – Microsoft выпускает XML для SQL Server Web Release 1 (скачать).

2002 – Microsoft выпускает SQLXML 2.0 (переименован из XML для SQL Server).

2002 – Microsoft выпускает SQLXML 3.0.

2005 – Microsoft выпускает SQL Server 2005 7 ноября 2005 г.

Характеристики

  • Высокая производительность
  • Высокая доступность
  • Зеркальное отображение базы данных
  • Снимки базы данных
  • Интеграция CLR
  • Сервисный Брокер
  • DDL запускает
  • Функции ранжирования
  • Уровни изоляции на основе версий строк
  • Интеграция XML
  • ПОПРОБУЙ ПОЙМАТЬ
  • База данных Почта

ORACLE

Это очень большая многопользовательская система управления базами данных. Oracle – это система управления реляционными базами данных, разработанная Oracle Corporation.

Oracle работает для эффективного управления своими ресурсами, базой данных информации среди множества клиентов, запрашивающих и отправляющих данные в сети.

Это отличный выбор сервера баз данных для клиент-серверных вычислений. Oracle поддерживает все основные операционные системы для клиентов и серверов, включая MSDOS, NetWare, UnixWare, OS / 2 и большинство версий UNIX.

история

Oracle начал свою деятельность в 1977 году и отметил 32 замечательных года в своей отрасли (с 1977 по 2009 год).

  • 1977 – Ларри Эллисон, Боб Майнер и Эд Оутс основали лаборатории разработки программного обеспечения для разработки.

  • 1979 – Выпущена версия 2.0 Oracle, ставшая первой коммерческой реляционной базой данных и первой базой данных SQL. Компания изменила свое название на Relational Software Inc. (RSI).

  • 1981 – RSI начала разработку инструментов для Oracle.

  • 1982 – RSI был переименован в Oracle Corporation.

  • 1983 – Oracle выпустила версию 3.0, переписанную на языке C и работающую на нескольких платформах.

  • 1984 – выпущена версия Oracle 4.0. Он содержал такие функции, как управление параллелизмом – согласованность чтения нескольких версий и т. Д.

  • 1985 – выпущена версия Oracle 4.0. Он содержал такие функции, как управление параллелизмом – согласованность чтения нескольких версий и т. Д.

  • 2007 – Oracle выпустила Oracle11g. Новая версия ориентирована на лучшее разбиение, легкую миграцию и т. Д.

1977 – Ларри Эллисон, Боб Майнер и Эд Оутс основали лаборатории разработки программного обеспечения для разработки.

1979 – Выпущена версия 2.0 Oracle, ставшая первой коммерческой реляционной базой данных и первой базой данных SQL. Компания изменила свое название на Relational Software Inc. (RSI).

1981 – RSI начала разработку инструментов для Oracle.

1982 – RSI был переименован в Oracle Corporation.

1983 – Oracle выпустила версию 3.0, переписанную на языке C и работающую на нескольких платформах.

1984 – выпущена версия Oracle 4.0. Он содержал такие функции, как управление параллелизмом – согласованность чтения нескольких версий и т. Д.

1985 – выпущена версия Oracle 4.0. Он содержал такие функции, как управление параллелизмом – согласованность чтения нескольких версий и т. Д.

2007 – Oracle выпустила Oracle11g. Новая версия ориентирована на лучшее разбиение, легкую миграцию и т. Д.

Характеристики

  • совпадение
  • Последовательность чтения
  • Механизмы блокировки
  • База данных Quiesce
  • портативность
  • Самоуправляющаяся база данных
  • SQL * Plus
  • КАК М
  • планировщик
  • Менеджер ресурсов
  • Хранилище данных
  • Материализованные взгляды
  • Растровые индексы
  • Сжатие таблицы
  • Параллельное выполнение
  • Аналитический SQL
  • Сбор данных
  • Разметка

MS ACCESS

Это один из самых популярных продуктов Microsoft. Microsoft Access – это программное обеспечение для управления базами данных начального уровня. База данных MS Access – это не только недорогая, но и мощная база данных для небольших проектов.

MS Access использует ядро ​​базы данных Jet, которое использует определенный диалект языка SQL (иногда его называют Jet SQL).

MS Access поставляется с профессиональной версией пакета MS Office. MS Access имеет простой в использовании интуитивно понятный графический интерфейс.

  • 1992 – Доступ версии 1.0 был выпущен.

  • 1993 – выпущен Access 1.1 для улучшения совместимости с включением языка программирования Access Basic.

  • Наиболее значительный переход произошел с Access 97 на Access 2000.

  • 2007 – Access 2007, был представлен новый формат базы данных ACCDB, который поддерживает сложные типы данных, такие как многозначные поля и поля вложений.

1992 – Доступ версии 1.0 был выпущен.

1993 – выпущен Access 1.1 для улучшения совместимости с включением языка программирования Access Basic.

Наиболее значительный переход произошел с Access 97 на Access 2000.

2007 – Access 2007, был представлен новый формат базы данных ACCDB, который поддерживает сложные типы данных, такие как многозначные поля и поля вложений.

Характеристики

  • Пользователи могут создавать таблицы, запросы, формы и отчеты и связывать их вместе с макросами.

  • Возможность импорта и экспорта данных во многие форматы, включая Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server, Oracle, ODBC и т. Д.

  • Существует также формат базы данных Jet (MDB или ACCDB в Access 2007), который может содержать приложение и данные в одном файле. Это делает очень удобным распространение всего приложения другому пользователю, который может запускать его в автономных средах.

  • Microsoft Access предлагает параметризованные запросы. На эти запросы и таблицы доступа можно ссылаться из других программ, таких как VB6 и .NET, через DAO или ADO.

  • Настольные выпуски Microsoft SQL Server могут использоваться с Access в качестве альтернативы Jet Database Engine.

  • Microsoft Access – это база данных на основе файлового сервера. В отличие от клиент-серверных систем управления реляционными базами данных (RDBMS), Microsoft Access не реализует триггеры базы данных, хранимые процедуры или ведение журнала транзакций.

Пользователи могут создавать таблицы, запросы, формы и отчеты и связывать их вместе с макросами.

Возможность импорта и экспорта данных во многие форматы, включая Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server, Oracle, ODBC и т. Д.

Существует также формат базы данных Jet (MDB или ACCDB в Access 2007), который может содержать приложение и данные в одном файле. Это делает очень удобным распространение всего приложения другому пользователю, который может запускать его в автономных средах.

Microsoft Access предлагает параметризованные запросы. На эти запросы и таблицы доступа можно ссылаться из других программ, таких как VB6 и .NET, через DAO или ADO.

Настольные выпуски Microsoft SQL Server могут использоваться с Access в качестве альтернативы Jet Database Engine.

Microsoft Access – это база данных на основе файлового сервера. В отличие от клиент-серверных систем управления реляционными базами данных (RDBMS), Microsoft Access не реализует триггеры базы данных, хранимые процедуры или ведение журнала транзакций.

SQL – синтаксис

За SQL следует уникальный набор правил и рекомендаций, называемых синтаксисом. Этот учебник дает вам быстрый старт с SQL, перечисляя все основные синтаксис SQL.

Все операторы SQL начинаются с любого из ключевых слов, таких как SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW, и все операторы заканчиваются точкой с запятой (;).

Наиболее важный момент, который следует здесь отметить, заключается в том, что SQL нечувствителен к регистру, что означает, что SELECT и select имеют одинаковое значение в инструкциях SQL. Принимая во внимание, что MySQL имеет значение в именах таблиц. Итак, если вы работаете с MySQL, вам нужно дать имена таблиц, которые существуют в базе данных.

Различный синтаксис в SQL

Все примеры, приведенные в этом руководстве, были протестированы на сервере MySQL.

Оператор SQL SELECT

SELECT column1, column2....columnN
FROM   table_name;

SQL DISTINCT предложение

SELECT DISTINCT column1, column2....columnN
FROM   table_name;

SQL WHERE предложение

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;

Предложение SQL AND / OR

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

Предложение SQL IN

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

SQL между предложением

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

Предложение SQL LIKE

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

Предложение SQL ORDER BY

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

Предложение SQL GROUP BY

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

Предложение SQL COUNT

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

SQL HAVING пункт

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

Инструкция SQL CREATE TABLE

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

Оператор SQL DROP TABLE

DROP TABLE table_name;

Инструкция SQL CREATE INDEX

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

Оператор SQL DROP INDEX

ALTER TABLE table_name
DROP INDEX index_name;

SQL DESC оператор

DESC table_name;

SQL TRUNCATE TABLE

TRUNCATE TABLE table_name;

SQL ALTER TABLE Инструкция

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};

Оператор SQL ALTER TABLE (переименование)

ALTER TABLE table_name RENAME TO new_table_name;

SQL INSERT INTO Заявление

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

Оператор SQL UPDATE

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

SQL-оператор DELETE

DELETE FROM table_name
WHERE  {CONDITION};

Оператор SQL CREATE DATABASE

CREATE DATABASE database_name;

Оператор SQL DROP DATABASE

DROP DATABASE database_name;

SQL USE Statement

USE database_name;

Оператор SQL COMMIT

COMMIT;

SQL-оператор ROLLBACK

ROLLBACK;

SQL – типы данных

Тип данных SQL – это атрибут, который определяет тип данных любого объекта. Каждый столбец, переменная и выражение имеют связанный тип данных в SQL. Вы можете использовать эти типы данных при создании таблиц. Вы можете выбрать тип данных для столбца таблицы на основе ваших требований.

SQL Server предлагает шесть категорий типов данных для вашего использования, которые перечислены ниже –

Точные числовые типы данных

ТИП ДАННЫХ ОТ К
BIGINT -9.223.372.036.854.775.808 9.223.372.036.854.775.807
ИНТ -2147483648 2147483647
SMALLINT -32768 32767
TINYINT 0 255
немного 0 1
десятичный -10 ^ 38 +1 10 ^ 38 -1
числовой -10 ^ 38 +1 10 ^ 38 -1
Деньги -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

Приблизительные числовые типы данных

ТИП ДАННЫХ ОТ К
поплавок -1,79E + 308 1,79E + 308
реальный -3.40E + 38 3.40E + 38

Типы данных даты и времени

ТИП ДАННЫХ ОТ К
Дата и время 1 января 1753 г. 31 декабря 9999 г.
smalldatetime 1 января 1900 г. 6 июня 2079 г.
Дата Хранит дату как 30 июня 1991
время Хранит время суток, как 12:30 вечера

Примечание. Здесь datetime имеет точность 3,33 миллисекунды, тогда как smalldatetime имеет точность 1 минуту.

Типы данных Строки символов

Sr.No. Тип данных и описание
1

голец

Максимальная длина 8000 символов. (Фиксированная длина символов, отличных от Unicode)

2

VARCHAR

Максимум 8000 символов. (Данные не переменной Юникода).

3

VARCHAR (макс)

Максимальная длина 2E + 31 символ, переменная длина не в Юникоде (только для SQL Server 2005).

4

текст

Данные переменной длины, отличные от Unicode, с максимальной длиной 2 147 483 647 символов.

голец

Максимальная длина 8000 символов. (Фиксированная длина символов, отличных от Unicode)

VARCHAR

Максимум 8000 символов. (Данные не переменной Юникода).

VARCHAR (макс)

Максимальная длина 2E + 31 символ, переменная длина не в Юникоде (только для SQL Server 2005).

текст

Данные переменной длины, отличные от Unicode, с максимальной длиной 2 147 483 647 символов.

Unicode Символьные строки Типы данных

Sr.No. Тип данных и описание
1

NCHAR

Максимальная длина 4000 символов. (Фиксированная длина Unicode)

2

NVARCHAR

Максимальная длина 4000 символов. (Переменная длина Unicode)

3

NVARCHAR (макс)

Максимальная длина 2E + 31 символов (только для SQL Server 2005). (Unicode с переменной длиной)

4

NTEXT

Максимальная длина 1 073 741 823 символа. (Переменная длина Unicode)

NCHAR

Максимальная длина 4000 символов. (Фиксированная длина Unicode)

NVARCHAR

Максимальная длина 4000 символов. (Переменная длина Unicode)

NVARCHAR (макс)

Максимальная длина 2E + 31 символов (только для SQL Server 2005). (Unicode с переменной длиной)

NTEXT

Максимальная длина 1 073 741 823 символа. (Переменная длина Unicode)

Двоичные типы данных

Sr.No. Тип данных и описание
1

двоичный

Максимальная длина 8000 байт (двоичные данные фиксированной длины)

2

VARBINARY

Максимальная длина 8000 байт. (Двоичные данные переменной длины)

3

VARBINARY (макс)

Максимальная длина 2E + 31 байт (только для SQL Server 2005). (Двоичные данные переменной длины)

4

образ

Максимальная длина 2 147 483 647 байт. (Двоичные данные переменной длины)

двоичный

Максимальная длина 8000 байт (двоичные данные фиксированной длины)

VARBINARY

Максимальная длина 8000 байт. (Двоичные данные переменной длины)

VARBINARY (макс)

Максимальная длина 2E + 31 байт (только для SQL Server 2005). (Двоичные данные переменной длины)

образ

Максимальная длина 2 147 483 647 байт. (Двоичные данные переменной длины)

Разные типы данных

Sr.No. Тип данных и описание
1

sql_variant

Хранит значения различных типов данных, поддерживаемых SQL Server, кроме text, ntext и timestamp.

2

отметка времени

Хранит уникальный для всей базы данных номер, который обновляется каждый раз при обновлении строки

3

уникальный идентификатор

Хранит глобальный уникальный идентификатор (GUID)

4

XML

Хранит данные XML. Вы можете хранить экземпляры XML в столбце или переменной (только для SQL Server 2005).

5

курсор

Ссылка на объект курсора

6

Таблица

Сохраняет набор результатов для последующей обработки

sql_variant

Хранит значения различных типов данных, поддерживаемых SQL Server, кроме text, ntext и timestamp.

отметка времени

Хранит уникальный для всей базы данных номер, который обновляется каждый раз при обновлении строки

уникальный идентификатор

Хранит глобальный уникальный идентификатор (GUID)

XML

Хранит данные XML. Вы можете хранить экземпляры XML в столбце или переменной (только для SQL Server 2005).

курсор

Ссылка на объект курсора

Таблица

Сохраняет набор результатов для последующей обработки

SQL – операторы

Что такое оператор в SQL?

Оператор – это зарезервированное слово или символ, используемый в основном в предложении WHERE оператора SQL для выполнения операций, таких как сравнения и арифметические операции. Эти операторы используются для указания условий в операторе SQL и в качестве союзов для нескольких условий в операторе.

  • Арифметические операторы
  • Операторы сравнения
  • Логические операторы
  • Операторы, используемые для отрицания условий

SQL арифметические операторы

Предположим, что «переменная a» содержит 10, а «переменная b» содержит 20, тогда –

Показать примеры

оператор Описание пример
+ (Дополнение) Добавляет значения по обе стороны от оператора. а + б даст 30
– (вычитание) Вычитает правый операнд из левого операнда. а – б даст -10
* (Умножение) Умножает значения по обе стороны от оператора. а * б даст 200
/ (Отдел) Делит левый операнд на правый операнд. б / у даст 2
% (Модуль) Делит левый операнд на правый и возвращает остаток. б% а даст 0

Операторы сравнения SQL

Предположим, что «переменная a» содержит 10, а «переменная b» содержит 20, тогда –

Показать примеры

оператор Описание пример
знак равно Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. (а = б) не соответствует действительности.
знак равно Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (a! = b) верно.
<> Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (а <> б) верно.
> Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (а> б) не соответствует действительности.
< Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (а <б) верно.
> = Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (a> = b) не соответствует действительности.
<= Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (a <= b) верно.
<! Проверяет, является ли значение левого операнда не меньше, чем значение правого операнда, если да, тогда условие становится истинным. (a! <b) ложно.
!> Проверяет, не превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. (а!> б) это правда.

Логические операторы SQL

Вот список всех логических операторов, доступных в SQL.

Показать примеры

Sr.No. Оператор и описание
1

ВСЕ

Оператор ALL используется для сравнения значения со всеми значениями в другом наборе значений.

2

А ТАКЖЕ

Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQL.

3

ЛЮБОЙ

ЛЮБОЙ оператор используется для сравнения значения с любым применимым значением в списке согласно условию.

4

МЕЖДУ

Оператор BETWEEN используется для поиска значений, которые находятся в пределах набора значений, учитывая минимальное значение и максимальное значение.

5

СУЩЕСТВУЕТ

Оператор EXISTS используется для поиска наличия строки в указанной таблице, которая соответствует определенному критерию.

6

В

Оператор IN используется для сравнения значения со списком литеральных значений, которые были указаны.

7

ЛАЙК

Оператор LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов.

8

НЕ

Оператор NOT меняет значение логического оператора, с которым он используется. Например: НЕ СУЩЕСТВУЕТ, НЕ МЕЖДУ, НЕ В и т. Д. Это оператор отрицания.

9

ИЛИ ЖЕ

Оператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL.

10

НУЛЕВОЙ

Оператор NULL используется для сравнения значения со значением NULL.

11

УНИКАЛЬНАЯ

Оператор UNIQUE ищет в каждой строке указанной таблицы уникальность (без дубликатов).

ВСЕ

Оператор ALL используется для сравнения значения со всеми значениями в другом наборе значений.

А ТАКЖЕ

Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQL.

ЛЮБОЙ

ЛЮБОЙ оператор используется для сравнения значения с любым применимым значением в списке согласно условию.

МЕЖДУ

Оператор BETWEEN используется для поиска значений, которые находятся в пределах набора значений, учитывая минимальное значение и максимальное значение.

СУЩЕСТВУЕТ

Оператор EXISTS используется для поиска наличия строки в указанной таблице, которая соответствует определенному критерию.

В

Оператор IN используется для сравнения значения со списком литеральных значений, которые были указаны.

ЛАЙК

Оператор LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов.

НЕ

Оператор NOT меняет значение логического оператора, с которым он используется. Например: НЕ СУЩЕСТВУЕТ, НЕ МЕЖДУ, НЕ В и т. Д. Это оператор отрицания.

ИЛИ ЖЕ

Оператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL.

НУЛЕВОЙ

Оператор NULL используется для сравнения значения со значением NULL.

УНИКАЛЬНАЯ

Оператор UNIQUE ищет в каждой строке указанной таблицы уникальность (без дубликатов).

SQL – выражения

Выражение представляет собой комбинацию одного или нескольких значений, операторов и функций SQL, которые оценивают значение. Эти выражения SQL похожи на формулы и написаны на языке запросов. Вы также можете использовать их для запроса базы данных для определенного набора данных.

Синтаксис

Рассмотрим основной синтаксис оператора SELECT следующим образом:

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION|EXPRESSION];

Существуют различные типы выражений SQL, которые упомянуты ниже:

  • логический
  • числовой
  • Дата

Давайте теперь обсудим каждый из них в деталях.

Логические выражения

Булевы выражения SQL извлекают данные на основе сопоставления одного значения. Ниже приводится синтаксис –

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
7 rows in set (0.00 sec)

Следующая таблица представляет собой простой пример, показывающий использование различных логических выражений SQL:

SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME  | AGE | ADDRESS | SALARY   |
+----+-------+-----+---------+----------+
|  7 | Muffy |  24 | Indore  | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)

Числовое выражение

Эти выражения используются для выполнения любой математической операции в любом запросе. Ниже приводится синтаксис –

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;

Здесь числовое выражение используется для математического выражения или любой формулы. Ниже приведен простой пример использования числовых выражений SQL:

SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
|       21 |
+----------+
1 row in set (0.00 sec)

Существует несколько встроенных функций, таких как avg (), sum (), count () и т. Д., Которые выполняют так называемые вычисления совокупных данных для таблицы или определенного столбца таблицы.

SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS; 
+---------+
| RECORDS |
+---------+
|       7 |
+---------+
1 row in set (0.00 sec)

Выражения даты

Выражения даты возвращают текущие системные значения даты и времени –

SQL>  SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp   |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)

Другое выражение даты показано ниже:

SQL>  SELECT  GETDATE();;
+-------------------------+
| GETDATE                 |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)

SQL – создание базы данных

Оператор SQL CREATE DATABASE используется для создания новой базы данных SQL.

Синтаксис

Основной синтаксис этого оператора CREATE DATABASE следующий:

CREATE DATABASE DatabaseName;

Всегда имя базы данных должно быть уникальным в СУБД.

пример

Если вы хотите создать новую базу данных <testDB>, оператор CREATE DATABASE будет выглядеть так, как показано ниже:

SQL> CREATE DATABASE testDB;

Убедитесь, что у вас есть права администратора, прежде чем создавать любую базу данных. После создания базы данных вы можете проверить ее в списке баз данных следующим образом:

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
| testDB             |
+--------------------+
7 rows in set (0.00 sec)

SQL – DROP или DELETE Database

Оператор SQL DROP DATABASE используется для удаления существующей базы данных в схеме SQL.

Синтаксис

Основной синтаксис оператора DROP DATABASE следующий:

DROP DATABASE DatabaseName;

Всегда имя базы данных должно быть уникальным в СУБД.

пример

Если вы хотите удалить существующую базу данных <testDB>, оператор DROP DATABASE будет выглядеть так, как показано ниже:

SQL> DROP DATABASE testDB;

ПРИМЕЧАНИЕ. – Будьте внимательны перед использованием этой операции, поскольку удаление существующей базы данных приведет к потере полной информации, хранящейся в базе данных.

Убедитесь, что у вас есть права администратора, прежде чем удалять любую базу данных. Как только база данных удалена, вы можете проверить ее в списке баз данных, как показано ниже –

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

SQL – база данных SELECT, оператор USE

Если в вашей схеме SQL есть несколько баз данных, то перед началом работы вам нужно будет выбрать базу данных, в которой будут выполняться все операции.

Оператор SQL USE используется для выбора любой существующей базы данных в схеме SQL.

Синтаксис

Основной синтаксис оператора USE показан ниже:

USE DatabaseName;

Всегда имя базы данных должно быть уникальным в СУБД.

пример

Вы можете проверить доступные базы данных, как показано ниже –

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

Теперь, если вы хотите работать с базой данных AMROOD, вы можете выполнить следующую команду SQL и начать работать с базой данных AMROOD.

SQL> USE AMROOD;

SQL – CREATE Table

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

Оператор SQL CREATE TABLE используется для создания новой таблицы.

Синтаксис

Основной синтаксис оператора CREATE TABLE следующий:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

CREATE TABLE – это ключевое слово, сообщающее системе баз данных, что вы хотите сделать. В этом случае вы хотите создать новую таблицу. Уникальное имя или идентификатор таблицы следует за оператором CREATE TABLE.

Затем в скобках указывается список, определяющий каждый столбец таблицы и тип данных. Синтаксис становится понятнее в следующем примере.

Копия существующей таблицы может быть создана с использованием комбинации оператора CREATE TABLE и оператора SELECT. Вы можете проверить полную информацию в Создать таблицу с помощью другой таблицы.

пример

Следующий блок кода является примером, который создает таблицу CUSTOMERS с идентификатором в качестве первичного ключа, а NOT NULL являются ограничениями, показывающими, что эти поля не могут быть равны NULL при создании записей в этой таблице.

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Вы можете проверить, была ли ваша таблица создана успешно, просмотрев сообщение, отображаемое сервером SQL, в противном случае вы можете использовать команду DESC следующим образом:

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Теперь в вашей базе данных есть таблица CUSTOMERS, которую вы можете использовать для хранения необходимой информации о клиентах.

SQL – DROP или DELETE Table

Оператор SQL DROP TABLE используется для удаления определения таблицы и всех данных, индексов, триггеров, ограничений и спецификаций разрешений для этой таблицы.

ПРИМЕЧАНИЕ. – При использовании этой команды вы должны быть очень осторожны, поскольку после удаления таблицы вся информация, имеющаяся в этой таблице, также будет потеряна навсегда.

Синтаксис

Основной синтаксис этого оператора DROP TABLE следующий:

DROP TABLE table_name;

пример

Давайте сначала проверим таблицу CUSTOMERS, а затем удалим ее из базы данных, как показано ниже –

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Это означает, что таблица CUSTOMERS доступна в базе данных, поэтому давайте теперь отбросим ее, как показано ниже.

SQL> DROP TABLE CUSTOMERS;
Query OK, 0 rows affected (0.01 sec)

Теперь, если вы попробуете команду DESC, вы получите следующую ошибку:

SQL> DESC CUSTOMERS;
ERROR 1146 (42S02): Table 'TEST.CUSTOMERS' doesn't exist

Здесь TEST – это имя базы данных, которое мы используем для наших примеров.

SQL – INSERT Query

Оператор SQL INSERT INTO используется для добавления новых строк данных в таблицу в базе данных.

Синтаксис

Существует два основных синтаксиса оператора INSERT INTO, которые показаны ниже.

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  
VALUES (value1, value2, value3,...valueN);

Здесь column1, column2, column3, … columnN – это имена столбцов в таблице, в которую вы хотите вставить данные.

Вам может не потребоваться указывать имя столбца (-ов) в запросе SQL, если вы добавляете значения для всех столбцов таблицы. Но убедитесь, что порядок значений в том же порядке, что и столбцы в таблице.

Синтаксис SQL INSERT INTO будет следующим:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

пример

Следующие операторы создадут шесть записей в таблице CUSTOMERS.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

Вы можете создать запись в таблице CUSTOMERS, используя второй синтаксис, как показано ниже.

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

Все приведенные выше операторы приведут к следующим записям в таблице CUSTOMERS, как показано ниже.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Заполните одну таблицу, используя другую таблицу

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

Вот синтаксис –

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

SQL – SELECT Query

Оператор SQL SELECT используется для извлечения данных из таблицы базы данных, которая возвращает эти данные в форме таблицы результатов. Эти таблицы результатов называются наборами результатов.

Синтаксис

Основной синтаксис оператора SELECT следующий:

SELECT column1, column2, columnN FROM table_name;

Здесь column1, column2 … – это поля таблицы, значения которых вы хотите получить. Если вы хотите получить все поля, доступные в поле, вы можете использовать следующий синтаксис.

SELECT * FROM table_name;

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий код является примером, который извлекает поля ID, Имя и Зарплата клиентов, доступных в таблице CUSTOMERS.

SQL> SELECT ID, NAME, SALARY FROM CUSTOMERS;

Это даст следующий результат –

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  1 | Ramesh   |  2000.00 |
|  2 | Khilan   |  1500.00 |
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

Если вы хотите получить все поля таблицы CUSTOMERS, используйте следующий запрос.

SQL> SELECT * FROM CUSTOMERS;

Это даст результат, как показано ниже.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SQL – предложение WHERE

Предложение SQL WHERE используется для указания условия при извлечении данных из одной таблицы или путем объединения с несколькими таблицами. Если данное условие выполняется, то только оно возвращает конкретное значение из таблицы. Вы должны использовать предложение WHERE для фильтрации записей и выборки только необходимых записей.

Предложение WHERE используется не только в операторе SELECT, но также в операторе UPDATE, DELETE и т. Д., Который мы рассмотрим в следующих главах.

Синтаксис

Основной синтаксис оператора SELECT с предложением WHERE показан ниже.

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

Вы можете указать условие, используя сравнение или логические операторы, такие как>, <, =, LIKE, NOT и т. Д. Следующие примеры прояснят эту концепцию.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий код является примером, который извлекает поля ID, Name и Salary из таблицы CUSTOMERS, где заработная плата больше 2000 –

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000;

Это даст следующий результат –

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

Следующий запрос является примером, который извлекает поля ID, Имя и Зарплата из таблицы CUSTOMERS для клиента с именем Hardik .

Здесь важно отметить, что все строки должны быть указаны в одинарных кавычках (”). Принимая во внимание, что числовые значения должны быть указаны без кавычек, как в приведенном выше примере.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE NAME = 'Hardik';

Это даст следующий результат –

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  5 | Hardik   |  8500.00 |
+----+----------+----------+

SQL – И ИЛИ ИЛИ СОЕДИНИТЕЛЬНЫЕ ОПЕРАТОРЫ

Операторы SQL AND & OR используются для объединения нескольких условий для сужения данных в операторе SQL. Эти два оператора называются конъюнктивными операторами.

Эти операторы предоставляют возможность сделать несколько сравнений с разными операторами в одном и том же операторе SQL.

Оператор AND

Оператор AND допускает существование нескольких условий в предложении WHERE оператора SQL.

Синтаксис

Основной синтаксис оператора AND с предложением WHERE следующий:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

Вы можете объединить N условий с помощью оператора AND. Чтобы действие, выполняемое оператором SQL, будь то транзакция или запрос, все условия, разделенные AND, должны быть ИСТИНА.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который извлекает поля ID, Имя и Зарплата из таблицы CUSTOMERS, где оклад больше 2000, а возраст меньше 25 лет.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 AND age < 25;

Это даст следующий результат –

+----+-------+----------+
| ID | NAME  | SALARY   |
+----+-------+----------+
|  6 | Komal |  4500.00 |
|  7 | Muffy | 10000.00 |
+----+-------+----------+

Оператор ИЛИ

Оператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL.

Синтаксис

Основной синтаксис оператора OR с предложением WHERE следующий:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

Вы можете объединить N условий с помощью оператора ИЛИ. Для действия, выполняемого оператором SQL, будь то транзакция или запрос, единственным ОДНЫМ из условий, разделенных ИЛИ, должно быть ИСТИНА.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

В следующем блоке кода есть запрос, который извлекает поля ID, Имя и Зарплата из таблицы CUSTOMERS, где оклад больше 2000, ИЛИ возраст меньше 25 лет.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 OR age < 25;

Это даст следующий результат –

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

SQL – запрос ОБНОВЛЕНИЯ

Запрос SQL UPDATE используется для изменения существующих записей в таблице. Вы можете использовать предложение WHERE с запросом UPDATE, чтобы обновить выбранные строки, иначе это затронет все строки.

Синтаксис

Основной синтаксис запроса UPDATE с предложением WHERE выглядит следующим образом:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

Вы можете объединить N условий с помощью операторов И или ИЛИ.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий запрос обновит АДРЕС для клиента, чей идентификационный номер 6 в таблице.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune'
WHERE ID = 6;

Теперь таблица CUSTOMERS будет иметь следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | Pune      |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Если вы хотите изменить все значения столбца ADDRESS и SALARY в таблице CUSTOMERS, вам не нужно использовать предложение WHERE, так как запроса UPDATE будет достаточно, как показано в следующем блоке кода.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00;

Теперь таблица CUSTOMERS будет иметь следующие записи:

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  |
+----+----------+-----+---------+---------+
|  1 | Ramesh   |  32 | Pune    | 1000.00 |
|  2 | Khilan   |  25 | Pune    | 1000.00 |
|  3 | kaushik  |  23 | Pune    | 1000.00 |
|  4 | Chaitali |  25 | Pune    | 1000.00 |
|  5 | Hardik   |  27 | Pune    | 1000.00 |
|  6 | Komal    |  22 | Pune    | 1000.00 |
|  7 | Muffy    |  24 | Pune    | 1000.00 |
+----+----------+-----+---------+---------+

SQL – УДАЛИТЬ запрос

Запрос SQL DELETE используется для удаления существующих записей из таблицы.

Вы можете использовать предложение WHERE с запросом DELETE, чтобы удалить выбранные строки, иначе все записи будут удалены.

Синтаксис

Основной синтаксис запроса DELETE с предложением WHERE следующий:

DELETE FROM table_name
WHERE [condition];

Вы можете объединить N условий с помощью операторов И или ИЛИ.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

В следующем коде есть запрос, который удалит клиента с идентификатором 6.

SQL> DELETE FROM CUSTOMERS
WHERE ID = 6;

Теперь таблица CUSTOMERS будет иметь следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Если вы хотите УДАЛИТЬ все записи из таблицы CUSTOMERS, вам не нужно использовать предложение WHERE, а запрос DELETE будет выглядеть следующим образом:

SQL> DELETE FROM CUSTOMERS;

Теперь в таблице CUSTOMERS не будет записей.

SQL – как предложение

Предложение SQL LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов. В сочетании с оператором LIKE используются два подстановочных знака.

  • Знак процента (%)
  • Подчеркивание (_)

Знак процента представляет собой ноль, один или несколько символов. Подчеркивание представляет собой одно число или символ. Эти символы могут использоваться в комбинациях.

Синтаксис

Основной синтаксис% и _ следующий:

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

Вы можете объединить N условий с помощью операторов И или ИЛИ. Здесь XXXX может быть любым числовым или строковым значением.

пример

В следующей таблице приведено несколько примеров, показывающих, что часть WHERE имеет другое предложение LIKE с операторами «%» и «_» –

Sr.No. Заявление и описание
1

Где заработная плата, как “200%”

Находит любые значения, которые начинаются с 200.

2

ГДЕ НАЛОГОВАЯ НРАВИТСЯ “% 200%”

Находит любые значения, которые имеют 200 в любой позиции.

3

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’

Находит любые значения, которые имеют 00 во второй и третьей позиции.

4

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’

Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов.

5

ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’

Находит любые значения, которые заканчиваются на 2.

6

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’

Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3.

7

Где заработная плата, как “2___3”

Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3.

Где заработная плата, как “200%”

Находит любые значения, которые начинаются с 200.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ “% 200%”

Находит любые значения, которые имеют 200 в любой позиции.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’

Находит любые значения, которые имеют 00 во второй и третьей позиции.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’

Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов.

ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’

Находит любые значения, которые заканчиваются на 2.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’

Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3.

Где заработная плата, как “2___3”

Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3.

Давайте возьмем реальный пример, рассмотрим таблицу CUSTOMERS с записями, как показано ниже.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который будет отображать все записи из таблицы CUSTOMERS, где SALARY начинается с 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL – предложение TOP, LIMIT или ROWNUM

Предложение SQL TOP используется для извлечения числа TOP N или X процентов записей из таблицы.

Примечание. Все базы данных не поддерживают предложение TOP. Например, MySQL поддерживает предложение LIMIT для получения ограниченного числа записей, в то время как Oracle использует команду ROWNUM для получения ограниченного количества записей.

Синтаксис

Основной синтаксис предложения TOP с оператором SELECT будет следующим.

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий запрос является примером на сервере SQL, который извлекает 3 верхние записи из таблицы CUSTOMERS.

SQL> SELECT TOP 3 * FROM CUSTOMERS;

Это даст следующий результат –

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Если вы используете сервер MySQL, то вот эквивалентный пример –

SQL> SELECT * FROM CUSTOMERS
LIMIT 3;

Это даст следующий результат –

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Если вы используете сервер Oracle, то следующий блок кода имеет эквивалентный пример.

SQL> SELECT * FROM CUSTOMERS
WHERE ROWNUM <= 3;

Это даст следующий результат –

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

SQL – предложение ORDER BY

Предложение SQL ORDER BY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. Некоторые базы данных по умолчанию сортируют результаты запроса в порядке возрастания.

Синтаксис

Основной синтаксис предложения ORDER BY следующий:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Вы можете использовать более одного столбца в предложении ORDER BY. Убедитесь, что любой столбец, который вы используете для сортировки этого столбца, должен быть в списке столбцов.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

В следующем блоке кода есть пример, который сортирует результат в возрастающем порядке по ИМЕНИ и ЗАПИСИ –

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

В следующем блоке кода есть пример, который сортирует результат в порядке убывания по ИМЯ.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

SQL – Group By

Предложение SQL GROUP BY используется в сотрудничестве с оператором SELECT для объединения идентичных данных в группы. Это предложение GROUP BY следует за предложением WHERE в инструкции SELECT и предшествует предложению ORDER BY.

Синтаксис

Основной синтаксис предложения GROUP BY показан в следующем блоке кода. Предложение GROUP BY должно соответствовать условиям в предложении WHERE и должно предшествовать предложению ORDER BY, если оно используется.

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

пример

Предположим, что таблица CUSTOMERS содержит следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Если вы хотите узнать общую сумму заработной платы по каждому клиенту, запрос GROUP BY будет выглядеть следующим образом.

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Это даст следующий результат –

+----------+-------------+
| NAME     | SUM(SALARY) |
+----------+-------------+
| Chaitali |     6500.00 |
| Hardik   |     8500.00 |
| kaushik  |     2000.00 |
| Khilan   |     1500.00 |
| Komal    |     4500.00 |
| Muffy    |    10000.00 |
| Ramesh   |     2000.00 |
+----------+-------------+

Теперь давайте посмотрим на таблицу, в которой таблица CUSTOMERS содержит следующие записи с повторяющимися именами:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Опять же, если вы хотите узнать общую сумму заработной платы по каждому клиенту, запрос GROUP BY будет выглядеть следующим образом:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Это даст следующий результат –

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

SQL – отличное ключевое слово

Ключевое слово SQL DISTINCT используется вместе с оператором SELECT, чтобы исключить все дублирующиеся записи и извлечь только уникальные записи.

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

Синтаксис

Основной синтаксис ключевого слова DISTINCT для устранения повторяющихся записей заключается в следующем:

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Сначала давайте посмотрим, как следующий запрос SELECT возвращает дубликаты записей зарплат.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Это привело бы к следующему результату, когда зарплата (2000) наступает дважды, что является дубликатом записи из исходной таблицы.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Теперь давайте воспользуемся ключевым словом DISTINCT с вышеупомянутым запросом SELECT, а затем посмотрим на результат.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Это приведет к следующему результату, где у нас нет дублирующихся записей.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

SQL – сортировка результатов

Предложение SQL ORDER BY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. Некоторые базы данных по умолчанию сортируют результаты запроса в порядке возрастания.

Синтаксис

Основной синтаксис предложения ORDER BY, который будет использоваться для сортировки результата в порядке возрастания или убывания, выглядит следующим образом:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Вы можете использовать более одного столбца в предложении ORDER BY. Убедитесь, что любой столбец, который вы используете для сортировки, должен быть в списке столбцов.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который сортирует результат в порядке возрастания по NAME и SALARY.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

В следующем блоке кода есть пример, который сортирует результат в порядке убывания по ИМЯ.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

Чтобы получить строки с их собственным предпочтительным порядком, запрос SELECT будет выглядеть следующим образом:

SQL> SELECT * FROM CUSTOMERS
   ORDER BY (CASE ADDRESS
   WHEN 'DELHI' 	 THEN 1
   WHEN 'BHOPAL' 	 THEN 2
   WHEN 'KOTA' 	 THEN 3
   WHEN 'AHMADABAD' THEN 4
   WHEN 'MP' 	THEN 5
   ELSE 100 END) ASC, ADDRESS DESC;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Это отсортирует клиентов по АДРЕСУ в вашем предпочтении в первую очередь и в естественном порядке для остальных адресов. Кроме того, оставшиеся адреса будут отсортированы в обратном алфавитном порядке.

SQL – ограничения

Ограничения – это правила, применяемые к столбцам данных таблицы. Они используются для ограничения типа данных, которые могут попадать в таблицу. Это обеспечивает точность и достоверность данных в базе данных.

Ограничения могут быть либо на уровне столбца, либо на уровне таблицы. Ограничения уровня столбца применяются только к одному столбцу, тогда как ограничения уровня таблицы применяются ко всей таблице.

Ниже приведены некоторые из наиболее часто используемых ограничений, доступных в SQL. Эти ограничения уже обсуждались в главе « Основные понятия SQL – RDBMS» , но стоит их пересмотреть на этом этапе.

  • NOT NULL Ограничение – Гарантирует, что столбец не может иметь значение NULL.

  • DEFAULT Constraint – Предоставляет значение по умолчанию для столбца, когда ни один не указан.

  • UNIQUE Constraint – гарантирует, что все значения в столбце разные.

  • PRIMARY Key – уникально идентифицирует каждую строку / запись в таблице базы данных.

  • Ключ FOREIGN – уникально идентифицирует строку / запись в любой из данных таблиц базы данных.

  • Ограничение CHECK – ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

  • INDEX – Используется для очень быстрого создания и извлечения данных из базы данных.

NOT NULL Ограничение – Гарантирует, что столбец не может иметь значение NULL.

DEFAULT Constraint – Предоставляет значение по умолчанию для столбца, когда ни один не указан.

UNIQUE Constraint – гарантирует, что все значения в столбце разные.

PRIMARY Key – уникально идентифицирует каждую строку / запись в таблице базы данных.

Ключ FOREIGN – уникально идентифицирует строку / запись в любой из данных таблиц базы данных.

Ограничение CHECK – ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

INDEX – Используется для очень быстрого создания и извлечения данных из базы данных.

Ограничения могут быть указаны, когда таблица создается с помощью оператора CREATE TABLE, или вы можете использовать инструкцию ALTER TABLE для создания ограничений даже после создания таблицы.

Отбрасывание ограничений

Любое определенное вами ограничение можно удалить с помощью команды ALTER TABLE с параметром DROP CONSTRAINT.

Например, чтобы удалить ограничение первичного ключа в таблице EMPLOYEES, вы можете использовать следующую команду.

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

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

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

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

Ограничения целостности

Ограничения целостности используются для обеспечения точности и согласованности данных в реляционной базе данных. Целостность данных обрабатывается в реляционной базе данных посредством концепции ссылочной целостности.

Существует много типов ограничений целостности, которые играют роль в ссылочной целостности (RI) . Эти ограничения включают в себя первичный ключ, внешний ключ, уникальные ограничения и другие ограничения, которые упомянуты выше.

SQL – Использование объединений

Предложение SQL Joins используется для объединения записей из двух или более таблиц в базе данных. JOIN – это средство для объединения полей из двух таблиц с использованием значений, общих для каждой.

Рассмотрим следующие две таблицы:

Таблица 1 – Таблица клиентов

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Таблица 2 – Таблица заказов

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Теперь давайте объединим эти две таблицы в нашем операторе SELECT, как показано ниже.

SQL> SELECT ID, NAME, AGE, AMOUNT
   FROM CUSTOMERS, ORDERS
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Это дало бы следующий результат.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

Здесь заметно, что соединение выполняется в предложении WHERE. Для объединения таблиц можно использовать несколько операторов, например =, <,>, <>, <=,> =,! =, BETWEEN, LIKE и NOT; все они могут быть использованы для объединения таблиц. Тем не менее, наиболее распространенный оператор равен символу.

В SQL доступны разные типы соединений:

  • INNER JOIN – возвращает строки при совпадении в обеих таблицах.

  • LEFT JOIN – возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.

  • RIGHT JOIN – возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.

  • FULL JOIN – возвращает строки при совпадении в одной из таблиц.

  • SELF JOIN – используется для соединения таблицы с самим собой, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.

  • CARTESIAN JOIN – возвращает декартово произведение наборов записей из двух или более объединенных таблиц.

INNER JOIN – возвращает строки при совпадении в обеих таблицах.

LEFT JOIN – возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.

RIGHT JOIN – возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.

FULL JOIN – возвращает строки при совпадении в одной из таблиц.

SELF JOIN – используется для соединения таблицы с самим собой, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.

CARTESIAN JOIN – возвращает декартово произведение наборов записей из двух или более объединенных таблиц.

Давайте теперь обсудим каждое из этих объединений подробно.

SQL – СОЮЗ

Предложение / оператор SQL UNION используется для объединения результатов двух или более операторов SELECT без возврата повторяющихся строк.

Чтобы использовать это предложение UNION, каждый оператор SELECT должен иметь

  • Выбрано такое же количество столбцов
  • Одинаковое количество выражений столбцов
  • Тот же тип данных и
  • У них в том же порядке

Но они не должны быть одинаковой длины.

Синтаксис

Основной синтаксис предложения UNION следующий:

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Здесь данное условие может быть любым выражением, основанным на вашем требовании.

пример

Рассмотрим следующие две таблицы.

Таблица 1 – Таблица клиентов выглядит следующим образом.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Таблица 2 – ЗАКАЗЫ Таблица выглядит следующим образом.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Теперь давайте объединим эти две таблицы в нашем операторе SELECT следующим образом:

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Это даст следующий результат –

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
+------+----------+--------+---------------------+

СОЮЗ ВСЕ Статья

Оператор UNION ALL используется для объединения результатов двух операторов SELECT, включая повторяющиеся строки.

Те же правила, которые применяются к предложению UNION, будут применяться к оператору UNION ALL.

Синтаксис

Основной синтаксис UNION ALL заключается в следующем.

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Здесь данное условие может быть любым выражением, основанным на вашем требовании.

пример

Рассмотрим следующие две таблицы:

Таблица 1 – Таблица клиентов выглядит следующим образом.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Таблица 2Таблица заказов выглядит следующим образом.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Теперь давайте объединим эти две таблицы в нашем операторе SELECT следующим образом:

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION ALL
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Это даст следующий результат –

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

Есть два других предложения (т. Е. Операторы), которые похожи на предложение UNION.

  • Предложение SQL INTERSECT – используется для объединения двух операторов SELECT, но возвращает строки только из первого оператора SELECT, которые идентичны строке во втором операторе SELECT.

  • Предложение SQL EXCEPT – объединяет два оператора SELECT и возвращает строки из первого оператора SELECT, которые не возвращаются вторым оператором SELECT.

Предложение SQL INTERSECT – используется для объединения двух операторов SELECT, но возвращает строки только из первого оператора SELECT, которые идентичны строке во втором операторе SELECT.

Предложение SQL EXCEPT – объединяет два оператора SELECT и возвращает строки из первого оператора SELECT, которые не возвращаются вторым оператором SELECT.

SQL – значения NULL

SQL NULL – это термин, используемый для обозначения пропущенного значения. Значение NULL в таблице – это значение в поле, которое кажется пустым.

Поле со значением NULL является полем без значения. Очень важно понимать, что значение NULL отличается от нулевого значения или поля, которое содержит пробелы.

Синтаксис

Основной синтаксис NULL при создании таблицы.

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Здесь NOT NULL означает, что столбец всегда должен принимать явное значение данного типа данных. Есть два столбца, в которых мы не использовали NOT NULL, что означает, что эти столбцы могут быть NULL.

Поле со значением NULL – это поле, которое было оставлено пустым при создании записи.

пример

Значение NULL может вызвать проблемы при выборе данных. Однако, поскольку при сравнении неизвестного значения с любым другим значением результат всегда неизвестен и не включается в результаты. Вы должны использовать операторы IS NULL или IS NOT NULL, чтобы проверить значение NULL.

Рассмотрим следующую таблицу CUSTOMERS, имеющую записи, как показано ниже.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

Далее следует использование оператора IS NOT NULL .

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
+----+----------+-----+-----------+----------+

Далее следует использование оператора IS NULL .

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NULL;

Это даст следующий результат –

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

SQL – псевдоним синтаксиса

Вы можете временно переименовать таблицу или столбец, дав другое имя, известное как Псевдоним . Псевдонимы таблиц используются для переименования таблицы в конкретном операторе SQL. Переименование является временным изменением, и фактическое имя таблицы не изменяется в базе данных. Псевдонимы столбцов используются для переименования столбцов таблицы с целью конкретного запроса SQL.

Синтаксис

Основной синтаксис псевдонима таблицы заключается в следующем.

SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];

Основной синтаксис псевдонима столбца заключается в следующем.

SELECT column_name AS alias_name
FROM table_name
WHERE [condition];

пример

Рассмотрим следующие две таблицы.

Таблица 1 – Таблица клиентов выглядит следующим образом.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Таблица 2 – ЗАКАЗЫ Таблица выглядит следующим образом.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Теперь следующий блок кода показывает использование псевдонима таблицы .

SQL> SELECT C.ID, C.NAME, C.AGE, O.AMOUNT 
   FROM CUSTOMERS AS C, ORDERS AS O
   WHERE  C.ID = O.CUSTOMER_ID;

Это дало бы следующий результат.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

Ниже приведено использование псевдонима столбца .

SQL> SELECT  ID AS CUSTOMER_ID, NAME AS CUSTOMER_NAME
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Это дало бы следующий результат.

+-------------+---------------+
| CUSTOMER_ID | CUSTOMER_NAME |
+-------------+---------------+
|           1 | Ramesh        |
|           2 | Khilan        |
|           3 | kaushik       |
|           4 | Chaitali      |
|           5 | Hardik        |
|           6 | Komal         |
|           7 | Muffy         |
+-------------+---------------+

SQL – индексы

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

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

Индекс помогает ускорить запросы SELECT и предложения WHERE , но замедляет ввод данных с помощью операторов UPDATE и INSERT . Индексы могут быть созданы или удалены без влияния на данные.

Создание индекса включает в себя инструкцию CREATE INDEX , которая позволяет указать имя индекса, указать таблицу и столбцы или столбцы для индексации, а также указать, находится ли индекс в порядке возрастания или убывания.

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

Команда CREATE INDEX

Основной синтаксис CREATE INDEX заключается в следующем.

CREATE INDEX index_name ON table_name;

Одноколонные индексы

Индекс из одного столбца создается на основе только одного столбца таблицы. Основной синтаксис выглядит следующим образом.

CREATE INDEX index_name
ON table_name (column_name);

Уникальные индексы

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

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Композитные индексы

Составной индекс – это индекс двух или более столбцов таблицы. Его основной синтаксис выглядит следующим образом.

CREATE INDEX index_name
on table_name (column1, column2);

Независимо от того, хотите ли вы создать индекс из одного столбца или составной индекс, примите во внимание столбцы, которые вы можете использовать очень часто в предложении WHERE запроса в качестве условий фильтра.

Если используется только один столбец, то должен быть выбран индекс из одного столбца. Если в предложении WHERE в качестве фильтров часто используются два или более столбца, наилучшим выбором будет составной индекс.

Неявные индексы

Неявные индексы – это индексы, которые автоматически создаются сервером базы данных при создании объекта. Индексы автоматически создаются для ограничений первичного ключа и уникальных ограничений.

Команда DROP INDEX

Индекс можно удалить с помощью команды SQL DROP . При отбрасывании индекса следует соблюдать осторожность, поскольку производительность может либо замедлиться, либо улучшиться.

Основной синтаксис выглядит следующим образом –

DROP INDEX index_name;

Вы можете проверить главу INDEX Constraint, чтобы увидеть некоторые реальные примеры по индексам.

Когда следует избегать индексов?

Хотя индексы предназначены для повышения производительности базы данных, бывают случаи, когда их следует избегать.

Следующие рекомендации указывают, когда следует пересмотреть использование индекса.

  • Индексы не должны использоваться на маленьких столах.

  • Таблицы с частыми, большими пакетными обновлениями или операциями вставки.

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

  • Столбцы, которыми часто манипулируют, не должны индексироваться.

Индексы не должны использоваться на маленьких столах.

Таблицы с частыми, большими пакетными обновлениями или операциями вставки.

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

Столбцы, которыми часто манипулируют, не должны индексироваться.

SQL – команда ALTER TABLE

Команда SQL ALTER TABLE используется для добавления, удаления или изменения столбцов в существующей таблице. Вам также следует использовать команду ALTER TABLE для добавления и удаления различных ограничений в существующей таблице.

Синтаксис

Основной синтаксис команды ALTER TABLE для добавления нового столбца в существующую таблицу заключается в следующем.

ALTER TABLE table_name ADD column_name datatype;

Основной синтаксис команды ALTER TABLE для DROP COLUMN в существующей таблице заключается в следующем.

ALTER TABLE table_name DROP COLUMN column_name;

Основной синтаксис команды ALTER TABLE для изменения ТИПА ДАННЫХ столбца в таблице заключается в следующем.

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

Основной синтаксис команды ALTER TABLE для добавления ограничения NOT NULL к столбцу в таблице заключается в следующем.

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

Основной синтаксис ALTER TABLE для ДОБАВЛЕНИЯ УНИКАЛЬНОГО ОГРАНИЧЕНИЯ в таблицу состоит в следующем.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);

Основной синтаксис команды ALTER TABLE для ADD CHECK CONSTRAINT к таблице следующий.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

Основной синтаксис команды ALTER TABLE для добавления ограничения PRIMARY KEY к таблице заключается в следующем.

ALTER TABLE table_name 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);

Основной синтаксис команды ALTER TABLE для DROP CONSTRAINT из таблицы следующий.

ALTER TABLE table_name 
DROP CONSTRAINT MyUniqueConstraint;

Если вы используете MySQL, код выглядит следующим образом –

ALTER TABLE table_name 
DROP INDEX MyUniqueConstraint;

Основной синтаксис команды ALTER TABLE для ограничения DROP PRIMARY KEY из таблицы заключается в следующем.

ALTER TABLE table_name 
DROP CONSTRAINT MyPrimaryKey;

Если вы используете MySQL, код выглядит следующим образом –

ALTER TABLE table_name 
DROP PRIMARY KEY;

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример добавления нового столбца в существующую таблицу:

ALTER TABLE CUSTOMERS ADD SEX char(1);

Теперь таблица CUSTOMERS изменена, и из оператора SELECT будет выведено следующее.

+----+---------+-----+-----------+----------+------+
| ID | NAME    | AGE | ADDRESS   | SALARY   | SEX  |
+----+---------+-----+-----------+----------+------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 | NULL |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 | NULL |
|  3 | kaushik |  23 | Kota      |  2000.00 | NULL |
|  4 | kaushik |  25 | Mumbai    |  6500.00 | NULL |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 | NULL |
|  6 | Komal   |  22 | MP        |  4500.00 | NULL |
|  7 | Muffy   |  24 | Indore    | 10000.00 | NULL |
+----+---------+-----+-----------+----------+------+

Ниже приведен пример удаления столбца пола из существующей таблицы.

ALTER TABLE CUSTOMERS DROP SEX;

Теперь таблица CUSTOMERS изменена, и последующим будет вывод из оператора SELECT.

+----+---------+-----+-----------+----------+
| ID | NAME    | AGE | ADDRESS   | SALARY   |
+----+---------+-----+-----------+----------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 |
|  3 | kaushik |  23 | Kota      |  2000.00 |
|  4 | kaushik |  25 | Mumbai    |  6500.00 |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 |
|  6 | Komal   |  22 | MP        |  4500.00 |
|  7 | Muffy   |  24 | Indore    | 10000.00 |
+----+---------+-----+-----------+----------+

SQL – команда TRUNCATE TABLE

Команда SQL TRUNCATE TABLE используется для удаления полных данных из существующей таблицы.

Вы также можете использовать команду DROP TABLE для удаления полной таблицы, но это приведет к удалению полной структуры таблицы из базы данных, и вам потребуется заново создать эту таблицу, если вы хотите сохранить некоторые данные.

Синтаксис

Основной синтаксис команды TRUNCATE TABLE следующий.

TRUNCATE TABLE  table_name;

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример команды Truncate.

SQL > TRUNCATE TABLE CUSTOMERS;

Теперь таблица CUSTOMERS усекается, и результат выполнения инструкции SELECT будет таким, как показано в блоке кода ниже –

SQL> SELECT * FROM CUSTOMERS;
Empty set (0.00 sec)

SQL – Использование представлений

Представление – это не что иное, как оператор SQL, который хранится в базе данных со связанным именем. Представление на самом деле представляет собой композицию таблицы в форме предопределенного запроса SQL.

Представление может содержать все строки таблицы или выбирать строки из таблицы. Представление может быть создано из одной или нескольких таблиц, которые зависят от написанного SQL-запроса для создания представления.

Представления, которые являются типом виртуальных таблиц, позволяют пользователям делать следующее:

  • Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.

  • Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть и (иногда) изменять именно то, что ему нужно, и не более.

  • Суммируйте данные из различных таблиц, которые можно использовать для создания отчетов.

Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.

Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть и (иногда) изменять именно то, что ему нужно, и не более.

Суммируйте данные из различных таблиц, которые можно использовать для создания отчетов.

Создание видов

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

Чтобы создать представление, пользователь должен иметь соответствующие системные привилегии в соответствии с конкретной реализацией.

Основной синтаксис CREATE VIEW следующий:

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Вы можете включить несколько таблиц в свой оператор SELECT таким же образом, как вы используете их в обычном запросе SQL SELECT.

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример создания представления из таблицы CUSTOMERS. Это представление будет использоваться для указания имени и возраста клиента из таблицы CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Теперь вы можете запросить CUSTOMERS_VIEW аналогично запросу реальной таблицы. Ниже приведен пример для того же.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Это дало бы следующий результат.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

С опцией проверки

Параметр WITH CHECK является параметром оператора CREATE VIEW. Целью ВАРИАНТА WITH CHECK является обеспечение того, чтобы все UPDATE и INSERT удовлетворяли условию (ам) в определении представления.

Если они не удовлетворяют условию (ам), UPDATE или INSERT возвращает ошибку.

В следующем блоке кода приведен пример создания того же представления CUSTOMERS_VIEW с опцией WITH CHECK.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

В этом случае опция WITH CHECK должна запрещать ввод любых значений NULL в столбце AGE представления, поскольку представление определяется данными, которые не имеют значения NULL в столбце AGE.

Обновление представления

Представление может быть обновлено при определенных условиях, которые приведены ниже –

  • Предложение SELECT не может содержать ключевое слово DISTINCT.

  • Предложение SELECT может не содержать итоговых функций.

  • Предложение SELECT может не содержать набор функций.

  • Предложение SELECT не может содержать операторы множеств.

  • Предложение SELECT не может содержать предложение ORDER BY.

  • Предложение FROM не может содержать несколько таблиц.

  • Предложение WHERE может не содержать подзапросов.

  • Запрос не может содержать GROUP BY или HAVING.

  • Рассчитанные столбцы могут не обновляться.

  • Все столбцы NOT NULL из базовой таблицы должны быть включены в представление, чтобы выполнялся запрос INSERT.

Предложение SELECT не может содержать ключевое слово DISTINCT.

Предложение SELECT может не содержать итоговых функций.

Предложение SELECT может не содержать набор функций.

Предложение SELECT не может содержать операторы множеств.

Предложение SELECT не может содержать предложение ORDER BY.

Предложение FROM не может содержать несколько таблиц.

Предложение WHERE может не содержать подзапросов.

Запрос не может содержать GROUP BY или HAVING.

Рассчитанные столбцы могут не обновляться.

Все столбцы NOT NULL из базовой таблицы должны быть включены в представление, чтобы выполнялся запрос INSERT.

Таким образом, если представление удовлетворяет всем вышеупомянутым правилам, вы можете обновить это представление. В следующем блоке кода есть пример обновления возраста Рамеша.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Это в конечном итоге обновит базовую таблицу CUSTOMERS и то же самое отразится на самом представлении. Теперь попробуйте выполнить запрос к базовой таблице, и инструкция SELECT выдаст следующий результат.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Вставка строк в представление

Ряды данных могут быть вставлены в представление. Те же правила, которые применяются к команде UPDATE, также применимы к команде INSERT.

Здесь мы не можем вставить строки в CUSTOMERS_VIEW, потому что мы не включили все столбцы NOT NULL в это представление, иначе вы можете вставить строки в представление аналогично тому, как вы вставляете их в таблицу.

Удаление строк в виде

Ряды данных могут быть удалены из представления. Те же правила, которые применяются к командам UPDATE и INSERT, применяются к команде DELETE.

Ниже приведен пример удаления записи, имеющей AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

В конечном итоге это приведет к удалению строки из базовой таблицы CUSTOMERS, и это будет отражено в самом представлении. Теперь попробуйте выполнить запрос к базовой таблице, и инструкция SELECT выдаст следующий результат.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Отбрасывание просмотров

Очевидно, что там, где у вас есть представление, вам нужен способ отбросить представление, если оно больше не требуется. Синтаксис очень прост и приведен ниже –

DROP VIEW view_name;

Ниже приведен пример удаления CUSTOMERS_VIEW из таблицы CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;

SQL – предложение

Предложение HAVING позволяет вам указать условия, которые фильтруют, какие групповые результаты появляются в результатах.

Предложение WHERE помещает условия в выбранные столбцы, тогда как предложение HAVING помещает условия в группы, созданные предложением GROUP BY.

Синтаксис

Следующий блок кода показывает положение предложения HAVING в запросе.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

Предложение HAVING должно следовать за предложением GROUP BY в запросе и также должно предшествовать предложению ORDER BY, если оно используется. Следующий блок кода имеет синтаксис оператора SELECT, включая предложение HAVING –

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который будет отображать запись для аналогичного числа возрастов, которое будет больше или равно 2.

SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;

Это даст следующий результат –

 + ---- + -------- + ----- + --------- + --------- +
 |  ID |  ИМЯ |  ВОЗРАСТ |  АДРЕС |  Заработная плата |
 + ---- + -------- + ----- + --------- + --------- +
 |  2 |  Хилан |  25 |  Дели |  1500,00 |
 + ---- + -------- + ----- + --------- + --------- +

SQL – транзакции

Транзакция – это единица работы, выполняемая с базой данных. Транзакции – это единицы или последовательности работы, выполняемые в логическом порядке, либо вручную пользователем, либо автоматически какой-либо программой базы данных.

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

Практически вы объедините множество SQL-запросов в группу и выполните все их вместе как часть транзакции.

Свойства сделок

Транзакции имеют следующие четыре стандартных свойства, на которые обычно ссылается аббревиатура ACID .

  • Атомарность – гарантирует, что все операции внутри рабочего блока успешно завершены. В противном случае транзакция прерывается в точке сбоя, и все предыдущие операции возвращаются в прежнее состояние.

  • Согласованность – гарантирует, что база данных должным образом изменит состояния при успешно совершенной транзакции.

  • Изоляция – позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

  • Долговечность – обеспечивает сохранение результата или эффекта совершенной транзакции в случае сбоя системы.

Атомарность – гарантирует, что все операции внутри рабочего блока успешно завершены. В противном случае транзакция прерывается в точке сбоя, и все предыдущие операции возвращаются в прежнее состояние.

Согласованность – гарантирует, что база данных должным образом изменит состояния при успешно совершенной транзакции.

Изоляция – позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

Долговечность – обеспечивает сохранение результата или эффекта совершенной транзакции в случае сбоя системы.

Контроль транзакций

Следующие команды используются для управления транзакциями.

  • COMMIT – сохранить изменения.

  • ROLLBACK – откат изменений.

  • SAVEPOINT – создает точки внутри групп транзакций, в которых выполняется ROLLBACK.

  • SET TRANSACTION – помещает имя в транзакцию.

COMMIT – сохранить изменения.

ROLLBACK – откат изменений.

SAVEPOINT – создает точки внутри групп транзакций, в которых выполняется ROLLBACK.

SET TRANSACTION – помещает имя в транзакцию.

Команды управления транзакциями

Команды управления транзакциями используются только с такими командами DML , как – INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.

Команда COMMIT

Команда COMMIT – это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных.

Команда COMMIT – это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных. Команда COMMIT сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.

Синтаксис команды COMMIT следующий.

COMMIT;

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который удаляет те записи из таблицы, которые имеют возраст = 25, а затем фиксирует изменения в базе данных.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Таким образом, две строки из таблицы будут удалены, и инструкция SELECT выдаст следующий результат.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Команда ROLLBACK

Команда ROLLBACK – это команда транзакций, используемая для отмены транзакций, которые еще не были сохранены в базе данных. Эта команда может использоваться только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.

Синтаксис команды ROLLBACK следующий:

ROLLBACK;

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример, который удаляет те записи из таблицы, которые имеют возраст = 25, а затем откатывает изменения в базе данных.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Таким образом, операция удаления не повлияет на таблицу, а оператор SELECT даст следующий результат.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Команда SAVEPOINT

SAVEPOINT – это точка в транзакции, когда вы можете откатить транзакцию до определенной точки без отката всей транзакции.

Синтаксис команды SAVEPOINT показан ниже.

SAVEPOINT SAVEPOINT_NAME;

Эта команда служит только для создания SAVEPOINT среди всех операторов транзакций. Команда ROLLBACK используется для отмены группы транзакций.

Синтаксис для отката к SAVEPOINT показан ниже.

ROLLBACK TO SAVEPOINT_NAME;

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

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий блок кода содержит последовательность операций.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Теперь, когда три удаления были выполнены, давайте предположим, что вы передумали и решили откатиться к SAVEPOINT, которую вы определили как SP2. Поскольку SP2 был создан после первого удаления, последние два удаления отменены –

SQL> ROLLBACK TO SP2;
Rollback complete.

Обратите внимание, что с момента отката до SP2 произошло только первое удаление.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

Команда RELEASE SAVEPOINT

Команда RELEASE SAVEPOINT используется для удаления созданной вами SAVEPOINT.

Синтаксис команды RELEASE SAVEPOINT выглядит следующим образом.

RELEASE SAVEPOINT SAVEPOINT_NAME;

После освобождения SAVEPOINT вы больше не можете использовать команду ROLLBACK для отмены транзакций, выполненных с момента последнего SAVEPOINT.

Команда SET TRANSACTION

Команда SET TRANSACTION может использоваться для инициирования транзакции базы данных. Эта команда используется для указания признаков для следующей транзакции. Например, вы можете указать транзакцию только для чтения или для чтения и записи.

Синтаксис для команды SET TRANSACTION следующий.

SET TRANSACTION [ READ WRITE | READ ONLY ];

SQL – подстановочные операторы

Мы уже обсуждали оператор SQL LIKE, который используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов.

SQL поддерживает два подстановочных оператора в сочетании с оператором LIKE, которые подробно описаны в следующей таблице.

Sr.No. Подстановочный знак и описание
1

Знак процента (%)

Соответствует одному или нескольким символам.

Примечание. MS Access использует подстановочный знак звездочки (*) вместо подстановочного знака процента (%).

2

Подчеркивание (_)

Соответствует одному символу.

Примечание. MS Access использует знак вопроса (?) Вместо подчеркивания (_) для соответствия любому одному символу.

Знак процента (%)

Соответствует одному или нескольким символам.

Примечание. MS Access использует подстановочный знак звездочки (*) вместо подстановочного знака процента (%).

Подчеркивание (_)

Соответствует одному символу.

Примечание. MS Access использует знак вопроса (?) Вместо подчеркивания (_) для соответствия любому одному символу.

Знак процента представляет собой ноль, один или несколько символов. Подчеркивание представляет собой одно число или символ. Эти символы могут использоваться в комбинациях.

Синтаксис

Основной синтаксис операторов «%» и «_» следующий.

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

Вы можете объединить N условий с помощью операторов И или ИЛИ. Здесь XXXX может быть любым числовым или строковым значением.

пример

В следующей таблице приведено несколько примеров, показывающих, что часть WHERE имеет различные предложения LIKE с операторами «%» и «_».

Sr.No. Заявление и описание
1

Где заработная плата, как “200%”

Находит любые значения, которые начинаются с 200.

2

ГДЕ НАЛОГОВАЯ НРАВИТСЯ “% 200%”

Находит любые значения, которые имеют 200 в любой позиции.

3

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’

Находит любые значения, которые имеют 00 во второй и третьей позиции.

4

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’

Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов.

5

ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’

Находит любые значения, которые заканчиваются на 2.

6

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’

Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3.

7

Где заработная плата, как “2___3”

Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3.

Где заработная плата, как “200%”

Находит любые значения, которые начинаются с 200.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ “% 200%”

Находит любые значения, которые имеют 200 в любой позиции.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_00%’

Находит любые значения, которые имеют 00 во второй и третьей позиции.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘2 _% _%’

Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов.

ГДЕ НАГРАДНАЯ НРАВИТСЯ ‘% 2’

Находит любые значения, которые заканчиваются на 2.

ГДЕ НАЛОГОВАЯ НРАВИТСЯ ‘_2% 3’

Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3.

Где заработная плата, как “2___3”

Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3.

Давайте возьмем реальный пример, рассмотрим таблицу CUSTOMERS, имеющую следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Следующий блок кода является примером, который будет отображать все записи из таблицы CUSTOMERS, где SALARY начинается с 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Это дало бы следующий результат.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL – функции даты

В следующей таблице приведен список всех важных функций, связанных с датой и временем, доступных через SQL. Существуют различные другие функции, поддерживаемые вашей СУБД. Данный список основан на СУБД MySQL.

Sr.No. Описание функции
1 ADDDATE ()

Добавляет даты

2 AddTime ()

Добавляет время

3 CONVERT_TZ ()

Преобразование из одного часового пояса в другой

4 CURDATE ()

Возвращает текущую дату

5 CURRENT_DATE (), CURRENT_DATE

Синонимов для CURDATE ()

6 CURRENT_TIME (), CURRENT_TIME

Синонимов для CURTIME ()

7 CURRENT_TIMESTAMP (), CURRENT_TIMESTAMP

Синонимов для NOW ()

8 CURTIME ()

Возвращает текущее время

9 DATE_ADD ()

Добавляет две даты

10 ФОРМАТ ДАТЫ()

Форматирует дату как указано

11 DATE_SUB ()

Вычитает две даты

12 ДАТА()

Извлекает часть даты из выражения даты или даты и времени

13 DATEDIFF ()

Вычитает две даты

14 ДЕНЬ()

Синоним для DAYOFMONTH ()

15 DAYNAME ()

Возвращает название дня недели

16 DAYOFMONTH ()

Возвращает день месяца (1-31)

17 ДЕНЬ НЕДЕЛИ()

Возвращает индекс дня недели для аргумента.

18 DAYOFYEAR ()

Возвращает день года (1-366)

19 ВЫПИСКА

Извлекает часть даты

20 FROM_DAYS ()

Преобразует номер дня в дату

21 FROM_UNIXTIME ()

Форматирует дату как метку времени UNIX

22 ЧАС()

Извлекает час

23 ПОСЛЕДНИЙ ДЕНЬ

Возвращает последний день месяца для аргумента

24 МЕСТНОЕ ВРЕМЯ (), МЕСТНОЕ ВРЕМЯ

Синоним для СЕЙЧАС ()

25 LOCALTIMESTAMP, LOCALTIMESTAMP ()

Синоним для СЕЙЧАС ()

26 MAKEDATE ()

Создает дату из года и дня года

27 MAKETIME

MAKETIME ()

28 Микросекунды ()

Возвращает микросекунды от аргумента

29 МИНУТНЫЙ ()

Возвращает минуту от аргумента

30 МЕСЯЦ()

Вернуть месяц с даты

31 MONTHNAME ()

Возвращает название месяца

32 СЕЙЧАС()

Возвращает текущую дату и время

33 PERIOD_ADD ()

Добавляет период к году-месяцу

34 PERIOD_DIFF ()

Возвращает количество месяцев между периодами

35 КВАРТАЛ ()

Возвращает квартал из аргумента даты

36 SEC_TO_TIME ()

Преобразует секунды в формат «ЧЧ: ММ: СС».

37 ВТОРОЙ ()

Возвращает второе (0-59)

38 STR_TO_DATE ()

Преобразует строку в дату

39 SUBDATE ()

Когда вызывается с тремя аргументами, синоним DATE_SUB ()

40 SUBTIME ()

Вычитает раз

41 SYSDATE ()

Возвращает время выполнения функции

42 TIME_FORMAT ()

Форматы как время

43 TIME_TO_SEC ()

Возвращает аргумент, преобразованный в секунды

44 ВРЕМЯ()

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

45 TimeDiff ()

Вычитает время

46 ТШЕЗТАМР ()

С одним аргументом эта функция возвращает выражение даты или даты и времени. С двумя аргументами, сумма аргументов

47 TIMESTAMPADD ()

Добавляет интервал к выражению даты и времени

48 TIMESTAMPDIFF ()

Вычитает интервал из выражения даты и времени

49 TO_DAYS ()

Возвращает аргумент даты, преобразованный в дни

50 UNIX_TIMESTAMP ()

Возвращает метку времени UNIX

51 UTC_DATE ()

Возвращает текущую дату UTC

52 UTC_TIME ()

Возвращает текущее время UTC

53 UTC_TIMESTAMP ()

Возвращает текущую дату и время UTC

54 НЕДЕЛЮ()

Возвращает номер недели

55 ДЕНЬНЕД ()

Возвращает индекс дня недели

56 WEEKOFYEAR ()

Возвращает календарную неделю даты (1-53)

57 ГОД()

Возвращает год

58 YEARWEEK ()

Возвращает год и неделю

Добавляет даты

Добавляет время

Преобразование из одного часового пояса в другой

Возвращает текущую дату

Синонимов для CURDATE ()

Синонимов для CURTIME ()

Синонимов для NOW ()

Возвращает текущее время

Добавляет две даты

Форматирует дату как указано

Вычитает две даты

Извлекает часть даты из выражения даты или даты и времени

Вычитает две даты

Синоним для DAYOFMONTH ()

Возвращает название дня недели

Возвращает день месяца (1-31)

Возвращает индекс дня недели для аргумента.

Возвращает день года (1-366)

Извлекает часть даты

Преобразует номер дня в дату

Форматирует дату как метку времени UNIX

Извлекает час

Возвращает последний день месяца для аргумента

Синоним для СЕЙЧАС ()

Синоним для СЕЙЧАС ()

Создает дату из года и дня года

MAKETIME ()

Возвращает микросекунды от аргумента

Возвращает минуту от аргумента

Вернуть месяц с даты

Возвращает название месяца

Возвращает текущую дату и время

Добавляет период к году-месяцу

Возвращает количество месяцев между периодами

Возвращает квартал из аргумента даты

Преобразует секунды в формат «ЧЧ: ММ: СС».

Возвращает второе (0-59)

Преобразует строку в дату

Когда вызывается с тремя аргументами, синоним DATE_SUB ()

Вычитает раз

Возвращает время выполнения функции

Форматы как время

Возвращает аргумент, преобразованный в секунды

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

Вычитает время

С одним аргументом эта функция возвращает выражение даты или даты и времени. С двумя аргументами, сумма аргументов

Добавляет интервал к выражению даты и времени

Вычитает интервал из выражения даты и времени

Возвращает аргумент даты, преобразованный в дни

Возвращает метку времени UNIX

Возвращает текущую дату UTC

Возвращает текущее время UTC

Возвращает текущую дату и время UTC

Возвращает номер недели

Возвращает индекс дня недели

Возвращает календарную неделю даты (1-53)

Возвращает год

Возвращает год и неделю

ADDDATE (дата, интервал expr единица измерения), ADDDATE (expr, дни)

Когда вызывается с формой INTERVAL второго аргумента, ADDDATE () является синонимом DATE_ADD (). Связанная функция SUBDATE () является синонимом DATE_SUB (). Для получения информации об аргументе модуля INTERVAL см. Обсуждение DATE_ADD ().

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| ADDDATE('1998-01-02', INTERVAL 31 DAY)                  |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

При вызове с формой days второго аргумента MySQL рассматривает его как целое число дней, которое будет добавлено к expr.

mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

AddTime (выражение1, выражение2)

ADDTIME () добавляет expr2 к expr1 и возвращает результат. Expr1 – это выражение времени или даты и времени, а expr2 – выражение времени.

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |
+---------------------------------------------------------+
| 1998-01-02 01:01:01.000001                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CONVERT_TZ (дт, from_tz, to_tz)

Это преобразует значение datetime dt из часового пояса, заданного from_tz, во часовой пояс, заданный to_tz, и возвращает результирующее значение. Эта функция возвращает NULL, если аргументы неверны.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')           |
+---------------------------------------------------------+
| 2004-01-01 13:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00')     |
+---------------------------------------------------------+
| 2004-01-01 22:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURDATE ()

Возвращает текущую дату в виде значения в формате «ГГГГ-ММ-ДД» или ГГГГММДД в ​​зависимости от того, используется ли функция в строке или в числовом контексте.

mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE()                                               |
+---------------------------------------------------------+
| 1997-12-15                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0                                           |
+---------------------------------------------------------+
| 19971215                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_DATE и CURRENT_DATE ()

CURRENT_DATE и CURRENT_DATE () являются синонимами для CURDATE ()

CURTIME ()

Возвращает текущее время в виде значения в формате «ЧЧ: ММ: СС» или ЧЧММСС в зависимости от того, используется ли функция в строке или в числовом контексте. Значение выражается в текущем часовом поясе.

mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME()                                               |
+---------------------------------------------------------+
| 23:50:26                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0                                           |
+---------------------------------------------------------+
| 235026                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_TIME и CURRENT_TIME ()

CURRENT_TIME и CURRENT_TIME () являются синонимами для CURTIME ().

CURRENT_TIMESTAMP и CURRENT_TIMESTAMP ()

CURRENT_TIMESTAMP и CURRENT_TIMESTAMP () являются синонимами для NOW ().

ДАТА (выражение)

Извлекает часть даты из выражения даты или даты и времени.

mysql> SELECT DATE('2003-12-31 01:02:03');
+---------------------------------------------------------+
| DATE('2003-12-31 01:02:03')                             |
+---------------------------------------------------------+
|  2003-12-31                                             |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATEDIFF (выражение1, выражение2)

DATEDIFF () возвращает expr1. expr2 выражается в виде значений в днях от одной даты к другой. И expr1, и expr2 являются выражениями даты или даты и времени. В расчете используются только части даты значений.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
+---------------------------------------------------------+
| DATEDIFF('1997-12-31 23:59:59','1997-12-30')            |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_ADD (дата, единица измерения INTERVAL), DATE_SUB (дата, единица измерения INTERVAL)

Эти функции выполняют арифметику даты. Дата является значением DATETIME или DATE, указывающим начальную дату. Expr – это выражение, определяющее значение интервала, которое будет добавлено или вычтено из начальной даты. Expr является строкой; может начинаться с «-» для отрицательных интервалов.

Единица – это ключевое слово, обозначающее единицы, в которых следует интерпретировать выражение.

Ключевое слово INTERVAL и спецификатор единицы не чувствительны к регистру.

В следующей таблице показана ожидаемая форма аргумента expr для каждого значения единицы.

стоимость единицы Ожидаемый exprFormat
микросекунда микросекунд
ВТОРОЙ СЕКУНД
МИНУТЫ ПРОТОКОЛ
ЧАС ЧАСЫ
ДЕНЬ ДНИ
НЕДЕЛЮ НЕДЕЛИ
МЕСЯЦ МЕСЯЦЫ
КВАРТАЛ QUARTERS
ГОД ЛЕТ
SECOND_MICROSECOND ‘SECONDS.MICROSECONDS’
MINUTE_MICROSECOND ‘MINUTES.MICROSECONDS’
MINUTE_SECOND ‘ПРОТОКОЛ: SECONDS’
HOUR_MICROSECOND ‘HOURS.MICROSECONDS’
HOUR_SECOND «ЧАСЫ: Минуты: Секунды»
HOUR_MINUTE «ЧАСЫ: МИНУТЫ»
DAY_MICROSECOND ‘DAYS.MICROSECONDS’
DAY_SECOND «Дни, часы, минуты, секунды»
DAY_MINUTE «ДНИ ЧАСЫ: МИНУТЫ»
DAY_HOUR «ДЕНЬ ЧАСОВ»
ГОД МЕСЯЦ «лет- МЕСЯЦЕВ»

Значения QUARTER и WEEK доступны в MySQL 5.0.0. версия.

mysql> SELECT DATE_ADD('1997-12-31 23:59:59', 
   -> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL...             |
+---------------------------------------------------------+
| 1998-01-01 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR)                 |
+---------------------------------------------------------+
| 1999-01-01 01:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_FORMAT (дата, формат)

Эта команда форматирует значение даты в соответствии со строкой форматирования.

Следующие спецификаторы могут использоваться в строке формата. Символ «%» требуется перед символами спецификатора формата.

Sr.No. Спецификатор и описание
1

% в

Сокращенное название дня недели (вс ..сат)

2

% б

Сокращенное название месяца (янв .. декабрь)

3

% с

Месяц, числовой (0..12)

4

% D

День месяца с английским суффиксом (0, 1, 2, 3,.)

5

% d

День месяца, числовой (00..31)

6

% е

День месяца, числовой (0..31)

7

% е

Микросекунды (000000..999999)

8

%ЧАС

Час (00..23)

9

%час

Час (01.12.12)

10

Час (01.12.12)

11

Минуты, числовые (00..59)

12

% J

День года (001..366)

13

% к

Час (0..23)

14

% л

Час (1..12)

15

% M

Название месяца (январь .. декабрь)

16

% м

Месяц, числовой (00..12)

17

%п

До или после полудня

18

Время, 12 часов (чч: мм: сс, затем AM или PM)

19

% S

Секунды (00..59)

20

% s

Секунды (00..59)

21

% Т

Время, 24 часа (чч: мм: сс)

22

% U

Неделя (00..53), где воскресенье – первый день недели

23

% U

Неделя (00..53), где понедельник – первый день недели

24

% V

Неделя (01..53), где воскресенье – первый день недели; используется с% X

25

% v

Неделя (01..53), где понедельник – первый день недели; используется с% x

26

% W

Название дня недели (воскресенье .. суббота)

27

% мас

День недели (0 = воскресенье. 6 = суббота)

28

%ИКС

Год недели, где воскресенье – первый день недели, цифра, четыре цифры; используется с% V

29

%Икс

Год недели, где понедельник – первый день недели, цифра, четыре цифры; используется с% v

30

% Y

Год, цифра, четыре цифры

31

% г

Год, числовой (две цифры)

32

%%

Буквально.%. персонаж

33

%Икс

х, для любого х. не указано выше

% в

Сокращенное название дня недели (вс ..сат)

% б

Сокращенное название месяца (янв .. декабрь)

% с

Месяц, числовой (0..12)

% D

День месяца с английским суффиксом (0, 1, 2, 3,.)

% d

День месяца, числовой (00..31)

% е

День месяца, числовой (0..31)

% е

Микросекунды (000000..999999)

%ЧАС

Час (00..23)

%час

Час (01.12.12)

Час (01.12.12)

Минуты, числовые (00..59)

% J

День года (001..366)

% к

Час (0..23)

% л

Час (1..12)

% M

Название месяца (январь .. декабрь)

% м

Месяц, числовой (00..12)

%п

До или после полудня

Время, 12 часов (чч: мм: сс, затем AM или PM)

% S

Секунды (00..59)

% s

Секунды (00..59)

% Т

Время, 24 часа (чч: мм: сс)

% U

Неделя (00..53), где воскресенье – первый день недели

% U

Неделя (00..53), где понедельник – первый день недели

% V

Неделя (01..53), где воскресенье – первый день недели; используется с% X

% v

Неделя (01..53), где понедельник – первый день недели; используется с% x

% W

Название дня недели (воскресенье .. суббота)

% мас

День недели (0 = воскресенье. 6 = суббота)

%ИКС

Год недели, где воскресенье – первый день недели, цифра, четыре цифры; используется с% V

%Икс

Год недели, где понедельник – первый день недели, цифра, четыре цифры; используется с% v

% Y

Год, цифра, четыре цифры

% г

Год, числовой (две цифры)

%%

Буквально.%. персонаж

%Икс

х, для любого х. не указано выше

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y')          |
+---------------------------------------------------------+
| Saturday October 1997                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'
   -> '%H %k %I %r %T %S %w');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00.......                 |
+---------------------------------------------------------+
|  22 22 10 10:23:00 PM 22:23:00 00 6                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_SUB (дата, единица измерения INTERVAL)

Это похоже на функцию DATE_ADD ().

ДЕНЬ (дата)

DAY () является синонимом функции DAYOFMONTH ().

DAYNAME (дата)

Возвращает название дня недели для даты.

mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05')                                   |
+---------------------------------------------------------+
| Thursday                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFMONTH (дата)

Возвращает день месяца для даты в диапазоне от 0 до 31.

mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03')                                |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFWEEK (дата)

Возвращает индекс дня недели для даты (1 = воскресенье, 2 = понедельник, 7 = суббота). Эти значения индекса соответствуют стандарту ODBC.

mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03')                                  |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFYEAR (дата)

Возвращает день года для даты в диапазоне от 1 до 366.

mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03')                                 |
+---------------------------------------------------------+
| 34                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ВЫПИСКА (единица ИЗ ДАТЫ)

Функция EXTRACT () использует те же типы спецификаторов единиц, что и DATE_ADD () или DATE_SUB (), но извлекает части из даты, а не выполняет арифметику даты.

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
+---------------------------------------------------------+
| EXTRACT(YEAR FROM '1999-07-02')                         |
+---------------------------------------------------------+
| 1999                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
+---------------------------------------------------------+
| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03')          |
+---------------------------------------------------------+
| 199907                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

FROM_DAYS (N)

Учитывая номер дня N, возвращает значение DATE.

mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669)                                       |
+---------------------------------------------------------+
| 1997-10-07                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Примечание. Используйте FROM_DAYS () с осторожностью в отношении старых дат. Он не предназначен для использования со значениями, которые предшествуют появлению григорианского календаря (1582).

FROM_UNIXTIME (UNIX_TIMESTAMP)

FROM_UNIXTIME (UNIX_TIMESTAMP, формат)

Возвращает представление аргумента unix_timestamp в виде значения в формате ‘ГГГГ-ММ-ДД ЧЧ: ММ: СС или ГГГГММДДЧЧММСС, в зависимости от того, используется ли функция в строке или в числовом контексте. Значение выражается в текущем часовом поясе. Аргумент unix_timestamp является внутренним значением метки времени, которое создается функцией UNIX_TIMESTAMP () .

Если указан формат, результат форматируется в соответствии со строкой формата, которая используется так же, как указано в записи для функции DATE_FORMAT () .

mysql> SELECT FROM_UNIXTIME(875996580);
+---------------------------------------------------------+
| FROM_UNIXTIME(875996580)                                |
+---------------------------------------------------------+
| 1997-10-04 22:23:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ЧАС (время)

Возвращает час времени. Диапазон возвращаемого значения от 0 до 23 для значений времени дня. Однако диапазон значений TIME на самом деле намного больше, поэтому HOUR может возвращать значения больше 23.

mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03')                                        |
+---------------------------------------------------------+
| 10                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LAST_DAY (дата)

Принимает значение даты или даты и времени и возвращает соответствующее значение для последнего дня месяца. Возвращает NULL, если аргумент неверен.

mysql> SELECT LAST_DAY('2003-02-05');
+---------------------------------------------------------+
| LAST_DAY('2003-02-05')                                  |
+---------------------------------------------------------+
| 2003-02-28                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

МЕСТНОЕ ВРЕМЯ и МЕСТНОЕ ВРЕМЯ ()

LOCALTIME и LOCALTIME () являются синонимами для NOW ().

LOCALTIMESTAMP и LOCALTIMESTAMP ()

LOCALTIMESTAMP и LOCALTIMESTAMP () являются синонимами для NOW ().

MAKEDATE (год, DayOfYear)

Возвращает дату, данные года и значения дня в году. Значение dayofyear должно быть больше 0, иначе результат будет NULL.

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
+---------------------------------------------------------+
| MAKEDATE(2001,31), MAKEDATE(2001,32)                    |
+---------------------------------------------------------+
| '2001-01-31', '2001-02-01'                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MAKETIME (час, минута, секунда)

Возвращает значение времени, вычисленное из аргументов часа, минуты и секунды.

mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30)                                      |
+---------------------------------------------------------+
| '12:15:30'                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Микросекунды (выражение)

Возвращает микросекунды из выражения времени или даты и времени (expr) в виде числа в диапазоне от 0 до 999999.

mysql> SELECT MICROSECOND('12:00:00.123456');
+---------------------------------------------------------+
| MICROSECOND('12:00:00.123456')                          |
+---------------------------------------------------------+
| 123456                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

МИНУТЫ (время)

Возвращает минуты для времени в диапазоне от 0 до 59.

mysql> SELECT MINUTE('98-02-03 10:05:03');
+---------------------------------------------------------+
| MINUTE('98-02-03 10:05:03')                             |
+---------------------------------------------------------+
| 5                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

МЕСЯЦ (дата)

Возвращает месяц для даты в диапазоне от 0 до 12.

mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MONTHNAME (дата)

Возвращает полное название месяца для даты.

mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05')                                 |
+---------------------------------------------------------+
| February                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

СЕЙЧАС()

Возвращает текущую дату и время в виде значения в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или ГГГГММДДЧЧММСС в зависимости от того, используется ли функция в строковом или числовом контексте. Это значение выражено в текущем часовом поясе.

mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW()                                                   |
+---------------------------------------------------------+
| 1997-12-15 23:50:26                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_ADD (P, N)

Добавляет N месяцев к периоду P (в формате ГГММ или ГГГГММ). Возвращает значение в формате ГГГГММ. Обратите внимание, что аргумент периода P не является значением даты.

mysql> SELECT PERIOD_ADD(9801,2);
+---------------------------------------------------------+
| PERIOD_ADD(9801,2)                                      |
+---------------------------------------------------------+
| 199803                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_DIFF (Р1, Р2)

Возвращает количество месяцев между периодами P1 и P2. Эти периоды P1 и P2 должны быть в формате ГГММ или ГГГГММ. Обратите внимание, что аргументы периода P1 и P2 не являются значениями даты.

mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703)                                |
+---------------------------------------------------------+
| 11                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

КВАРТАЛ (дата)

Возвращает квартал года для даты в диапазоне от 1 до 4.

mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Второй раз)

Возвращает секунду для времени в диапазоне от 0 до 59.

mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03')                                      |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SEC_TO_TIME (в секундах)

Возвращает аргумент секунд, преобразованный в часы, минуты и секунды, в виде значения в формате «ЧЧ: ММ: СС» или ЧЧММСС в зависимости от того, используется ли функция в строковом или числовом контексте.

mysql> SELECT SEC_TO_TIME(2378);
+---------------------------------------------------------+
| SEC_TO_TIME(2378)                                       |
+---------------------------------------------------------+
| 00:39:38                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

STR_TO_DATE (ул, формат)

Это обратная функция DATE_FORMAT (). Требуется строка str и формат строки формата. Функция STR_TO_DATE () возвращает значение DATETIME, если строка формата содержит части даты и времени. Иначе, он возвращает значение DATE или TIME, если строка содержит только части даты или времени.

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
+---------------------------------------------------------+
| STR_TO_DATE('04/31/2004', '%m/%d/%Y')                   |
+---------------------------------------------------------+
| 2004-04-31                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SUBDATE (дата, интервал expr) и SUBDATE (expr, дни)

Когда вызывается с формой INTERVAL второго аргумента, SUBDATE () является синонимом DATE_SUB (). Для получения информации об аргументе модуля INTERVAL см. Обсуждение DATE_ADD ().

mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_SUB('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1997-12-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| SUBDATE('1998-01-02', INTERVAL 31 DAY)                  |
+---------------------------------------------------------+
| 1997-12-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SUBTIME (выражение1, выражение2)

Функция SUBTIME () возвращает expr1. expr2 выражается как значение в том же формате, что и expr1. Значение expr1 является выражением времени или даты и времени, а значение expr2 является выражением времени.

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999',
   -> '1 1:1:1.000002');
+---------------------------------------------------------+
| SUBTIME('1997-12-31 23:59:59.999999'...                 |
+---------------------------------------------------------+
| 1997-12-30 22:58:58.999997                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SYSDATE ()

Возвращает текущую дату и время в виде значения в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или ГГГГММДДЧЧММСС в зависимости от того, используется ли функция в строке или в числовом контексте.

mysql> SELECT SYSDATE();
+---------------------------------------------------------+
| SYSDATE()                                               |
+---------------------------------------------------------+
| 2006-04-12 13:47:44                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME (выражение)

Извлекает часть времени из выражения времени или даты и времени и возвращает его в виде строки.

mysql> SELECT TIME('2003-12-31 01:02:03');
+---------------------------------------------------------+
| TIME('2003-12-31 01:02:03')                             |
+---------------------------------------------------------+
| 01:02:03                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TimeDiff (выражение1, выражение2)

Функция TIMEDIFF () возвращает expr1. expr2 выражается как значение времени. Эти значения expr1 и expr2 являются выражениями времени или даты и времени, но оба должны быть одного типа.

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
   -> '1997-12-30 01:01:01.000002');
+---------------------------------------------------------+
| TIMEDIFF('1997-12-31 23:59:59.000001'.....              |
+---------------------------------------------------------+
|  46:58:57.999999                                        |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

С одним аргументом эта функция возвращает выражение даты или выражения даты и времени в качестве значения даты и времени. С двумя аргументами он добавляет выражение времени expr2 к выражению даты или даты и времени expr1 и возвращает результат в виде значения даты и времени.

mysql> SELECT TIMESTAMP('2003-12-31');
+---------------------------------------------------------+
| TIMESTAMP('2003-12-31')                                 |
+---------------------------------------------------------+
| 2003-12-31 00:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPADD (единица измерения, интервал, datetime_expr)

Эта функция добавляет интервал целочисленного выражения к выражению даты или даты и времени datetime_expr . Единица для интервала задается аргументом unit, который должен принимать одно из следующих значений:

  • FRAC_SECOND
  • ВТОРАЯ, МИНУТА
  • ЧАС, ДЕНЬ
  • НЕДЕЛЮ
  • МЕСЯЦ
  • КВАРТАЛ или
  • ГОД

Значение единицы может быть указано с использованием одного из ключевых слов, как показано, или с префиксом SQL_TSI_.

Например, DAY и SQL_TSI_DAY допустимы.

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
+---------------------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2003-01-02')                     |
+---------------------------------------------------------+
| 2003-01-02 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPDIFF (единица измерения, datetime_expr1, datetime_expr2)

Возвращает целочисленную разницу между выражениями date или datetime datetime_expr1 и datetime_expr2. Единица для результата задается аргументом единицы. Допустимые значения для единицы те же, что указаны в описании функции TIMESTAMPADD ().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01')          |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME_FORMAT (время, формат)

Эта функция используется как функция DATE_FORMAT (), но строка формата может содержать спецификаторы формата только для часов, минут и секунд.

Если значение времени содержит часть часа, которая больше 23, спецификаторы формата% H и% k часа выдают значение, превышающее обычный диапазон от 0 до 23. Другие спецификаторы формата часа создают значение часа по модулю 12.

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
+---------------------------------------------------------+
| TIME_FORMAT('100:00:00', '%H %k %h %I %l')              |
+---------------------------------------------------------+
| 100 100 04 04 4                                         |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME_TO_SEC (время)

Возвращает аргумент времени, преобразованный в секунды.

mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00')                                 |
+---------------------------------------------------------+
| 80580                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Сегодняшняя дата)

При заданной дате возвращает номер дня (количество дней с года 0).

mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501)                                         |
+---------------------------------------------------------+
| 728779                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UNIX_TIMESTAMP (), UNIX_TIMESTAMP (дата)

Если вызывается без аргумента, эта функция возвращает метку времени Unix (секунды с UTC 1970-01-01 00:00:00) в виде целого числа без знака. Если UNIX_TIMESTAMP () вызывается с аргументом даты, он возвращает значение аргумента в секундах с UTC 1970-01-01 00:00:00. date может быть строкой DATE, строкой DATETIME, TIMESTAMP или числом в формате YYMMDD или YYYYMMDD.

mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP()                                        |
+---------------------------------------------------------+
| 882226357                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00')                   |
+---------------------------------------------------------+
| 875996580                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_DATE, UTC_DATE ()

Возвращает текущую дату UTC в виде значения в формате «ГГГГ-ММ-ДД» или ГГГГММДД в ​​зависимости от того, используется ли функция в строковом или числовом контексте.

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
+---------------------------------------------------------+
| UTC_DATE(), UTC_DATE() + 0                              |
+---------------------------------------------------------+
| 2003-08-14, 20030814                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIME, UTC_TIME ()

Возвращает текущее время UTC в виде значения в формате «ЧЧ: ММ: СС» или ЧЧММСС в зависимости от того, используется ли функция в строковом или числовом контексте.

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
+---------------------------------------------------------+
| UTC_TIME(), UTC_TIME() + 0                              |
+---------------------------------------------------------+
| 18:07:53, 180753                                        |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIMESTAMP, UTC_TIMESTAMP ()

Возвращает текущую дату и время UTC в виде значения в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или в формате ГГГГММДДЧЧММСС в зависимости от того, используется ли функция в строке или в числовом контексте.

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
+---------------------------------------------------------+
| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0                    |
+---------------------------------------------------------+
| 2003-08-14 18:08:04, 20030814180804                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Неделя (дата [, режим])

Эта функция возвращает номер недели для даты. Форма WEEK () с двумя аргументами позволяет вам указать, начинается ли неделя в воскресенье или в понедельник и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode пропущен, используется значение системной переменной default_week_format

Режим Первый день недели Спектр 1-я неделя первая неделя.
0 Воскресенье 0-53 с воскресеньем в этом году
1 понедельник 0-53 с более чем 3 днями в этом году
2 Воскресенье 1-53 с воскресеньем в этом году
3 понедельник 1-53 с более чем 3 днями в этом году
4 Воскресенье 0-53 с более чем 3 днями в этом году
5 понедельник 0-53 с понедельника в этом году
6 Воскресенье 1-53 с более чем 3 днями в этом году
7 понедельник 1-53 с понедельника в этом году
mysql> SELECT WEEK('1998-02-20');
+---------------------------------------------------------+
| WEEK('1998-02-20')                                      |
+---------------------------------------------------------+
| 7                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKDAY (дата)

Возвращает индекс дня недели для даты (0 = понедельник, 1 = вторник, 6 = воскресенье).

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
+---------------------------------------------------------+
| WEEKDAY('1998-02-03 22:23:00')                          |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKOFYEAR (дата)

Возвращает календарную неделю даты в виде числа в диапазоне от 1 до 53. WEEKOFYEAR () – это функция совместимости, эквивалентная WEEK (дата, 3).

mysql> SELECT WEEKOFYEAR('1998-02-20');
+---------------------------------------------------------+
| WEEKOFYEAR('1998-02-20')                                |
+---------------------------------------------------------+
| 8                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

YEAR (дата)

Возвращает год для даты в диапазоне от 1000 до 9999 или 0 для нуля. Дата.

mysql> SELECT YEAR('98-02-03');
+---------------------------------------------------------+
| YEAR('98-02-03')                                        |
+---------------------------------------------------------+
| 1998                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

YEARWEEK (дата), YEARWEEK (дата, режим)

Возвращает год и неделю для даты. Аргумент mode работает точно так же, как аргумент mode функции WEEK (). Год в результате может отличаться от года в аргументе даты для первой и последней недели года.

mysql> SELECT YEARWEEK('1987-01-01');
+---------------------------------------------------------+
| YEAR('98-02-03')YEARWEEK('1987-01-01')                  |
+---------------------------------------------------------+
| 198653                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Примечание. Номер недели отличается от того, что функция WEEK () будет возвращать (0) для необязательных аргументов 0 или 1, поскольку WEEK () затем возвращает неделю в контексте заданного года.

SQL – временные таблицы

Что такое временные таблицы?

Есть RDBMS, которые поддерживают временные таблицы. Временные таблицы – это отличная функция, которая позволяет хранить и обрабатывать промежуточные результаты , используя те же возможности выбора, обновления и объединения, которые можно использовать с типичными таблицами SQL Server.

Временные таблицы могут быть очень полезны в некоторых случаях для хранения временных данных. Самая важная вещь, которая должна быть известна для временных таблиц, – то, что они будут удалены, когда текущий сеанс клиента завершается.

Временные таблицы доступны в версии MySQL 3.23 и далее. Если вы используете более старую версию MySQL, чем 3.23, вы не можете использовать временные таблицы, но вы можете использовать таблицы кучи .

Как указывалось ранее, временные таблицы будут длиться только до тех пор, пока сеанс жив. Если вы запустите код в сценарии PHP, временная таблица будет автоматически уничтожена, когда сценарий завершит выполнение. Если вы подключены к серверу базы данных MySQL через клиентскую программу MySQL, временная таблица будет существовать до тех пор, пока вы не закроете клиент или не уничтожите таблицу вручную.

пример

Вот пример, показывающий использование временной таблицы.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Когда вы вводите команду SHOW TABLES, ваша временная таблица не будет указана в списке. Теперь, если вы выйдете из сеанса MySQL, а затем введете команду SELECT, в базе данных не будет доступных данных. Даже ваша временная таблица не будет существовать.

Удаление временных таблиц

По умолчанию все временные таблицы удаляются MySQL при разрыве соединения с базой данных. Тем не менее, если вы хотите удалить их между ними, вы можете сделать это, введя команду DROP TABLE .

Ниже приведен пример удаления временной таблицы.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SALESSUMMARY;
mysql>  SELECT * FROM SALESSUMMARY;
ERROR 1146: Table 'TUTORIALS.SALESSUMMARY' doesn't exist

SQL – таблицы клонов

Может возникнуть ситуация, когда вам нужна точная копия таблицы, а команды CREATE TABLE … или SELECT … не соответствуют вашим целям, поскольку копия должна содержать те же индексы, значения по умолчанию и т. Д.

Если вы используете СУБД MySQL, вы можете справиться с этой ситуацией, следуя приведенным ниже шагам –

  • Используйте команду SHOW CREATE TABLE, чтобы получить инструкцию CREATE TABLE, которая определяет структуру исходной таблицы, индексы и все.

  • Измените оператор, чтобы изменить имя таблицы на имя таблицы клонов, и выполните оператор. Таким образом, у вас будет точная таблица клонов.

  • По желанию, если вам также необходимо скопировать содержимое таблицы, введите оператор INSERT INTO или SELECT.

Используйте команду SHOW CREATE TABLE, чтобы получить инструкцию CREATE TABLE, которая определяет структуру исходной таблицы, индексы и все.

Измените оператор, чтобы изменить имя таблицы на имя таблицы клонов, и выполните оператор. Таким образом, у вас будет точная таблица клонов.

По желанию, если вам также необходимо скопировать содержимое таблицы, введите оператор INSERT INTO или SELECT.

пример

Попробуйте следующий пример, чтобы создать таблицу клонов для TUTORIALS_TBL , структура которой выглядит следующим образом:

Шаг 1 – Получить полную структуру таблицы.

SQL> SHOW CREATE TABLE TUTORIALS_TBL G; 
*************************** 1. row *************************** 
      Table: TUTORIALS_TBL 
Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
  'tutorial_id' int(11) NOT NULL auto_increment, 
  'tutorial_title' varchar(100) NOT NULL default '', 
  'tutorial_author' varchar(40) NOT NULL default '', 
  'submission_date' date default NULL, 
  PRIMARY KEY  ('tutorial_id'), 
  UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
) TYPE = MyISAM 
1 row in set (0.00 sec)

Шаг 2 – Переименуйте эту таблицу и создайте другую таблицу.

SQL> CREATE TABLE `CLONE_TBL` ( 
  -> 'tutorial_id' int(11) NOT NULL auto_increment, 
  -> 'tutorial_title' varchar(100) NOT NULL default '', 
  -> 'tutorial_author' varchar(40) NOT NULL default '', 
  -> 'submission_date' date default NULL, 
  -> PRIMARY KEY  (`tutorial_id'), 
  -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
-> ) TYPE = MyISAM; 
Query OK, 0 rows affected (1.80 sec) 

Шаг 3 – После выполнения шага 2 вы будете клонировать таблицу в своей базе данных. Если вы хотите скопировать данные из старой таблицы, вы можете сделать это с помощью оператора INSERT INTO … SELECT.

SQL> INSERT INTO CLONE_TBL (tutorial_id, 
   ->                        tutorial_title, 
   ->                        tutorial_author, 
   ->                        submission_date) 
   -> SELECT tutorial_id,tutorial_title, 
   ->        tutorial_author,submission_date, 
   -> FROM TUTORIALS_TBL; 
Query OK, 3 rows affected (0.07 sec) 
Records: 3  Duplicates: 0  Warnings: 0 

Наконец, у вас будет точная таблица клонов, как вы и хотели.

SQL – подзапросы

Подзапрос, Внутренний запрос или Вложенный запрос – это запрос в другом запросе SQL, который встроен в предложение WHERE.

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

Подзапросы могут использоваться с операторами SELECT, INSERT, UPDATE и DELETE вместе с такими операторами, как =, <,>,> =, <=, IN, BETWEEN и т. Д.

Есть несколько правил, которым должны следовать подзапросы –

  • Подзапросы должны быть заключены в круглые скобки.

  • У подзапроса может быть только один столбец в предложении SELECT, если в основном запросе нет нескольких столбцов для подзапроса для сравнения его выбранных столбцов.

  • Команда ORDER BY не может использоваться в подзапросе, хотя основной запрос может использовать ORDER BY. Команда GROUP BY может использоваться для выполнения той же функции, что и ORDER BY в подзапросе.

  • Подзапросы, которые возвращают более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN.

  • Список SELECT не может содержать ссылки на значения, которые оцениваются как BLOB, ARRAY, CLOB или NCLOB.

  • Подзапрос не может быть сразу заключен в функцию набора.

  • Оператор BETWEEN нельзя использовать с подзапросом. Тем не менее, оператор BETWEEN может использоваться внутри подзапроса.

Подзапросы должны быть заключены в круглые скобки.

У подзапроса может быть только один столбец в предложении SELECT, если в основном запросе нет нескольких столбцов для подзапроса для сравнения его выбранных столбцов.

Команда ORDER BY не может использоваться в подзапросе, хотя основной запрос может использовать ORDER BY. Команда GROUP BY может использоваться для выполнения той же функции, что и ORDER BY в подзапросе.

Подзапросы, которые возвращают более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN.

Список SELECT не может содержать ссылки на значения, которые оцениваются как BLOB, ARRAY, CLOB или NCLOB.

Подзапрос не может быть сразу заключен в функцию набора.

Оператор BETWEEN нельзя использовать с подзапросом. Тем не менее, оператор BETWEEN может использоваться внутри подзапроса.

Подзапросы с оператором SELECT

Подзапросы чаще всего используются с оператором SELECT. Основной синтаксис выглядит следующим образом –

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Теперь давайте проверим следующий подзапрос с помощью инструкции SELECT.

SQL> SELECT * 
   FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
         FROM CUSTOMERS 
         WHERE SALARY > 4500) ;

Это дало бы следующий результат.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

Подзапросы с оператором INSERT

Подзапросы также могут использоваться с операторами INSERT. Оператор INSERT использует данные, возвращенные из подзапроса, для вставки в другую таблицу. Выбранные данные в подзапросе могут быть изменены с помощью любой символьной, даты или числовой функции.

Основной синтаксис выглядит следующим образом.

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

пример

Рассмотрим таблицу CUSTOMERS_BKP с такой же структурой, что и таблица CUSTOMERS. Теперь, чтобы скопировать полную таблицу CUSTOMERS в таблицу CUSTOMERS_BKP, вы можете использовать следующий синтаксис.

SQL> INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
   FROM CUSTOMERS) ;

Подзапросы с оператором UPDATE

Подзапрос может использоваться вместе с оператором UPDATE. Можно использовать один или несколько столбцов в таблице при использовании подзапроса с оператором UPDATE.

Основной синтаксис выглядит следующим образом.

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

пример

Предполагая, что у нас есть таблица CUSTOMERS_BKP, которая является резервной копией таблицы CUSTOMERS. В следующем примере значение SALARY обновляется в таблице CUSTOMERS в 0,25 раза для всех клиентов, возраст которых больше или равен 27.

SQL> UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Это повлияет на две строки, и, наконец, таблица CUSTOMERS будет иметь следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |   125.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  2125.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Подзапросы с оператором DELETE

Подзапрос может использоваться вместе с оператором DELETE, как и любые другие операторы, упомянутые выше.

Основной синтаксис выглядит следующим образом.

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

пример

Предполагая, что у нас есть таблица CUSTOMERS_BKP, которая является резервной копией таблицы CUSTOMERS. В следующем примере удаляются записи из таблицы CUSTOMERS для всех клиентов, возраст которых больше или равен 27.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Это повлияет на две строки, и, наконец, таблица CUSTOMERS будет иметь следующие записи.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  2 | Khilan   |  25 | Delhi   |  1500.00 |
|  3 | kaushik  |  23 | Kota    |  2000.00 |
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

SQL – Использование последовательностей

Последовательность – это набор целых чисел 1, 2, 3, …, которые генерируются в порядке по требованию. Последовательности часто используются в базах данных, поскольку многие приложения требуют, чтобы каждая строка в таблице содержала уникальное значение, а последовательности обеспечивают простой способ их создания.

Эта глава описывает, как использовать последовательности в MySQL.

Использование столбца AUTO_INCREMENT

Самый простой способ использования последовательностей в MySQL – это определить столбец как AUTO_INCREMENT, а остальное оставить для MySQL.

пример

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

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO INSECT (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM INSECT ORDER BY id;
+----+-------------+------------+------------+
| id | name        | date       | origin     |
+----+-------------+------------+------------+
|  1 | housefly    | 2001-09-10 | kitchen    |
|  2 | millipede   | 2001-09-10 | driveway   |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Получить значения AUTO_INCREMENT

LAST_INSERT_ID () – это функция SQL, поэтому вы можете использовать ее из любого клиента, который понимает, как выдавать операторы SQL. В противном случае сценарии PERL и PHP предоставляют эксклюзивные функции для извлечения автоматически увеличенного значения последней записи.

Пример PERL

Используйте атрибут mysql_insertid для получения значения AUTO_INCREMENT, сгенерированного запросом. Этот атрибут доступен через дескриптор базы данных или дескриптор оператора, в зависимости от того, как вы выполняете запрос. Следующий пример ссылается на него через дескриптор базы данных.

$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

Пример PHP

После выдачи запроса, который генерирует значение AUTO_INCREMENT, получите это значение, вызвав функцию mysql_insert_id () .

mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Изменение нумерации существующей последовательности

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

Если вы решите, что повторное упорядочение столбца AUTO_INCREMENT является неизбежным, способ сделать это – удалить столбец из таблицы, а затем добавить его снова.

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

mysql> ALTER TABLE INSECT DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Начало последовательности по определенному значению

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

В следующем блоке кода есть пример, где MySQL начнет последовательность с 100.

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Кроме того, вы можете создать таблицу, а затем установить начальное значение последовательности с помощью ALTER TABLE.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

SQL – обработка дубликатов

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

Ключевое слово SQL DISTINCT , которое мы уже обсуждали, используется вместе с оператором SELECT, чтобы исключить все дублирующиеся записи и извлечь только уникальные записи.

Синтаксис

Основной синтаксис ключевого слова DISTINCT для устранения повторяющихся записей заключается в следующем.

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Во-первых, давайте посмотрим, как следующий запрос SELECT возвращает дубликаты записей заработной платы.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

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

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Теперь давайте воспользуемся ключевым словом DISTINCT с вышеупомянутым запросом SELECT и увидим результат.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Это приведет к следующему результату, где у нас нет дублирующихся записей.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

SQL – инъекция

Если вы берете пользовательский ввод через веб-страницу и вставляете его в базу данных SQL, есть вероятность, что вы оставите себя широко открытым для проблемы безопасности, известной как SQL-инъекция . Эта глава научит вас, как предотвратить это, и поможет защитить ваши сценарии и операторы SQL в сценариях на стороне сервера, таких как сценарий PERL.

Инъекция обычно происходит, когда вы запрашиваете ввод данных у пользователя, например, его имя, и вместо имени они дают вам оператор SQL, который вы будете бессознательно выполнять в своей базе данных. Никогда не доверяйте предоставленным пользователем данным, обрабатывайте эти данные только после проверки; как правило, это делается с помощью Pattern Matching .

В приведенном ниже примере имя ограничено буквенно-цифровыми символами и подчеркиванием и длиной от 8 до 20 символов (при необходимости измените эти правила).

if (preg_match("/^w{8,20}$/", $_GET['username'], $matches)) {
   $result = mysql_query("SELECT * FROM CUSTOMERS 
      WHERE name = $matches[0]");
} else {
   echo "user name not accepted";
}

Чтобы продемонстрировать проблему, рассмотрим этот отрывок –

// supposed input
$name = "Qadir'; DELETE FROM CUSTOMERS;";
mysql_query("SELECT * FROM CUSTOMSRS WHERE name='{$name}'");

Предполагается, что вызов функции извлекает запись из таблицы CUSTOMERS, где столбец имени совпадает с именем, указанным пользователем. В обычных условиях $ name будет содержать только буквенно-цифровые символы и, возможно, пробелы, такие как строка ilia. Но здесь, добавив совершенно новый запрос к $ name, обращение к базе данных превращается в катастрофу; введенный запрос DELETE удаляет все записи из таблицы CUSTOMERS.

К счастью, если вы используете MySQL, функция mysql_query () не разрешает составлять запросы или выполнять несколько запросов SQL за один вызов функции. Если вы попытаетесь сложить запросы, вызов не удастся.

Однако другие расширения базы данных PHP, такие как SQLite и PostgreSQL, успешно выполняют суммированные запросы, выполняя все запросы, представленные в одной строке, и создают серьезную проблему безопасности.

Предотвращение SQL-инъекций

Вы можете грамотно обрабатывать все escape-символы на языках сценариев, таких как PERL и PHP. Расширение MySQL для PHP предоставляет функцию mysql_real_escape_string () для экранирования входных символов, которые являются специальными для MySQL.

if (get_magic_quotes_gpc()) {
   $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM CUSTOMERS WHERE name='{$name}'");

Как затруднительное положение

Чтобы решить проблему LIKE, пользовательский механизм экранирования должен преобразовывать предоставленные пользователем символы «%» и «_» в литералы. Используйте addcslashes () , функцию, которая позволяет вам указать диапазон символов для экранирования.

$sub = addcslashes(mysql_real_escape_string("%str"), "%_");
// $sub == %str_
mysql_query("SELECT * FROM messages 
   WHERE subject LIKE '{$sub}%'");

SQL – настройка базы данных

Требуется время, чтобы стать экспертом по базам данных или опытным администратором баз данных. Все это имеет большой опыт в разработке различных баз данных и хороших тренингах.

Но следующий список может быть полезен для начинающих, чтобы иметь хорошую производительность базы данных –

  • Используйте структуру базы данных 3BNF, описанную в этом руководстве в главе «Основные понятия СУБД».

  • Избегайте преобразования цифр в символы, поскольку цифры и символы сравниваются по-разному и приводят к снижению производительности.

  • При использовании оператора SELECT извлекайте только ту информацию, которая вам требуется, и избегайте использования * в запросах SELECT, поскольку это приведет к ненужной загрузке системы.

  • Тщательно создавайте свои индексы на всех таблицах, где вы часто выполняете операции поиска. Избегайте индексации таблиц, где у вас меньше операций поиска и больше операций вставки и обновления.

  • Полное сканирование таблицы происходит, когда столбцы в предложении WHERE не имеют индекс, связанный с ними. Вы можете избежать сканирования полной таблицы, создав индекс для столбцов, которые используются в качестве условий в предложении WHERE оператора SQL.

  • Будьте очень осторожны с операторами равенства с действительными числами и значениями даты / времени. У обоих из них могут быть небольшие различия, которые не очевидны для глаз, но делают невозможным точное совпадение, таким образом предотвращая когда-либо ваши запросы возвращать строки.

  • Используйте сопоставление с образцом разумно. LIKE COL% является допустимым условием WHERE, возвращая возвращаемый набор только к тем записям, данные которых начинаются со строки COL. Однако COL% Y не уменьшает количество возвращаемых результатов, так как% Y не может быть эффективно оценено. Усилия по проведению оценки слишком велики, чтобы их можно было рассмотреть. В этом случае используется COL%, но% Y выбрасывается. По той же причине ведущий подстановочный знак% COL эффективно предотвращает использование всего фильтра.

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

  • Для запросов, которые выполняются на регулярной основе, попробуйте использовать процедуры. Процедура – это потенциально большая группа операторов SQL. Процедуры компилируются ядром базы данных и затем выполняются. В отличие от оператора SQL, ядру базы данных не нужно оптимизировать процедуру перед ее выполнением.

  • Избегайте использования логического оператора ИЛИ в запросе, если это возможно. ИЛИ неизбежно замедляет практически любой запрос к таблице существенного размера.

  • Вы можете оптимизировать массовую загрузку данных, удалив индексы. Представьте себе таблицу истории со многими тысячами строк. Эта таблица истории также может иметь один или несколько индексов. Когда вы думаете об индексе, вы обычно думаете о более быстром доступе к таблице, но в случае пакетной загрузки вы можете извлечь выгоду, отбросив индекс (ы).

  • Выполняя пакетные транзакции, выполняйте COMMIT после создания достаточного количества записей вместо их создания после каждого создания записи.

  • Запланируйте регулярную дефрагментацию базы данных, даже если это означает разработку еженедельной программы.

Используйте структуру базы данных 3BNF, описанную в этом руководстве в главе «Основные понятия СУБД».

Избегайте преобразования цифр в символы, поскольку цифры и символы сравниваются по-разному и приводят к снижению производительности.

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

Тщательно создавайте свои индексы на всех таблицах, где вы часто выполняете операции поиска. Избегайте индексации таблиц, где у вас меньше операций поиска и больше операций вставки и обновления.

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

Будьте очень осторожны с операторами равенства с действительными числами и значениями даты / времени. У обоих из них могут быть небольшие различия, которые не очевидны для глаз, но делают невозможным точное совпадение, таким образом предотвращая когда-либо ваши запросы возвращать строки.

Используйте сопоставление с образцом разумно. LIKE COL% является допустимым условием WHERE, возвращая возвращаемый набор только к тем записям, данные которых начинаются со строки COL. Однако COL% Y не уменьшает количество возвращаемых результатов, так как% Y не может быть эффективно оценено. Усилия по проведению оценки слишком велики, чтобы их можно было рассмотреть. В этом случае используется COL%, но% Y выбрасывается. По той же причине ведущий подстановочный знак% COL эффективно предотвращает использование всего фильтра.

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

Для запросов, которые выполняются на регулярной основе, попробуйте использовать процедуры. Процедура – это потенциально большая группа операторов SQL. Процедуры компилируются ядром базы данных и затем выполняются. В отличие от оператора SQL, ядру базы данных не нужно оптимизировать процедуру перед ее выполнением.

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

Вы можете оптимизировать массовую загрузку данных, удалив индексы. Представьте себе таблицу истории со многими тысячами строк. Эта таблица истории также может иметь один или несколько индексов. Когда вы думаете об индексе, вы обычно думаете о более быстром доступе к таблице, но в случае пакетной загрузки вы можете извлечь выгоду, отбросив индекс (ы).

Выполняя пакетные транзакции, выполняйте COMMIT после создания достаточного количества записей вместо их создания после каждого создания записи.

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

Встроенные инструменты настройки

У Oracle есть много инструментов для управления производительностью операторов SQL, но среди них два очень популярны. Эти два инструмента –

  • План объяснения – инструмент определяет путь доступа, который будет выбран при выполнении оператора SQL.

  • tkprof – измеряет производительность по времени, прошедшему во время каждой фазы обработки оператора SQL.

План объяснения – инструмент определяет путь доступа, который будет выбран при выполнении оператора SQL.

tkprof – измеряет производительность по времени, прошедшему во время каждой фазы обработки оператора SQL.

Если вы хотите просто измерить истекшее время запроса в Oracle, вы можете использовать команду SQL * Plus SET TIMING ON.

Обратитесь к документации СУБД для получения более подробной информации о вышеупомянутых инструментах и ​​дефрагментации базы данных.

Понравилась статья? Поделить с друзьями:
  • Хлебопечка бинатон вм 1008 инструкция по применению
  • Разбогатей руководство по выращиванию капитала
  • Приложение smart life инструкция по применению на русском
  • Fubag drive 600 инструкция по применению на русском
  • Биопин космо 20 инструкция по применению