Bazele T-SQL. DML. Exemple de interogări SQL la baza de date MySQL Adăugarea de rânduri întregi

Bazele T-SQL. DML. Exemple de interogări SQL la baza de date MySQL Adăugarea de rânduri întregi

Î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, CĂDERE BRUSCA- ș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 INTRODU IN 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 a liniilor

Î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 AbordareȘi Țară. Puteți exclude unele coloane din declarație INTRODU IN, 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ă, DBMS 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 INTRODU IN 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... SELECTE.... 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 Vânzători_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 Vânzători (ID, Adresă, Oraș, Nume_vânzător, Țară) SELECTID, Adresă, Oraș, Nume_vânzător, Țară FROM Sellers_EU

Trebuie să acordați atenție, astfel încât valorile cheilor interne să nu fie repetate (câmp ID), altfel va apărea o eroare. Operator SELECTAȚI 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ȚI, pentru ea contează doar ordinea în care sunt aranjate. Prin urmare, datele din prima coloană specificată care au fost selectate datorită SELECTAȚI, se va completa în prima coloană a tabelului în orice caz Vânzători, specificat după operator INTRODU IN, 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. Pentru a face o copie completă a unui tabel, SQL oferă o instrucțiune 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... SELECTE... 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ȚI, ca A SE GRUPA CUȘ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.

Ultima actualizare: 13.07.2017

Pentru a adăuga date, utilizați comanda INSERT, care are următoarea sintaxă formală:

INSERT nume_tabel [(listă_coloană)] VALUES (valoare1, valoare2, ... valoareN)

Mai întâi vine expresia INSERT INTO, apoi în paranteze puteți specifica o listă de coloane separate prin virgulă la care trebuie adăugate date, iar la sfârșit, după cuvântul VALUES, valorile de adăugat pentru coloane sunt enumerate în parantezele.

De exemplu, să presupunem că următoarea bază de date a fost creată anterior:

CREAȚI BAZĂ DE DATE productsdb; GO USE productsdb; CREATE TABLE Produse (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

Să îi adăugăm o linie folosind comanda INSERT:

INSERT Products VALUES ("iPhone 7", "Apple", 5, 52000)

După executarea cu succes în SQL Server Management Studio, mesajul „1 rând(e) afectat(e)” ar trebui să apară în câmpul de mesaj:

Merită să țineți cont de faptul că valorile pentru coloanele din paranteze după cuvântul cheie VALUES sunt transmise în ordinea în care sunt declarate. De exemplu, în instrucțiunea CREATE TABLE de mai sus, puteți vedea că prima coloană este Id. Dar, deoarece atributul IDENTITY este specificat pentru acesta, valoarea acestei coloane este generată automat și poate fi omisă. A doua coloană reprezintă ProductName, deci prima valoare, șirul „iPhone 7”, va fi trecută în acea coloană. A doua valoare - șirul „Apple” va fi trecut la a treia coloană Producător și așa mai departe. Adică, valorile sunt transmise coloanelor după cum urmează:

    Nume produs: „iPhone 7”

    Producator: "Apple"

De asemenea, atunci când introduceți valori, puteți specifica coloanele imediate la care se vor adăuga valori:

INSERT INTO Products (ProductName, Price, Manufacturer) VALUES ("iPhone 6S", 41000, "Apple")

Aici valoarea este specificată doar pentru trei coloane. Mai mult, acum valorile sunt transmise în ordinea coloanelor:

    Nume produs: „iPhone 6S”

    Producator: "Apple"

Pentru coloanele nespecificate (în acest caz ProductCount), se va adăuga o valoare implicită dacă este specificat atributul DEFAULT sau o valoare NULL. Cu toate acestea, coloanele nespecificate trebuie să fie nullabile sau să aibă un atribut DEFAULT.

De asemenea, putem adăuga mai multe rânduri deodată:

INSERT INTO Products VALUES ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

În acest caz, trei rânduri vor fi adăugate la tabel.

De asemenea, atunci când adăugăm, putem specifica că coloana ar trebui să aibă o valoare implicită folosind cuvântul cheie DEFAULT sau o valoare NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ("Mi6", "Xiaomi", DEFAULT, 28000)

În acest caz, se va folosi valoarea implicită pentru coloana ProductCount (dacă este setată, dacă nu este, atunci NULL).

Dacă toate coloanele au un atribut DEFAULT care specifică o valoare implicită sau sunt nullabile, puteți introduce valori implicite pentru toate coloanele:

INSERT INTO Products VALORI IMPLICITE

Dar dacă luăm tabelul Produse, atunci o astfel de comandă va eșua cu o eroare, deoarece mai multe câmpuri nu au atributul DEFAULT și, în același timp, nu permit valoarea NULL.

Ștergerea intrărilor

Pentru a șterge înregistrările dintr-un tabel, utilizați operatorul DELETE:

DELETE FROM Tablename WHERE condiție;

Acest operator elimină înregistrările (nu valorile individuale ale coloanelor) din tabelul specificat care îndeplinesc condiția specificată. O condiție este o expresie logică, ale cărei diferite construcții au fost discutate în laboratoarele anterioare.

Următoarea interogare șterge înregistrările din tabelul Client unde valoarea coloanei LName este „Ivanov”:

ȘTERGERE DE LA Client

WHERE LName = „Ivanov”

Dacă tabelul conține informații despre mai mulți clienți cu numele de familie Ivanov, atunci toți vor fi șterse.

Instrucțiunea WHERE poate conține o subinterogare pentru selectarea datelor (instrucțiunea SELECT). Subinterogările dintr-o instrucțiune DELETE funcționează exact la fel ca într-o instrucțiune SELECT. Următoarea interogare elimină toți clienții din orașul Moscova, în timp ce identificatorul unic al orașului este returnat folosind o subinterogare.

ȘTERGERE DE LA Client

WHERE IdCity IN (SELECTARE IdCity FROM City WHERE CityName = „Moscova”)

Transact-SQL extinde SQL standard, permițându-vă să utilizați o clauză FROM suplimentară într-o instrucțiune DELETE. Această extensie, care specifică o îmbinare, poate fi utilizată în locul unei subinterogări în clauza WHERE pentru a specifica rândurile care urmează să fie șterse. Vă permite să specificați date din al doilea FROM și să eliminați rândurile corespunzătoare din tabel din prima clauză FROM. În special, interogarea anterioară poate fi rescrisă după cum urmează

ȘTERGERE DE LA Client

DE LA Client k INNER JOIN

Operația de ștergere a înregistrărilor dintr-un tabel este periculoasă în sensul că este asociată cu riscul pierderii ireversibile a datelor în cazul unor erori semantice (dar nu sintactice) în formularea expresiei SQL. Pentru a evita orice bătaie de cap, înainte de a șterge înregistrările, se recomandă să rulați mai întâi interogarea de selectare corespunzătoare pentru a vedea ce înregistrări vor fi șterse. Deci, de exemplu, înainte de a executa interogarea de ștergere discutată mai devreme, nu ar strica să rulați interogarea de selectare corespunzătoare.

SELECTAȚI *

DE LA Client k INNER JOIN

Orașul c ON k.IdCity = c.IdCity ȘI c.CityName = „Moscova”

Pentru a șterge toate înregistrările dintr-un tabel, utilizați pur și simplu instrucțiunea DELETE fără cuvântul cheie WHERE. În acest caz, tabelul însuși cu toate coloanele definite în el este salvat și este gata pentru introducerea de noi înregistrări. De exemplu, următoarea interogare șterge înregistrările pentru toate produsele.

ȘTERGERE DIN produs

Misiunea pentru muncă independentă: Formulați o interogare în SQL pentru a șterge toate comenzile care nu conțin un singur produs (adică toate comenzile goale).

Pe lângă instrucțiunea SELECT discutată mai devreme, limbajul de manipulare a datelor (DML) conține alte trei instrucțiuni: INSERT, UPDATE și DELETE. La fel ca instrucțiunea SELECT, aceste trei instrucțiuni funcționează fie pe tabele, fie pe vederi. Acest articol discută declarația INSERT, iar celelalte două declarații sunt discutate în articolul următor.

instrucțiunea INSERT inserează rânduri (sau părți de rânduri) într-un tabel. Există două forme diferite ale acestei instrucțiuni:

INSERT tab_name [(col_list)] DEFAULT VALUES | VALORI (( DEFAULT | NULL | expresie ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Convenții de sintaxă

Prima formă a instrucțiunii vă permite să introduceți un rând (sau o parte a acestuia) în tabel. Iar a doua formă a instrucțiunii INSERT vă permite să inserați într-un tabel setul de rezultate al unei instrucțiuni SELECT sau al unei proceduri stocate executată de o instrucțiune EXECUTE. Procedura stocată trebuie să returneze date pentru a fi introduse în tabel. Când este utilizată cu o instrucțiune INSERT, o instrucțiune SELECT poate selecta valori dintr-un tabel diferit sau din același tabel în care sunt inserate datele, atâta timp cât tipurile de date ale coloanelor corespunzătoare sunt compatibile.

Pentru ambele formulare, tipul de date al fiecărei valori introduse trebuie să fie compatibil cu tipul de date al coloanei corespunzătoare din tabel. Toate șirurile și datele temporare trebuie incluse între ghilimele; Valorile numerice nu trebuie să fie incluse între ghilimele.

Inserarea unui singur rând

Pentru ambele forme ale instrucțiunii INSERT, specificarea explicit a listei de coloane este opțională. A nu enumera coloanele este același lucru cu specificarea tuturor coloanelor din tabel.

Parametrul VALORI IMPLICITE inserează valori implicite pentru toate coloanele. Coloanele cu tipul de date TIMESTAMP sau proprietatea IDENTITY sunt inserate implicit cu valori care sunt generate automat de sistem. Pentru coloanele de alte tipuri de date, valoarea implicită non-nulă corespunzătoare este inserată dacă este disponibilă, sau NULL în caz contrar. Dacă o coloană nu permite valori nule și nu are o valoare implicită definită, instrucțiunea INSERT eșuează și este afișat un mesaj.

Exemplul de mai jos inserează rânduri în tabelul Employee din baza de date SampleDb, demonstrând utilizarea unei instrucțiuni INSERT pentru a insera o cantitate mică de date în baza de date:

UTILIZAȚI SampleDb; INSERT INTO Employee VALUES (34990, „Andrey”, „Batonov”, „d1”); INSERT INTO Employee VALUES (38640, „Alexey”, „Vasin”, „d3”);

Există două moduri diferite de a insera valori într-un rând nou. Instrucțiunea INSERT din exemplul de mai jos utilizează în mod explicit cuvântul cheie NULL și inserează o valoare NULL în coloana corespunzătoare:

UTILIZAȚI SampleDb; INSERT INTO Employee VALUES (34991, „Andrey”, „Batonov”, NULL);

Pentru a insera valori în unele (dar nu în toate) coloanele unui tabel, de obicei trebuie să specificați în mod explicit acele coloane. Coloanele nespecificate trebuie fie să permită valori nule, fie să aibă o valoare implicită definită.

UTILIZAȚI SampleDb; INSERT INTO Employee(Id, Prenume, Prenume) VALUES (34992, „Andrey”, „Batonov”);

Cele două exemple anterioare sunt echivalente. În tabelul Employee, singura coloană care permite valori NULL este coloana DepartmentNumber, iar toate celelalte coloane au fost dezactivate de clauza NOT NULL din instrucțiunea CREATE TABLE.

Ordinea valorilor în oferta VALUES Instrucțiunile INSERT pot diferi de ordinea specificată în instrucțiunea CREATE TABLE. În acest caz, ordinea lor trebuie să se potrivească cu ordinea în care sunt listate coloanele corespunzătoare în lista de coloane. Mai jos este un exemplu de inserare a datelor într-o ordine diferită de cea originală:

UTILIZAȚI SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, First Name) VALUES ("d1", "Batonov", 34993, "Andrey");

Inserarea mai multor rânduri

A doua formă a instrucțiunii INSERT inserează în tabel unul sau mai multe rânduri selectate de o subinterogare. Exemplul de mai jos arată cum să inserați rânduri într-un tabel folosind a doua formă a instrucțiunii INSERT. În acest caz, se execută o interogare pentru a selecta numerele și numele departamentelor situate în Moscova, iar setul de rezultate rezultat este încărcat într-un tabel nou creat anterior.

Noul tabel MoscowDepartment creat în exemplul de mai sus are aceleași coloane ca și tabelul Departament existent, cu excepția coloanei Locație lipsă. Subinterogarea din instrucțiunea INSERT selectează toate rândurile din tabelul Department pentru care valoarea coloanei Locație este „Moscova”, care sunt apoi inserate în noul tabel creat la începutul interogării.

Exemplul de mai jos arată o altă modalitate de a insera rânduri într-un tabel folosind a doua formă a instrucțiunii INSERT. În acest caz, se execută o interogare pentru a selecta numerele de personal, numerele de proiect și datele de începere a proiectului pentru toți angajații cu poziția „Manager” care lucrează la proiectul p2 și apoi încărcați setul de rezultate rezultat într-un nou tabel creat la începutul interogarea:

UTILIZAȚI SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Înainte de a introduce rânduri folosind instrucțiunea INSERT, tabelele MoscowDepartment și ManagerTeam (în exemplele de mai sus) erau goale. Dacă tabelul exista deja și conținea rânduri cu date, atunci i se vor adăuga rânduri noi.

Acest articol este dedicat completării tabelelor bazei de date cu date, adică vom studia comenzile SQL pentru inserarea de noi înregistrări. Trebuie spus că înregistrarea într-un tabel se poate face în două moduri:

Metoda nr. 1.
Să încercăm să adăugăm o intrare despre noua țară în tabelul țărilor. Sintaxa de adăugare va fi următoarea:
INSERT INTO table_name (câmp_1, câmp_2, ...) VALUES (Valoare_1, Valoare_2, ...); Pe baza structurii noastre de tabel, interogarea SQL va fi astfel:
INSERT INTO country (nume_țară, nume_acronym) VALUES ("Rusia", "RU"); Așa am adăugat în tabelul nostru o intrare despre țara „Rusia”. Totul aici ar trebui să fie clar și simplu, principalul lucru este să vă uitați cu atenție la ce câmpuri indicați în primele paranteze și să scrieți valorile în aceeași ordine în a doua.

Metoda nr. 2.
A doua metodă, după părerea mea, este puțin mai simplă, din moment ce vezi ce atribuiți și cărui câmp. Credeți-mă, dacă un tabel are un număr mare de coloane, atunci este foarte ușor să confundați sau să treceți cu vederea ordinea câmpurilor din primul și ordinea valorilor din a doua paranteză. Sintaxa celei de-a doua metode este:
INSERT INTO table_name SET câmp_1 = Valoare_1, câmp_2 = Valoare_2, ... ; Să folosim acest exemplu pentru a adăuga câteva informații la tabel. persoane, deoarece există mai multe câmpuri, iar avantajul celei de-a doua metode se va simți imediat:
INSERT INTO persons SET first_name="Ivan", last_name="Dulin", registration_date="2012-06-14", country="1"; Acum tabelul nostru conține următoarele date:


Probabil ați observat că nu am specificat o valoare pentru vârstă, dar s-a dovedit a fi completată... Totul este corect - pentru acest câmp am setat valoarea implicită la 25. Așa că acum Ivan Dulin nostru este listat în baza de date cu o vârstă de 25 de ani. Poate să nu fie cel mai bun exemplu să setați o valoare implicită pentru câmpul de vârstă, dar puteți seta astfel de proprietăți la câmpuri precum, de exemplu, evaluarea utilizatorului site-ului sau numărul de vizualizări ale paginii. Ele sunt setate inițial la 0.

De asemenea, ar trebui să acordați atenție formatului de dată în MySQL: AAAA-LL-ZZ. Dacă nu respectați, atunci intrările dvs. pur și simplu nu vor fi introduse în tabel.

După cum puteți vedea, câmpul de profesie este completat ca NULL, aceasta este o valoare goală. Pentru acest domeniu.

Ca un plus, luați în considerare următoarea comandă:
ÎNCĂRCAȚI DATELE LOCAL INFILE „D:\zapros.txt” ÎN TABEL persoane; Ce crezi că am făcut acum?! Și am făcut următoarele: am adăugat date în tabel persoane din fisier cereri.txt, care se află pe unitatea D. Informațiile din fișier ar trebui să aibă următoarea structură:


Structura de date a fișierului trebuie să îndeplinească următoarele cerințe:
  1. Fiecare intrare nouă trebuie descrisă pe un rând nou
  2. Datele trebuie specificate pentru absolut toate câmpurile. După cum puteți vedea, am specificat valoarea NULL pentru câmpul id, deoarece îl avem auto-incrementare, așa că MySQL însuși va introduce valoarea necesară.
  3. Câmpurile sunt separate unul de celălalt printr-un caracter tabulator (tasta Tab).
  4. Informațiile pe care le introduceți trebuie să se potrivească cu tipurile de date ale câmpului specific. Adică, de exemplu, o dată în formatul AAAA-LL-ZZ, un număr întreg pentru număr întreg etc.
Astfel, ați învățat cum să introduceți date noi în tabelele bazei de date. Pentru a consolida materialul pe care l-ați studiat, introduceți dvs. următoarele informații:

Tabelul de profesie:

Tabelul persoanelor:

Nume nume vârstă Data Înregistrării țară profesie
Leonid Bilak 45 2012-06-20 2 1
Yuri Nazarov 22 2012-06-21 3 1
Toate Savenko 25 2012-06-22 2 3
Irina Nikolaeva 31 2012-06-22 1 3

Asigurați-vă că adăugați aceste intrări, deoarece vom avea nevoie de ele pentru a studia instrucțiunea SELECT (selectarea informațiilor din baza de date), pe care o vom analiza în următorul (al patrulea) articol despre studierea interogărilor SQL.
vederi