Database
 sql >> база данни >  >> RDS >> Database

SQL INSERT INTO... SELECT Примери

SQL INSERT операторът се използва най-често за вмъкване на отделни редове в таблица.

Но можете също да вмъкнете резултатите от заявка в таблица. Това означава, че можете да вмъкнете няколко реда наведнъж (стига да бъдат върнати от заявката).

Основен пример

Ето основен пример за демонстрация.

INSERT INTO Pets2
SELECT * FROM Pets;

Това вмъква всички редове от Pets таблица в Pets2 таблица.

Предполага се, че вече сме създали Pets2 таблица и че има правилната дефиниция.

Ако не съществува или ако няма правилната дефиниция, ще получите грешка.

Вмъкване на данни от множество таблици

Можете да използвате този метод за вмъкване на данни от множество таблици.

INSERT INTO PetsTypesOwners
SELECT 
    p.PetId,
    p.PetName,
    p.DOB,
    pt.PetTypeId,
    pt.PetType,    
    o.OwnerId,
    o.FirstName,
    o.LastName,
    o.Phone,
    o.Email
FROM Pets p 
INNER JOIN PetTypes pt 
ON p.PetTypeId = pt.PetTypeId 
INNER JOIN Owners o 
ON p.OwnerId = o.OwnerId;

В този пример вмъкнах данни от три таблици в една таблица, наречена PetsTypesOwners .

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

Ако искам да включа тези дублиращи се колони, колоната дестинация ще трябва да включва тези дублиращи се колони, но с различно име за една от всяка двойка дублирани.

Ето пример за избор на всички колони (ще ги избера изрично тук, за да можете да видите имената им):

INSERT INTO PetsTypesOwners2
SELECT 
    p.PetId, 
    p.OwnerId, 
    p.PetTypeId,
    p.PetName,
    p.DOB,
    pt.PetTypeId,
    pt.PetType,    
    o.OwnerId,
    o.FirstName,
    o.LastName,
    o.Phone,
    o.Email
FROM Pets p 
INNER JOIN PetTypes pt 
ON p.PetTypeId = pt.PetTypeId 
INNER JOIN Owners o 
ON p.OwnerId = o.OwnerId;

Можете да видите, че има две колони, наречени OwnerId и две, наречени PetTypeId , всеки от различна таблица. Това са първичните и външните ключове на съответните им таблици.

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

За да се погрижим за този нов INSERT INTO... SELECT изявление, ние се нуждаем нашата целева таблица да има правилния брой колони и със съвместима дефиниция.

Следователно дефиницията на нашата таблица за дестинация може да изглежда така:

CREATE TABLE PetsTypesOwners2 (
    PetId       int NOT NULL PRIMARY KEY,
    PetPetType  varchar(60) NOT NULL,
    PetOwnerId  int NOT NULL,
    PetName     varchar(60) NOT NULL,
    DOB         date NULL,
    PetTypeId   int NOT NULL,
    PetType     varchar(60) NOT NULL,
    OwnerId     int NOT NULL,
    FirstName   varchar(60) NOT NULL,
    LastName    varchar(60) NOT NULL,
    Phone       varchar(20) NOT NULL,
    Email       varchar(254)
);

В този случай поставих префикс към една от всяка дублирана колона с Pet . По-конкретно, създадох PetPetTypeId (което се съпоставя с p.OwnerId колона в заявката) и PetOwnerId колона (която съответства на p.PetTypeId колона в заявката).

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

Вмъкване на данни от изглед

Можете да използвате същия INSERT INTO... SELECT синтаксис за вмъкване на данни в таблица от изглед.

Ето един бърз пример:

INSERT INTO PetTypeCount
SELECT * FROM vPetTypeCount;

В този случай vPetTypeCount е изглед и вмъквам съдържанието му в таблица, наречена PetTypeCount .

Вмъкване на данни от съхранена процедура

Някои СУБД (като SQL Server) също могат да използват същия INSERT INTO... SELECT синтаксис за вмъкване на данни в таблица от съхранена процедура.

Ето един бърз пример:

INSERT INTO PetById
EXEC uspGetPetById 2;

Отново, това предполага, че имаме таблица дестинация с правилната дефиниция.

SELECT INTO Изявление

В зависимост от вашата СУБД има и SELECT INTO изявление, което можете да използвате за автоматично създаване на нова таблица въз основа на набора от резултати, след което вмъкнете този набор от резултати в нея.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изявление на SQL DROP TABLE и различни случаи на употреба

  2. Сканиране на поръчка за разпределение

  3. Отстраняване на проблеми с производителността на процесора на VMware

  4. SQL справочник за начинаещи

  5. Инсталирайте и конфигурирайте софтуера XAMPP на Windows Server 2019