Avem un tabel gol numit person. Ce putem face cu un astfel de tabel? Folosiți-l ca pe o tolbă! Păstrați lucruri în el, uitați-vă în el pentru a verifica existența unor lucruri, modificați lucrurile din el sau aruncați lucruri din el. Acestea sunt cele patru operațiuni esențiale, care se referă la datele din tabele:
- INSERT: puneți câteva date în tabel
- SELECT: preluați date din tabel
- UPDATE: modificați datele care există în tabel
- DELETE: eliminați datele din tabel.
Pentru fiecare dintre aceste patru operații, există o comandă SQL. Începe cu un cuvânt cheie și ajunge până la un punct și virgulă final. Această regulă se aplică tuturor comenzilor SQL: sunt introduse printr-un cuvânt cheie și terminate cu punct și virgulă. În mijloc, pot exista mai multe cuvinte cheie, precum și nume de obiecte și valori.
Stocați date noi cu comanda INSERT
Când stocăm date noi în rândurile unui tabel SQL, trebuie să denumim toate obiectele și valorile afectate: numele tabelului (pot fi multe tabele în baza de date), numele coloanelor și valorile. Toate acestea sunt încorporate în unele cuvinte cheie, astfel încât compilatorul SQL să poată recunoaște simbolurile și semnificația lor. În general, sintaxa pentru un simplu INSERT este
INSERT INTO <tablename> (<list_of_columnnames>)
VALUES (<list_of_values>);
Iată un exemplu
-- put one row
INSERT INTO person (id, firstname, lastname, date_of_birth, place_of_birth, ssn, weight)
VALUES (1, 'Larry', 'Goldstein', date'1970-11-20', 'Dallas', '078-05-1120', 95);
-- confirm the INSERT command
COMMIT;
Când SGBD recunoaște cuvintele cheie INSERT INTO și VALUES, știe ce să facă: creează un nou rând în tabel și pune valorile date în coloanele numite. În exemplul de mai sus, comanda este urmată de o a doua: COMMIT confirmă operația INSERT, precum și celelalte operațiuni de scriere UPDATE și DELETE. (Vom afla mult mai multe despre COMMIT și omologul său ROLLBACK într-un capitol ulterior.)
Un scurt comentariu despre formatul valorii pentru date_of_birth: Nu există un format unic pentru datele onorate în întreaga lume. Oamenii folosesc diferite formate în funcție de obiceiurile lor culturale. În scopul nostru, decidem să reprezentăm datele în formatul ierarhic definit în ISO 8601. Este posibil ca instalarea bazei de date locală să utilizeze un alt format, astfel încât să fiți obligat fie să modificați exemplele noastre, fie să modificați formatul implicit de date al instalării bazei dvs. de date.
Acum vom mai pune câteva rânduri în tabelul nostru. Pentru a face acest lucru, folosim o variație a sintaxei de mai sus. Este posibil să se omită lista de nume de coloane dacă lista de valori se corelează exact cu numărul, ordinea și tipul de date al coloanelor utilizate în instrucțiunea originală CREATE TABLE.
Sugestie: Practica de a omite lista de nume de coloane nu este recomandată pentru aplicații reale! Structurile tabelului se modifică în timp, de ex. cineva poate adăuga noi coloane la tabel. În acest caz, în aplicații pot apărea efecte secundare neașteptate.
-- put four rows
INSERT INTO person VALUES (2, 'Tom', 'Burton', date'1980-01-22', 'Birmingham', '078-05-1121', 75);
INSERT INTO person VALUES (3, 'Lisa', 'Hamilton', date'1975-12-30', 'Mumbai', '078-05-1122', 56);
INSERT INTO person VALUES (4, 'Debora', 'Patterson', date'2011-06-01', 'Shanghai', '078-05-1123', 11);
INSERT INTO person VALUES (5, 'James', 'de Winter', date'1975-12-23', 'San Francisco', '078-05-1124', 75);
COMMIT;
Selectarea datelor cu comanda SELECT
Acum tabelul nostru ar trebui să conțină cinci rânduri. Putem fi siguri de asta? Cum putem verifica dacă totul a funcționat bine și dacă rândurile și valorile există cu adevărat? Pentru a face acest lucru, avem nevoie de o comandă care ne arată conținutul real al tabelului. Este comanda SELECT cu următoarea sintaxă generală
SELECT <list_of_columnnames>
FROM <tablename>
WHERE <search_condition>
ORDER BY <order_by_clause>;
Ca și în cazul comenzii INSERT, puteți omite unele părți. Cel mai simplu exemplu este
SELECT *
FROM person;
Caracterul asterisc „*” indică „toate coloanele”. În rezultat, SGBD-ul ar trebui să livreze toate cele cinci rânduri, fiecare cu cele șapte valori pe care le-am folosit anterior cu comanda INSERT.
În exemplele următoare, adăugăm clauzele care lipsesc în prezent din sintaxa generală – una după alta.
Adăugați o listă a unora sau a tuturor numelor de coloane
SELECT firstname, lastname
FROM person;
SGBD-ul ar trebui să furnizeze cele două coloane nume și prenume din toate cele cinci rânduri.
Adăugați o condiție de căutare
SELECT id, firstname, lastname
FROM person
WHERE id > 2;
SGBD-ul ar trebui să furnizeze cele trei coloane id, firstname și lastname din trei rânduri.
Adăugați o instrucțiune de sortare
SELECT id, firstname, lastname, date_of_birth
FROM person
WHERE id > 2
ORDER BY date_of_birth;
SGBD-ul ar trebui să furnizeze cele patru coloane id, firstname, lastname și date_of_birth pe trei rânduri, în ordinea crescătoare a datei_nașterii (date_of_birth).
Modificați datele cu comanda UPDATE
Dacă dorim să modificăm valorile unor coloane din unele rânduri, putem face acest lucru folosind comanda UPDATE. Sintaxa generală pentru o UPDATE simplă este:
UPDATE <tablename>
SET <columnname> = <value>,
<columnname> = <value>,
...
WHERE <search_condition>;
Valorile sunt atribuite coloanelor numite. Coloanele nemenționate rămân neschimbate. Search_condition acționează în același mod ca și în comanda SELECT. Limitează acoperirea comenzii la rânduri, care îndeplinesc criteriile. Dacă cuvântul cheie WHERE și search_condition sunt omise, toate rândurile tabelului sunt afectate. Este posibil să specificați search_conditions, care nu atinge niciun rând. În acest caz, niciun rând nu este actualizat – și nu apare nicio eroare sau excepție.
Schimbați o coloană dintr-un rând
UPDATE person
SET firstname = 'James Walker'
WHERE id = 5;
COMMIT;
Prenumele domnului de Winter se schimbă în James Walker, în timp ce toate celelalte valori ale lui rămân neschimbate. De asemenea, toate celelalte rânduri rămân neschimbate. Vă rugăm să verificați acest lucru cu o comandă SELECT.
Schimbați o coloană cu mai multe rânduri
UPDATE person
SET firstname = 'Unknown'
WHERE date_of_birth < date'2000-01-01';
COMMIT;
<search_condition> nu este limitată la coloana Cheie primară (Primary Key). Putem specifica orice altă coloană. Și operatorul de comparație nu este limitat la semnul egal. Putem folosi diferiți operatori – aceștia trebuie doar să se potrivească cu tipul de date al coloanei.
În acest exemplu, schimbăm prenumele celor patru rânduri cu o singură comandă. Dacă există un tabel cu milioane de rânduri, le putem modifica pe toate folosind o singură comandă.
Schimbați două coloane dintr-un rând
-- Please note the additional comma
UPDATE person
SET firstname = 'Jimmy Walker',
lastname = 'de la Crux'
WHERE id = 5;
COMMIT;
Cele două valori sunt modificate cu o singură comandă.
Eliminați datele cu comanda DELETE
Comanda DELETE elimină rânduri complete din tabel. Deoarece rândurile sunt eliminate ca întreg, nu este nevoie să specificați niciun nume de coloană. Semantica <search_condition> este aceeași ca și cu SELECT și UPDATE.
DELETE
FROM <tablename>
WHERE <search_condition>;
Eliminați un rând
DELETE
FROM person
WHERE id = 5;
COMMIT;
Rândul lui James de Winter este scos din tabel.
Ștergeți multe rânduri
DELETE
FROM person;
COMMIT;
Toate rândurile rămase sunt șterse deoarece am omis <search_condition>. Tabelul este gol, dar încă există.
Niciun rând afectat
DELETE
FROM person
WHERE id = 99;
COMMIT;
Această comandă nu va elimina niciun rând, deoarece nu există niciun rând cu id egal cu 99. Dar sintaxa și execuția în SGBD sunt încă perfecte. Nu se face nicio excepție. Comanda se termină fără niciun mesaj de eroare sau cod de eroare.
Rezumat
Comenzile INSERT și DELETE afectează rândurile în întregime. INSERT pune un rând complet nou într-un tabel (coloanele nemenționate rămân goale), iar DELETE elimină rânduri întregi. În schimb, SELECT și UPDATE afectează numai acele coloane care sunt menționate în comandă; coloanele nemenționate nu sunt afectate.
Comanda INSERT (în versiunea simplă a acestei pagini) nu are <search_condition> și, prin urmare, gestionează exact un rând. Celelalte trei comenzi pot afecta zero, unul sau mai multe rânduri, în funcție de evaluarea <search_condition>.
(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)
Lasă un răspuns