Documente Academic
Documente Profesional
Documente Cultură
Limbajul SQL
SQL este un limbaj standard pentru accesarea bazelor de date
MySQL, SQL Server, Access, Oracle, Sybase, DB2
Sintaxa SQL
SELECT CompanyName, Country FROM Customers
WHERE Country <> 'USA
SQL
SQL este un limbaj standard pentru accesarea si manipularea bazelor de date
SQL Structured Query Language
SQL este un standard ANSI (American National Standards Institute)
Ce poate face SQL
SQL poate executa interogri la baza de date
SQL poate extrage date din baza de date
SQL poate insera nregistrri n baza de date
SQL poate actualiza nregistrri n baza de date
SQL poate terge nregistrri n baza de date
SQL poate crea noi baze de date
SQL poate crea noi tabele n baza de date
Instruciuni SQL
Majoritatea operaiilor efectuate asupra bazelor de date se fac cu
comenzi/instruciuni SQL
SELECT * FROM Persons
SQL nu ine cont de diferena dintre litere mari i mici
Unele SGBD-uri necesit caracterul ; dup instruciuni. Astfel se separ
instruciunile SQL pentru ca s se poat executa mai multe instruciuni una dup
alta ntr-un singur batch
SQL DML i DDL (DCL, TCL) cont.
CREATE DATABASE
ALTER DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
DROP INDEX
Exemplu SELECT
SELECT * FROM Persons
Clauza WHERE
-
Sintaxa
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
Ghilimele apostroafe
-SQL folose.te apostrof pentru a delimita valorile de tip text/string
- Majoritatea SGBD-urilor accept.si ghilimele
- Valorile numerice nu se delimiteaz. Cu apostroafe/ghilimele
Corect:
SELECT * FROM Persons WHERE FirstName='Tove'
SELECT * FROM Persons WHERE Year=1965
Gresit:
SELECT * FROM Persons WHERE FirstName=Tove
SELECT * FROM Persons WHERE Year='1965'
Operatorii AND si OR
Se folosesc pentru a filtra nregistrarile dupa mai multe conditii
ORDER BY LastName
Instruc.iunea UPDATE
. Se folose.te pentru actualizarea unor date dintr-o tabela
. Sintaxa:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
. !!! Omiterea clauzei WHERE duce la actualizarea tuturor nregistrarilor din tabela
Instruciunea UPDATE exemplu:
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND
FirstName='Jakob'
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
Instruciunea DELETE
O folosim pentru a terge nregistrri dintr-o tabel
Sintaxa:
DELETE FROM table_name
WHERE some_column=some_value
!!! Omiterea clauzei WHERE duce la tergerea tuturor nregistrrilor din tabel
Instruc.iunea DELETE exemplu
SAU
DELETE * FROM table_name
Nu exist UNDO pentru operaia de tergere
Baze de date
Northwind
Adventure Works
World
Limbaje de modelare
SQL Server Management Studio
Diagrame pentru baze de date
IDEF1X
Baze de date
Customers Northwind
Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
Operatorul LIKE
- Folosit in clauza WHERE pentru a specifica un sablon de cautare intr-o coloana.
Sintaxa:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
Operatorul IN exemplu
Operatorul BETWEEN
- Folosit in clauza WHERE pentru a stabili un interval de valori dupa care se va face
filtrarea datelor
-Capetele intervalului pot fi numere, text sau date calendaristice
-Sintaxa:
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
Operatorul BETWEEN exemplu
Alias - exemple
Cu alias
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola
Fr alias
Join
Tabela Persons
Tabela`Orders
ORDER BY Persons.LastName
LEFT JOIN
Extrage toate nregistrrile din table din stnga, chiar i atunci cnd nu sunt potriviri
n tabela din dreapta
Sintaxa:
SELECT column_name(s)
FROM table_name1 LEFT JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
n unele SGBD-uri se numete LEFT OUTER JOIN
RIGHT JOIN
Extrage toate inregistrarile din table din dreapta, chiar si cele pentru care nu sunt
potriviri in tabela din stanga
Sintaxa:
SELECT column_name(s) FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
In unele SGBD-uri se numeste RIGHT OUTER JOIN
Tabela Orders
FULL JOIN
Extrage nregistrrile pentru care este o potrivire ntr-una din cele dou tabele
Sintaxa:
SELECT column_name(s) FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
Extrage toate nregistrrile din tabela din stnga i toate nregistrrile din tabela
din dreapta
Operatorul UNION
Folosit pentru a combina doua sau mai multe instructiuni SELECT
Fiecare instructiune SELECT trebuie sa aiba acelasi numar de coloane
Coloanele corespunzatoare trebuie sa aiba si aceleasi tipuri
Coloanele trebuie sa fie si in aceeasi ordine
Operatorul UNION - sintaxa
Doar valorile distincte
Employees_USA
SELECT INTO
Folosit pentru a crea copii backup ale tabelelor
Sintaxa:
1. SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
2. SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
FROM Persons
Se poate crea un backup doar pentru o parte din date
SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons WHERE City='Sandnes'
SELECT
INTO - exemplu 2
Sintaxa:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
Tipul de date stabilete tipul valorilor pentru coloana respectiv (tipuri de date
MSMSQL)
Tipuri de date MSSQL
iruri de caractere
Tipuri numerice
Constrngeri
Se folosesc pentru a limita tipul datelor care pot ajunge n tabel
Se pot specifica la crearea tabelei (n instruciunea CREATE TABLE) sau dup ce a
fost creat tabela (cu instruciunea ALTER TABLE)
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY
(P_Id,LastName))
Constrngerea PRIMARY KEY
Crearea unei constrngeri de cheie primar dup crearea tabelei
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
n acest caz coloanele ce fac parte din cheia primar trebuie s fi fost definite
anterior
astfel nct s nu accepte valoarea NULL
Constrngerea PRIMARY KEY
Eliminarea unei constrngeri de cheie primar
MySQL
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
Constrngerea FOREIGN KEY
O cheie strin dintr-o tabel pointeaz la o cheie primar din alt tabel
Tabela Persons
Tabela Orders
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))
Constrngerea FOREIGN KEY
Sintaxa - SQL Server / Oracle / MS Access
CREATE TABLE Orders(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES
Persons(P_Id))
Constrngerea FOREIGN KEY
Adugarea constrngerii dup crearea tabelei
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Stabilirea unui nume pentru constrngere i definire constrngere pe mai
multe cmpuri
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Constrngerea FOREIGN KEY
Eliminarea unei constrngeri
MySQL
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access
Constrngerea CHECK
SQL Server / Oracle / MS Access
CREATE TABLE Persons(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255))
Pentru a stabili un nume pentru o constrngere i pentru a defini o
constrngere pe mai multe coloane
CREATE TABLE Persons(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND
City='Sandnes) )
Constrngerea CHECK
Stabilirea unei constrngeri dup crearea tabelei
ALTER TABLE Persons
ADD CHECK (P_Id>0)
Stabilirea unui nume pentru constrngere i crearea unei constrngeri pe mai
multe coloane
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0
AND City='Sandnes')
Constrngerea CHECK
Eliminarea unei constrngeri
SQL Server / Oracle / MS Access
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
Constrngerea DEFAULT
Folosit pentru a insera o valoare implicit ntr-o coloan
Permite generarea automat a unui numr unic atunci cnd se insereaz o nou
nregistrare n tabel
De regul cnd cheia primar este de tip numeric i e format dintr-un singur
cmp, are acest atribut
Auto increment
Sintaxa MySQL
CREATE TABLE Persons(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255),
PRIMARY KEY (P_Id))
Implicit pornes.te de la 1 si creste cu 1
Altfel
ALTER TABLE Persons AUTO_INCREMENT=100
Auto increment
Dac vrem s adugm o nou nregistrare n tabel nu mai trebuie s
specificm cmpul ce are atribut AUTO_INCREMENT
Se va genera o valoare unic automat
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars', 'Monsen')
Auto increment
Sintaxa SQL Server
CREATE TABLE Persons(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255), Address varchar(255),
City varchar(255) )
Implicit pornete de la 1 i crete cu 1
Altfel
IDENTITY(10,5)
Pentru a aduga o nou nregistrare
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')
Auto increment
Sintaxa Oracle
-
VIEW
Un view este o tabela virtuala bazata pe result-set-ul unei interogari
Contine linii si coloane la fel ca si o tabela reala
Campurile unui view sunt campurile uneia sau a mai multor tabele din baza de date
Putem adauga functii SQL, clauza WHERE si JOIN si sa prezentam datele ca si cum
ar veni dintr-o singura tabela
Sintaxa pentru creare VIEW
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Un view ntotdeauna va prezenta date actualizate
Motorul bazei de date va recrea datele folosind instruciunea SELECT de fiecare
dat cnd un view este interogat
VIEW - exemplu
Northwind
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued=No
Interogarea
SELECT * FROM [Current Product List]
VIEW - exemplu
Northwind
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM
Products)
Interogarea
SELECT * FROM [Products Above Average Price]
VIEW - exemplu
Northwind
VIEW - actualizare
Actualizarea unui view
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Exemplu
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
VIEW - tergere
NULL
Reprezint. date lipsa/necunoscute/inaplicabile
Implicit o coloana poate contine valoarea NULL
Tabela Persons
Rezultatul
NULL - operatorul IS NOT NULL
Extragem inregistrarile cu adresa completata
SELECT LastName, FirstName, Address FROM
Persons
WHERE Address IS NOT NULL
Rezultatul
Funciile ISNULL(), NVL(), IFNULL() i COALESCE()
Tabela Products
SELECT ProductName,
UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
Dac UnitsOnOrder este NULL rezultatul va fi NULL
Funciile ISNULL(), NVL(), IFNULL() i COALESCE()
Funcia ISNULL() (Microsoft) ne permite s specificm modul n care dorim s
tratm valorile NULL
NVL(), IFNULL(), COALESCE() pot fi folosite pentru a realiza acelai obiectiv
n interogarea precedent vrem ca valorile NULL s fie tratate ca zero
SQL Server / MS Access
SELECT ProductName,
UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
FROM Products
Funciile ISNULL(), NVL(),IFNULL() i COALESCE()
MSSQL Coalesce
SELECT ProductName, UnitPrice*(UnitsInStock+
COALESCE(UnitsOnOrder,0))
FROM Products
Funcii SQL
SQL are multe funcii pentru a efectua calcule asupra datelor
Funcii de agregare calculeaz o valoare pe baza valorilor din coloanele tabelei
AVG() Calculeaz o valoare medie
COUNT() ntoarce numrul de nregistrri
FIRST() ntoarce prima valoare
LAST() ntoarce ultima valoare
MAX() ntoarce cea mai mare valoare
MIN() - ntoarce cea mai mic valoare
SUM() Calculeaz suma
Funcii SQL
Funcii scalare calculeaz o singur valoare pe baza unei valori de intrare
UCASE() convertete n litere mari
LCASE() convertete n litere mici
MID() extrage caractere dintr-un cmp de tip text
LEN() calculeaz lungimea unui cmp de tip text
ROUND() rotunjete un cmp numeric la numrul de zecimale specificat
NOW() ntoarce data i ora curent din sistem
FORMAT() stabilete modul n care este afiat un cmp
Funcia AVG()
Funcia COUNT()
Calculeaz numrul de nregistrri care respect un anumit criteriu
Funcia FIRST()
ntoarce prima valoare din coloana indicat
Sintaxa
SELECT FIRST(column_name) FROM table_name
Tabela Orders
Funcia LAST()
ntoarce ultima valoare din coloana indicat
Sintaxa
SELECT LAST(column_name) FROM table_name
Func.ia LAST()
Rezultatul
Funcia MAX()
Determin cea mai mare valoare dintr-o coloan
Sintaxa:
SELECT MAX(column_name) FROM table_name
Exemplu
SELECT MAX(OrderPrice) AS LargestOrderPrice
FROM Orders
Funcia MIN()
Determin cea mai mic valoare dintr-o coloan
Sintaxa:
SELECT MIN(column_name) FROM table_name
Exemplu
SELECT MIN(OrderPrice) AS
SmallestOrderPrice FROM Orders
Funcia SUM()
Calculeaz suma pe o coloan numeric
Sintaxa:
SELECT SUM(column_name) FROM table_name
Exemplu
SELECT SUM(OrderPrice) AS OrderTotal FROM
Orders
Clauza GROUP BY
De cele mai multe ori functiile de agregare folosesc clauza GROUP BY
Ar e rolul de a grupa datele dintr-una sau mai multe coloane
Sintaxa:
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
Clauza HAVING
E nevoie de aceast clauz pentru ca WHERE nu poate fi folosit cu funciile de
agregare
Sintaxa
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name)
operator value
Funcia UCASE()
Convertete n litere mari
Sintaxa
SELECT UCASE(column_name) FROM
table_name
Sintaxa pentru MS SQL Server
SELECT UPPER(column_name) FROM
table_name
Funcia UCASE() - exemplu
Tabela Persons
SELECT UCASE(LastName) as
LastName,FirstName FROM Persons
Funcia LCASE()
Convertete n litere mici
Sintaxa
SELECT LCASE(column_name) FROM
table_name
Sintaxa pentru MS SQL Server
SELECT LOWER(column_name) FROM
table_name
Funcia LCASE() - exemplu
Tabela Persons
SELECT LCASE(LastName) as
LastName,FirstName FROM Persons
Funcia MID()
Folosit pentru a extrage caractere dintr-un cmp de tip text
Sintaxa
SELECT MID(column_name,start[,length]) FROM
table_name
Tabela Persons
Funcia LEN()
Calculeaz lungimea unui cmp de tip text
Sintaxa
SELECT LEN(column_name) FROM table_name
Exemplu
SELECT LEN(Address) as LengthOfAddress FROM
Persons
Func.ia ROUND()
Vrem s extragem numele produsului i preul rotunjit la cel mai apropiat ntreg
SELECT ProductName, ROUND(UnitPrice,0) as
UnitPrice FROM Products
Funcia NOW()
ntoarce data i ora curent a sistemului
Sintaxa
SELECT NOW() FROM table_name
Functia FORMAT()
Folosita pentru a stabili modul n care este afisat un cmp
Sintaxa
SELECT FORMAT(column_name, format) FROM
table_name
Triggerele sunt o clasa speciala de proceduri stocate, asociate unei tabele, definite pentru a fi lansate
in executie automat la initierea unei operatii de tip UPDATE, INSERT sau DELETE asupra tabelei in
cauza.
Triggerele sunt un instrument puternic pentru implementarea a ceea ce in aplicatiile de baze de date
poarta numele de business rules. Termenul se refera la acele reguli, constrangeri, care tin in mod
inerent de structura bazei de date si sunt induse de semnatica unei colectii de date, fiind comuna
tuturor aplicatiilor care folosesc aceasta baza de date si independente de fiecare aplicatie in parte.
Sintaxa instructiunii CREATE TRIGGER:
CREATE TRIGGER nume_trigger
ON { tabela | vedere } [WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE ], [INSERT ] [,] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS
SQL QUIZ
1. Ce reprezint SQL?
a) Structured Question Language
a) ORDER BY
b) SORT
c) ORDER
d) SORT BY
15. Cum se pot extrage toate nregistrrile din tabela Persons ordonate
descresctor dup FirstName?
a) SELECT * FROM Persons
SORT BY 'FirstName' DESC
b) SELECT * FROM Persons
ORDER FirstName DESC
c) SELECT * FROM Persons
SORT 'FirstName' DESC
d) SELECT * FROM Persons
ORDER BY FirstName DESC
16. Cum se poate insera o nou nregistrare n tabela Persons?
a) INSERT INTO Persons VALUES ('Jimmy','Jackson')
b) INSERT ('Jimmy', 'Jackson') INTO Persons
c) INSERT VALUES ('Jimmy', 'Jackson') INTO
Persons
17. Cum se poate inseraOlsen ca LastName n tabela Persons?
a) INSERT INTO Persons ('Olsen') INTO
LastName
b) INSERT ('Olsen') INTO Persons (LastName)
c) INSERT INTO Persons (LastName) VALUES
('Olsen'