CREAȚI TABELA COMANDĂ
Creează tabel
Mecanica de creare a unui tabel este relativ simplă. A fi capabil să proiectezi un bine
o bază de date bine gândită care se va scalda pentru a satisface nevoile unei întreprinderi de mari dimensiuni este foarte
întreprindere provocatoare. În aceste exemple, vom lucra prin dezvoltarea unui destul de
o bază de date simplă cu trei tabele. Procedând astfel, vom reuș i să acoperim o bună parte a dezvoltării
baze pentru crearea de tabele ș i indexuri.
Crearea tabelei persoană
CREAȚ I TABELA persoană
(
num INT NOT NULL ,
prenume VARCHAR(20) NULL,
nume_de_familie VARCHAR(30) NULL ,
cod_gen VARCHAR(1) NULL ,
DATETIME NULL
DATA_INACTIVĂ
CONSTRÂNGERE PK_Person CHEIE PRIEMIALĂ CLUSTERIZATĂ (num ASC)
PE [PRIMAR]
)
Crearea mesei de telefon
CREAȚ I TABELA telefon
(
person_num INT NOT NULL ,
tip_cod CHAR(3) NOT NULL,
CHAR(3) NULL
schimb CHAR(3) NULL ,
extensie CHAR(4) NULL ,
CONSTRÂNGERE PK_phone CHEIE PRIMARĂ CLUSTERIZATĂ
(person_num ASC, type_code ASC) PE [PRIMARY]
)
Crearea tabelului de adrese
CREAȚ I TABELA adresă
(
număr_persoane INT NU NULL,
CHAR(4) NU PERMIS
strada1
strada2
oraș
stat CHAR(2) NULL ,
cod_postal CHAR(10) NULL ,
CONSTRÂNGERE PK_address CHEIE PRIMARĂ CLUSTERIZATĂ
(person_num ASC, type_code ASC) PE [PRIMAR]
)
Această declaraț ie SQLCREATE TABLE defineș te un tabel nou pentru a stoca datele produselor:
CREAȚ I TABELUL PRODUSE
(MFR_ID CHAR(3),
PRODUCT_ID CHAR(5)
DESCRIERE VARCHAR(20)
PREMIUL MONETAR,
QTY_ON_HAND INTEGER
SQL Server - Noț iuni de bază SQLTable - Tipuri de date
SQL Server Precizia datelor
BIT Întreg: 0 sau 1
TINYINT Număr întreg pozitiv 0 -> 255
SMALLINT Număr întreg semnat -32,768 -> 32,767
INT Număr întreg semnat -2^31 -> 2^31-1
BIGINT Intreg semnat -2^63 -> 2^63-1
REAL Precizie în virgulă mobilă -1.79E + 308 -> 1.79E + 308
FLOAT Precizie flotantă -3.40E + 38 -> 3.40E + 38
BANI 4 zecimale, -2^63/10000 -> 2^63-1/10000
BANI MICI 4 zecimale, -214.748,3648 -> 214.748,3647
ZECIMAL Precizie fixă -10^38 + 1 -> 10^38 - 1
NUMERIC Precizie fixă -10^38 + 1 -> 10^38 - 1
DATA Ș I ORA Data+Timp 1753-01-01 -> 9999-12-31, precizie de 3,33 ms
SMALLDATETIMEData+Timp 1900-01-01 -> 2079-06-06, precizie de un minut
CHARn Ș ir de caractere non-Unicode de lungime fixă de 8.000 de caractere
NCHARn String Unicode de lungime fixă de 4.000 de caractere
VARCHARn Ș ir de caractere non-Unicode de lungime variabilă de până la 8.000 de caractere
NVARCHARn Ș ir Unicode de lungime variabilă de până la 4.000 de caractere
TEXT Ș ir fără lungime fixă non-Unicode de până la [Link] caractere
NTEXT Ș ir Unicode de lungime variabilă de până la [Link] de caractere
Binar Date binare de lungime fixă de până la 8.000 de caractere
VARBINARY Date binare de lungime variabilă de până la 8.000 de caractere
IMAGINE Date binare de lungime variabilă de până la [Link] caractere
COMANDA INSERT PENTRU A INSERA DATE ÎN TABEL
Odată ce tabela a fost creată, poți să o umpli cu date folosind comanda INSERT
INSEREAZĂ ÎN PRODUSE VALORI ('ACI', '41007', 'Widget Mărimea 7', 225.00, 250);
Ș TERGE TABELA
Ș TERGEȚ I TABELUL PRODUSE;
UPDATE TABELA
UPDATE PRODUSE SET DESCRIERE='ASDFGFG' WHERE PRODUS_ID='41007';
Ș TERGE REGISTRUL DIN TABEL
STERGE DIN PRODUSE UNDE PRODUCT_ID='41007';
ALTERAȚI COLUMNA UNEI TABELA
ALTER TABEL student
MODIFICARE COLONĂ rotiț ă NU NULL;
Comanda ALTER PENTRU ADĂUGAREA CONSTRÂNGERII
MODIFICA TABEL STUDENT
ADĂUGA CONSTRÂNGERE pk_roll
primar cheie(rol)
Comanda ALTER PENTRU Ș TERGEREA CONSTRÂNGERII
modifica tabelul studentdrop constraint pk_roll;
CHEIE STRAINĂ
O coloană dintr-un tabel al cărei valoare se potrivește cu cheia primară dintr-un alt tabel se numește
o cheie străină.
creează tabel mărci(rollint,tmarksint,STRĂIN cheie(minge) referinț e
student(rol);
Aici studentul este tabelul părinte ș i roll este cheia primară a tabelului părinte.
este referit de tabela copil marks.
MODIFICARE PENTRU ADĂUGAREA CONDIȚIEI CHEII STRĂINE
ALTER TABEL marks2
ADAUGĂ CONSTRÂNGERE fk_r
STRĂIN CHEIE(rol)
REFERINTE student1(rol);
CHEIE PRIMARĂ COMPUSĂ
CREAȚ I Tabel CategoriiComp (
CategorieID NU NULL
CodCategoriechar(5) NU NULL
NumeleCategoriei varchar(50) NU NULL
CONSTRÂNGERE PK_Categorii
PRIMAR CHEIE(IdentificatorCategorie, CodCategorie));
INSEREAZĂ ÎN CategoriileCompVALORI(1, AAA Pisica 1
INSERARE INTO CategoriiCompVALUES(2, AAA Pisica 4
INSERARE INTO CategoriesCompVALUES(2, AAA Pisica 3');//eș ec
INSERARE ÎNTO CategoriesCompVALUES(1, BBB Pisica 2
CONSTRÂNGERE DEFAULT
creează tabel student2(rollint,numechar(15),tmarksint default(0));
insera în student2(rol,nume) valori(1,'Ram');
selectaț i * de la student2;
CONSTRÂNGERE DE VERIFICARE
crea tabel student3(rollint,numechar(15),tmarksint verifică(tmarks<500));
insera în student3values(1,'Ram',367);
inserează în student3values(1,'Ram',602);//eș uează
DECLARAȚIE SELECT
Declarația SQL care preia date din baza de date se numește
SELECT. Această declaraț ie SQL preia datele dorite:
PENTRU A ALEGERE TOATE COLUMNS DIN TABELUL "OFFICE"
SELECT *
DIN BIROURI;
PENTRU SELECTAREA COLUMNELOR SPECIFICE ALE TABELULUI "OFFICE"
ORAȘ
DIN BIROURI;
INCLUZIE AFERENTĂ CU CONDIȚIE
SELECT NAME, SALES, QUOTA
DIN BIROURI
UNDE VÂNZĂRILE < COTĂ
ORAȘ
DIN BIROURI
UNDE REGIUNE = 'Est'
Ș I VÂNZĂRILE > OBIECTIV
SELECT NAME, SALES
DE LA REPREZENTANȚ II DE VÂNZĂ
UND MANAGER = 104
SELECTAȚ I ORAȘ UL, MGR
DE LA OFICII
UNDE MGR <> 108
CUVÂNT CHEIE DISTINCT
Puteți elimina rândurile duplicate ale rezultatelor interogării prin inserarea cuvântului cheie DISTINCT în
declaraț ia SELECT tocmai înaintea listei de selectare.
SELECT DISTINCT MGR
DIN BIROURI;
CLAUZA ORDER BY PENTRU SORTARE ÎN FUNCȚIE DE COLUMNA DATĂ
Puteți solicita SQL să sorteze rezultatele unei interogări inclusiv clauza ORDER BY în SELECT
declarație.
ORDINE ASCENDENTĂ
SELECTAȚ I ORAȘ UL, REGIUNEA, VÂNZĂRI
DIN BIROURI
ORDONARE DUPĂ REGIUNE, ORAȘ
ORAȘ REGIUNE VÂNZĂRI
----------- -------- -----------
Atlanta Estic 367.911,00 $
Chicago Estic 735.042,00 $
New York Est 692.637,00 $
Denver Vestic 186.042,00 $
Los Angeles Vest 835,915.00 $
ORDINE DESCRESCĂTOARE
ORAȘ
DIN BIROURI
ORDONEAZĂ DUPĂ VÂNZĂRI DESCRESCĂTOARE
ORAȘ REGIUNE VÂNZĂRI
----------- -------- -----------
Los Angeles Western 835.915,00 $
Chicago Estic $735,042.00
New York Est 692.637,00$
Atlanta Est $367,911.00
Denver Vestic 186.042,00 lei
CLAUZA ÎNTRE
SQL oferă o formă diferită de condiție de căutare cu testul de interval folosind BETWEEN
SELECTAȚ I ORAȘ , NUME, COTĂ
DIN BIROURI
UNDE VÂNZĂRILE ÎNTRE 4095 Ș I 12000
SELECT NUMĂR_ORDINE, SUMĂ
DIN COMENZI
UNDE SUMA ÎNTRE 20000.00 Ș I 29999.99
Versiunea negată a testului de interval (NU ÎNTRE) verifică valorile care se află în afara
intervalul, ca în acest exemplu:
SELECT NUMĂR_COMANDĂ, SUMĂ
DIN COMENZI
UNDE SUMA NU ESTE ÎNTRE 20000.00 Ș I 29999.99
ÎN CLAUZĂ
O altă condiție de căutare comună este testul de apartenență la un set folosind IN
SELECT * FROM BIROURI
UNDE ORAȘ ÎN (‘DELHI’,’MUMBAI’,’CHENNAI’);
SELECT
DE LA REPREZENTANȚ II DE VÂNZĂ
UNDE OFICIUL_DE_REPRESENTARE ÎN (11, 13, 22)
CAUTARE
Un test simplu de comparare poate fi folosit pentru a recupera rânduri în care conținutul unui text
coloană se potrivește cu un text anume.
Caracterul wildcard procent (%) se potriveș te cu orice secvenț ă de zero sau mai multe
personaje.
SELECTAȚ I COMPANIA, LIMITA DE CREDIT
DE LA CLIENȚ I
UNDE COMPANIA CA 'Smith%' ;
Caracterul wildcard underscore (_) se potriveș te cu orice caracter unic.
SELECT COMPANIE, LIMITĂ_CREDIT
DE LA CLIENȚ I
UNDE COMPANIA ÎNCEPE CU 'S_ith';
FUNCȚIA AVG PENTRU A OBTINE MEDIA UNEI COLUMNE DATA
SELECT MEDIA(VÂNZĂRI)
DIN OFICII
UNDE REGIUNEA = 'Est'
FUNCȚIA SUM PENTRU A OBTINE SUMA UNEI COLUMNE DATE
SELECT SUM(VÂNZĂRI)
DIN BIROURI;
GĂSIREA VALORILOR EXTREME (MIN Ș I MAX)
SELECT MIN(VENITURI), MAX(VENITURI)
DIN OFICII;
Funcț ia de coloană COUNT ( ) numără numărul de date
valori într-o coloană.
SELECT COUNT (CUST_NUM)
DIN PARTEA CLIENȚ ILOR;
SQL suportă o funcț ie specială de coloană COUNT(*), care
numără rânduri mai degrabă decât valori de date.
SELECT COUNT(*)
DIN COMENZI;
Join-uri (Echivalente)
Procesul de formare a perechilor de rânduri prin potrivirea conț inutului celor corespunzătoare
coloanele se numesc îmbinarea tabelelor. Tabelul rezultat (care conț ine date
din ambele tabele originale) se numeș te o asociere între cele două tabele. (O
unirea pe baza unei corespondenț e exacte între două coloane se numeș te mai precis o
equi-join
SELECT NUMĂR_COMANDĂ, SUMĂ, COMPANIE, LIMITĂ_CREDIT
DIN COMENZI, CLIENȚ I
UNDE CUST = CUST_NUM
Alăturări cu criterii de selecție a rândurilor
SELECTAȚ I ORAȘ UL, NUMELE, TITLUL
DIN BIROURI, REPREZENTANȚ I DE VÂNZĂRI
UNDE MGR = EMPL_NUM
Ș I Ț INTA > 6000
Joinuri non-echivalente
Termenul 'join' se aplică oricărei interogări care combină date din două tabele prin compararea
valorile dintr-o pereche de coloane din tabele. Deși îmbinările bazate pe egalitate între
coloni care se potrivesc (equi-joins) sunt cu mult cele mai comune join-uri, SQL permite de asemenea să
alătură tabelele bazându-se pe altele operatori de comparație. Iată un exemplu în care o valoare este mai mare
testul de comparație decât (>) este folosit ca bază pentru un join:
NUME
DIN REPREZENTANȚ II DE VÂNZĂ, OFICII
UNDE COTA > OBIECTIV
Clauza GROUP BY
Clauza SQL GROUP BY este folosită împreună cu funcț iile de grup pentru a recupera datele grupate.
conform unuia sau mai multor coloane.
De exemplu: Dacă doriț i să ș tiț i suma totală a salariului cheltuit pe fiecare departament, atunci
interogare ar fi:
SELECT dept, SUM (salariu)
DE LA angajat
GRUPARE DUPĂ dept;
Rezultatul ar fi ca:
departament
salariu
Electrice 25000
Electronice 55000
Aeronavigaț ie 35000
InfoTech 30000
Coloane de grupare multiple
SELECT locatie, departament, SUMA (salariu)
DIN angajat
GRUPAȚI DUPĂ locaț ie, departament;
Ieşirea ar fi astfel:
loca ț ie
Electrice Bangalore 25000
Electrocasnice Bangalore 55000
Mysore Aeronauț i 35000
Mangalore InfoTech 30000
Condiț ii de căutare a grupului (clauza HAVING)
La fel cum clauza WHERE poate fi folosită pentru a selecta ș i a respinge rândurile individuale.
care participă la o interogare, clauza HAVING poate fi utilizată pentru a selecta ș i
respinge grupurile de rânduri.
SELECT REP, AVG(AMOUNT) DIN ORDERS
GRUPAT DUPĂ REP
AVÂND SUMA(ÎNDEDEN) > 30000
Subinterogări
O subinterogare este o interogare în cadrul unei interogă[Link]
sau interogare internă sau interogare înnodată este o
interogare într-o interogare. O subinterogare este de obicei adăugată în clauza WHERE a
instrucț iune sql.
SELECTAȚ I ORAȘ UL
DIN BIROURI
UNDE SCOPUL > (SELECT SUMA(COTĂ))
DE LA REPREZENTANȚ II DE VÂNZĂ
UNDE REP_OFFICE = OFFICE
SELECTAȚ I NUMELE
DE LA REPREZENTANȚ II DE VÂNZĂ
UNDE COTA >= (SELECTAȚ I Ț INTA
DIN BIROURI
UNDE ORAȘ = 'Atlanta')
PROCURI STOCATE
O procedură stocată este una sau mai multe comenzi SQL stocate într-o bază de date ca un obiect executabil.
Procedurile stocate pot fi apelate interactiv, din codul aplicaț iei client, din interiorul
alte proceduri stocate ș i din interiorul declanș atorilor. Parametrii pot fi transmiș i ș i returnaț i din
proceduri stocate pentru a spori utilitatea ș i flexibilitatea acestora. O procedură stocată poate returna
o serie de seturi de rezultate ș i un cod de stare.
O procedură stocată care returnează titlurile cărț ilor ș i numele autorilor care le-au scris
CREATE [SAU REPLACE] PROCEDURE nume_proc [lista de parametri]
ESTE
Secț iunea de declaraț ie
ÎNCEPE
Secț iunea de execuț ie
EXCEPȚ IE
Secț iunea de excepț ii
ÎNCHIS;