SQL

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare
SQL
Paradigmă Multi-paradigmă
Apărut în 1974
Dezvoltat de Donald D. Chamberlin
Raymond F. Boyce
Developer ISO/IEC
Tipul de tipărire statică, puternică
Dialecte SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008
Influențat de Agena, Common Query Language(CQL), Language Integrated Query(LINQ), Windows PowerShell, Ingres, QUEL
Influențe Datalog
Sistem de operare Multi platformă
Website http://www.sql.org/

SQL (de la numele englez Structured Query Language - limbaj de interogare structurat - care se pronunță [es kiu el]) 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[modificare | modificare sursă]

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. [1]

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. [2]

Elementele limbajului SQL[modificare | modificare sursă]

Limbajul SQL este divizat în următoarele elemente:

  • Clauze, care sunt componente ale instrucțiunilor și interogărilor. [3]
  • 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[modificare | modificare sursă]

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[modificare | modificare sursă]

Cea mai des utilizată instrucțiune în SQL este instrucțiunea SELECT. [4] [5]

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)[modificare | modificare sursă]

Ideea a fost introdusă în SQL pentru a asigna valoarea Null înregistrărilor vide și informațiilor care lipsesc dintr-un câmp. [6] [7] [8] [9]

Manipularea datelor[modificare | modificare sursă]

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[modificare | modificare sursă]

  • 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[modificare | modificare sursă]

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:[modificare | modificare sursă]

  • 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[modificare | modificare sursă]

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

Instrucțiuni[modificare | modificare sursă]

  • 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:

[10]

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[modificare | modificare sursă]

Limbajul de control al datelor (DCL) autorizează utilizatorii și grupurile care lucrează cu o anumită bază de date.

Instrucțiuni[modificare | modificare sursă]

  • 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[modificare | modificare sursă]

Note[modificare | modificare sursă]

  1. ^ [1] http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf
  2. ^ [2] http://www-03.ibm.com/ibm/history/history/year_1978.html
  3. ^ ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.
  4. ^ [3]http://www.w3schools.com/sql/sql_select.asp
  5. ^ [4]http://msdn.microsoft.com/en-us/library/h09t6a82(v=vs.80).aspx
  6. ^ [5]http://www.sqlservercentral.com/columnists/mcoles/fourrulesfornulls.asp
  7. ^ M. Negri, G. Pelagatti, L. Sbattella (1989) Semantics and problems of universal quantification in SQL
  8. ^ Fratarcangeli, Claudio (1991). Technique for universal quantification in SQL. ACM.org.
  9. ^ Kawash, Jalal (2004). Complex quantification in Structured Query Language (SQL): a tutorial using relational calculus - Journal of Computers in Mathematics and Science Teaching ISSN 0731-9258 Volume 23, Issue 2, 2004 AACE Norfolk, Virginia, Thefreelibrary.com.
  10. ^ [6]http://www.techonthenet.com/sql/tables/alter_table.php