Va rugam dezactivati programul ad block pentru a vizualiza pagina!

Limbajul MySQL

icon

SQL Introducere

Introducere în SQL
SQL este un limbaj standard pentru accesarea și manipularea bazelor de date.
Ce este SQL?
SQL înseamnă limbaj de interogare structurat
SQL vă permite să accesați și să manipulați bazele de date
SQL a devenit un standard al American National Standards Institute (ANSI) în 1986 și al Organizației Internaționale pentru Standardizare (ISO) în 1987
Ce poate face SQL?
SQL poate executa interogări împotriva unei baze de date
SQL poate prelua date dintr-o bază de date
SQL poate insera înregistrări într-o bază de date
SQL poate actualiza înregistrările într-o bază de date
SQL poate șterge înregistrările dintr-o bază de date
SQL poate crea baze de date noi
SQL poate crea tabele noi într-o bază de date
SQL poate crea proceduri stocate într-o bază de date
SQL poate crea vizualizări într-o bază de date
SQL poate seta permisiunile pe tabele, proceduri și vizualizări
SQL este un Standard - DAR ....
Deși SQL este un standard ANSI / ISO, există diferite versiuni ale limbajului SQL.Cu toate acestea, pentru a respecta standardul ANSI, toate acceptă cel puțin comenzile majore (cum ar fi SELECT, UPDATE, DELETE, INSERT, WHERE) într-o manieră similară.
Majoritatea programelor bazei de date SQL au și extensii proprii în plus față de standardul SQL.
Utilizarea SQL pe site-ul dvs. Web
Pentru a construi un site web care arată datele dintr-o bază de date, veti avea nevoie de:
Un program de bază de date RDBMS (adică MS Access, SQL Server, MySQL)
Pentru a utiliza un limbaj de script din partea serverului, cum ar fi PHP sau ASP
Pentru a utiliza SQL pentru a obține datele dorite
Pentru a utiliza HTML / CSS pentru stilul paginii
RDBMS reprezintă sistemul relațional de gestionare a bazelor de date.
RDBMS este baza pentru SQL și pentru toate sistemele de baze de date moderne precum MS SQL Server, IBM DB2, Oracle, MySQL și Microsoft Access.
Datele din RDBMS sunt stocate în obiectele bazei de date numite tabele. Un tabel este o colecție de intrări de date asociate și este format din coloane și rânduri.
Fiecare tabel este împărțit în entități mai mici numite câmpuri. Câmpurile din tabelul Clienți constau din CustomerID, CustomerName, ContactName, Adresa, Oraș, Cod Postal și Țară. Un câmp este o coloană dintr-un tabel concepută pentru a păstra informații specifice despre fiecare înregistrare din tabel.
O înregistrare, numită și rând, este fiecare intrare individuală care există într-un tabel. De exemplu, există 91 de înregistrări în tabelul Clienților de mai sus. O înregistrare este o entitate orizontală dintr-un tabel.
O coloană este o entitate verticală dintr-un tabel care conține toate informațiile asociate cu un câmp specific dintr-un tabel.

SQL Sintaxă

Sintaxa SQL
Tabele de baze de date (Database Tables)
O bază de date conține cel mai adesea una sau mai multe tabele. Fiecare tabel este identificat printr-un nume (de exemplu, „Clienți” sau „Comenzi”). Tabelele conțin înregistrări (rânduri) cu date.
În acest tutorial vom folosi bine-cunoscuta bază de date de exemplu Northwind (inclusă în MS Access și MS SQL Server).
Selecție din tabelul „Clienți”.
Tabelul conține cinci înregistrări (una pentru fiecare client) și șapte coloane (CustomerID, CustomerName, ContactName, Address, City, PostalCode și Country).
Instrucțiuni SQL
Majoritatea acțiunilor pe care trebuie să le efectuați într-o bază de date sunt efectuate cu instrucțiuni SQL.
Ține minte că...
Cuvintele cheie SQL NU sunt sensibile la majuscule și minuscule (nu sunt case sensitive): selectarea este identică cu SELECT
În acest tutorial vom scrie toate cuvintele cheie SQL cu majuscule.
Semicolon după Instrucțiuni SQL?
Unele sisteme de baze de date necesită punct și virgulă la sfârșitul fiecărei instrucțiuni SQL.
Semicolon este modul standard de a separa fiecare instrucțiune SQL în sistemele de baze de date care permit executarea a mai mult de o instrucțiune SQL în același apel către server.
În acest tutorial, vom folosi punct și virgulă la sfârșitul fiecărei instrucțiuni SQL.
Unele dintre cele mai importante comenzi SQL
SELECT - extrage date dintr-o bază de date
UPDATE - actualizează datele dintr-o bază de date
DELETE - șterge datele dintr-o bază de date
INSERT INTO - introduce date noi într-o bază de date
CREATE DATABASE - creează o nouă bază de date
ALTER DATABASE - modifică o bază de date
CREATE TABLE - creează un nou tabel
ALTER TABLE - modifică un tabel
DROP TABLE - șterge un tabel
CREATE INDEX - creează un index (cheie de căutare)
DROP INDEX - șterge un index
 

SQL SELECT

SQL Select
Instrucțiunea SQL SELECT
Instrucțiunea SELECT este utilizată pentru a selecta date dintr-o bază de date.
Datele returnate sunt stocate într-un tabel de rezultate, numit set de rezultate (result-set).
Sintaxa SELECT

SQL SELECT DISTINCT

Instrucțiunea SQL SELECT DISTINCT
Instrucțiunea SELECT DISTINCT este utilizată pentru a returna doar valori distincte (diferite).
În interiorul unui tabel, o coloană conține adesea multe valori duplicate; și uneori doriți doar să enumerați valorile diferite (distincte).
SELECT DISTINCT Sintaxa
SELECT DISTINCT column1, column2, ...
FROM table_name;
Exemplu SELECT fără DISTINCT
Următoarea instrucțiune SQL selectează TOATE (inclusiv duplicatele) valorile din coloana „Country” din tabelul „Customers”:
SELECT Country FROM Customers;
Acum, să folosim cuvântul cheie DISTINCT cu instrucțiunea SELECT de mai sus și să vedem rezultatul.
Exemple SELECT DISTINCT
Următoarea instrucțiune SQL selectează numai valorile DISTINCT din coloana „Country” din tabelul „Customers”:
SELECT DISTINCT Country FROM Customers;
Următoarea instrucțiune SQL listează numărul de țări client (customer countries) diferite (distincte):
SELECT COUNT(DISTINCT Country) FROM Customers;
Exemplul de mai sus nu va funcționa în Firefox și Microsoft Edge! Deoarece COUNT (DISTINCT column_name) nu este acceptat în bazele de date Microsoft Access. Firefox și Microsoft Edge folosesc Microsoft Access în exemplele noastre.
Iată soluția pentru MS Access:
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers);

SQL WHERE

Clauza SQL WHERE
Clauza WHERE este folosită pentru a filtra înregistrările.
Clauza WHERE este utilizată pentru a extrage doar acele înregistrări care îndeplinesc o condiție specificată.
Sintaxa WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Clauza WHERE nu este utilizată numai în instrucțiunea SELECT, ci este utilizată și în instrucțiunea UPDATE, DELETE etc.
Exemplu de clauză WHERE
Următoarea declarație SQL selectează toți clienții din țara „Mexic”, în tabelul „Customers”:
SELECT * FROM Customers
WHERE Country='Mexic';
Text Fields vs. Numeric Fields
SQL necesită citate unice în jurul valorilor de text (majoritatea sistemelor de baze de date vor permite, de asemenea, ghilimele duble).
Cu toate acestea, câmpurile numerice nu trebuie incluse între ghilimele:
SELECT * FROM Customers
WHERE CustomerID=1;
Operatori în clauza WHERE
În clauza WHERE pot fi folosiți următorii operatori:
=  Egal
> Mai mare decât
< Mai mic decât
> = Mai mare sau egal
<= Mai mic sau egal
<> Nu este egal. Notă: În unele versiuni de SQL, acest operator poate fi scris ca !=
BETWEEN - Între un anumit interval
LIKE - Căutați un model
IN - Pentru a specifica mai multe valori posibile pentru o coloană

SQL AND, OR și NOT

Operatorii SQL AND, OR și NOT
Clauza WHERE poate fi combinată cu operatorii AND, OR și NOT.
Operatorii AND și OR sunt folosiți pentru a filtra înregistrările pe baza mai multor condiții:
Operatorul AND afișează o înregistrare dacă toate condițiile separate de AND sunt TRUE.
Operatorul OR afișează o înregistrare dacă oricare dintre condițiile separate de OR este TRUE.
Operatorul NOT afișează o înregistrare dacă condițiile (condițiile) sunt NOT TRUE.
Sintaxa AND
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
Sintaxa OR
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
Sintaxa NOT
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
Exemple SQL AND, OR și NOT
Exemplu AND
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde țara este „Germania” AND orașul este „Berlin”:
SELECT * FROM Customers
WHERE Country='Germania' AND City='Berlin';
Exemplu OR
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde orașul este „Berlin” OR „Munchen”:
SELECT * FROM Customers
WHERE City='Berlin' OR City='Munchen';
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” unde țara este „Germania” OR „Spania”:
SELECT * FROM Customers
WHERE Country='Germania' OR Country='Spania';
Exemplu NOT
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers” în care țara NOT este „Germania”:
SELECT * FROM Customers
WHERE NOT Country='Germania';
Combinarea operatorilor AND, OR și NOT
Puteți combina, de asemenea, operatorii AND, OR și NOT.
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers" unde țara este „Germania” AND orașul trebuie să fie „Berlin” OR „Munchen” (folosiți paranteza pentru a forma expresii complexe):
SELECT * FROM Customers
WHERE Country='Germania' AND (City='Berlin' OR City='Munchen');
Următoarea instrucțiune SQL selectează toate câmpurile din „Customers" în care țara NOT este „Germania” și NOT „SUA”:
SELECT * FROM Customers
WHERE NOT Country='Germania' AND NOT Country='USA';

SQL ORDER BY

Cuvântul cheie SQL ORDER BY
Cuvântul cheie ORDER BY este utilizat pentru a sorta setul de rezultate (result-set) în ordine crescătoare sau descendentă.
Cuvântul cheie ORDER BY sortează înregistrările în ordine crescătoare în mod implicit. Pentru a sorta înregistrările în ordine descrescătoare, utilizați cuvântul cheie DESC.
Sintaxa ORDER BY
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
Exemplu ORDER BY
Următoarea instrucțiune SQL selectează toți clienții din tabelul "Customers", ordonați după coloana „Country”:
SELECT * FROM Customers
ORDER BY Country;
Exemplu ORDER BY DESC
Următoarea instrucțiune SQL selectează toți clienții din tabelul "Customers", ordonați DESCENDING după coloana „Country”:
SELECT * FROM Customers
ORDER BY Country DESC;
Exemplu câteva coloane ORDER BY
Următoarea instrucțiune SQL selectează toți clienții din tabelul "Customers", sortați după coloana „Country” și „CustomerName”. Acest lucru înseamnă că se comandă după Country, dar dacă unele rânduri au același Country, atunci se comandă prin CustomerName:
SELECT * FROM Customers
ORDER BY Country, CustomerName;
Exemplu 2 - Câteva coloane ORDER BY
Următoarea instrucțiune SQL selectează toți clienții din tabelul „Customers”, sortați în ordine crescătoare după „Country” și descendenți după coloana „CustomerName”:
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

SQL INSERT INTO

Instrucțiunea SQL INSERT INTO
Instrucțiunea INSERT INTO este utilizată pentru a insera înregistrări noi într-un tabel.
Sintaxa INSERT INTO
Este posibil să scrieți instrucțiunea INSERT INTO în două moduri.
Prima modalitate specifică atât numele coloanelor, cât și valorile care trebuie introduse:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Dacă adăugați valori pentru toate coloanele tabelului, nu este necesar să specificați numele coloanelor din interogarea SQL. Cu toate acestea, asigurați-vă că ordinea valorilor este în aceeași ordine cu coloanele din tabel.
Sintaxa INSERT INTO ar fi următoarea:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
Exemplu INSERT INTO
Următoarea instrucțiune SQL introduce o nouă înregistrare în tabelul "Customers":
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
Inserați date numai în coloane specificate
De asemenea, este posibil să inserați date doar în coloane specifice.
Următoarea instrucțiune SQL va insera o înregistrare nouă, dar va insera doar date în coloanele „CustomerName”, „City” și „Country” (CustomerID va fi actualizat automat):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

SQL Valori NULL

Valori SQL NULL
Un câmp cu o valoare NULL este un câmp fără nici o valoare.
Dacă un câmp dintr-un tabel este opțional, este posibil să inserați o înregistrare nouă sau să actualizați o înregistrare fără a adăuga o valoare la acest câmp. Apoi, câmpul va fi salvat cu o valoare NULL.
O valoare NULL este diferită de o valoare zero sau un câmp care conține spații. Un câmp cu o valoare NULL este unul care a fost lăsat liber în timpul creării înregistrărilor!
Nu este posibil să se testeze valorile NULL cu operatori de comparație, cum ar fi =, < sau <>.
În schimb, va trebui să utilizăm operatorii IS NULL și IS NOT NULL.
Sintaxa IS NULL
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
Sintaxa IS NOT NULL 
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
Operatorul IS NULL
Operatorul IS NULL este utilizat pentru testarea valorilor goale (valori NULL).
Următorul SQL listează toți clienții cu o valoare NULL în câmpul „Address”:
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
Folosiți întotdeauna IS NULL pentru a căuta valorile NULL.
Operatorul IS NOT NULL
Operatorul IS NOT NULL este utilizat pentru testarea valorilor care nu sunt goale (valori IS NOT NULL).
Următorul SQL listează toți clienții cu o valoare în câmpul „Address”:
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;

SQL UPDATE

Instrucțiunea SQL UPDATE
Instrucțiunea UPDATE este utilizată pentru a modifica înregistrările existente într-un tabel.
Sintaxa UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Aveți grijă când actualizați înregistrările într-un tabel! Observați clauza WHERE din declarația UPDATE. Clauza WHERE specifică ce înregistrări trebuie actualizate. Dacă omiteți clauza WHERE, toate înregistrările din tabel vor fi actualizate!
Tabela UPDATE 
Următoarea instrucțiune SQL actualizează primul client (CustomerID = 1) cu o persoană de contact nouă și un oraș nou.
UPDATE Customers
SET ContactName = 'Ion Popescu', City= 'Bucuresti'
WHERE CustomerID = 1;
Înregistrări multiple UPDATE
Clauza WHERE este cea care determină câte înregistrări vor fi actualizate.
Următoarea declarație SQL va actualiza numele de contact la „Ion” pentru toate înregistrările în care țara este „Romania”:
UPDATE Customers
SET ContactName='Ion'
WHERE Country='Romania';
UPDATE avertizare!
Aveți grijă când actualizați înregistrările. Dacă omiteți clauza WHERE, TOATE înregistrările vor fi actualizate!
UPDATE Customers
SET ContactName='Ion';

SQL DELETE

Instrucțiunea SQL DELETE
Instrucțiunea DELETE este utilizată pentru a șterge înregistrările existente dintr-un tabel.
Sintaxa DELETE
DELETE FROM table_name WHERE condition;
Aveți grijă când ștergeți înregistrările dintr-un tabel! Observați clauza WHERE din declarația DELETE. Clauza WHERE specifică ce înregistrări trebuie eliminate. Dacă omiteți clauza WHERE, toate înregistrările din tabel vor fi șterse!
Exemplu SQL DELETE:
Următoarea instrucțiune SQL șterge clientul „Ion Popescu” din tabelul „Customers”:
DELETE FROM Customers WHERE CustomerName='Ion Popescu';
Ștergeți toate înregistrările
Este posibil să ștergeți toate rândurile dintr-un tabel fără a șterge tabelul. Aceasta înseamnă că structura tabelului, atributele și indexurile vor fi intacte:
DELETE FROM table_name;
Următoarea instrucțiune SQL șterge toate rândurile din tabelul „Customers”, fără a șterge tabelul:
DELETE FROM Customers;

SQL TOP, LIMIT sau ROWNUM

Clauzele SQL TOP, LIMIT sau ROWNUM
Clauza SQL SELECT TOP
Clauza SELECT TOP este utilizată pentru a specifica numărul de înregistrări de returnat.
Clauza SELECT TOP este utilă pe tabele mari cu mii de înregistrări. Restituirea unui număr mare de înregistrări poate afecta performanța.
Nu toate sistemele de baze de date acceptă clauza SELECT TOP. MySQL acceptă clauza LIMIT pentru a selecta un număr limitat de înregistrări, în timp ce Oracle utilizează ROWNUM.
Sintaxa SQL Server / MS Access
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
Sintaxa MySQL 
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Sintaxa Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Exemple SQL TOP, LIMIT și ROWNUM
Următoarea instrucțiune SQL selectează primele trei înregistrări din tabelul „Customers”:
SELECT TOP 3 * FROM Customers;
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza LIMIT:
SELECT * FROM Customers
LIMIT 3;
Următoarea instrucțiune SQL arată exemplul echivalent folosind ROWNUM:
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Exemplu SQL TOP PERCENT
Următoarea instrucțiune SQL selectează primele 50% de înregistrări din tabelul „Customers”:
SELECT TOP 50 PERCENT * FROM Customers;
Adăugați o clauză WHERE
Următoarea declarație SQL selectează primele trei înregistrări din tabelul „Customers”, unde țara este „Germania”:
SELECT TOP 3 * FROM Customers
WHERE Country='Germania';
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza LIMIT:
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
Următoarea instrucțiune SQL arată exemplul echivalent folosind clauza ROWNUM:
SELECT * FROM Customers
WHERE Country='Germania' AND ROWNUM <= 3;

SQL MIN() și MAX()

Funcțiile SQL MIN() și MAX()
Funcția MIN() returnează cea mai mică valoare a coloanei selectate.
Funcția MAX() returnează cea mai mare valoare a coloanei selectate.
Sintaxa MIN()
SELECT MIN(column_name)
FROM table_name
WHERE condition;
Sintaxa MAX()
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Exemplu MIN()
Următoarea declarație SQL găsește prețul celui mai ieftin produs:
SELECT MIN(Price) AS SmallestPrice
FROM Products;
Exemplu MAX()
Următoarea declarație SQL găsește prețul celui mai scump produs:
SELECT MAX(Price) AS LargestPrice
FROM Products;

SQL COUNT(), AVG() și SUM()

Funcțiile SQL COUNT(), AVG() și SUM()
Funcția COUNT() returnează numărul de rânduri care corespund unui criteriu specificat.
Funcția AVG() returnează valoarea medie a unei coloane numerice.
Funcția SUM() returnează suma totală a unei coloane numerice.
Sintaxa COUNT()
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
Sintaxa AVG()
SELECT AVG(column_name)
FROM table_name
WHERE condition;
Sintaxa SUM()
SELECT SUM(column_name)
FROM table_name
WHERE condition;
Exemplu COUNT()
Următoarea instrucțiune SQL găsește numărul de produse:
SELECT COUNT(ProductID)
FROM Products;
Valorile NULL nu sunt numărate.
Exemplu AVG()
Următoarea declarație SQL găsește prețul mediu al tuturor produselor:
SELECT AVG(Price)
FROM Products;
Valorile NULL sunt ignorate.
Exemplu SUM()
Următoarea instrucțiune SQL găsește suma câmpurilor „Quantity” din tabelul „OrderDetails”:
SELECT SUM(Quantity)
FROM OrderDetails;
Valorile NULL sunt ignorate.

SQL LIKE

Operatorul SQL LIKE
Operatorul LIKE este folosit într-o clauză WHERE pentru a căuta un model specificat într-o coloană.
Există două wildcards folosite adesea împreună cu operatorul LIKE:
% - Semnul procentual reprezintă zero, unu sau mai multe caractere
_ - Sublinierea reprezintă un singur personaj
MS Access folosește un asterisc (*) în loc de semnul procentual (%) și un semn de întrebare (?) În loc de subliniere (_).
Semnul procentual și sublinierea pot fi de asemenea utilizate în combinații!
Sintaxa LIKE
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Puteți combina, de asemenea, orice număr de condiții folosind operatorii AND sau OR.
Iată câteva exemple care arată diferiți operatori LIKE cu wildcard-uri „%” și „_”:
WHERE CustomerName LIKE 'a%'  -  Găsește toate valorile care încep cu „a”
WHERE CustomerName LIKE '%a'  -  Găsește orice valori care se termină cu "a"
WHERE CustomerName LIKE '%or%'  -  Găsește orice valori care au „sau” în orice poziție
WHERE CustomerName LIKE '_r%'  -  Găsește orice valori care au „r” în a doua poziție
WHERE CustomerName LIKE 'a__%'  -  Găsește orice valori care încep cu „a” și au cel puțin 3 caractere în lungime
WHERE ContactName LIKE 'a%o'  -  Găsește orice valori care încep cu "a" și se termină cu "o"
Exemple SQL LIKE
Următoarea instrucțiune SQL selectează toți clienții cu un nume client începând cu „a”:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care se termină cu „a”:
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care au „or” în orice poziție:
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care are „r” în a doua poziție:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care începe cu „a” și are cel puțin 3 caractere în lungime:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';
Următoarea instrucțiune SQL selectează toți clienții cu un nume de contact care începe cu „a” și se termină cu „o”:
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
Următoarea instrucțiune SQL selectează toți clienții cu un nume client care NU începe cu „a”:
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';

SQL Wildcards

SQL Wildcards
Caracterele SQL Wildcards
Un caracter wildcard este folosit pentru a substitui unul sau mai multe caractere dintr-un șir.
Caracterele wildcard sunt utilizate cu operatorul SQL LIKE. Operatorul LIKE este folosit într-o clauză WHERE pentru a căuta un model specificat într-o coloană.
Caractere wildcard în MS Access
* - Reprezintă zero sau mai multe caractere: bl* finds bl, black, blue and blob
? - Reprezintă un singur caracter: h?t finds hot, hat, and hit
[] - Reprezintă orice caracter dintre paranteze: h[oa]t finds hot and hat, but not hit
! - Reprezintă orice caracter care nu se află între paranteze:  h[!oa]t finds hit, but not hot and hat
- - Reprezintă o serie de caractere: c[a-b]t finds cat and cbt
# - Reprezintă orice singur caracter numeric: 2#5 finds 205, 215, 225, 235, 245, 255, 265, 275, 285, and 295
Caractere wildcard în SQL Server:
% - Reprezintă zero sau mai multe caractere: bl% finds bl, black, blue, and blob
_ - Reprezintă un singur caracter: h_t finds hot, hat, and hit
[] - Reprezintă orice caracter dintre paranteze: h[oa]t finds hot and hat, but not hit
^ - Reprezintă orice caracter care nu se află între paranteze: h[^oa]t finds hit, but not hot and hat
- - Reprezintă o serie de caractere: c[a-b]t finds cat and cbt
Toate wildcards-urile pot fi, de asemenea, utilizate în combinații!
Iată câteva exemple care arată diferiți operatori LIKE cu wildcard-uri „%” și „_”:
WHERE CustomerName LIKE 'a%'  -  Găsește orice valoarecare începe cu „a”
WHERE CustomerName LIKE '%a'  -  Găsește orice valoare care se termină cu "a"
WHERE CustomerName LIKE '%or%'  -  Găsește orice valoare care are „or” în orice poziție
WHERE CustomerName LIKE '_r%'  -  Găsește orice valoare care are „r” în a doua poziție
WHERE CustomerName LIKE 'a_%_%'  -  Găsește orice valoare care începe cu „a” și are cel puțin 3 caractere în lungime
WHERE ContactName LIKE 'a%o'  -  Găsește orice valoare care începe cu "a" și se termină cu "o"
Utilizarea Wildcardului %
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „ber”:
SELECT * FROM Customers
WHERE City LIKE 'ber%';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care conține patternul "es":
SELECT * FROM Customers
WHERE City LIKE '%es%';
Folosirea Wildcardului  _
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu orice caracter, urmată de „ondon”:
SELECT * FROM Customers
WHERE City LIKE '_ondon';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „L”, urmat de orice caracter, urmat de „n”, urmat de orice caracter, urmat de „on”:
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';
Utilizarea wildcard-ului [charlist]
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „b”, „s” sau „p”:
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
Următoarea instrucțiune SQL selectează toți clienții cu un oraș care începe cu „a”, „b” sau „c”:
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
Utilizarea wildcard-ului [!charlist] 
Următoarele două instrucțiuni SQL selectează toți clienții cu un oraș care NOT (NU) începe cu "b", "s" sau "p":
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
sau:
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';

SQL IN

Operatorul SQL IN
Operatorul IN vă permite să specificați mai multe valori într-o clauză WHERE.
Operatorul IN este un manual pentru mai multe condiții.
Sintaxa IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
sau:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
Exemple de operator IN
Următoarea declarație SQL selectează toți clienții care se află în „Germania”, „Franța” sau „Marea Britanie”:
SELECT * FROM Customers
WHERE Country IN ('Germania', 'Franța', 'Marea Britanie');
Următoarea instrucțiune SQL selectează toți clienții care nu se află în „Germania”, „Franța” sau „Marea Britanie”:
SELECT * FROM Customers
WHERE Country NOT IN ('Germania', 'Franța”', 'Marea Britanie');
Următoarea instrucțiune SQL selectează toți clienții care provin din aceleași țări ca furnizorii:
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);



 

SQL BETWEEN

Operatorul SQL BETWEEN
Operatorul BETWEEN selectează valorile dintr-un interval dat. Valorile pot fi numere, text sau date (numbers, text sau dates).
Operatorul BETWEEN este inclus: valorile de început (begin) și de sfârșit (end) sunt incluse.
Sintaxa BETWEEN
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Exemplu BETWEEN
Următoarea instrucțiune SQL selectează toate produsele cu un preț BETWEEN 10 și 20:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
Exemplu NOT BETWEEN
Pentru a afișa produsele în afara intervalului din exemplul precedent, utilizați NOT BETWEEN:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
Exemplu BETWEEN cu IN 
Următoarea instrucțiune SQL selectează toate produsele cu un preț BETWEEN 10 și 20. În plus; (addition;) nu afișați produse cu o CategoryID de 1,2 sau 3:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND NOT CategoryID IN (1,2,3);
Exemplu BETWEEN Text Values 
Următoarea instrucțiune SQL selectează toate produsele cu un ProductName BETWEEN Carnarvon Tigers și Mozzarella di Giovanni:
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Următoarea instrucțiune SQL selectează toate produsele cu un ProductName BETWEEN Carnarvon Tigers și Chef Anton's Cajun Seasoning:
SELECT * FROM Products
WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;
Exemplu NOT BETWEEN Text Values
Următoarea instrucțiune SQL selectează toate produsele cu un ProductName NOT BETWEEN Carnarvon Tigers și Mozzarella di Giovanni:
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Exemplu BETWEEN Dates
Următoarea instrucțiune SQL selectează toate comenzile cu o OrderDate BETWEEN '01-July-1996' și '31-July-1996':
SELECT * FROM Orders
WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;
sau
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

SQL Alias

Alias-urile SQL
Alias-urile SQL sunt utilizate pentru a da un nume temporar unei tabele sau unei coloane dintr-un tabel.
Alias-urile sunt adesea folosite pentru a face citirea numelor de coloane.
Un alias există doar pe durata interogării.
Sintaxa Coloanei Alias
SELECT column_name AS alias_name
FROM table_name;
Alias Table Syntax
SELECT column_name(s)
FROM table_name AS alias_name;
Exemple Alias pentru coloane
Următoarea instrucțiune SQL creează două alias-uri, unul pentru coloana CustomerID și unul pentru coloana CustomerName:
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
Următoarea instrucțiune SQL creează două alias-uri, unul pentru coloana CustomerName și unul pentru coloana ContactName.
Este nevoie de ghilimele duble sau paranteze pătrate dacă numele alias conține spații:
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
Următoarea instrucțiune SQL creează un alias numit „Address” care combină patru coloane (adresă, cod poștal, oraș și țară/Address, PostalCode, City and Country):
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;
Pentru ca instrucțiunea SQL de mai sus să funcționeze în MySQL, utilizați următoarele:
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;
Exemplu Alias pentru tabele
Următoarea instrucțiune SQL selectează toate comenzile de la client cu CustomerID = 4 (Around the Horn). Folosim tabelele „Customers” și „Orders” și le oferim aliasul tabelului „c” și respectiv „o” (Aici folosim alias-uri pentru a face SQL-ul mai scurt):
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;
Următoarea instrucțiune SQL este aceeași ca mai sus, dar fără alias:
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName="Around the Horn" AND Customers.CustomerID=Orders.CustomerID;
Alias-urile pot fi utile atunci când:
Există mai multe tabele implicate într-o interogare
Funcțiile sunt utilizate în interogare
Numele coloanelor sunt mari sau nu sunt foarte citibile
Două sau mai multe coloane sunt combinate între ele

SQL JOIN

SQL JOIN
O clauză JOIN este utilizată pentru a combina rânduri din două sau mai multe tabele, pe baza unei coloane înrudite între ele.
Selecție din tabelul „Orders”:
Selecție din tabelul „Customers”:
Coloana „CustomerID” din tabelul „Orders” se referă la „CustomerID” din tabelul „Customers”. Relația dintre cele două tabele de mai sus este coloana „CustomerID”.
Putem crea următoarea instrucțiune SQL (care conține un INNER JOIN), care selectează înregistrările care au valori potrivite în ambele tabele:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
Diferite tipuri de SQL JOINs
Iată diferitele tipuri de JOINs în SQL:
(INNER) JOIN: returnează înregistrările care au valori potrivite în ambele tabele
LEFT (OUTER) JOIN: returnează toate înregistrările din tabelul din stânga și înregistrările potrivite din tabelul din dreapta
RIGHT (OUTER) JOIN: returnează toate înregistrările din tabelul din dreapta și înregistrările potrivite din tabelul din stânga
FULL (OUTER) JOIN: returnează toate înregistrările atunci când există o potrivire în tabelul din stânga sau din dreapta

SQL INNER JOIN

SQL INNER JOIN
SQL Cuvântul cheie INNER JOIN
Cuvântul cheie INNER JOIN selectează înregistrările care au valori potrivite în ambele tabele.
Sintaxa INNER JOIN
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Exemplu SQL INNER JOIN
Următoarea instrucțiune SQL selectează toate comenzile cu informații despre client (customer):
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Cuvântul cheie INNER JOIN selectează toate rândurile din ambele tabele, atâta timp cât există o potrivire între coloane. Dacă există înregistrări în tabelul „Orders” care nu au potriviri în „Customers”, aceste comenzi nu vor fi afișate!
JOIN Three Tables
Următoarea declarație SQL selectează toate comenzile cu informații despre client și expeditor (customer and shipper):
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

SQL LEFT JOIN

SQL LEFT JOIN
Cuvântul cheie SQL LEFT JOIN
Cuvântul cheie LEFT JOIN returnează toate înregistrările din tabelul din stânga (table1), si înregistrările potrivite din tabelul din dreapta (table2). Dacă nu există nicio potrivire din partea dreaptă rezultatul este NULL.
LEFT JOIN Syntax
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
În unele baze de date LEFT JOIN se numește LEFT OUTER JOIN.
Exemplu SQL LEFT JOIN
Următoarea instrucțiune SQL va selecta toți clienții (customers) și orice comenzi (orders) ar putea avea:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
Cuvântul cheie LEFT JOIN returnează toate înregistrările din tabelul din stânga (Clienți/Customers), chiar dacă nu există potriviri în tabelul din dreapta (Comenzi/Orders).

SQL RIGHT JOIN

SQL RIGHT JOIN
Cuvântul cheie SQL RIGHT JOIN
Cuvântul cheie RIGHT JOIN returnează toate înregistrările din tabelul din dreapta (table2), si înregistrările potrivite din tabelul din stânga (table1). Când nu există nici o potrivire rezultatul este NULL din partea stângă.
RIGHT JOIN Syntax
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
În unele baze de date, RIGHT JOIN se numește RIGHT OUTER JOIN.
Exemplu SQL RIGHT JOIN
Următoarea instrucțiune SQL va returna toți angajații și orice comenzi ar fi făcut:
Cuvântul cheie RIGHT JOIN returnează toate înregistrările din tabelul din dreapta (Angajați/Employees), chiar dacă nu există meciuri în tabelul din stânga (Comenzi/Orders).

SQL FULL OUTER JOIN

SQL FULL OUTER JOIN
Cuvântul cheie SQL FULL OUTER JOIN
Cuvântul cheie FULL OUTER JOIN returnează toate înregistrările atunci când există o potrivire în înregistrările tabelului stânga (tabel1) sau dreapta (tabel2).
FULL OUTER JOIN poate returna seturi de rezultate foarte mari!
FULL OUTER JOIN și FULL JOIN sunt aceleași.
FULL OUTER JOIN Syntax
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
Exemplu SQL FULL OUTER JOIN
Următoarea instrucțiune SQL selectează toți clienții și toate comenzile:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
Cuvântul cheie FULL OUTER JOIN returnează toate înregistrările de potrivire din ambele tabele, indiferent dacă celălalt tabel se potrivește sau nu. Așadar, dacă există „rânduri” (rows) în „Clienți” (Customers) care nu au potriviri în „Comenzi” (Orders) sau dacă există „rânduri” (rows) în „Comenzi” (Orders)  care nu au potriviri în „Clienți” (Customers), aceste rânduri vor fi listate și ele.

SQL SELF JOIN

SQL Self JOIN
Un Self JOIN este o alăturare obișnuită, dar tabelul este unit cu sine.
Sintaxa Self JOIN
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
T1 și T2 sunt aliasuri diferite pentru aceeași tabelă.
Exemplu SQL Self JOIN
Următoarea instrucțiune SQL se potrivește cu clienții (customers) care provin din același oraș:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;

SQL UNION

Operatorul SQL UNION
Operatorul UNION este utilizat pentru a combina setul de rezultate a două sau mai multe declarații SELECT.
Fiecare declarație SELECT din UNION trebuie să aibă același număr de coloane
Coloanele trebuie să aibă, de asemenea, tipuri de date similare
Coloanele din fiecare instrucțiune SELECT trebuie să fie, de asemenea, în aceeași ordine
Sintaxa UNION
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Sintaxa UNION ALL
Operatorul UNION selectează în mod implicit doar valori distincte. Pentru a permite valori duplicate, utilizați UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Numele coloanelor din setul de rezultate sunt de obicei egale cu numele coloanelor din prima declarație SELECT din UNION.
Exemplu SQL UNION
Următoarea instrucțiune SQL returnează orașele (doar valori distincte) atât din „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Dacă unii clienți (customers) sau furnizori (suppliers) au același oraș, fiecare oraș va fi listat o singură dată, deoarece UNION selectează doar valori distincte. Utilizați UNION ALL pentru a selecta, de asemenea, valori duplicate!
Exemplu SQL UNION ALL
Următoarea instrucțiune SQL returnează orașele (de asemenea, valori duplicate) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SQL UNION cu WHERE
Următoarea instrucțiune SQL returnează orașele germane (doar valori distincte) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City, Country FROM Customers
WHERE Country='Germania'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germania'
ORDER BY City;
SQL UNION ALL cu WHERE
Următoarea instrucțiune SQL returnează orașele germane (de asemenea, valori duplicate) atât din tabela „Clienți” (Customers), cât și din „Furnizori” (Suppliers):
SELECT City, Country FROM Customers
WHERE Country='Germania'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germania'
ORDER BY City;
Un alt exemplu UNION
Următoarea instrucțiune SQL listează toți clienții (customers) și furnizorii (suppliers):
SELECT 'Customer' As Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Observați „AS Type” de mai sus - este un alias. Alias-urile SQL sunt utilizate pentru a da un nume temporar unei tabele sau unei coloane. Un alias există doar pe durata interogării. Așadar, aici am creat o coloană temporară numită „Tip” (Type), care listează dacă persoana de contact este „Client” (Customer) sau „Furnizor” (Supplier).

SQL GROUP BY

SQL GROUP BY
Instrucțiunea SQL GROUP BY
Instrucțiunea GROUP BY grupează rândurile care au aceleași valori în rânduri sumare, cum ar fi „găsiți numărul de clienți din fiecare țară”.
Instrucțiunea GROUP BY este adesea folosită cu funcții agregate (COUNT, MAX, MIN, SUM, AVG) pentru a grupa setul de rezultate cu una sau mai multe coloane.
Sintaxa GROUP BY
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
Exemple SQL GROUP BY
Următoarea instrucțiune SQL listează numărul de clienți (customers) din fiecare țară:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
Următoarea instrucțiune SQL listează numărul de clienți (customers) din fiecare țară, sortat de la mare până la mic:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
Exemplu GROUP BY Cu JOIN
Următoarea instrucțiune SQL listează numărul de comenzi (orders) trimise de fiecare expeditor (shipper):
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;

SQL HAVING

Clauza SQL HAVING
Clauza HAVING a fost adăugată la SQL, deoarece cuvântul cheie WHERE nu a putut fi utilizat cu funcții de agregare.
Sintaxa HAVING
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
Exemple SQL HAVING
Următoarea instrucțiune SQL listează numărul de clienți (customers) din fiecare țară. Includeți numai țările cu mai mult de 5 clienți (customers):
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
Următoarea instrucțiune SQL listează numărul de clienți (customers) din fiecare țară, sortat de la mare la cel mai mic (include numai țările cu mai mult de 5 clienți (customers)):
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
Mai multe exemple SQL HAVING
Următoarea instrucțiune SQL listează angajații care au înregistrat mai mult de 10 comenzi (orders):
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
Următoarea declarație SQL listează dacă angajații „Popescu” sau „Ionescu” au înregistrat mai mult de 25 de comenzi (orders):
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Popescu' OR LastName = 'Ionescu'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;

SQL EXISTS

SQL EXISTS
Operatorul SQL EXISTS
Operatorul EXISTS este utilizat pentru a testa existența oricărei înregistrări într-o subquery.
Operatorul EXISTS returnează adevărat dacă subquery returnează una sau mai multe înregistrări.
Sintaxa EXISTS
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
Exemple SQL EXISTS
Următoarea instrucțiune SQL returnează TRUE și listează furnizorii (suppliers) cu un preț al produsului mai mic de 20:
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
Următoarea instrucțiune SQL returnează TRUE și listează furnizorii (suppliers) cu un preț de produs egal cu 22:
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22);

SQL ANY și ALL

SQL ANY și ALL 
Operatorii SQL ANY și ALL
Operatorii ANY și ALL sunt folosiți cu o clauză WHERE sau HAVING.
Operatorul ANY returnează adevărat dacă oricare dintre valorile subquery îndeplinește condiția.
Operatorul ALL returnează adevărat dacă toate valorile subquery corespund condiției.
Sintaxa ANY
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name FROM table_name WHERE condition);
Sintaxa ALL
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name FROM table_name WHERE condition);
Operatorul trebuie să fie un operator de comparație standard (=, <>,! =,>,> =, <, Sau <=);
Exemple SQL ANY
Operatorul ANY returnează TRUE dacă oricare dintre valorile subquery îndeplinește condiția.
Următoarea instrucțiune SQL returnează TRUE și listează numele produsului dacă găsește ANY înregistrări în tabelul OrderDetails unde cantitate=10 (quantity = 10):
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
Următoarea instrucțiune SQL returnează TRUE și listează numele produsului dacă găsește ANY înregistrări în tabelul OrderDetails unde cantitate>99 (quantity > 99):
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
Exemplu SQL ALL
Operatorul ALL returnează TRUE dacă toate valorile subquery îndeplinesc condiția.
Următoarea instrucțiune SQL returnează TRUE și listează numele produselor dacă înregistrările ALL din tabelul OrderDetails au cantitate=10 (quantity = 10) (deci, acest exemplu va returna FALSE, deoarece nu înregistrările ALL din tabelul OrderDetails au cantitate = 10 (quantity = 10)):
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

SQL SELECT INTO

SQL SELECT INTO
Instrucțiunea SQL SELECT INTO
Instrucțiunea SELECT INTO copiază datele dintr-o tabelă într-un nou tabel.
Sintaxa SELECT INTO
Copiați toate coloanele într-un nou tabel:
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Copiați doar câteva coloane într-un nou tabel:
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Noua tabelă va fi creată cu numele și coloanele definite în tabelul vechi. Puteți crea nume de coloane noi folosind clauza AS.
Exemple SQL SELECT INTO
Următoarea instrucțiune SQL creează o copie de rezervă a Clienților (Customers):
SELECT * INTO CustomersBackup2017
FROM Customers;
Următoarea instrucțiune SQL folosește clauza IN pentru a copia tabela într-un nou tabel într-o altă bază de date:
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'
FROM Customers;
Următoarea instrucțiune SQL copiază doar câteva coloane într-un nou tabel:
SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;
Următoarea instrucțiune SQL copiază doar clienții (customers) germani într-un nou tabel:
SELECT * INTO CustomersGermania
FROM Customers
WHERE Country = 'Germania';
Următoarea instrucțiune SQL copiază date din mai multe tabele într-un nou tabel:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
SELECT INTO poate fi, de asemenea, utilizat pentru a crea un tabel nou, gol, folosind schema altuia. Adaugă doar o clauză WHERE care determină ca interogarea să nu returneze date:
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;

SQL INSERT INTO SELECT

SQL INSERT INTO SELECT
Instrucțiunea SQL INSERT INTO SELECT
Instrucțiunea INSERT INTO SELECT copiază datele dintr-un tabel și le introduce într-un alt tabel.
INSERT INTO SELECT necesită ca tipurile de date din sursele și tabelele țintă (target) să se potrivească
Înregistrările existente în tabelul țintă (target) nu sunt afectate
Sintaxa INSERT INTO SELECT
Copiați toate coloanele de la un tabel la altul:
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
Copiați doar câteva coloane dintr-un tabel într-un alt tabel:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
Exemple SQL INSERT INTO SELECT
Următoarea instrucțiune SQL copiază „Furnizorii” (Suppliers) în „Clienți” (Customers) (coloanele care nu sunt completate cu date, vor conține NULL):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
Următoarea instrucțiune SQL copiază „Furnizorii” (Suppliers) în „Clienți” (Customers) (completați toate coloanele):
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
Următoarea instrucțiune SQL copiază numai furnizorii germani în „Clienți” (Customers):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germania';

SQL CASE

SQL CASE
Instrucțiunea SQL CASE
Instrucțiunea CASE trece prin condiții și returnează o valoare atunci când este îndeplinită prima condiție (ca o instrucțiune IF-THEN-ELSE). Deci, odată ce o condiție este adevărată, aceasta va opri citirea și va returna rezultatul. Dacă condițiile nu sunt adevărate, aceasta returnează valoarea în clauza ELSE.
Dacă nu există nici o parte ELSE și nici o condiție nu este adevărată, se returnează NULL.
Sintaxa CASE
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;
Exemple SQL CASE
Următorul SQL trece prin condiții și returnează o valoare atunci când este îndeplinită prima condiție:
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END AS QuantityText
FROM OrderDetails;
Următorul SQL va ordona (order) clienții (customers) după oraș. Cu toate acestea, dacă orașul este NULL, atunci ordonați (order) după țară:
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

SQL Funcții NULL

Funcții SQL NULL
Funcții SQL IFNULL(), ISNULL(), COALESCE() și NVL()
Să presupunem că coloana "UnitsOnOrder" este opțională și poate conține valori NULL.
Următoarea declarație SELECT:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;
În exemplul de mai sus, dacă oricare dintre valorile "UnitsOnOrder" este NULL, rezultatul va fi NULL.
Soluţii
MySQL
Funcția MySQL IFNULL() vă permite să returnați o valoare alternativă dacă o expresie este NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
sau putem folosi funcția COALESCE(), astfel:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQL Server
Funcția SQL ISNULL() vă permite să returnați o valoare alternativă atunci când o expresie este NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
MS Access
Funcția MS Access IsNull() returnează TRUE (-1) dacă expresia este o valoare nulă, altfel returnează FALSE (0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;
Oracle
Funcția Oracle NVL() obține același rezultat:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;

SQL Proceduri stocate

SQL Stored Procedures
Proceduri stocate SQL pentru SQL Server (SQL Stored Procedures for SQL Server)
Ce este o procedură stocată (Stored Procedure)?
O procedură stocată (Stored Procedure) este un cod SQL pregătit pe care îl puteți salva, astfel încât codul poate fi reutilizat din nou și din nou.
Așadar, dacă aveți o interogare SQL pe care o scrieți de mai multe ori, salvați-o ca o procedură stocată (Stored Procedure) și apoi apelați-o pentru a o executa.
De asemenea, puteți trece parametrii la o procedură stocată (Stored Procedure), astfel încât procedura stocată (Stored Procedure) să poată acționa în funcție de valoarea (valorile) parametrului care este trecută.
Sintaxa de procedură stocată (Stored Procedure)
CREATE PROCEDURE procedure_name
AS
sql_statement
GO;
Execute a Stored Procedure
EXEC procedure_name;
Exemplu de procedură stocată (stored procedure)
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) numită "SelectAllCustomers" care selectează toate înregistrările din tabelul "Clienți" (Customers):
CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;
Executați procedura stocată (stored procedure) de mai sus după cum urmează:
EXEC SelectAllCustomers;
Procedura stocată cu un singur parametru
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) care selectează Clienții (Customers) dintr-un anumit oraș (City) din tabelul „Clienți” (Customers):
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30)
AS
SELECT * FROM Customers WHERE City = @City
GO;
Executați procedură stocată (stored procedure) mai sus după cum urmează:
EXEC SelectAllCustomers @City = "Londra";
Procedură stocată cu mai mulți parametri
Configurarea mai multor parametri este foarte ușoară. Trebuie doar să enumerați fiecare parametru și tipul de date separat printr-o virgulă, așa cum se arată mai jos.
Următoarea instrucțiune SQL creează o procedură stocată (stored procedure) care selectează clienții (Customers) dintr-un anumit oraș (City) cu un anumit cod poștal (PostalCode) din tabelul „Clienți” (Customers):
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;
Executați procedura stocată (stored procedure) mai sus după cum urmează:
EXEC SelectAllCustomers @City = "Londra", @PostalCode = "WA1 1DP";

SQL Comentarii

Comentarii SQL
Comentariile sunt utilizate pentru a explica secțiunile instrucțiunilor SQL sau pentru a preveni executarea de instrucțiuni SQL.
Exemplele din acest capitol nu vor funcționa în Firefox și Microsoft Edge!
Comentariile nu sunt acceptate în bazele de date Microsoft Access. Firefox și Microsoft Edge folosesc baza de date Microsoft Access în exemplele noastre.
Comentarii cu o singură linie
Comentariile cu o singură linie încep cu -.
Orice text între - și sfârșitul liniei va fi ignorat (nu va fi executat).
Următorul exemplu utilizează un comentariu cu o singură linie ca explicație:
--Select all:
SELECT * FROM Customers;
Următorul exemplu utilizează un comentariu cu o singură linie pentru a ignora sfârșitul unei linii:
SELECT * FROM Customers -- WHERE City='Berlin';
Următorul exemplu utilizează un comentariu cu o singură linie pentru a ignora o afirmație:
--SELECT * FROM Customers;
SELECT * FROM Products;
Comentarii cu mai multe linii
Comentariile cu mai multe linii încep cu / * și se termină cu * /.
Orice text între / * și * / va fi ignorat.
Următorul exemplu utilizează un comentariu cu mai multe linii ca explicație:
/*Selectați toate coloanele
din toate înregistrările
în tabelul Clienți (Customers): * /
SELECT * FROM Customers;
Următorul exemplu utilizează un comentariu cu mai multe linii pentru a ignora multe afirmații:
/*SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories;*/
SELECT * FROM Suppliers;
Pentru a ignora doar o parte dintr-o afirmație, utilizați și / * * / comentariu.
Următorul exemplu utilizează un comentariu pentru a ignora o parte a unei linii:
SELECT CustomerName, /*City,*/ Country FROM Customers;
Următorul exemplu utilizează un comentariu pentru a ignora o parte dintr-o afirmație:
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
AND Country='USA'
ORDER BY CustomerName;

SQL CREATE DATABASE

SQL CREATE DATABASE
Instrucțiunea SQL CREATE DATABASE
Instrucțiunea CREATE DATABASE este utilizată pentru a crea o nouă bază de date SQL.
Sintaxă
CREATE DATABASE databasename;
CREATE DATABASE Example
Următoarea instrucțiune SQL creează o bază de date numită "testDB":
CREATE DATABASE testDB;
Asigurați-vă că aveți privilegiul admin înainte de a crea orice bază de date. Odată creată o bază de date, o puteți verifica în lista bazelor de date cu următoarea comandă SQL: SHOW DATABASES;

SQL DROP DATABASE

SQL DROP DATABASE
Instrucțiunea SQL DROP DATABASE
Instrucțiunea DROP DATABASE este utilizată pentru a renunța la o bază de date SQL existentă.
Sintaxă
DROP DATABASE databasename;
Aveți grijă înainte de a renunța la o bază de date. Ștergerea unei baze de date va duce la pierderea informațiilor complete stocate în baza de date!
Exemplu DROP DATABASE
Următoarea instrucțiune SQL renunță la baza de date existentă "testDB":
DROP DATABASE testDB;
Asigurați-vă că aveți privilegiul admin înainte de a renunța la orice bază de date. Odată ce o bază de date este abandonată, o puteți verifica în lista bazelor de date cu următoarea comandă SQL: SHOW DATABASES;

SQL BACKUP DATABASE

SQL BACKUP DATABASE 
SQL BACKUP DATABASE pentru SQL Server
Instrucțiunea SQL BACKUP DATABASE
Instrucțiunea BACKUP DATABASE este utilizată în SQL Server pentru a crea o copie de rezervă completă a unei baze de date SQL existente.
Sintaxă
BACKUP DATABASE databasename
TO DISK = 'filepath';
Instrucțiunea SQL BACKUP WITH DIFFERENTIAL
O copie de rezervă diferențială (differential back up) face doar backup pentru părțile bazei de date care s-au modificat de la ultima copie de rezervă completă a bazei de date.
Sintaxă
BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;
Exemplu BACKUP DATABASE 
Următoarea instrucțiune SQL creează o copie de rezervă completă (full back up) a bazei de date existente "testDB" pe discul D:
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';
Faceți întotdeauna o copie de siguranță (back up) a bazei de date pe o unitate diferită de baza de date reală. Apoi, dacă primiți un crash pe disc, nu veți pierde fișierul dvs. de rezervă împreună cu baza de date.
Exemplu BACKUP WITH DIFFERENTIAL
Următoarea instrucțiune SQL creează o copie de rezervă diferențială (differential back up) a bazei de date "testDB":
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;

 

SQL CREATE TABLE

SQL CREATE TABLE
Instrucțiunea SQL CREATE TABLE
Instrucțiunea CREATE TABLE este utilizată pentru a crea o nouă tabelă într-o bază de date.
Sintaxă
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
Parametrii coloanelor specifică numele coloanelor tabelului.
Parametrul datatype specifică tipul de date pe care le poate deține coloana (de exemplu, varchar, integer, date, etc.).
Exemplu SQL CREATE TABLE
Următorul exemplu creează un tabel numit „Persoane” (Persons) care conține cinci coloane: PersonID, LastName, FirstName, Address și City:
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);
Coloana PersonID este de tip int și va deține un numar intreg (integer).
Coloanele LastName, FirstName, Address și City sunt de tip varchar și vor conține caractere (characters), iar lungimea maximă pentru aceste câmpuri este de 255 de caractere.
Tabelul gol „Persoane” (Persons) poate fi completat acum cu date cu instrucțiunea SQL INSERT INTO.
Creați o tabelă folosind o altă tabelă
O copie a unui tabel existent poate fi, de asemenea, creată folosind CREATE TABLE.
Noul tabel primește aceleași definiții ale coloanei. Toate coloanele sau coloanele specifice pot fi selectate.
Dacă creați o nouă tabelă folosind o tabelă existentă, noua tabelă va fi completată cu valorile existente din tabelul vechi.
Sintaxă
CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;
Următorul SQL creează un nou tabel numit "TestTables" (care este o copie a tabelului "Clienți" (Customers)):
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;

SQL DROP TABLE

SQL DROP TABLE
Instrucțiunea SQL DROP TABLE
Instrucțiunea DROP TABLE este utilizată pentru a renunța la un tabel existent într-o bază de date.
Sintaxă
DROP TABLE table_name;
Aveți grijă înainte de a arunca o masă. Ștergerea unui tabel va duce la pierderea informațiilor complete stocate în tabel!
Exemplu DROP TABLE
Următoarea instrucțiune SQL renunță la tabelul existent "Expeditori" (Shippers):
DROP TABLE Shippers;
SQL TRUNCATE TABLE
Instrucțiunea TRUNCATE TABLE este utilizată pentru a șterge datele dintr-un tabel, dar nu și tabelul în sine.
Sintaxă
TRUNCATE TABLE table_name;

SQL ALTER TABLE

SQL ALTER TABLE
Instrucțiunea SQL ALTER TABLE
Instrucțiunea ALTER TABLE este utilizată pentru a adăuga, șterge sau modifica coloane dintr-un tabel existent.
Instrucțiunea ALTER TABLE este de asemenea folosită pentru a adăuga și a scădea diverse constrângeri pe un tabel existent.
ALTER TABLE - ADD Column
Pentru a adăuga o coloană într-un tabel, utilizați următoarea sintaxă:
ALTER TABLE table_name
ADD column_name datatype;
Următorul SQL adaugă o coloană „Email” la tabelul „Clienți” (Customers):
ALTER TABLE Customers
ADD Email varchar(255);
ALTER TABLE - DROP COLUMN
Pentru a șterge o coloană dintr-un tabel, utilizați următoarea sintaxă (observați că unele sisteme de baze de date nu permit ștergerea unei coloane):
ALTER TABLE table_name
DROP COLUMN column_name;
Următorul SQL șterge coloana „Email” din tabelul „Clienți” (Customers):
ALTER TABLE Customers
DROP COLUMN Email;
ALTER TABLE - ALTER/MODIFY COLUMN
Pentru a modifica tipul de date al unei coloane dintr-un tabel, utilizați următoarea sintaxă:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype;
My SQL / Oracle (versiunea anterioară 10G):
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
Oracle 10G și mai târziu:
ALTER TABLE table_name
MODIFY column_name datatype;
Exemplu SQL ALTER TABLE
Creați tabelul „Persoane” (Persons):
Acum vrem să adăugăm o coloană numită "DateOfBirth" în tabelul "Persoane"(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Observați că noua coloană, "DateOfBirth", este de tip date (data type) și va păstra o dată. Data type specifică ce tip de date poate conține coloana. 
Exemplu Modificați Data Type
Acum dorim să schimbăm tipul de date (Data Type) al coloanei numită „DateOfBirth” din tabelul „Persoane”(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
Observați că coloana „DateOfBirth” are acum un tip year și va păstra year într-un format de două sau patru cifre.
Exemplu DROP COLUMN
În continuare, dorim să ștergem coloana numită „DateOfBirth” din tabelul „Persoane”(Persons).
Folosim următoarea instrucțiune SQL:
ALTER TABLE Persons
DROP COLUMN DateOfBirth;

 

SQL Restricții

SQL Constraints
Limitările SQL
Restricțiile SQL sunt utilizate pentru a specifica regulile pentru datele dintr-un tabel.
SQL Creare constrângeri
Constrângerile pot fi specificate atunci când tabela este creată cu instrucțiunea CREATE TABLE sau după crearea tabelului cu instrucțiunea ALTER TABLE.
Sintaxă
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);
Limitările SQL
Restricțiile SQL sunt utilizate pentru a specifica regulile pentru datele dintr-un tabel.
Constrângerile sunt utilizate pentru a limita tipul de date care poate intra într-un tabel. Aceasta asigură precizia și fiabilitatea datelor din tabel. Dacă există o încălcare între constrângere și acțiunea de date, acțiunea este anulată.
Constrângerile pot fi la nivel de coloană sau de tabel. Restricțiile de nivel de coloană se aplică unei coloane și restricțiile de nivel de tabel se aplică întregii tabele.
Următoarele constrângeri sunt utilizate în mod obișnuit în SQL:
NOT NULL - Se asigură că o coloană nu poate avea o valoare NULL
UNIQUE - Se asigură că toate valorile dintr-o coloană sunt diferite
PRIMARY KEY - O combinație între NOT NULL ȘI UNIQUE. Identifică în mod unic fiecare rând dintr-un tabel
FOREIGN KEY - Identifică un rând / o înregistrare într-un alt tabel
CHECK - Se asigură că toate valorile dintr-o coloană îndeplinesc o condiție specifică
DEFAULT - Setează o valoare implicită pentru o coloană atunci când nu este specificată nicio valoare
INDEX - Folosit pentru a crea și recupera rapid datele din baza de date

SQL NOT NULL

SQL NOT NULL
SQL Constrângere NOT NULL (SQL NOT NULL Constraint)
În mod implicit, o coloană poate conține valori NULL.
Constrângerea NOT NULL impune o coloană pentru a NU (NOT) accepta valorile NULL.
Acest lucru impune un câmp care să conțină întotdeauna o valoare, ceea ce înseamnă că nu puteți introduce o înregistrare nouă sau să actualizați o înregistrare fără a adăuga o valoare la acest câmp.
SQL NOT NULL în CREATE TABLE
Următorul SQL asigură că coloanele „ID”, „LastName” și „FirstName” NU (NOT) vor accepta valori NULL atunci când se creează tabelul „Persoane” (Persons):
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);
SQL NOT NULL în ALTER TABLE
Pentru a crea o restricție NOT NULL pe coloana „Vârstă” (Age) când tabelul „Persoane” (Persons) este deja creat, utilizați următorul SQL:
ALTER TABLE Persons
MODIFY Age int NOT NULL;

SQL UNIQUE

SQL Constrângere UNIQUE (SQL UNIQUE Constraint)
Constrângerea UNIQUE asigură că toate valorile dintr-o coloană sunt diferite.
Atât constrângerile UNIQUE, cât și cele PRIMARY KEY oferă o garanție de unicitate pentru o coloană sau un set de coloane.
O constrângere PRIMARY KEY  are automat o restricție UNIQUE.
Cu toate acestea, puteți avea multe constrângeri UNIQUE pe tabelă, dar o singură restricție PRIMARY KEY pe tabelă.
SQL UNIQUE Constraint on CREATE TABLE
Următorul SQL creează o restricție UNIQUE în coloana „ID” atunci când este creată tabela „Persoane” (Persons):
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MySQL:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);
Pentru a denumi o constrângere UNIQUE și pentru a defini o restricție UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
SQL UNIQUE Constraint on ALTER TABLE
Pentru a crea o restricție UNIQUE în coloana „ID” atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (ID);
Pentru a denumi o constrângere UNIQUE și pentru a defini o restricție UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
DROP a UNIQUE Constraint
Pentru a elimina o restricție UNIQUE, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
DROP INDEX UC_Person;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;

SQL PRIMARY KEY

SQL PRIMARY KEY
SQL Limitarea PRIMARY KEY (SQL PRIMARY KEY Constraint)
Limitarea PRIMARY KEY (PRIMARY KEY Constraint) identifică în mod unic fiecare înregistrare dintr-un tabel.
Primary keys trebuie să conțină valori UNIQUE și nu pot conține valori NULL.
Un tabel poate avea doar O (ONE) cheie primară (primary key); iar în tabel, această cheie primară (primary key) poate consta din coloane simple sau multiple (câmpuri).
SQL PRIMARY KEY în CREATE TABLE
Următorul SQL creează o PRIMARY KEY în coloana „ID” când se creează tabelul „Persoane” (Persons):
MySQL:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);
SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
    ID int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
Pentru a permite denumirea unei restricții PRIMARY KEY și pentru a defini o restricție PRIMARY KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
În exemplul de mai sus, există doar ONE PRIMARY KEY (PK_Person). Cu toate acestea, VALUE (valoarea) cheii primare (primary key) este alcătuită din TWO COLUMNS (ID + LastName).
SQL PRIMARY KEY în ALTER TABLE
Pentru a crea o restricție PRIMARY KEY în coloana „ID” atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
Pentru a permite denumirea unei restricții PRIMARY KEY și pentru a defini o restricție PRIMARY KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
Dacă utilizați instrucțiunea ALTER TABLE pentru a adăuga o cheie primară (primary key), coloana cheii primare (primary key) trebuie să fi fost deja declarată că nu conține valori NULL (când a fost creat tabelul pentru prima dată).
Renunțare la o restricție PRIMAR KEY (DROP a PRIMARY KEY Constraint)
Pentru a renunța la o restricție PRIMAR KEY, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;

SQL FOREIGN KEY

SQL FOREIGN KEY 
SQL Constrângere FOREIGN KEY (SQL FOREIGN KEY Constraint)
O FOREIGN KEY este o cheie folosită pentru a lega două tabele între ele.
O FOREIGN KEY este un câmp (sau o colecție de câmpuri) dintr-un tabel care se referă la FOREIGN KEY dintr-un alt tabel.
Tabelul care conține cheia străină (foreign key) se numește tabel copil (child table), iar tabelul care conține cheia candidat (candidate key) este denumit referință sau tabel părinte (parent table).
Creați două tabele:
Tabelul „Persoane” (Persons):
Tabelul „Comenzi” (Orders):
Observați că coloana „PersonID” din tabelul „Comenzi” (Orders) indică coloana „PersonID” din tabelul „Persoane” (Persons).
Coloana „PersonID” din tabelul „Persoane” (Persons) este PRIMARY KEY din tabelul „Persoane” (Persons).
Coloana „PersonID” din tabelul „Comenzi” (Orders) este o FOREIGN KEY din tabelul „Comenzi” (Orders).
Limitarea FOREIGN KEY este utilizată pentru a preveni acțiunile care ar distruge legăturile dintre tabele.
Restrângerea FOREIGN KEY împiedică, de asemenea, introducerea datelor nevalide în coloana de cheie străină (foreign key), deoarece aceasta trebuie să fie una dintre valori.
SQL FOREIGN KEY în CREATE TABLE
Următorul SQL creează un FOREIGN KEY în coloana „PersonID” atunci când se creează tabelul „Comenzi” (Orders):
MySQL:
CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
Pentru a permite denumirea unei restricții FOREIGN KEY și pentru a defini o restricție FOREIGN KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);
SQL FOREIGN KEY în ALTER TABLE
Pentru a crea o restricție FOREIGN KEY în coloana „PersonID” atunci când tabelul „Comenzi” (Orders) este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Pentru a permite denumirea unei constrângeri FOREIGN KEY și pentru a defini o restricție FOREIGN KEY pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Eliminare restricție FOREIGN KEY (DROP a FOREIGN KEY Constraint)
Pentru a elimina o restricție FOREIGN KEY, utilizați următorul SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

SQL CHECK

SQL CHECK
SQL restricție CHECK (SQL CHECK Constraint)
Restrângerea CHECK este utilizată pentru a limita intervalul de valori care poate fi plasat într-o coloană.
Dacă definiți o restricție CHECK pe o singură coloană, aceasta permite doar anumite valori pentru această coloană.
Dacă definiți o restricție CHECK pe o tabelă, aceasta poate limita valorile din anumite coloane pe baza valorilor din alte coloane din rând.
SQL CHECK în CREATE TABLE
Următorul SQL creează o restricție CHECK în coloana „Vârstă” (Age) când se creează tabelul „Persoane” (Persons). Restrângerea CHECK vă asigură că nu puteți avea nicio persoană sub 18 ani:
MySQL:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CHECK (Age>=18)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int CHECK (Age>=18)
);
Pentru a permite denumirea unei constrângeri CHECK și pentru a defini o restricție CHECK pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255),
    CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
SQL CHECK în ALTER TABLE
Pentru a crea o restricție CHECK în coloana „Vârstă” (Age) când tabelul este deja creat, utilizați următorul SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
Pentru a permite denumirea unei constrângeri CHECK și pentru a defini o restricție CHECK pe mai multe coloane, utilizați următoarea sintaxă SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
Eliminare constrângere CHECK (DROP a CHECK Constraint)
Pentru a elimina o constrângere CHECK, utilizați următorul SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
MySQL:
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;

SQL DEFAULT

SQL DEFAULT 
SQL Restrângerea DEFAULT (SQL DEFAULT Constraint)
Restrângerea DEFAULT este utilizată pentru a furniza o valoare implicită pentru o coloană.
Valoarea implicită va fi adăugată la toate înregistrările noi, dacă nu este specificată nicio altă valoare.
SQL DEFAULT în CREATE TABLE
Următorul SQL stabilește o valoare DEFAULT pentru coloana „Oraș” (City) atunci când se creează tabelul „Persoane” (Persons):
SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Sandnes'
);
Restrângerea DEFAULT poate fi de asemenea folosită pentru a insera valori system, utilizând funcții precum GETDATE ():
CREATE TABLE Orders (
    ID int NOT NULL,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT GETDATE()
);
SQL DEFAULT în ALTER TABLE
Pentru a crea o restricție DEFAULT pe coloana „Oraș” (City) atunci când tabelul este deja creat, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
SQL Server:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
Eliminare constrângere DEFAULT (DROP a DEFAULT Constraint)
Pentru a elimina o constrângere DEFAULT, utilizați următorul SQL:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

SQL CREATE INDEX

SQL CREATE INDEX
Instrucțiunea SQL CREATE INDEX
Instrucțiunea CREATE INDEX este utilizată pentru a crea indexuri în tabele.
Se folosesc indexuri pentru a prelua date din baza de date mai rapid decât in caz contrar. Utilizatorii nu pot vedea indexurile, ci sunt folosite doar pentru a accelera căutările / interogările (searches/queries).
Actualizarea unei tabele cu indexuri necesită mai mult timp decât actualizarea unui tabel fără indexuri (deoarece indexurile au nevoie și de o actualizare). Deci, creați doar indexuri pe coloane care vor fi căutate frecvent.
Sintaxă CREATE INDEX
Creează un index într-un tabel. Valorile duplicate sunt permise:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
Sintaxă  CREATE UNIQUE INDEX 
Creează un index unic pe un tabel. Valorile duplicate nu sunt permise:
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
Sintaxa pentru crearea indexurilor variază printre diferite baze de date. Prin urmare: verificați sintaxa pentru a crea indexuri în baza de date.
Exemplu CREATE INDEX
Instrucțiunea SQL de mai jos creează un index numit "idx_lastname" în coloana "LastName" din tabelul "Persoane" (Persons):
CREATE INDEX idx_lastname
ON Persons (LastName);
Dacă doriți să creați un index pe o combinație de coloane, puteți lista numele coloanelor din paranteze, separate prin virgule:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
Declarație DROP INDEX (DROP INDEX Statement)
Instrucțiunea DROP INDEX este utilizată pentru a șterge un index dintr-un tabel.
MS Access:
DROP INDEX index_name ON table_name;
SQL Server:
DROP INDEX table_name.index_name;
DB2/Oracle:
DROP INDEX index_name;
MySQL:
ALTER TABLE table_name
DROP INDEX index_name;

SQL AUTO INCREMENT

SQL Câmpul AUTO INCREMENT
Câmpul AUTO INCREMENT
Auto-increment permite un număr unic de generat automat atunci când o nouă înregistrare este introdusă într-un tabel.
Adesea, acesta este câmpul cheie principal (primary key field) pe care am dori să fie creat automat de fiecare dată când se introduce o nouă înregistrare.
Sintaxa pentru MySQL
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară (primary key field) cu auto-increment din tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (Personid)
);
MySQL folosește cuvântul cheie (keyword) AUTO_INCREMENT pentru a efectua o funcție auto-increment.
În mod implicit, valoarea de pornire pentru AUTO_INCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a permite ca secvența AUTO_INCREMENT să înceapă cu o altă valoare, utilizați următoarea instrucțiune SQL:
ALTER TABLE Persons AUTO_INCREMENT=100;
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane”(Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru SQL Server
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară (primary key field) cu auto-increment in tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MS SQL Server folosește cuvântul cheie (primary key) IDENTITY pentru a efectua o funcție de auto-increment (auto-increment feature).
În exemplul de mai sus, valoarea de pornire pentru IDENTITY este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a specifica că coloana „Personid” ar trebui să înceapă la valoarea 10 și să crească cu 5, schimbați-o în IDENTITY(10,5)
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popecu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane” (Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru Access
Următoarea instrucțiune SQL definește coloana "Personid" pentru a fi un câmp cheie primară cu auto-increment (auto-increment primary key field) în tabelul "Persoane" (Persons):
CREATE TABLE Persons (
    Personid AUTOINCREMENT PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);
MS Access utilizează cuvântul cheie (keyword) AUTOINCREMENT pentru a efectua o funcție auto-increment (auto-increment feature).
În mod implicit, valoarea de pornire pentru AUTOINCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă.
Pentru a specifica că coloana „Personid” ar trebui să înceapă la valoarea 10 și să crească cu 5, schimbați autoincrementul în AUTOINCREMENT(10,5).
Pentru a insera o înregistrare nouă în tabelul „Persoane” (Persons), NU (NOT) va trebui să specificăm o valoare pentru coloana „Personid” (o valoare unică va fi adăugată automat):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane”(Persons). Coloanei „Personid” i se va atribui o valoare unică. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.
Sintaxa pentru Oracle
În Oracle codul este puțin mai complicat.
Va trebui să creați un câmp cu auto-increment (auto-increment field) cu obiectul secvenței (sequence object) (acest obiect generează o secvență numerică).
Utilizați următoarea sintaxă CREATE SEQUENCE:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
Codul de mai sus creează un obiect de secvență (sequence object) numit seq_person, care începe cu 1 și va crește cu 1. De asemenea, va stoca (cache) până la 10 valori pentru performanță. Opțiunea cache specifică câte valori de secvență (sequence values) vor fi stocate în memorie pentru acces mai rapid.
Pentru a introduce o nouă înregistrare în tabelul „Persoane” (Persons), va trebui să folosim funcția nextval (această funcție preia următoarea valoare din secvența seq_person):
INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,'Ion','Popescu');
Declarația SQL de mai sus ar insera o nouă înregistrare în tabelul „Persoane” (Persons). Coloana „Personid” avea să i se atribuie următorul număr din secvența seq_person. Coloana „FirstName” ar fi setată la „Ion”, iar coloana „LastName” ar fi setată la „Popescu”.

SQL Date

SQL Lucrând cu datele
Datele SQL
Partea cea mai dificilă atunci când lucrați cu datele este să vă asigurați că formatul datei pe care încercați să îl inserați se potrivește cu formatul coloanei de date din baza de date.
Atâta timp cât datele dvs. conțin doar porțiunea de date (date portion), întrebările dvs. vor funcționa așa cum vă așteptați. Cu toate acestea, dacă este implicată o porție de timp (time portion), devine mai complicat.
SQL Date Data Types
MySQL vine cu următoarele tipuri de date pentru stocarea date/time în baza de date:
DATE - format YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MI:SS
TIMESTAMP - format: YYYY-MM-DD HH:MI:SS
YEAR - format YYYY or YY
SQL Server vine cu următoarele tipuri de date pentru stocarea date/time în baza de date:
DATE - format YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MI:SS
SMALLDATETIME - format: YYYY-MM-DD HH:MI:SS
TIMESTAMP - format: a unique number (un număr unic)
Tipurile de date (date types) sunt alese pentru o coloană atunci când creați un nou tabel în baza de date!
SQL Lucrul cu date
Puteți compara ușor două date dacă nu este implicată o componentă de timp!
Presupunem că avem tabelul „Comenzi” (Orders):
Acum dorim să selectăm înregistrările cu OrderDate "2008-11-11" din tabel.
Folosim următoarea declarație SELECT:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Dacă folosim aceeași declarație SELECT ca mai sus:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
nu vom obține niciun rezultat! Acest lucru se datorează faptului că interogarea caută doar date fără o porție de timp (time portion).
Pentru a vă menține întrebările simple și ușor de întreținut, nu permiteți componentele timpului în datele dvs.!

SQL Vizualizări

Vizualizări SQL (SQL Views)
Instrucțiunea SQL CREATE VIEW
În SQL, o vizualizare (view) este un tabel virtual bazat pe setul de rezultate al unei instrucțiuni SQL.
O vizualizare (view) conține rânduri și coloane, la fel ca un tabel real. Câmpurile dintr-o vizualizare (view) sunt câmpuri dintr-una sau mai multe tabele reale din baza de date.
Puteți adăuga funcții SQL, WHERE și instrucțiuni JOIN într-o vizualizare (view) și prezentați datele ca și cum datele proveneau dintr-un singur tabel.
Sintaxă CREATE VIEW
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
O vizualizare (view) afișează întotdeauna date actualizate! Motorul bazei de date recreează datele, folosind instrucțiunea SQL a vizualizării (view), de fiecare dată când un utilizator solicită o vizualizare (view).
Exemple SQL CREATE VIEW
Următorul SQL creează o vizualizare (view) care arată toți clienții (customers) din Brazilia:
CREATE VIEW [Brazilia Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = "Brazilia";
Putem consulta întrebarea de mai sus după cum urmează:
SELECT * FROM [Brazilia Customers];
Următorul SQL creează o vizualizare (view) care selectează fiecare produs din tabelul „Produse” (Products) cu un preț mai mare decât prețul mediu:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);
Putem consulta întrebarea de mai sus după cum urmează:
SELECT * FROM [Products Above Average Price];
SQL Actualizarea unei vizualizări (SQL Updating a View)
O vizualizare (view) poate fi actualizată cu comanda CREATE SAU REPLACE VIEW.
Sintaxă SQL CREATE SAU REPLACE VIEW
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Următorul SQL adaugă coloana „Oraș” (City) la vizualizarea (view) „Clienții din Brazilia” (Brazilia Customers):
CREATE OR REPLACE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = "Brazil";
SQL Eliminarea unei vizualizări (SQL Dropping a View)
O vizualizare (view) este ștersă cu comanda DROP VIEW.
Sintaxă SQL DROP VIEW
DROP VIEW view_name;
Următorul SQL renunță la vizualizarea (view) „Clienții din Brazilia” (Brazilia Customers):
DROP VIEW [Brazilia Customers];

SQL Injection

Injecția SQL (SQL Injection)
Injecția SQL (SQL Injection) este o tehnică de injecție de cod (code injection) care ar putea distruge baza de date.
Injecția SQL (SQL Injection) este una dintre cele mai frecvente tehnici de hacking web.
Injecția SQL (SQL Injection) este plasarea codului rău intenționat în declarațiile SQL, prin introducerea paginii web.
SQL în paginile web
Injecția SQL (SQL Injection) are loc de obicei atunci când ceri utilizatorului o introducere, cum ar fi numele său de utilizator / userid (username/userid), iar în loc de nume / id (name/id), utilizatorul vă oferă o declarație SQL pe care o veți rula în mod neștiut pe baza de date.
Uitați-vă la următorul exemplu care creează o instrucțiune SELECT adăugând o variabilă (txtUserId) la un șir selectat. Variabila este preluată din intrarea utilizatorului (getRequestString):
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
Restul acestui capitol descrie pericolele potențiale ale utilizării intrării utilizatorului în declarațiile SQL.
Injecția SQL pe baza 1 = 1 este întotdeauna adevărată
Privește din nou exemplul de mai sus. Scopul inițial al codului a fost crearea unei instrucțiuni SQL pentru a selecta un utilizator, cu un id de utilizator (user id) dat.
Dacă nu există nimic care să împiedice un utilizator să introducă o intrare „greșită” (wrong), utilizatorul poate introduce unele intrări „inteligente” (smart) ca aceasta:
UserId: 105 SAU 1 = 1
Apoi, instrucțiunea SQL va arăta astfel:
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
SQL-ul de mai sus este valid și va întoarce TOATE (ALL) rândurile din tabelul „Utilizatori” (Users), deoarece OR 1 = 1 este întotdeauna TRUE.
Exemplul de mai sus pare periculos? Ce se întâmplă dacă tabelul „Utilizatori” (Users) conține nume și parole?
Instrucțiunea SQL de mai sus este la fel ca aceasta:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
Un hacker ar putea avea acces la toate numele de utilizator și parolele (user names și passwords) dintr-o bază de date, introducând pur și simplu 105 OR 1 = 1 în câmpul de introducere.
Injecția SQL Bazată pe "" = "" este întotdeauna adevărată
Iată un exemplu de autentificare a utilizatorului pe un site web:
Nume utilizator: John Doe
Parola: myPass
Exemplu:
uName = getRequestString("username");
uPass = getRequestString("userpassword");
sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'
Rezultat:
SELECT * FROM Users WHERE Name ="John Doe" AND Pass ="myPass"
Un hacker ar putea avea acces la numele de utilizator și parolele (user names și passwords) dintr-o bază de date, introducând pur și simplu "OR" "=" în caseta de text a numelui de utilizator sau a parolei (user name sau password):
Nume utilizator: "sau" "="
Parola: "sau" "="
Codul de la server va crea o declarație SQL validă astfel:
Rezultat:
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
SQL de mai sus este valid și va returna toate rândurile din tabelul „Utilizatori” (Users), deoarece OR „„ = „„ este întotdeauna TRUE.
Injecție SQL bazată pe declarații SQL Batched (SQL Injection Based on Batched SQL Statements)
Majoritatea bazelor de date acceptă declarația SQL batched.
Un batch (lot) de instrucțiuni SQL este un grup de două sau mai multe instrucțiuni SQL, separate prin punct și virgulă.
Instrucțiunea SQL de mai jos va returna toate rândurile din tabelul „Utilizatori” (Users), apoi va șterge tabelul „Furnizori” (Suppliers).
SELECT * FROM Users; DROP TABLE Suppliers
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
User id: 105; DROP TABLE Suppliers
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;
Utilizați parametrii SQL pentru protecție
Pentru a proteja un site web de injecția SQL, puteți utiliza parametrii SQL.
Parametrii SQL sunt valori care sunt adăugate la o interogare SQL la momentul executării, într-o manieră controlată.
Exemplu Razor ASP.NET:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = @0";
db.Execute(txtSQL,txtUserId);
Rețineți că parametrii sunt reprezentați în instrucțiunea SQL de către un marker@.
Motorul SQL verifică fiecare parametru pentru a se asigura că este corect pentru coloana sa și sunt tratate literal, și nu ca parte a SQL-ului care trebuie executat.
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);
Următoarele exemple arată cum să construiți interogări parametrizate în unele limbaje web comune.
SELECTAȚI DECLARAȚIA ÎN ASP.NET:
txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();
INSERAȚI ÎN DECLARAȚIE ÎN ASP.NET:
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue("@0",txtNam);
command.Parameters.AddWithValue("@1",txtAdd);
command.Parameters.AddWithValue("@2",txtCit);
command.ExecuteNonQuery();
INSERAȚI ÎN DECLARAȚIE ÎN PHP:
$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd);
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();

SQL Găzduire

SQL Găzduire (SQL Hosting)
Dacă doriți ca site-ul dvs. web să poată stoca și prelua date dintr-o bază de date, serverul dvs. web ar trebui să aibă acces la o bază de date (database-system) care utilizează limbajul SQL.
Dacă serverul dvs. web este găzduit de un furnizor de servicii Internet ( Internet Service Provider) (ISP), va trebui să căutați planuri de găzduire SQL (SQL hosting).
Cele mai frecvente baze de date de găzduire SQL (SQL hosting databases) sunt MS SQL Server, Oracle, MySQL și MS Access.
MS SQL Server
Microsoft SQL Server este un software popular de bază de date pentru site-uri web bazate pe baze de date (database-driven) cu trafic ridicat.
SQL Server este un sistem de baze de date SQL (SQL database system) foarte puternic, robust și complet prezentat.
Oracle
Oracle este, de asemenea, un software popular de baze de date pentru site-uri web bazate pe baze de date cu trafic ridicat.
Oracle este un sistem de baze de date SQL foarte puternic, robust și complet prezentat.
MySQL
MySQL este, de asemenea, un software popular de baze de date pentru site-uri web.
MySQL este un sistem de baze de date SQL foarte puternic, robust și complet caracterizat.
MySQL este o alternativă ieftină la soluțiile scumpe Microsoft și Oracle.
Access
Când un site web necesită doar o bază de date simplă, Microsoft Access poate fi o soluție.
Access-ul nu este potrivit pentru traficul foarte ridicat și nu este la fel de puternic ca MySQL, SQL Server sau Oracle.

Despre Lecții-Virtuale.ro

Lecții-Virtuale este o platformă educațională care oferă suport în vederea pregătirii pentru Evaluare Națională și Bacalaureat la Matematică, Fizică și Chimie. Lecțiile noastre sunt alcătuite din filme și exerciții și probleme cu tot cu rezolvări. Platforma noastră este o soluție ideală pentru școala online. Pentru facilitarea activității profesorilor în cadrul ecosistemului GSuite de la Google am implementat butonul Google Classroom. Scopul nostru este să ne concentrăm pe prezentarea noțiunilor și fenomenelor într-o manieră care să stimuleze înțelegerea și nu memorarea mecanică. Ne propunem să facilităm accesul la conținut educațional de calitate mai ales elevilor cu venituri mai modeste care nu își pemit meditații particulare. Sperăm să vă simțiti bine alături de noi și să invățați lucruri folositoare. Hai România!

Newsletter

Abonează-te la Newsletter pentru a fi la curent cu toate ofertele noastre.

Parteneri

EduApps partener Lectii Virtuale UiPath partener Lectii Virtuale Scoala365 partener Lectii Virtuale CCD Galați partener Lectii Virtuale

2024 © Lecții-virtuale.ro Toate drepturile rezervate
Termeni   Despre   Contact   Confidenţialitate   Cariere Parteneri