Использование оператора SELECT в команде INSERT
Использование оператора SELECT в команде INSERT
Оператор SELECT в команде INSERT позволяет взять данные из одной или нескольких таблиц и вставить их в другую таблицу. Если вы вставляете значения только для части столбцов, определить значения для других столбцов можно будет позднее с помощью оператора UPDATE.
Если вы вставляете строки из одной таблицы в другую, эти таблицы должны иметь совместимую структуру, т.е. соответствующие столбцы должны иметь одинаковый тип, или же система должна уметь автоматически выполнять нужное преобразование.
Если столбцы в обеих таблицах совместимы по типам и определены в одинаковом порядке в соответствующих операторах CREATE TABLE, перечислять их в команде INSERT необязательно.
Пример
Предположим, что в таблице sale_arhiiv содержатся строки с информацией о продажах в том же формате, что и в таблице tbl_sale.
Для добавления в таблицу sale_arhiiv строк из таблицы tbl_sale, содержащих данные о проджах за 2004 год в можно воспользоваться следующей командой:
SQL:
INSERT INTO sale_arhiiv
SELECT sale_id, client_id, prod_id, amount, saledate
FROM tbl_sale
WHERE YEAR(saledate)=2004
или
INSERT INTO sale_arhiiv
SELECT *
FROM tbl_sale
WHERE YEAR(saledate)=2004
Если столбцы в двух таблицах (таблица, в которую вы вставляете данные, и таблица, из которой вы берете данные) определены в разном порядке в соответствующих операторах CREATE TABLE, для установления соответствия между ними можно воспользоваться предложениями INSERT или SELECT.
ПримерНапример, предположим, что в операторе CREATE TABLE для таблицы tbl_sale столбцы определены в следующем порядке — sale_id, client_id, prod_id, amount, saledate, a для таблицы sale_arviiv — sale_id, prod_id, client_id saledate и amount. Тогда установить соответствие между ними можно с помощью оператора INSERT. Для этого столбцы таблицы sale_arhiiv нужно перечислить в предложении INSERT:
SQL:
INSERT INTO sale_arhiiv
(sale_id, client_id, prod_id, amount, saledate)
SELECT *
FROM tbl_sale
WHERE YEAR(saledate)=2004
Такой же результат можно получить, перечислив в нужном порядке столбцы таблицы tbl_sale в предложении SELECT:
SQL:
INSERT INTO sale_arhiiv
FROM tbl_sale
WHERE YEAR(saledate)=2004
Одним из преимуществ использования оператора SELECT в команде INSERT является возможность включения в него различных выражений (expression) — строк символов, математических формул и функций, позволяющих манипулировать вставляемыми данными.
Кроме того, с помощью оператора SELECT можно добавлять данные как во все сразу, так и в отдельные столбцы, по аналогии с предложением VALUE. Для этого нужно просто задать имена столбцов, в которые вы хотите добавить данные в предложении INSERT
Пример
Ниже приводится пример предложения SELECT, в котором над столбцом выполняются математические действия.
Предположим, что описываемая нами компания купила продукцию у другой фармацевттической компании. Причем, по счастливой случайности, для описания продукции эта компания использовала таблицу tbl_prod с той же структурой, что и таблица tbl_product. Однако при покупке стоимость продукции была увеличена на 10%. Кроме того, данные будут добавлены во все поля таблицы tbl_product, кроме поля tbl_group. Оператор, увеличивающий значения стоимости товаров вставляющий строки из таблицы tbl_prod в таблицу tbl_product, имеет следующий вид:
SQL:
INSERT INTO tbl_product(prod_id, pr_name,price)
SELECT prod_id, name, price * 1. 1 FROM tbl_prod
« Previous | Next »
SQL INSERT INTO SELECT, заявление
❮ Предыдущая Следующая Глава ❯
С помощью SQL можно скопировать информацию из одной таблицы в другую.
INSERT INTO SELECT, заявление копирует данные из одной таблицы и вставляет его в существующую таблицу.
Заявление SQL INSERT INTO SELECT,
INSERT INTO SELECT, оператор выбирает данные из одной таблицы и вставляет его в существующую таблицу. Любые существующие строки в целевой таблице не изменяются.
SQL INSERT INTO SELECT, Синтаксис
Мы можем скопировать все столбцы из одной таблицы в другую, существующую таблицу:
INSERT INTO table2
SELECT * FROM table1;
Или же мы можем скопировать только те столбцы, которые мы хотим в другую, существующую таблицу:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
Демо-версия базы данных
В этом уроке мы будем использовать хорошо известную базу данных Борей.
Ниже приводится подборка из «Customers» таблицы:
Пользовательский ИД | Имя Клиента | Контактное лицо | Адрес | город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitucion 2222 | Mexico D.F. | 05021 | Mexico |
3 | Antonio Moreno Taqueria | Antonio Moreno | Mataderos 2312 | Mexico D.F. | 05023 | Mexico |
И выбор из «Suppliers» таблицы:
SupplierID | Наименование поставщика | Контактное лицо | Адрес | город | Почтовый индекс | Страна | Телефон |
---|---|---|---|---|---|---|---|
1 | Экзотические Liquid | Шарлотта Купер | 49 Гилберта St. | Londona | EC1 4SD | Великобритания | (171) 555-2222 |
2 | Новый Орлеан Cajun наслаждений | Shelley Берк | PO Box 78934 | Жители Нового Орлеана | 70117 | США | (100) 555-4822 |
3 | Homestead Бабушка Келли | Regina Мерфи | 707 Oxford Rd. | Ann Arbor | 48104 | США | (313) 555-5735 |
SQL INSERT INTO SELECT, Примеры
Копирование только несколько столбцов из «Suppliers» Into «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers;
Попробуй сам «
Копирование только немецких поставщиков в «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country=’Germany’;
Попробуй сам «
❮ Предыдущая Следующая Глава ❯
Оператор SQL Select — Database Star
В этой статье мы рассмотрим один из операторов, который вы будете часто использовать в SQL: оператор SELECT.
Содержание
Что такое инструкция SELECT?
Оператор SELECT в SQL используется для извлечения строк из таблицы базы данных . Он позволяет указать, какие столбцы таблицы следует извлекать, и критерии для строк. Возвращенные данные называются результирующим набором и отображаются в средстве разработки или используются приложением, выполнившим запрос.
Это популярное выражение, которое я использую чаще всего. Операторы SELECT могут быть простыми, когда они могут выбирать несколько столбцов из небольшой таблицы. Или они могут быть сложными с большим количеством столбцов и критериев.
Мы рассмотрим синтаксис оператора SELECT в базах данных нескольких разных поставщиков, объясним их особенности и рассмотрим несколько примеров.
Получить сводку по команде SELECT в моих шпаргалках по SQL.
Синтаксис
Синтаксис оператора SQL SELECT в основном одинаков для разных поставщиков баз данных (Oracle, SQL Server, MySQL, PostgreSQL):
ВЫБЕРИТЕ [ ВСЕ | РАЗЛИЧНЫЕ] { select_list } [ В новую_таблицу ] ОТ {источник_таблицы} [ ГДЕ условие_поиска ] [ СГРУППИРОВАТЬ ПО групповому_выражению ] [ ИМЕЕТ search_condition ] [ ORDER BY order_clause ]
Символы в этом синтаксисе:
- {} являются обязательными, например, select_list
- | являются опциями, поэтому вы можете указать либо ВСЕ, либо РАЗЛИЧНЫЕ
- [] — необязательные параметры, такие как WHERE
Этот синтаксис показывает некоторые из наиболее распространенных и простых функций оператора SELECT. Оператор SELECT может делать гораздо больше, например предложения WITH и подзапросы, о которых я писал в другом месте. В этой статье мы просто придерживаемся основ.
Кроме того, если вас интересует полный синтаксис, вы можете найти ссылки для нескольких поставщиков баз данных здесь:
- SQL Server
- Оракул
- MySQL
- PostgreSQL
Давайте рассмотрим каждое ключевое слово в операторе SELECT.
SELECT
Предложение SELECT оператора SELECT относится к первой строке. Он включает в себя слово SELECT и все, что идет после SELECT до следующего ключевого слова, которое либо INTO, либо FROM.
Здесь вы указываете, какие столбцы будут отображаться в результатах.
Столбцы
Чаще всего после предложения SELECT ставится одно или несколько имен столбцов. Здесь вы указываете, какие столбцы вы хотите показать в результатах запроса SELECT.
Например, чтобы отобразить имя и фамилию всех сотрудников, ваш запрос будет начинаться так:
SELECT first_name, last_name . ..
Примечание. SQL не чувствителен к регистру, но чтобы придерживаться единого стандарта кодирования и сделать код более удобочитаемым, я люблю писать ключевые слова SQL с заглавной буквы, а многие другие слова, такие как имена столбцов, — строчными.
В предложение SELECT можно поместить не только имена столбцов. Вы также можете использовать:
- Выражения
- Статические значения
- Функции
- Подзапросы
Выражения
Выражение — это общий термин, обозначающий комбинацию нескольких частей информации. Он может включать в себя математические операторы, объединяющие более одного столбца и другие возможности SQL.
Например, чтобы объединить имя и фамилию в один столбец в результатах запроса, вы можете написать такой запрос:
ВЫБРАТЬ имя_имя || ' ' || фамилия ...
Это объединяет имя, пробел и фамилию в одно поле.
Вы также можете использовать цифры:
ВЫБЕРИТЕ зарплату * 0,2 . ..
Это покажет столбец зарплаты, умноженный на 0,2.
Статические значения
При желании вы можете выбрать статические или жестко заданные значения в запросе SELECT.
Например, этот запрос выберет число 2:
ВЫБЕРИТЕ 2 ...
Или вы можете выбрать текстовое значение:
ВЫБЕРИТЕ «Тест» ...
Зачем вам это нужно? Это может быть полезно при использовании запросов UNION для маркировки каждого набора результатов в зависимости от того, из какой таблицы он получен. Подробнее о ключевых словах UNION и UNION ALL можно прочитать здесь.
Функции
Подобно выражениям, вы также можете использовать функции SQL в предложении SELECT.
Это могут быть простые функции, такие как COUNT:
ВЫБЕРИТЕ СЧЕТ(*) ...
Или они могут быть функциями для отдельных столбцов:
SELECT first_name, LENGTH(first_name) ...
Или вы можете комбинировать функции, чтобы получить другое значение:
SELECT LENGTH(first_name) + LENGTH(last_name) . ..
Функции в SQL могут быть довольно сложными, но они довольно мощные. Если вам нужно, чтобы значение функции отображалось в ваших результатах, есть большая вероятность, что вы можете сделать это с помощью встроенных функций SQL.
Подзапросы
Наконец, вы можете использовать подзапросы в инструкции SELECT. Это более продвинутая функция, и вам, вероятно, не понадобится ее использовать, если только вы не пишете более сложный запрос.
Добавление подзапроса в предложение SELECT означает, что результат подзапроса отображается в виде значения столбца. Один из примеров:
SELECT имя_имя, фамилия_имя, (ВЫБЕРИТЕ СРЕДНЕЕ (зарплата) ОТ сотрудника)) ...
Показывает имя и фамилию, а также среднюю зарплату всех сотрудников. Есть и другие способы получить это значение, но этот просто демонстрирует возможность использования подзапроса в предложении SELECT.
Подробнее о подзапросах я писал в этом посте.
INTO
Предложение INTO — это необязательное предложение в SQL Server, позволяющее заполнить таблицу результатами вашего запроса. Это может быть полезно при разработке базы данных или приложения.
Итак, вместо этого:
- Выполнение запроса SELECT
- Копирование данных в другой формат (Excel, текстовый файл)
- Преобразование данных в сценарий SQL для их вставки
- Запустить скрипт INSERT
Вместо этого вы можете сделать это:
- Запустить сценарий SELECT непосредственно в таблицу
Подробнее об этой функции я расскажу в другой статье, так как она заслуживает отдельного поста.
FROM
В предложении SQL FROM вы указываете, откуда должны быть получены ваши данные. Часто это будет таблица в вашей базе данных, но это также может быть представление или подзапрос.
Синтаксис предложения FROM выглядит одинаково независимо от того, что вы выбираете:
ВЫБЕРИТЕ имя, фамилия С работника;
В этом примере выбираются данные из одной таблицы: таблицы сотрудников. На самом деле мы не можем сказать, таблица это или представление, глядя на имя, но это не имеет значения для цели этого запроса.
Вы также можете использовать объединения для ВЫБОРА данных из нескольких таблиц. Я написал целую статью о объединениях, так как они представляют собой довольно важную функцию SQL, но базовый запрос с объединением выглядит так:
SELECT имя_имя, фамилия_имя, имя_отдела ОТ сотрудника ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ
Этот запрос покажет имя и фамилию сотрудника, а также название его отдела. Он использует INNER JOIN для сопоставления записей на основе идентификатора отдела каждой таблицы.
WHERE
В предложении WHERE инструкции SQL SELECT вы определяете, какие строки возвращать из таблицы или представления. Это необязательное предложение, поэтому, если вы не укажете в своем запросе предложение WHERE, вы получите все записи:
SELECT first_name, last_name С работника;
Чтобы добавить предложение WHERE, вы указываете ключевое слово WHERE, затем ваши критерии:
SELECT first_name, last_name ОТ сотрудника ГДЕ <критерии>;
Критерий — это правило, которое проверяется для каждой строки. Если критерий верен для строки, строка включается в результаты. Если оно ложно, строка не включается.
Например, этот запрос показывает всех сотрудников с first_name John.
ВЫБЕРИТЕ имя, фамилия ОТ сотрудника ГДЕ first_name = 'Джон';
Предложение WHERE может быть довольно сложным. Вы можете иметь несколько критериев, используя ключевые слова AND или OR, вы можете использовать скобки для группировки критериев, вы можете иметь больше и меньше, частичное совпадение и многое другое.
Здесь я написал более подробное руководство по предложению WHERE.
GROUP BY
Предложение SQL GROUP BY используется, когда вы используете агрегатные функции и хотите указать, какие значения вы хотите использовать для расчета этих агрегатных функций.
Например, этот запрос подсчитает всех сотрудников:
SELECT COUNT(*) С работника;
Этот запрос будет подсчитывать сотрудников в каждом отделе, используя предложение GROUP BY:
SELECT dept_id, COUNT(*) ОТ сотрудника СГРУППИРОВАТЬ ПО dept_id;
Это необязательное предложение, но если вы используете агрегатную функцию, такую как COUNT, вместе с другими столбцами, вам необходимо использовать ее.
Подробнее о функции СГРУППИРОВАТЬ ПО читайте в этом руководстве.
HAVING
Предложение HAVING позволяет фильтровать запрос SELECT, в котором используется предложение GROUP BY, на основе результатов после предложения GROUP BY.
В нем используется та же концепция, что и в предложении WHERE, за исключением того, что предложение WHERE фильтрует данные перед группировкой, а предложение HAVING фильтрует данные после группировки.
Например, этот запрос показывает количество сотрудников в каждом отделе, в котором работает более 1 сотрудника.
ВЫБРАТЬ dept_id, COUNT(*) ОТ сотрудника СГРУППИРОВАТЬ ПО dept_id СЧЕТ(*) > 1;
Подробнее о предложении HAVING можно прочитать здесь.
ORDER BY
Предложение ORDER BY позволяет указать порядок отображения результатов запроса.
База данных не гарантирует порядок, в котором возвращаются результаты. порядок (например, упорядоченный по идентификатору), если вы запустите тот же запрос позже, порядок может измениться.
Итак, если вы хотите, чтобы ваши данные располагались в определенном порядке, вы можете использовать предложение ORDER BY:
ВЫБЕРИТЕ имя, фамилия ОТ сотрудника ЗАКАЗАТЬ ПО фамилии ASC;
Вы можете упорядочить по одному или нескольким столбцам в порядке возрастания или убывания. Вы можете прочитать все о предложении ORDER BY здесь.
Порядок обработки операторов SELECT
Как видите, в операторе SELECT задействовано множество различных предложений.
Важно знать, что инструкция SELECT не обрабатывается в том порядке, в котором она написана. Базы данных обрабатывают предложения в определенном порядке. Это делается по многим причинам, например, для поиска в таблице перед поиском столбцов в этой таблице.
Порядок операций или обработки оператора SELECT:
- ОТ
- ВКЛ (функция ПРИСОЕДИНЕНИЯ)
- ПРИСОЕДИНЯЙТЕСЬ
- ГДЕ
- ГРУППА ПО
- ИМЕЮЩИЙ
- ВЫБЕРИТЕ
- ОТЛИЧНЫЙ
- ЗАКАЗАТЬ
Здесь следует отметить несколько моментов:
- Предложение WHERE обрабатывается перед предложением SELECT. Это означает, что вы не можете использовать псевдоним столбца в предложении WHERE, потому что псевдоним столбца назначается в предложении SELECT до того, как предложение WHERE узнает об этом.
- ORDER BY может использовать псевдонимы, потому что это последнее, что нужно обработать.
- Предложение SELECT определяет столбцы и вычисляет их почти в конце процесса.
Заключение
Оператор SELECT является обычным оператором SQL. Вы будете использовать его постоянно. Это может быть так же просто, как выбор нескольких столбцов из таблицы, или он может включать объединения, функции и группировку. Вы также можете использовать подзапросы и другие более продвинутые функции.
SQL — SELECT Запросы
Запросы SELECT извлекают данные строк/столбцов из одной или нескольких существующих таблиц.
Синтаксис:
ВЫБЕРИТЕ столбец1, столбец2,... столбецN ОТ имя_таблицы
Для демонстрационных целей во всех приведенных здесь примерах будет использоваться следующая таблица Employee
.
Эмпирид | Имя | Фамилия | Электронная почта | Телефон № | Зарплата |
---|---|---|---|---|---|
1 | ‘Джон’ | ‘Король’ | ‘[электронная почта защищена]’ | ‘650.127.1834’ | 33000 |
2 | ‘Джеймс’ | ‘Бонд’ | |||
3 | ‘Нина’ | ‘Кочхар’ | ‘[электронная почта защищена]’ | ‘123.456.4568’ | 17000 |
4 | ‘Лекс’ | ‘Де Хаан’ | ‘[электронная почта защищена]’ | ‘123. 456.4569′ | 15000 |
Выбрать все столбцы
Оператор *
представляет все столбцы таблицы. Таким образом, вам не нужно указывать имя каждого столбца в запросе SELECT, чтобы получить данные из всех столбцов.
ВЫБЕРИТЕ * ОТ Сотрудника;
Приведенный выше запрос возвращает данные всех строк и столбцов из таблицы Employee
, как показано ниже.
Эмпирид | Имя | Фамилия | Электронная почта | Телефон № | Зарплата |
---|---|---|---|---|---|
1 | ‘Джон’ | ‘Король’ | ‘[электронная почта защищена]’ | ‘650.127.1834’ | 33000 |
2 | ‘Джеймс’ | ‘Бонд’ | |||
3 | ‘Нина’ | ‘Кочхар’ | ‘[электронная почта защищена]’ | ‘123. 456.4568′ | 17000 |
4 | ‘Лекс’ | ‘Де Хаан’ | ‘[электронная почта защищена]’ | ‘123.456.4569’ | 15000 |
Выберите данные определенных столбцов
Укажите имена столбцов в операторе SELECT, чтобы получить данные только из этих столбцов, как показано ниже.
ВЫБЕРИТЕ EmpId, Имя, Фамилию ОТ Сотрудника;
Эмпирид | Имя | Фамилия |
---|---|---|
1 | ‘Джон’ | ‘Король’ |
2 | ‘Джеймс’ | ‘Бонд’ |
3 | ‘Нина’ | ‘Кочхар’ |
4 | ‘Лекс’ | ‘Де Хаан’ |
Псевдоним для столбцов и таблиц
Вы можете указать псевдоним для одного или нескольких столбцов в запросе SELECT. Псевдоним — это временное имя таблицы или столбца в запросе.
Преимущество псевдонима:
- Псевдоним делает столбец более читаемым в результирующем наборе.
- Псевдоним используется для присвоения небольшим, сокращенным и осмысленным именам таблицам в запросе, чтобы можно было легко ссылаться на таблицы при объединении нескольких таблиц.
- Псевдоним помогает нам определить, какой столбец принадлежит какой таблице в случае получения данных из нескольких таблиц.
Следующий запрос указывает «Идентификатор сотрудника»
для EmpId
и Имя
в качестве псевдонима для столбца Имя
в запросе SELECT.
Укажите псевдоним в одинарных или двойных кавычках, если вы хотите, чтобы в нем был пробел или другая строка.
SELECT EmpId "Идентификатор сотрудника", Имя КАК Имя ОТ Сотрудника;
Идентификатор сотрудника | Имя |
---|---|
1 | ‘Джон’ |
2 | ‘Джеймс’ |
3 | ‘Нина’ |
4 | ‘Лекс’ |
Операторы в операторе SELECT
В операторе select можно указать операторы для выполнения некоторых действий со значением столбца. Например, оператор +
в MS SQL Server и || Оператор
в базах данных PostgreSQL, MySQL и Oracle объединяет строковые значения или добавляет числовые значения.
Следующее объединяет два столбца varchar
в результате.
ВЫБЕРИТЕ EmpId, Имя + ' ' + Фамилия КАК "Полное имя" ОТ Сотрудника;
Эмпирид | Полное имя |
---|---|
1 | ‘Джон Кинг’ |
2 | ‘Джеймс Бонд’ |
3 | ‘Нина Кочхар’ |
4 | ‘Лекс Де Хаан’ |
ИЗ Пункт
Оператор SELECT должен содержать условие FROM. Предложение FROM используется для перечисления имен таблиц, из которых мы хотим выбрать данные, и указать соединения между этими таблицами.