Inserați în sintaxa Oracle selectată. Bazele T-SQL

Acasă / hard disk-uri

Folosind SQL, puteți copia informații dintr-un tabel în altul.

Instrucțiunea INSERT INTO SELECT copiază datele dintr-un tabel și le inserează într-un tabel existent.

Instrucțiunea SQL INSERT INTO SELECT,

Instrucțiunea INSERT INTO SELECT selectează datele dintr-un tabel și le inserează într-un tabel existent. Orice rânduri existente în tabelul țintă nu sunt modificate.

SQL INSERT INTO SELECT, Sintaxă

Putem copia toate coloanele dintr-un tabel în altul, tabel existent:

INSERT INTO tabelul 2
SELECTAȚI * DIN tabelul 1;

Sau putem copia doar coloanele pe care le dorim într-un alt tabel existent:

INSERT INTO tabelul 2
(nume_coloană(e))
SELECTA nume_coloană(e)
DIN tabelul 1;

Versiunea demo a bazei de date

În acest tutorial vom folosi binecunoscuta bază de date Northwind.

Mai jos este o selecție din tabelul „Clienți”:

ID-ul de utilizatorNumele clientuluiPersoana de contactAdresaoraşCod poștalŢară
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germania
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Mexic D.F. 05021 Mexic
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexic D.F. 05023 Mexic

Și selecția din tabelul „Furnizori”:

SQL INSERT INTO SELECT, Exemple

Copierea doar câteva coloane din „Furnizori” în „Clienți”:

Copierea doar furnizorilor germani la „Clienți”.

Echipă adaugă rânduri la tabel sau vizualizarea mesei principale.

Sintaxa comenzii Sql INSERT

Inserați sintaxa comenzii


Cuvinte cheie și parametri de bază ai comenzii INSERT
  • schemă- identificator de permisiune, care se potrivește de obicei cu numele unui utilizator
  • vedere la masă- numele tabelului în care trebuie introduse rândurile; dacă este specificată o vizualizare, rândurile sunt inserate în tabelul principal al vizualizării
  • subinterogare_1- o subinterogare pe care serverul o procesează în același mod ca o vizualizare
  • coloană- un tabel sau o coloană de vizualizare în care se introduce valoarea din frază pentru fiecare rând inserat VALORI sau subinterogare; dacă una dintre coloanele tabelului este omisă din această listă, valoarea coloanei pentru rândul inserat este valoarea implicită a coloanei definită când a fost creat tabelul. Dacă o listă de coloane este complet omisă, clauza VALORI sau interogarea trebuie să determine valori pentru toate coloanele din tabel
  • VALORI- definește un șir de valori care vor fi inserate în tabel sau vizualizare; sensul trebuie definit în propoziție VALORI pentru fiecare coloană din lista de coloane
  • subinterogare_2- o subinterogare care returnează rândurile inserate în tabel; lista de selectare a acestei subinterogări trebuie să aibă același număr de coloane ca și lista de coloane de instrucțiune

Declaraţie cu fraza VALORI adaugă un singur rând la tabel. Această linie conține valorile definite de frază VALORI.
Declarație cu subinterogareîn loc de o frază VALORI adaugă toate rândurile returnate de subinterogare la tabel. Serverul procesează subinterogareși inserează fiecare rând returnat în tabel. Dacă subinterogarea nu selectează niciun rând, serverul nu inserează niciun rând în tabel.
Subinterogare poate accesa orice tabel sau vizualizare, inclusiv tabelul de afirmații țintă . Serverul atribuie valori câmpurilor din rândurile noi în funcție de poziția internă a coloanelor din tabel și de ordinea valorilor frazei VALORI sau în lista de selecție a interogărilor. Dacă din lista de coloane lipsesc vreo coloană, serverul le atribuie valorile implicite definite la crearea tabelului. Dacă oricare dintre aceste coloane are o constrângere NOT NULL, atunci serverul returnează o eroare care indică faptul că constrângerea a fost încălcată și anulează instrucțiunea INSERT.
Când este emisă o instrucțiune INSERT, orice declanșator INSERT definit pe tabel este activat.

INSERT INTO Exemplul 1

INSERT INTO dept VALORI(50, „PRODUSE”, „SAN FRANCISCO”);

INSERT INTO Clienți (oraș, cname, cnum) VALORI(„Londra”, „Hoffman”, 2001);

INSERT INTO Exemplul 2
Următoarea comandă copiază datele angajaților companiei ale căror comisioane depășesc 25% din venit în tabelul de bonusuri:

INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0,25 * sal;

INSERT INTO Exemplul 3
Dacă trebuie să introduceți NUL-valoare, trebuie să o specificați ca valoare normală după cum urmează:

INSERT INTO Vânzători VALUES (1001, „Peel”, NULL,12);

INSERT INTO Exemplul 4
Comanda poate fi folosită pentru a prelua valori dintr-un tabel și a le plasa în altul folosind o interogare. Pentru a face acest lucru, este suficient să înlocuiți propoziția VALORI la cererea corespunzătoare:

INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE oraș = 'Londra';

MySQL INSERT

Pentru a insera noi rânduri în baza de date Date MySQL folosit Comanda INSERT, exemple de comandă sunt date mai jos:
INSERT INTO Exemplul 1.
Inserarea unui nou rând în tabel table_name.

INSERT INTO

INSERT INTO Exemplul 2.
Inserarea unui nou rând în tabelul table_name indicând inserarea datelor în coloanele de care avem nevoie.

INSERT INTO table_name VALUES('1','165','0','name');

În baza de date MySQL Este posibil să inserați mai multe linii noi folosind o singură comandă.
INSERT INTO Exemplul 3.
Inserarea mai multor rânduri în tabel table_name.

INSERT INTO table_name (tbl_id, chislo, chislotwo, name) VALORI ('1′,'159′,'34','name1′), ('2′,'14','61','name2′), ('3 ′,'356′,'8′,'nume3');

Instrucțiunea INSERT inserează înregistrări noi într-un tabel. În acest caz, valorile coloanei pot fi constante literale sau pot fi rezultatul executării unei subinterogări. În primul caz, o instrucțiune INSERT separată este folosită pentru a insera fiecare rând; în al doilea caz, vor fi inserate atâtea rânduri câte sunt returnate de subinterogare.

Sintaxa operatorului este următoarea:

    INSERT INTO [(,...)]

    (VALORI(,…))

  1. | (VALORI IMPLICITE)

După cum puteți vedea din sintaxa prezentată, lista de coloane este opțională (parantezele pătrate din descrierea sintaxei indică acest lucru). Dacă lipsește, lista valorilor introduse trebuie să fie completă, adică să furnizeze valori pentru toate coloanele tabelului. În acest caz, ordinea valorilor trebuie să corespundă cu ordinea specificată de instrucțiunea CREATE TABLE pentru tabelul în care sunt inserate rândurile. În plus, aceste valori trebuie să fie de același tip de date ca și coloanele în care sunt introduse. Ca exemplu, luați în considerare inserarea unui rând în tabelul Product creat de următoarea instrucțiune CREATE TABLE:

    Produs CREATE TABLE

    maker char (1) NOT NULL,

    model varchar(4) NOT NULL,

    tastați varchar(7) NOT NULL

Să presupunem că doriți să adăugați modelul PC 1157 de la producătorul B la acest tabel. Acest lucru se poate face cu următoarea afirmație:

    INSERT INTO Product

    VALORI ("B", 1157, "PC");

Dacă specificați o listă de coloane, puteți modifica ordinea „naturală” a acestora:

    INSERT INTO Product (tip, model, producator)

    VALORI ("PC", 1157, "B");

S-ar părea că aceasta este o caracteristică complet inutilă, ceea ce face doar designul mai greoi. Totuși, câștigă dacă coloanele au valori implicite. Luați în considerare următoarea structură a tabelului:

    CREATE TABLE product_D

    maker char (1) NULL,

    model varchar(4) NULL,

    tip varchar (7 ) NOT NULL DEFAULT "PC"

Rețineți că aici valorile tuturor coloanelor au valori implicite (primele două sunt NULL și ultima coloană este de tip - PC). Acum am putea scrie:

    INSERT INTO Product_D (model, producător)

    VALORI(1157, „B”);

În acest caz, valoarea lipsă la inserarea unui rând va fi înlocuită cu valoarea implicită - PC. Rețineți că dacă unei coloane nu i se dă o valoare implicită în instrucțiunea CREATE TABLE și este specificată o constrângere NOT NULL, care interzice utilizarea lui NULL în această coloană tabele, valoarea implicită este NULL .

Se pune întrebarea: este posibil să nu specificați o listă de coloane și, totuși, să folosiți valorile implicite? Răspunsul este da. Pentru a face acest lucru, în loc să specificați în mod explicit valoarea, utilizați cuvântul rezervat DEFAULT :

    INSERT INTO Product_D

    VALORI ("B" , 1158 , IMPLICIT ) ;

Deoarece toate coloanele au valori implicite, pentru a insera un rând cu valori implicite puteți scrie:

    INSERT INTO Product_D

    VALORI(DEFAULT, DEFAULT, DEFAULT);

Totuși, pentru acest caz există o construcție specială VALORI DEFAULT (vezi sintaxa operatorului), cu care operatorul de mai sus poate fi rescris sub forma

    INSERT INTO Product_D DEFAULT VALUES ;

Rețineți că atunci când introduceți un rând în tabel, toate restricțiile impuse acest tabel. Acestea pot fi constrângeri de cheie primară sau de index unic, constrângeri CHECK sau constrângeri de integritate referenţială. Dacă orice constrângere este încălcată, inserarea rândului va fi respinsă. Să luăm acum în considerare cazul utilizării unei subinterogări. Să presupunem că trebuie să inserăm în tabelul Product_D toate rândurile din tabelul Product legate de modele calculatoare personale(tip = „PC”). Deoarece valorile de care avem nevoie sunt deja într-un tabel, generarea manuală a rândurilor inserate este, în primul rând, ineficientă și, în al doilea rând, poate permite erori de introducere. Utilizarea unei subinterogări rezolvă aceste probleme:

Utilizarea caracterului „*” într-o subinterogare este în acest caz, justificată, deoarece ordinea coloanelor este aceeași pentru ambele tabele. Dacă nu ar fi cazul, ar trebui aplicată o listă de coloane fie în instrucțiunea INSERT, fie în subinterogare sau ambele, care să se potrivească cu ordinea coloanelor:

Aici, ca și înainte, puteți specifica nu toate coloanele dacă doriți să utilizați valorile implicite existente, de exemplu:

În acest caz, coloana tip a tabelului Product_D va fi înlocuită cu valoarea implicită PC pentru toate rândurile inserate.

Rețineți că atunci când utilizați o subinterogare care conține un predicat, vor fi inserate numai acele rânduri pentru care valoarea predicatului este TRUE (nu NECUNOSCUT!). Cu alte cuvinte, dacă coloana de tip din tabelul Product ar putea fi NULL și acea valoare a fost prezentă într-un număr de rânduri, atunci acele rânduri nu ar fi inserate în tabelul Product_D.

Tehnica artificială de utilizare a unei subinterogări care formează un rând cu clauza UNION ALL vă permite să depășiți limitarea inserării unui rând în instrucțiunea INSERT atunci când utilizați constructorul de rând în clauza VALUES. Deci, dacă trebuie să inserăm mai multe rânduri folosind o singură instrucțiune INSERT, putem scrie:

    INSERT INTO Product_D

    SELECT "B" AS maker, 1158 AS model, "PC" AS tip

    UNIREA TOȚI

    SELECTAȚI „C”, 2190, „Laptop”

    UNIREA TOȚI

    SELECTAȚI „D” , 3219 , „Imprimantă” ;

Utilizarea UNION ALL este de preferată față de UNION chiar dacă absența rândurilor duplicate este garantată, deoarece în acest caz nu se va efectua nicio verificare pentru eliminarea duplicatelor.

Trebuie remarcat faptul că inserarea mai multor tupluri folosind constructorul de rânduri este deja implementată în Sistem de management al bazelor de date relaționale (DBMS), dezvoltat de Microsoft Corporation.Structured Query Language) este un limbaj de computer universal folosit pentru a crea, modifica și manipula date în baze de date relaționale. SQL Server 2008. Având în vedere această posibilitate, ultima interogare poate fi rescrisă ca:

    INSERT INTO Product_D VALUES

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),

Am învățat cum să creăm o bază de date și tabele în aceste baze de date, dar tabelele s-au dovedit a fi „goale”. Și în acest articol vreau să vă învăț cum să introduceți date în aceste tabele și instrucțiunea SQL numită „INSERT” ne va ajuta în acest sens. Să începem:

INTRODUCE- un operator SQL care vă permite să adăugați rânduri la un tabel, umplându-le cu valori. Valorile pot fi inserate prin enumerare folosind valorile cuvântului și înscriindu-le în paranteze separate prin virgule.

Instrucțiunea SQL INSERT care specifică coloanele are următoarea sintaxă:

INSERT INTO ([, ... ]) valori (,...);

De asemenea, valorile pot fi scrise fără a specifica coloane:

INSERT INTO valorile (,...);

Valorile pot fi înregistrate și folosind Declarație SQL SELECT (vom studia instrucțiunea SELECT puțin mai târziu):

INSERT INTO SELECT Nume coloană,... FROM nume tabel

Utilizarea operatorului SQL SELECT Puteți introduce mai mult de o înregistrare. În cazul în care nu există valori specificate pentru niciun câmp de tabel, acestea vor fi înlocuite cu valoarea implicită nulă.

Exemplu de lucru al operatorului

Există o masă „Planete”. Folosind instrucțiunea SQL INSERT, trebuie să adăugați o înregistrare, atribuind următoarele valori câmpurilor tabelului - ID: 4; PlanetNume: Venus; Raza: 6051; SunSeason: 243; Anul deschiderii: 1610; HavingRings: Nu; Deschis: Galileo Galilei;

INSERT INTO Planete (ID, PlanetName, Radius, SunSeason, OpeningYear, HavingRings, Opener) VALORI (4, „Venus”, 6051, 243, 160, „Nu”, „Galileo Galilei”);

După executarea comenzii, tabelul Planetelor va arăta astfel (după cum puteți vedea, a fost adăugat un nou rând și este foarte simplu):



Probabil ați observat că am arătat acest exemplu bazat pe prima sintaxă. Unde trebuie să scrieți numele fiecărei coloane, dar același exemplu poate fi scris diferit:

INSERT INTO Planets VALUES (4, „Venus”, 6051, 243, 160, „Nu”, „Galileo Galilei”);

Acest exemplu va funcționa dacă trebuie să introduceți sub fiecare coloană și știți ordinea acestor coloane. În caz contrar, datele pot ajunge în coloana greșită.

Aici vine mica mea lecție despre instrucțiunea INSERT în SQL. Sper sa iti fie totul clar, daca ai intrebari scrie si cu siguranta iti voi raspunde.

În secțiunile anterioare, ne-am uitat la munca de recuperare a datelor din tabele pre-create. Acum este timpul să ne dăm seama cum putem crea/șterge tabele, adăuga înregistrări noi și șterge pe cele vechi. În aceste scopuri în SQL Există operatori precum: CREA- creează un tabel, MODIFICA- modifică structura tabelului, PICĂTURĂ- șterge un tabel sau un câmp, INTRODUCE- adaugă date la tabel. Să începem să facem cunoștință cu acest grup de operatori de la operator INTRODUCE.

1. Adăugarea de linii întregi

După cum sugerează și numele, operatorul INTRODUCE folosit pentru a insera (adăuga) rânduri la un tabel al bazei de date. Adăugarea se poate face în mai multe moduri:

  • - adăugați o linie completă
  • - adăugați o parte dintr-o linie
  • - adăugați rezultatele interogării.

Deci, pentru a adăuga un nou rând la un tabel, trebuie să specificăm numele tabelului, să listăm numele coloanelor și să specificăm valoarea pentru fiecare coloană folosind constructul INSERT INTO nume_tabel (câmp1, câmp2 ...) VALORI (valoare1, valoare2...). Să ne uităm la un exemplu.

INSERT INTO Vânzători (ID, Adresă, Oraș, Nume_vânzător, Țară) VALORI("6", "1st Street", "Los Angeles", "Harry Monroe", "SUA")

De asemenea, puteți modifica ordinea numelor coloanelor, dar, în același timp, trebuie să modificați ordinea valorilor din parametru VALORI.

2. Adăugarea unei părți din linii

În exemplul anterior, când se utilizează operatorul INTRODUCE am marcat în mod explicit numele coloanelor din tabel. Folosind această sintaxă, putem sări peste câteva coloane. Aceasta înseamnă că introduceți valori pentru unele coloane, dar nu le furnizați pentru altele. De exemplu:

INSERT INTO Vânzători (ID, Oraș, Seller_name) VALUES("6", "Los Angeles", "Harry Monroe")

În acest exemplu, nu am specificat o valoare pentru două coloane AdresaŞi Ţară. Puteți exclude unele coloane din declarație INSERT INTO, dacă acest lucru permite definirea tabelului. În acest caz, trebuie îndeplinită una dintre condiții: această coloană este definită ca fiind validă NUL(absența oricărei valori) sau valoarea implicită specificată în definiția tabelului. Aceasta înseamnă că, dacă nu este specificată nicio valoare, va fi utilizată valoarea implicită. Dacă lipsește o coloană dintr-un tabel care nu permite să apară valori în rândurile sale NULși nu are o valoare implicită definită, SGBD va genera un mesaj de eroare și rândul nu va fi adăugat.

3. Adăugarea datelor selectate

În exemplul anterior, am inserat date în tabele introducându-le manual în interogare. Cu toate acestea, operatorul INSERT INTO ne permite să automatizăm acest proces dacă dorim să inserăm date dintr-un alt tabel. În acest scop în SQL există o astfel de construcție ca INSERT INTO... SELECTEAZĂ.... Acest design vă permite să selectați simultan date dintr-un tabel și să le introduceți în altul. Să presupunem că avem un alt tabel Sellers_EU cu o listă a vânzătorilor bunurilor noastre din Europa și trebuie să le adăugăm la tabelul general Vânzători. Structura acestor tabele este aceeași (același număr de coloane și aceleași nume), dar datele sunt diferite. Pentru a face acest lucru, putem scrie următoarea interogare:

INSERT INTO Sellers (ID, Adresă, Oraș, Seller_name, Country) SELECTID, Adresă, Oraș, Nume_vânzător, Țară FROM Sellers_EU

Trebuie să fiți atenți, astfel încât valorile cheilor interne să nu fie repetate (câmp ID), V altfel va apărea o eroare. Operator SELECTA poate include și sugestii UNDE pentru a filtra datele. De asemenea, trebuie menționat că SGBD nu acordă atenție denumirilor coloanelor conținute în declarație SELECTA, pentru ea contează doar ordinea în care sunt aranjate. Prin urmare, datele din prima coloană specificată care au fost selectate datorită SELECTA, se va completa în prima coloană a tabelului în orice caz Vânzători, specificat după operator INSERT INTO, indiferent de numele câmpului.

4. Copierea datelor dintr-un tabel în altul

Adesea, atunci când lucrați cu baze de date, este nevoie să creați copii ale oricăror tabele în scopul copierii de rezervă sau modificării. De făcut copie integrală tabele în SQL există un operator separat SELECTAȚI ÎNTRE. De exemplu, trebuie să creăm o copie a tabelului Vânzători, va trebui să scrieți cererea după cum urmează:

SELECT * INTO Sellers_new FROM Sellers

Spre deosebire de designul anterior INSERT INTO... SELECTEAZĂ... Când datele sunt adăugate la un tabel existent, designul copiază datele în noul tabel. De asemenea, puteți spune că primul construct importă date, iar al doilea exportă. Când utilizați designul SELECTAȚI ... ÎN ... DIN ... Ar trebui luate în considerare următoarele:

  • - puteți folosi orice propoziție în operator SELECTA, ca GROUP BYŞi AVÂND
  • - puteți utiliza un join pentru a adăuga date din mai multe tabele
  • - datele pot fi adăugate doar într-un singur tabel, indiferent de câte tabele au fost preluate.

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații