system
Răspunde în limba română, în stilul Wikipedia, cat mai corect gramatical.
user
Ce poți împărtăși despre SQL?
assistant
SQL (de la numele englez Structured Query Language - limbaj de interogare structurat - care se pronunță ) este un limbaj de programare specific pentru manipularea datelor în sistemele de manipulare a bazelor de date relaționale (RDBMS), iar la origine este un limbaj bazat pe algebra relațională. Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și controlul accesului la date. A devenit un standard în domeniu (standardizat ANSI-ISO), fiind cel mai popular limbaj utilizat pentru crearea, modificarea, regăsirea și manipularea datelor de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaționale.
Pe lângă versiunile standardizate ale limbajului, există o mulțime de dialecte și variante, unele proprietare, fiind specifice anumitor SGBD-uri și de asemenea conținând extensii pentru a suporta SBD-urile (Sistemele de Baze de Date) obiectuale (obiectual-relaționale).

SQL permite atât accesul la conținutul bazelor de date, cât și la structura acestora.

Istoric 
SQL a fost inițial dezvoltat la compania IBM de către Donald D. Chamberlin și Raymond F. Boyce în anul 1974. Inițial numele era SEQUEL (tot de la Structured Query Language) și avea ca scop manipularea și regăsirea datelor stocate în bazele de date relaționale IBM. 

La sfârșitul anilor '70, compania Relational Software, Inc. (în prezent Oracle Corporation) a văzut potențialul acestor concepte descrise de Codd, Chamberlin și Boyce, și a dezvoltat propriul SQL RDBMS cu aplicații la U.S. Navy, Central Intelligence Agency și U.S. government. În iunie 1979, Relational Software a introdus prima implementare comercială disponibilă de SQL, Oracle. După testarea SQL, au apărut implementări ale acestui limbaj și din partea firmei IBM: SQL/DS și DB2.

Elementele limbajului SQL 
Limbajul SQL este divizat în următoarele elemente:
 Clauze, care sunt componente ale instrucțiunilor și interogărilor. 
 Expresii, al căror efect este producerea de valori scalare sau tabele.
 Predicates, pot specifica condiții care sunt evaluate de SQL conform logicii ternare sau logicii booleene, în scopul limitării efectelor instrucțiunilor, sau pentru a influența cursul programului.
 Interogările, au ca scop regăsirea datelor după criterii specifice.
 Instrucțiunile, pot avea un efect persistent asupra datelor sau structurii datelor, sau pot controla tranzacțiile, conexiunile sau cursul programului. În general, instrucțiunile SQL se termină cu caracterul punct-virgulă (";"), deși acest lucru nu este obligatoriu în toate platformele SQL. Spațiile albe suplimentare sunt ignorate, dar ele pot fi folosite pentru lizibilitatea codului SQL.

Tipuri de date în SQL 
Oricărei coloane (sau câmp) dintr-un tabel SQL îi este asignat un tip de dată, la fel ca în toate celelalte limbaje de programare. Tipurile de date sunt următoarele:
 CHARACTER (sau CHAR) - șir de caractere
 INTEGER (sau SMALLINT) - număr întreg
 FLOAT, REAL sau DOUBLE PRECISION - număr real
 NUMERIC(precision, scale) sau DECIMAL(precision, scale) - număr zecimal , unde “precision” înseamnă numărul de cifre din partea întreagă, “scale” înseamnă numărul de zecimale.
 DATE - data zilei.
 TIME - ora.
Funcția sistem NOW întoarce data și ora curentă.

Interogări
Cea mai des utilizată instrucțiune în SQL este instrucțiunea SELECT.  
 

SELECT [ALL | DISTINCT] coloana1 [,coloana2]
[INTO fișier]
FROM tabel1 [,tabel2]
[WHERE condiție] [ AND|OR condiție...]
[GROUP BY listă-coloane]
[HAVING condiții]
[ORDER BY listă-coloane [ASC | DESC] ] 
 Clauza INTO este utilizată pentru a transfera rezultatul interogării într-o nouă tabelă; valabil în Microsoft Access, dar nu în toate platformele SQL. 
 Clauza WHERE este utilizată pentru a specifica condiții trebuie să îndeplinească coloanele din care se face selecția. Această condiție este o expresie logică obținută prin aplicarea operatorilor conjuncție (AND) și disjuncție (OR) asupra unor expresii logice elementare obținute cu ajutorul operatorilor: = (egal), <> (diferit), < (mai mic decât), <= (mai mic sau egal decât), > (mai mare decât), >= (mai mare sau egal decât), LIKE (permite selectarea potrivirilor parțiale cu ajutorul operatorului %; de exemplu: select city, state from towntable where state LIKE 'north%'); 
 Clauza GROUP BY permite gruparea coloanelor multiple în scopul prelucrării acestora prin funcțiile agregate: AVG - media aritmetică; COUNT - numărul articolelor; MAX -  maximul; MIN - minimul; SUM - suma. 

Exemplu: Maximul populației tuturor orașelor americane din statul Indiana: 
 
SELECT MAX(population) FROM citylist WHERE state = 'Indiana'; 
 Clauza HAVING Spre deosebire de clauza WHERE, acționează asupra rândurilor rezultate din clauza GROUP BY , aplicându-le condiția, spre a fi ulterior prelucrare prin funcțiile agregate.
 Clauza ORDER BY Ordonează rezultatele interogării în ordine alfabetică după unul sau mai multe câmpuri. ASC înseamnă în ordine crescătoare, iar DESC - ordine descrescătoare. Ordinea implicită este crescătoare.
 Alte cuvinte cheie: ALL - Toate articolele; DISTINCT - Numai articolele unice, fără duplicate. 

Exemple:
1. Selectarea tuturor cărților din tabela Book, având prețul mai mare decât 100.00, în ordinea crescătoare a titlurilor:
SELECT * FROM Book WHERE price>100.00 ORDER BY title;

2. Selectarea tuturor titlurilor cărților din tabelele Book și a autorilor cărților citiți din tabela Authors:
SELECT Book.title, Authors.name FROM  Book INNER JOIN Authors ON Book.author = Authors.id 
    GROUP BY Book.title;

Logica ternară (3VL)
Ideea a fost introdusă în SQL pentru a asigna valoarea Null înregistrărilor vide și informațiilor care lipsesc dintr-un câmp.

Manipularea datelor 
Limbajul de manipulare a datelor (DML) este un subset al SQL utilizat pentru a adăuga, actualiza sau șterge date.

Instrucțiunile limbajului de manipulare a datelor 
 INSERT - inserează un articol într-o tabelă:
INSERT INTO tabel (câmp1, câmp2, ...) VALUES (valoare1, valoare2, ...);
 UPDATE - actualizează un set de articole:
UPDATE tabel SET câmp = valoare [WHERE condiție];
 DELETE - șterge un set de articole:
DELETE FROM tabel [WHERE condiție];

Tranzacții
Tranzacțiile sunt utilizate pentru a controla în ce condiții se desfășoară o succesiune a instrucțiunilor de manipulare a datelor.

Instrucțiuni: 
 START TRANSACTION (sau BEGIN WORK, BEGIN TRANSACTION, în funcție de dialectul SQL) Început de tranzacție.
 SAVE TRANSACTION (sau SAVEPOINT) salvează starea bazei într-un punct al transacției
 COMMIT Operează toate operațiile tranzacției ca fiind permanente.
 ROLLBACK Anulează toate operațiile tranzacției începând cu ultimul COMMIT.

Instrucțiunile COMMIT și ROLLBACK termină tranzacția curentă și deblochează datele.

Exemple:

1.
CREATE TABLE tbl_1(id int);
  INSERT INTO tbl_1(id) VALUES(1);
  INSERT INTO tbl_1(id) VALUES(2);
COMMIT;
  UPDATE tbl_1 SET id=200 WHERE id=1;
SAVEPOINT id_1upd;
  UPDATE tbl_1 SET id=1000 WHERE id=2;
ROLLBACK to id_1upd;
  SELECT id from tbl_1;
2.
START TRANSACTION;
  UPDATE Account SET amount=amount-200 WHERE account_number=1234;
  UPDATE Account SET amount=amount+200 WHERE account_number=2345;
IF ERRORS=0 COMMIT;
IF ERRORS<>0 ROLLBACK;

Limbajul de definire a datelor 
Limbajul de definire a datelor (DDL) gestionează structura datelor și indexului.

Instrucțiuni
 CREATE TABLE creează un tabel în mod linie de comandă:
CREATE TABLE tabel(
    câmp1   tip1,
    câmp2   tip2,
    ...
    PRIMARY KEY (index1, index2, ...)
);
Exemplu:
CREATE TABLE My_table(
    my_field1   INT,
    my_field2   VARCHAR(50),
    my_field3   DATE NOT NULL,
    PRIMARY KEY (my_field1, my_field2)
);
 ALTER TABLE modifică structura unui tabel existent prin redenumirea/adăugarea/ștergerea/schimbarea structurii unei coloane sau index:

Redenumirea unui tabel
ALTER TABLE tabel RENAME TO nume_nou_tabel;
Adăugarea de câmpuri noi
ALTER TABLE table_name ADD ( câmp1 def1, col2 def2,  ...  ); 
Exemplu:
ALTER TABLE supplier ADD (supplier_name varchar2(50), city varchar2(45)); 
Modificarea structurii unui câmp
ALTER TABLE table_name MODIFY (câmp1 tip1, câmp2 tip2, ... ); 
Exemplu:
ALTER TABLE supplier MODIFY ( supplier_name varchar2(100) not null, city varchar2(75)); 
Ștergerea unui câmp
ALTER TABLE tabel DROP COLUMN câmp;
Exemplu:
ALTER TABLE supplier DROP COLUMN supplier_name;
Redenumirea unui câmp
ALTER TABLE tabel RENAME COLUMN nume_vechi TO nume_nou;
Exemplu:
ALTER TABLE supplier  RENAME COLUMN supplier_name to sname;
 TRUNCATE TABLE – Șterge toate articolele unui tabel:
TRUNCATE TABLE tabel;
 DROP TABLE – Șterge tabelul:
DROP TABLE tabel;

Drepturi ale utilizatorilor SQL în rețea 
Limbajul de control al datelor (DCL) autorizează utilizatorii și grupurile care lucrează cu o anumită bază de date.

Instrucțiuni 
 GRANT acordă unul sau mai multe drepturi unui utilizator sau grup.
 REVOKE (operația inversă) elimină unul sau mai multe drepturi unui utilizator sau grup.
Exemple:
1.
GRANT SELECT, UPDATE ON My_table TO some_user, another_user;
2.
REVOKE SELECT, UPDATE ON My_table  FROM some_user, another_user;

Legături externe 
 1995 SQL Reunion: People, Projects, and Politics, by Paul McJones (ed.) - Simpozion dedicat bazelor de date relaționale în SQL.
 American National Standards Institute. X3H2 Records, 1978–1995 Charles Babbage Institute - Standardele commitetului H2 de dezvoltare a standardelor NDL și SQL.
 Oral history interview with Donald D. Chamberlin - Interviu  cu Donald D. Chamberlin.
 Comparison of Different SQL Implementations Comparație între diferite versiuni și implementări SQL:  SQL:2008, PostgreSQL, DB2, MS SQL Server, MySQL, Oracle și Informix.

Note 

SQL
Baze de date