Cum se configurează smartphone-uri și PC-uri. Portal informativ

Bazele T-SQL. DML

Î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ă, 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 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... 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), 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 Vânzători_nou FROM Vânzători

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Ț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.

Ce este INSERT INTO?

Scopul principal al sistemelor de baze de date este stocarea datelor în tabele. Datele sunt de obicei furnizate de programe de aplicație care rulează deasupra bazei de date. În acest scop, SQL are comanda INSERT care este folosită pentru a stoca date într-un tabel. The Comanda INSERT creează un nou rândîn tabel pentru a stoca date.

Sintaxa de bază

Să ne uităm la sintaxa de bază a comenzii SQL INSERT prezentată mai jos.

INSERT INTO `table_name`(coloana_1,coloana_2,...) VALUES (valoare_1,valoare_2,...);

  • INSERT INTO `nume_tabel` este comanda care îi spune serverului MySQL să adauge un nou rând într-un tabel numit `table_name`.
  • (coloana_1,coloana_2,...) specifică coloanele care vor fi actualizate în noul rând
  • VALUES (valoare_1, valoare_2,...) specifică valorile care trebuie adăugate în noul rând

Atunci când furnizați valorile datelor care urmează să fie inserate în noul tabel, trebuie luate în considerare următoarele atunci când vă ocupați de diferite tipuri de date.

  • Tipuri de date șir- toate valorile șirului de caractere ar trebui să fie cuprinse între ghilimele simple.
  • Tipuri de date numerice- toate valorile numerice trebuie furnizate direct, fără a le include între ghilimele simple sau duble.
  • Tipuri de date de date- includeți valorile datei între ghilimele simple în formatul „AAAA-LL-ZZ”.

Exemplu:

Să presupunem că avem următoarea listă de noi membri ai bibliotecii care trebuie adăugați în baza de date.

Nume complete Data nașterii gen Adresă fizică adresa postala Numar de contact Adresa de e-mail
Leonard Hofstadter Masculin Woodcrest 0845738767
Sheldon Cooper Masculin Woodcrest 0976736763
Rajesh Koothrappali Masculin Fairview 0938867763
Leslie Winkle 14/02/1984 Masculin 0987636553
Howard Wolowitz 24/08/1981 Masculin Parcul din sud P.O. Caseta 4563 0987786553

Să" INSERT datele unul câte unul. Vom începe cu Leonard Hofstadter. Vom trata numărul de contact ca pe un tip de date numerice și nu vom include numărul între ghilimele simple.

INSERT INTO `membri` (`nume_complete`,`gen`,`adresă_fizică`,`număr_de_contact`) VALORI ("Leonard Hofstadter","Bărbat","Woodcrest",0845738767);

Executarea scriptului de mai sus scade 0 din numărul de contact al lui Leonard. Acest lucru se datorează faptului că valoarea va fi tratată ca o valoare numerică, iar zero (0) de la început este eliminat deoarece nu este semnificativ.

Pentru a evita astfel de probleme, valoarea trebuie inclusă între ghilimele simple, așa cum se arată mai jos -

INSERT INTO `membri` (`nume_complete`,`gen`,`adresă_fizică`,`număr_de_contact`) VALORI ("Sheldon Cooper","Bărbat","Woodcrest", "0976736763");

În cazul de mai sus, zero(0) nu va fi eliminat

Modificarea ordinii coloanelor nu are efect asupra interogării INSERT, atâta timp cât valorile corecte au fost mapate la coloanele corecte.

Interogarea prezentată mai jos demonstrează punctul de mai sus.

INSERT INTO `membri` (`număr_de_contact`,`gen`,`nume_complete`,`adresă_fizică`)VALORI ("0938867763","Bărbat","Rajesh Koothrappali","Woodcrest");

Interogările de mai sus au omis coloana cu data nașterii, în mod implicit, MySQL va insera valori NULL în coloanele care sunt omise în interogarea INSERT.

Să introducem acum înregistrarea pentru Leslie, care are data nașterii furnizată. Valoarea datei trebuie inclusă între ghilimele simple folosind formatul „AAAA-LL-ZZ”.

INSERT INTO `membri` (`nume_complete`,`data_nașterii`,`gen`,`adresă_fizică`,`număr_de_contact`) VALORI ("Leslie Winkle","1984-02-14","Bărbat","Woodcrest"," 0987636553");

Toate interogările de mai sus au specificat coloanele și le-au mapat la valori în instrucțiunea de inserare. Dacă furnizăm valori pentru TOATE coloanele din tabel, atunci putem omite coloanele din interogarea de inserare.

INSERT INTO `members` VALUES (9,"Howard Wolowitz","Bărbat","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Acum să folosim instrucțiunea SELECT pentru a vizualiza toate rândurile din tabelul de membri.SELECT * FROM `membri`;

numar de membrunume completegendata nașteriiadresă fizicăadresa postalacontct_numbere-mail
1 Janet JonesFemeie21-07-1980 Prima Stradă Parcela nr. 4Geantă privată0759 253 542 Această adresă de e-mail este protejată de spamboți. Aveți nevoie de activarea JavaScript pentru ao vizualiza.
2 Janet Smith JonesFemeie23-06-1980 Melrose 123NULNULAceastă adresă de e-mail este protejată de spamboți. Aveți nevoie de activarea JavaScript pentru ao vizualiza.
3 Robert PhilMasculin12-07-1989 Strada a 3-a 34NUL12345 Această adresă de e-mail este protejată de spamboți. Aveți nevoie de activarea JavaScript pentru ao vizualiza.
4 Gloria WilliamsFemeie14-02-1984 Strada 2 23NULNULNUL
5 Leonard HofstadterMasculinNULWoodcrestNUL845738767 NUL
6 Sheldon CooperMasculinNULWoodcrestNUL976736763 NUL
7 Rajesh KoothrappaliMasculinNULWoodcrestNUL938867763 NUL
8 Leslie WinkleMasculin14-02-1984 WoodcrestNUL987636553 NUL
9 Howard WolowitzMasculin24-08-1981 Parcul din sudP.O. Caseta 4563987786553 Această adresă de e-mail este protejată de spamboți. Aveți nevoie de activarea JavaScript pentru ao vizualiza.

Observați că numărul de contact pentru Leonard Hofstadter a scăzut zero (0) din numărul de contact. Celelalte numere de contact nu au scăzut zero (0) la început.

Inserarea într-un tabel dintr-un alt tabel

Comanda INSERT poate fi folosită și pentru a introduce date într-un tabel dintr-un alt tabel. Sintaxa de bază este cea prezentată mai jos.

INSERT INTO table_1 SELECT * FROM table_2;

Să ne uităm acum la un exemplu practic, vom crea un tabel inactiv pentru categoriile de filme în scop demonstrativ. Vom numi noul tabel de categorii categoriis_archive. Scriptul prezentat mai jos creează tabelul.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Executați scriptul de mai sus pentru a crea tabelul.

Să inserăm acum toate rândurile din tabelul de categorii în tabelul de arhivă de categorii. Scriptul prezentat mai jos ne ajută să realizăm acest lucru.

INSERT INTO `categories_archive` SELECT * FROM `categories`;

Executarea scriptului de mai sus inserează toate rândurile din tabelul de categorii în tabelul de arhivă de categorii. Rețineți că structurile tabelului vor trebui să fie aceleași pentru ca scriptul să funcționeze. Un script mai robust este unul care mapează numele coloanelor din tabelul de inserare cu cele din tabelul care conține datele.

Interogarea prezentată mai jos demonstrează utilizarea acesteia.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

Se execută interogarea SELECT

SELECTAȚI * DIN `categories_archive`

oferă următoarele rezultate prezentate mai jos.

categorie_idNumele categorieiremarci
1 ComedieFilme cu umor
2 RomanticPovesti de dragoste
3 EpicPovestea filmelor antice
4 GroazăNUL
5 Operă științifico-fantasticăNUL
6 ThrillerNUL
7 AcțiuneNUL
8 Comedie romanticaNUL
9 Desene animateNUL
10 Desene animateNUL

rezumat

  • Comanda INSERT este folosită pentru a adăuga date noi într-un tabel
  • Datele și valorile șirului de caractere ar trebui să fie cuprinse între ghilimele simple.
  • Valorile numerice nu trebuie să fie incluse între ghilimele.
  • Comanda INSERT poate fi folosită și pentru a introduce date dintr-un tabel în altul.

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 vedere, 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

Afirmaț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

INTRODU IN dept VALORI(50, „PRODUSE”, „SAN FRANCISCO”);

INTRODU IN 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:

INTRODU IN 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ă:

INTRODU IN 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:

INTRODU IN Londonstaff SELECT * FROM Salespeople WHERE oraș = 'Londra';

MySQL INSERT

Pentru a insera rânduri noi într-o bază de date MySQL, utilizați Comanda INSERT, exemple de comandă sunt date mai jos:
INSERT INTO Exemplul 1.
Inserarea unui nou rând în tabel table_name.

INTRODU IN

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

INTRODU IN 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.

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

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 apare 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, la introducerea valorilor, puteți specifica coloanele imediate la care se vor adăuga valorile:

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.

sql query INSERT INTO are sens atunci când a fost creat un tabel de bază de date. Adică, tabelul există, are un nume, a creat rânduri și coloane. tabelul este creat de operator: , tabelul este modificat de operator .

sql query INSERT INTO - sintaxa interogării

interogarea sql INSERT INTO are următoarea sintaxă:

INSERT INTO table_name (în paranteze, dacă este necesar, inserați o listă de coloane în care doriți să inserați date) VALUES date inserate1, date inserate2, date inserate3.

Puteți insera o opțiune IGNORE între INSERT și INTRO. Nu este necesar. Necesar pentru a proteja cheile primare atunci când editați un tabel. În caz contrar, dacă se produce duplicarea cheilor primare în timpul editării, atunci când se inserează opțiunea IGNORE, primul rând cu cheia primară va rămâne în tabelul care se editează. Alte chei primare vor fi șterse. În mod implicit, omitem această opțiune.

Există opțiuni opționale LOW_PRIORITY și DELAYED. Ele determină prioritățile pentru adăugarea de informații la baza de date. Primul specifică așteptarea eliberării bazei de date, al doilea înseamnă stocarea informațiilor.

Linia din interogare: INSERT cu fraza VALUES vă va permite să adăugați un singur rând la tabelul bazei de date. Clauza VALUES conține valorile acestor date.

Subinterogările pot fi specificate în locul expresiei VALUES. INSERT cu o subinterogare adaugă rândurile returnate de subinterogare la tabel. Serverul bazei de date procesează subinterogarea și inserează toate rândurile returnate în tabel. Serverul nu inserează rânduri decât dacă subinterogarea le selectează.

  • subquery_1 - o subinterogare pe care serverul o procesează în același mod ca și vizualizarea
  • subquery_2 este o subinterogare care returnează rândurile inserate în tabel. Lista acestei subinterogări trebuie să aibă același număr de coloane ca și lista de coloane INSERT.

Subinterogările practic nu sunt utilizate într-o bază de date MySQL.

Exemple de interogare SQL INSERT INTO într-o bază de date MySQL

Inserăm rânduri noi în baza de date MySQL folosind comanda INSERT INTRO.

Primul exemplu.

Inserați rânduri noi în tabel table_name.

INSERT INTO table_name VALUES ('2′,'145′,'1′,'nume');

Aceasta înseamnă că dorim să inserăm valorile 2,145,1,name în coloanele table_name din tabel. Deoarece coloanele nu sunt specificate, valorile sunt completate în toate coloanele din tabel.

Exemplul doi.

Inserați informații în coloanele necesare (specificate) din tabelul table_name.

INSERT INTO table_name (client_client, client_subclient, client_mail) VALUES ('nume1','subnume1',' [email protected]′), (‘nume2′,’subnume2′,’ [email protected]′), (‘nume3′,’subnume3′,(’ [email protected]′);

Igor Serov special pentru site-ul „”.

Cele mai bune articole pe această temă