Documente Academic
Documente Profesional
Documente Cultură
Introducere in SQL
Introducere in SQL
Este vorba de o introducere n limbajul de interogare utilizat pentru a accesa o baz de date. La scurt timp dup ce E. F. Codd a descris structura bazei de date relaionale, n colectivul de la IBM s-a realizat un prototip de sistem de management al bazelor de date relaionale, numit System R, mpreun cu un limbaj dedicat (pentru a crea i a opera cu bazele de date relaionale), numit SEQUEL (Structured English QUEry Language). Expresiile din SEQUEL seamn cu propoziiile din limba englez, fiind desigur mai structurate. In paralel firma IBM a scos pe pia produse cu baze de date relaionale, bazate pe System R. Dar cu un limbaj puin diferit de SEQUEL. Astfel c l-a botezat SQL, eliminnd vocalele din Sequel i trecnd la pronunia "es-qu-el". Chiar dac sunt autori care consider c SQL provine de la Structured Query Language, asta nu-i adevrat.Iar SQL nu are nimic de a face cu limbajele de programare structurat, precum Pascal sau C++. In 1979, Corporaia Oracle introduce prima implementare a SQL n variant comercial. In scurt timp SQL devine un standard industrial pentru bazele de date relaionale. Institutul National American de Standarde (ANSI) l-a adoptat ca limbaj standard pentru gestiunea bazelor de date (RDBMS), nc n anul 1986. Organizaia Internaional de Standarde (ISO) a adoptat deasemenea SQL ca limbaj standard pentru RDBMS. Toate RDBMS-urile suport unele forme de SQL i toi vnztorii de astfel de sisteme s-au aliniat sau intenioneaz s se alinieze la standardele ANSI. Asta nu nseamn c nu mai apar diferene. Chiar i la produsele aceleai firme, Microsoft Access i SQL Server, pot fi semnalate diferene n implementarea limbajului SQL. SQL poate fi folosit n dou moduri:
direct la terminal, adic n mod comand (interactiv, sau batch) n cadrul unor programe scrise ntr-un limbaj de programare, precum C++, sau Visual Basic.
In concluzie: Un sistem de management al bazei de date necesit un limbaj de interogare pentru a permite utilizatorului s acceseze datele. SQL (iniial numit SEQUEL, ca limbaj de interogare structurat) este limbajul standardizat ANSI i ISO, utilizat de majoritatea sistemelor ce manevreaz baze de date relaionale.
SQL, ca i majoritatea limbajelor de programare, folosete cuvinte din limba englez. In mod special cuvintele select, insert, delete ca elemente ale setului de comenzi. SQL este un limbaj neprocedural: specific care sunt informaiile dorite, nu cum se obin acestea. Cu alte cuvinte, SQL nu cere s fie specificat metoda de acces la date. Execuia comenzilor SQL asupra nregistrrilor nu se poate face dect secvenial, asupra cte unei singure nregistrri. Setul de nregistrri fiind vzut ca set de linii ale unui tabel.
SQL poate fi folosit de un ir de utilizatori, incluznd administratorul bazei de date, programatorii de aplicaii, personalul de management i multe alte tipuri de utilizatori. SQL include comenzi pentru o varietate de sarcini, incluznd:
o o o o o
selecia unor date inserarea, extragerea i tergerea rndurilor dintr-un tabel crearea, modificarea i tergerea obiectelor de tip baz de date controlul accesului la baza de date i la obiectele de tip baz de date verificarea - garantarea consistenei bazei de date
La nceput, sistemele de management a bazelor de date au utilizat un limbaj separat pentru fiecare categorie de sarcini n parte. SQL le-a unificat pe toate acestea ntr-un singur limbaj. Logic, comenzile limbajului SQL sunt mprite n trei componente:
limbajul de definire a datelor (Data Definition Language)- DDL, limbajul de manipulare a datelor (Data Manipulation Language)- DML, limbajul de control al datelor (Data Control Language)-DCL.
Primul pentru crearea structurii de baz de date, al doilea, dup ce structura exist, pentru a aduga date n tabele i pentru a le manipula. A treia component ofer posibilitatea de a proteja (securiza) datele.
State Phone
INSERT INTO CUSTOMER (CustomerID, FirstName, LastName) VALUES (:vcustid, 'Dana', 'Popescu'); GRANT SELECT INSERT ON CUSTOMER TO Ana, Victor
N. B. Am menionat doar principalele comenzi din SQL. Comanda cea mai intens folosit, SELECT, urmeaz a fi prezentat pe larg mai jos. Pentru o list complet a comenzilor trebuie parcurs Manualul de Referin al Limbajului SQL.
Poate fi folosit tabelarea. Cuvintele de comand nu pot fi separate pe mai multe linii. Comenzile SQL pot fi scrise fie cu majuscule fie cu minuscule (nu sunt 'case sensitive'). O comand SQL este introdus la prompterul SQL, iar liniile subsecvenelor sunt numerotate. O singur declaraie poate fi considerat curent, ct timp ea este ntr-un buffer i poate fi rulat ntr-un anumit numr de moduri :
o o o o
plasnd un punct i virgul(;) la sfritul ultimei clauze. plasnd un punct i virgul urmat de semnul / (slash) pe ultima linie n buffer. plasnd un slash (/) la prompterul SQL. scriind comanda SQL R[UN] la prompterul SQL.
Comenzile pot fi deci scrise, spre exemplu, n oricare din urmtoarele forme: SELECT * FROM EMP; SELECT * FROM EMP ;
SELECT * FROM EMP; In acest document, pentru claritate, comenzile SQL sunt sparte n clauze.
De remarcat c numele coloanelor sunt separate prin spaiu. Este posibil s selectm toate coloanele din tabel prin specificarea unui asterix ( * ) dup cuvntul SELECT .
SELECT FROM EMPNO ----7369 7499 7521 7566 7654 ENAME ------SMITH ALLEN WARD JONES MARTIN * EMP; JOB ------CLERK SALESMAN SALESMAN MANAGER SALESMAN MGR ---7902 7698 7698 7839 7698 HIREDATE SAL COMM DEPTNO --------- --------- ------- -----13-JUL-83 800. 00 20 15-AUG-83 1, 600. 00 300. 00 30 26-MAR-84 1, 250. 00 500. 00 30 31-OCT-83 2, 975. 00 20 05-DEC-83 1, 250. 00 1. 400. 00 30
MANAGER 7839 MANAGER 7839 ANALYST 7566 PRESIDENT SALESMAN 7698 CLERK 7788 CLERK 7698 ANALYST 7566
2, 2, 3, 5, 1, 1,
. 00 30
30 10 20 10 30 20 20
Toate aceste opiuni ajut utilizatorul s cear date i s le manipuleze n funcie de scopurile interogrii; de exemplu, execuia calculelor, legarea coloanelor impreun, sau afiarea irurilor de litere din text.
Expresii aritmetice
O expresie este o combinaie de una sau mai multe valori, operatori i funcii, care se evalueaz la o valoare. Expresiile aritmetice pot conine nume de coloane, valori numerice constante i operatori aritmetici:
Operatori --------+ * / SELECT FROM ENAME, EMP; Descriere --------adunare scdere nmulire mprire SAL*12, COMM
Daca expresia aritmetic conine mai mult dect un operator, atunci prioritile sunt *, /, la nceput, apoi +, - (de la stnga la dreapta pentru operatorii cu aceeai prioritate). In urmtorul exemplu, nmulirea (250*12) este evaluat prima; apoi valoarea salariului este adunat la rezultatul multiplicrii(3000). Astfel pentru rndul lui SMITH avem : 800+3000=3800.
SELECT ENAME, FROM EMP; SAL + 250 * 12
Parantezele pot fi utilizate pentru specificarea ordinii de execuie a operatorilor, dac, de exemplu, adunarea e dorit nainte de nmulire:
SELECT FROM ENAME, EMP; (SAL + 250) * 12
Alias-uri de coloan
Cnd se afieaz rezultatul unei interogri, n mod normal se utilizeaz numele coloanelor selectate ca titlu. In multe cazuri acest nume poate fi criptic sau fr neles. Putem schimba un titlu de coloan utiliznd un 'ALIAS'. Un alias de coloan d unei coloane un nume de titlu alternativ la ieire. Specificai aliasul dup coloan, n lista selectat. Din oficiu, titlurile de tip alias vor fi scrise forat cu litere mari i nu pot conine spaii (blankuri), numai dac aliasul este inclus ntre ghilimele(" "). Pentru a afia titlul de coloan ANNSAL. pentru salariul anual, nsemnnd SAL*12, utilizai un alias de coloan:
SELECT FROM ENAME, EMP; SAL*12 ANNSAL, COMM
Odat definit, un alias poate fi utilizat de alte comenzi, precum cele din SQL-Plus. Not: Intr-o declaraie SQL, un alias de coloan poate fi utilizat numai n clauza SELECT.
Operatorul de concatenare
Operatorul de concatenare (||) permite coloanelor s fie legate cu alte coloane, iar expresiilor aritmetice sau valorilor constante s creeze o expresie de caractere. Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura coloana. Pentru a combina EMPNO i ENAME i s se dea aliasul EMPLOYEE expresiei, introducei:
SELECT FROM EMPNO||ENAME EMP; EMPLOYEE
EMPLOYEE -------------------------------------------------------
7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER
Literali
Un literal este orice caracter, expresie, numar inclus n lista lui SELECT care nu este un nume de coloana sau un alias de coloana. Un literal n lista lui SELECT este reprezentat de fiecare rnd returnat la iesire. Sirurile de literali dintr-un text cu un format oarecare pot fi incluse in rezultatul interogarii i sunt tratate ca o coloana lista selectata. Literalii de tip dat calendaristica i caracter pot fi nchisi ntre ghilimele simple(');literlalii de tip numar nu au nevoie de ghilimele simple('). Urmatoarea declaraie conine literali selectai prin concatenare i printr-un alias de coloana:
SELECT FROM EMPNO||'-'||ENAME EMPLOYEE, 'WORKS IN DEPARTMENT', DEPTNO EMP; DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10
EMPLOYEE 'WORKS IN DEPARTMENT' ------------------ -------------------7369-SMITH WORKS IN DEPARTMENT 7499-ALLEN WORKS IN DEPARTMENT 7521-WARD WORKS IN DEPARTMENT 7566-JONES WORKS IN DEPARTMENT 7654-MARTIN WORKS IN DEPARTMENT 7698-BLAKE WORKS IN DEPARTMENT 7782-CLARK WORKS IN DEPARTMENT 7788-SCOTT WORKS IN DEPARTMENT 7839-KING WORKS IN DEPARTMENT 7844-TURNER WORKS IN DEPARTMENT 7876-ADAMS WORKS IN DEPARTMENT 7900-JAMES WORKS IN DEPARTMENT 7902-FORD WORKS IN DEPARTMENT 7934-MILLER WORKS IN DEPARTMENT
ENAME ANNUAL_SAL --------- ---------SMITH ALLEN 19500 WARD 15500 JONES MARTIN 16400 BLAKE CLARK SCOTT KING TURNER 18000 ADAMS JAMES FORD MILLER
Dac dorim s obtinem un rezultat pentru toi angajaii, este necesar sa convertim valoarea nula la un numar . Noi folosim funcia NVL pentru a converti o valoare nula la o valoare nenula. Folositi funcia NVL pentru a converti valoarea nula de la declaratia precedenta la 0.
SELECT FROM ENAME, EMP; SAL*12+NVL(COMM, 0) ANNUAL_SAL
ENAME ANNUAL_SAL --------- ---------SMITH 9600 ALLEN 19500 WARD 15500 JONES 35700 MARTIN 16400 BLAKE 34200
NVL asteapta doua argumente: 1. o expresie 2. o valoare nenula De notat ca putei folosi funcia NVL pentru a converti un numar nul, data calendaristica sau ir de caractere la un alt numar, data calendaristica sau sir de caractere de acceai lungime i de acelai tip de date asteptate.
NVL(DATECOLUMN, NVL(NUMBERCOLUMN, NVL(CHARCOLUMN, '01-JAN-88') 9) 'STRING')
Clauza DISTINCT
Pentru eliminarea valorilor duplicate din rezultat, includei restricia DISTINCT n comanda SELECT. Pentru a elimina valorile duplicate afiate n exemplul urmtor introducei:
SELECT FROM DEPTNO -----10 20 30 DISTINCT EMP; DEPTNO
Coloane multiple pot fi specificate dup restricia DISTINCT i restricia DISTINCt afecteaz toate coloanele selectate. Pentru a afia valorile distincte ale lui DEPTNO i JOB, introducei:
SELECT FROM DEPTNO -----10 10 10 20 20 20 30 30 30 DISTINCT DEPTNO, EMP; JOB --------CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN JOB
Aceasta afieaz o list a tuturor combinaiilor diferite de ocupaie i numere de departamente. De notat c restricia DISTINCT poate s fie referit numai o singur dat i trebuie s urmeze imediat dup cuvntul de comand SELECT.
Clauza ORDER BY
In mod normal ordinea rndurilor ntoarse n rezultatul unei cereri este nedefinit. Clauza ORDER BY poate fi utilizat pentru a sorta rndurile. Dac o folosim, clauza ORDEY BY trebuie s fie ntotdeauna ultima n declaraia SELECT.
JOB SAL*12 DEPTNO ------- -------- -----CLERK 13200 20 SALESMAN 19200 30 MANAGER 34200 30 MANAGER 29400 10 ANALYST 36000 20 CLERK 11400 30 MANAGER 35700 20 PRESIDENT 60000 10 SALESMAN 15000 30 CLERK 15600 10 ANALYST 36000 20 CLERK 9600 20 SALESMAN 18000 30 SALESMAN 15000 30
SAL DESC; ENAME ------KING CLARK MILLER SCOTT FORD JONES ADAMS SMITH BLAKE ALLEN TURNER WARD MARTIN JAMES
JOB -----------PRESIDENT MANAGER CLERK ANALYST ANALYST MANAGER CLERK CLERK MANAGER SALESMAN SALESMAN SALESMAN SALESMAN CLERK
consistenta de la cerere la cerere. De notat ca ordinea de afiare a rindurilor nu influenteaza ordinea interna a rindurilor asa cum sunt stocate n tabela.
Clauza WHERE
Clauza WHERE corespunde operatorului 'Restricie' din algebra relaionala. Conine o condiie pe care rindurile trebuie s o indeplineasca n ordinea afiarii lor. Clauza WHERE, daca este folosita, trebuie s urmeze clauzei FROM :
SELECT FROM WHERE coloane tabela anumite condiii sunt ntlnite
Clauza WHERE poate compara valori n coloana, valori literale, expresii aritmetice sau funcii. Clauza WHERE asteapta trei elemente: 1. Un nume de coloana 2. Un operator de comparaie 3. Un nume de coloana, constanta sau lista de valori. Operatorii de comparaie sunt utilizai n clauza WHERE i pot fi impartiti in doua categorii: logici i SQL.
Operatorii logici
Acesti operatori verifica urmatoarele condiii:
Operator -------= > >= < <= Semnificaie -----------egal cu mai mare decit mai mare sau egal mai mic decit mai mic sau egal
ENAME EMPNO --------- ----SMITH 7369 ADAMS 7876 JAMES 7900 MILLER 7934
Pentru a gsi toate numele de departamente cu numerele de departament mai mare ca 20, introducei:
SELECT FROM WHERE DNAME ---------SALES OPERATIONS DNAME, DEPTNO DEPT DEPTNO >20; DEPTNO -----30 40
Operatori SQL
Sint patru operatori SQL care opereaza pe toate tipuril de date:
Operatori SQL Operator -------Semnificaie ------------
BETWEEN. . AND. . . ntre doua valori(inclusiv) IN(list) compara cu o lista de valori LIKE compara cu un model de tip caracter IS NULL est o valoare nula
Operatorul BETWEEN
Realizeaza teste pentru valori ntre, si inclusiv, o valoare minima i o valoare maxima. Presupunind ca dorim s vedem angajaii ai caror salariu este ntre 1000 i 2000:
SELECT FROM WHERE ENAME, SAL EMP SAL BETWEEN 1000 AND 2000;
ENAME SAL ------- ---------ALLEN 1, 600. 00 WARD 1, 250. 00 MARTIN 1, 250. 00 TURNER 1, 500. 00 ADAMS 1, 100. 00 MILLER 1, 300. 00
De notat ca valorile specificate sunt inclusive i ca limita minima trebuie specificat prima.
Operatorul IN
Testeaza valorile dintr-o lista specificata. Presupunem ca dorim s gasim angajaii care au unul din cele trei numere de marca(MGR):
SELECT FROM WHERE EMPNO ----7369 7788 7876 7902 ENAME ----SMITH SCOTT ADAMS FORD EMPNO, ENAME, SAL, MGR EMP MGR IN (7902, 7566, 7788); SAL MGR --------- ----800. 00 7902 3, 000. 00 7566 1, 100. 00 7788 3, 000. 00 7566
Daca, caracterele sau datele calendaristice sunt utilizate, ele trebuie introduse ntre ghilimele(' ').
Operatorul LIKE
Uneori nu se cunosc valorile exacte pe care le cautam. Utiliznd operatorul LIKE este posibil s selectam rndurile care se potrivesc cu un model specificat de caractere. Operatia de petter-matching a caracterelor poate fi asemanat cu o cautare 'wild-card'. Doi simboli se pot utiliza la construirea irului de cautare.
Simbol -----% Reprezentare -----------orice secventa de zero sau mai multe caractere un singur caracter oarecare
Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac- tere. De exemplu pentru a lista toi angajaii care au un nume exact de patru caractere lungime:
SELECT FROM WHERE ENAME ----WARD KING FORD ENAME EMP ENAME LIKE '____';
Operatorul IS NULL
Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
SELECT FROM WHERE ENAME -----KING MGR ---ENAME, MGR EMP MGR IS NULL;
Negarea expresiilor
Urmatorii operatori fac teste de negaie: Operator --------!= ^= <> Descriere ---------diferit de(VAX, UNIX, diferit de(IBM) diferit de(toate o/s)
PC)
NOT NUMECOL= NOT NUMECOL> Operatori SQL Operator -------NOT BETWEEN NOT IN NOT LIKE IS NOT NULL
Descriere --------nu se afla ntre doua valori date nu se afla ntr-o lista dat de valori diferit de irul nu este o valoare nula
Pentru a gsi angajaii ai caror salariu nu este ntr-un interval, introdu- cei:
SELECT FROM WHERE ENAME --------SMITH JONES BLAKE CLARK SCOTT KING JAMES FORD ENAME, SAL EMP SAL NOT BETWEEN 1000 AND 2000; SAL -------800. 00 2, 975. 00 2, 850. 00 2, 450. 00 3, 000. 00 5, 000. 00 950. 00 3, 000. 00 introducei:
Pentru a afla acei angajai a caror meserie nu ncepe cu M, SELECT FROM WHERE ENAME -------SMITH ALLEN WARD MARTIN SCOTT KING TURNER ADAMS JAMES FORD MILLER ENAME, JOB EMP JOB NOT LIKE 'M%'; JOB -------CLERK SALESMAN SALESMAN SALESMAN ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
Pentru a afla toi angajaii care au un manager(MGR), SELECT FROM WHERE ENAME, MGR EMP MGR IS NOT NULL;
introducei:
JONES MARTIN BLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER
7839 7698 7839 7839 7566 7698 7788 7698 7566 7782
Nota: Daca o valoare NULL este utilizat ntr-o comparaie, atunci operatorul de comparaie trebuie s fie IS sau IS NOT NULL. Daca acesti operatori nu sunt uti lizai i valoarea NULL este comparata, atunci rezultatul este ntotdeauna FALSE De exemplu, COMM!=NULL este ntotdeauna falsa. Rezultatul este fals deoarece o valoare NULL poate s nu fie egala sau diferita cu orice alta valoare alta decat NULL. De notat ca o astfel de eroare nu este semnalata, rezultatul fiind ntotdea- una fals.
EMPNO ENAME JOB ---------- -------7876 ADAMS CLERK 7934 MILLER CLERK
Pentru a afla toi angajaii care sunt i funcionari i/sau funcionari care castiga ntre 1000 i 2000, introducei: SELECT FROM WHERE OR EMPNO ----ENAME -------EMPNO, ENAME, JOB, SAL EMP SAL BETWEEN 1000 AND 2000 JOB = 'CLERK'; JOB ------SAL --------
Putei combina AND sau OR n acceai expresie logica. cnd AND sau OR apar in aceeai clauza WHERE, toi operatorii AND sunt evaluai mai ntai i apoi toi operatorii OR. Vom spune ca operatorii AND au o precedenta mai mare decat OR. Deoarece AND are o precedenta mai mare decat OR urmatoarea declaraie SQL intoarce toi managerii cu salarii peste 1500$ i toi vnztorii.
SELECT FROM WHERE AND OR EMPNO ----7499 7521 7566 7654 7698 7782 7844 EMPNO, ENAME, JOB, EMP SAL> 1500 JOB = 'MANAGER' JOB = 'SALESMAN'; JOB -------SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER SALESMAN SAL, DEPTNO
DEPTNO -----00 00 00 00 00 00 00
30 30 20 30 30 10 30
Daca doriti s selectai toi managerii i vnztorii cu salarii peste 1500$ putei ntroduce: SELECT FROM WHERE AND OR EMPNO ----7499 7566 7698 7782 EMPNO, ENAME, JOB, EMP SAL >1500 (JOB = 'MANAGER' JOB = 'SALESMAN'); ENAME -----ALLEN JONES BLAKE CLARK JOB --------SALESMAN MANAGER MANAGER MANAGER SAL -------1, 600. 2, 975. 2, 850. 2, 450. SAL, DEPTNO
DEPTNO -----00 00 00 00
30 20 30 10
Parantezele specifica ordinea n care operatorii vor fi evaluati. In al doilea exemplu operatorul OR este evaluat naintea operatorului AND.
cnd un alt rnd stocat n coloana ENAMe are mai multe caractere decat irul de comparat. Pentru coloanele cu tipul CHAR, oricum, Oracle face umplere cnd valorile coloanelor sunt iniial stocate, facndu-le pe toate de aceeai lungime. Aceeai condiie va ntoarce ambele rnduri pentru SCOTT, indiferent de cate spaii de sfrsit au fost adaugate cnd valorile au fost stocate n tabela.
Oracle umple cu blancuri irul de comparat n cel de al doilea caz i de aceea spaiile stocate sunt nesemnificative.
Precedenta operatorilor
Toi operatorii sunt aranjai ntr-o ierarhie ceea ce le determina precedenta . Intr-o expresie operaiile sunt executate n ordinea precedentei lor de la mare la mica. cnd operatorii au precedenta egala atunci ei se evalueaza de la stanga la dreapta. 1. Toi operatorii de comparaie i SQL au precedenta egala: =, !=, <, >, <=, >=, BETWEEN. . . AND, IN, LIKE, IS NULL. 2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE not(sal>2000)) 3. AND 4. OR. De fiecare dat cnd suntei n dubiu despre care dintre doua operaii vor fi executate mai ntai cnd o expresie este evaluata, suntei liberi s utilizai parantezele pentru a clarifica semnificatia dorita i pentru a va asigura ca SQL*Plus face ceea ce doriti. S presupunem ca doriti s gasiti toi managerii, din orice departament, si toi funcionarii din departamentul 10:
SELECT * FROM EMP WHERE JOB='MANAGER' OR (JOB = 'CLERK' AND DEPTNO = 10);
Parantezele de deasupra sunt necesare, AND are o precedenta mai mare decat OR, dar ele clarifica semnificatia expresiei.
SELECT-Sumar
Urmatoarele clauze sunt nchise n comanda SELECT:
SELECT FROM WHERE ORDER BY [DISTINCT] [*, coloana alias], tabela condiie(ii) [coloana, expr] [ASC/DESC]; . . . ]
SELECT selecteaza cel putin o coloana Alias poate fi folosit pentru coloanele din lista selectata *
desemneza toate coloanele DISTINCT poate fi utilizat pentru eliminarea duplicatelor FROM Tabela desemneaza tabela din care provin coloanele WHERE restricioneaza cererea la rndurile care ndeplinesc o condiie. Poate conine valori de coloane, expresii i literali AND/OR poate fi utilizat ntr-o clauza WHERE pentru a construi condiii mai complexe. AND are prioritate peste OR. () pot fi utilizate pentru a forta prioritatea ORDER BY ntotdeauna apare la sfarsit . Specifica ordinea de sortare. Una sau mai multe coloane pot fi specificate aici. ASC ordinea ascendenta este ordinea de sortar ( implicita) i nu trebuie specificat. DESC inverseaza ordinea de sortare de default i trebuie specificat dup un nume de coloana. Clauzele pot fi introduse pe linii separate n buffer i tabelarea este utilizat pentru claritate i n editare.
Logarea la SQL*Plus
Aceasta seciune explica cum s ne logam la SQL*Plus i liniile de iesire ale tipurilor de comenzi ce pot rezulta n cadrul sau. SQL*Plus SQL*Plus este un program scris de Corporatia Oracle, ce produce un mediu pentru comenzile SQL ce pot fi tastate direct sau rulate dintr-un fiier de comanda. In plus, comenzile SQL pot fi derivate. Ele sunt folosite pentru:
Odat ce v-ai logat la sistemul vostru de operare, sunt 3 moduri pentru a va loga la SQL*Plus: 1. SQLPLUS o Vei vedea dup aceasta un mesaj ca acesta:
SQL*Plus: Version 3. 1. 1 Production on Mon Oct 4 1993 Copyright (c) 1992, Oracle Corporation, California, USA. All rights reserved. Enter Username: Introducei numele vostru de user i apasai RETURN: SQL*Plus va afia promptul :"Enter Password:". Introducei parola voastra i apasai din nou RETURN. Pentru protecia voastra, parola nu va apare pe ecran. SQL*Plus va afia promptul sau: SQL> Aceasta indica linia de comanda . Acolo sunt doua feluri de comenzi i putei ntroduce pe acesta linie de comanda:comenzi SQL sau comenzi SQL*Plus.
2. SQLPLUS username
o
3. SQLPLUS username/password
o
n). din
comanda
SQL care
este curenta
Selectai toate informaiile din tabela EMP. JOB MGR HIREDATE SAL COMM DEPTNO
EMPNO ENAME
----7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934
----SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
---7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782
-------13-JUN-83 15-AUG-83 26-MAR-84 31-OCT-83 05-DEC-83 11-JUL-84 14-MAY-84 05-MAR-84 09-JUL-84 04-JUN-84 04-JUN-84 23-JUL-84 05-DEC-83 21-NOV-83
-------- ------- -----800. 00 20 1, 600. 00 300. 00 30 1, 250. 00 500. 00 30 2, 975. 00 20 1, 250. 00 1, 400. 00 30 2, 850. 00 30 2, 450. 00 10 3, 000. 00 20 5, 000. 00 10 1, 500. 00 . 00 30 1, 100. 00 20 950. 00 30 3, 000. 00 20 1, 300. 00 10
14 nregistrri selectate. 3. Listai toi angajaii care au salariul ntre 1000 i 2000. SAL -------1, 600. 1, 250. 1, 250. 1, 500. 1, 100. 1, 300.
00 00 00 00 00 00
6 nregistrri selectate.
4. Listai numerele de departament i numele n ordinea numelor departamentelor. DEPTNO -----10 40 20 30 5. DNAME ---------ACCOUNTING OPERATIONS RESEARCH SALES
JOB --------ANALYST CLERK MANAGER PRESIDENT SALESMAN 6. Listai detaliile angajailor din departamentele 10 i 20 n ordinea alfabetic a numelui. ENAME ----ADAMS CLARK FORD JONES KING MILLER JOB ----CLERK MANAGER ANALYST MANAGER PRESIDENT CLERK MGR ---7788 7839 7566 7839 HIREDATE --------04-JUN-84 14-MAY-84 05-DEC-83 31-OCT-83 09-JUL-84 7782 21-NOV-83 SAL -------1, 100. 2, 450. 3, 000. 2, 975. 5, 000. 1, 300. COMM DEPTNO ---- -----00 20 00 10 00 20 00 20 00 10 00 10
ANALYST CLERK
3,
000. 00 800. 00
20 20
8 nregistrri selectate. 7. Listai numele i ocupaiile tuturor funcionarilor n departamentul 20. ENAME -----SMITH ADAMS 8. JOB ----CLERK CLERK
ENAME -----SMITH ALLEN MILLER 9. Listai urmatoarele detalii pentru toi angajaii care au un manager. JOB -------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST SALESMAN CLERK CLERK ANALYST CLERK SAY -------800. 00 1, 600. 00 1, 250. 00 2, 975. 00 1, 250. 00 2, 850. 00 2, 450. 00 3, 000. 00 1, 500. 00 1, 100. 00 950. 00 3, 000. 00 1, 300. 00 13 nregistrri selectate. 10. Afieaza numele i totalul remuneraiei pentru toi angajaii.
ENAME -----SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER
ENAME REMUNERATION ------- -----------SMITH 9600 ALLEN 19500 WARD 15500 JONES 35700 MARTIN 16400 BLAKE 34200 CLARK 29400 SCOTT 36000 KING 60000 TURNER 18000 ADAMS 13200 JAMES 11400 FORD 36000 MILLER 15600
14 nregistari selectate. 11. ENAME ------SMITH ALLEN JONES MARTIN FORD MILLER Afieaza toi salariaii care au fost angajai n anul 1983. DEPTNO -----20 30 20 30 20 10 HIREDATE --------13-JUN-83 15-AUG-83 31-OCT-83 05-DEC-83 05-DEC-83 21-NOV-830 6 nregistrri selectate. 12. Afiai numele, salariul anual i comisionul pentru toi vnztorii ai caror salariu lunar este mai mare decat comisionul lor. Ieirea va fi ordonat dup salariu, cele m ai mari primele. Daca doi sau mai muli angajai au acelai salariu trebuie sortai dup nume n odinea celor mai mari salarii. ENAME -----ALLEN TURNER WARD ANNUAL_SAL COMM ---------- -------19200 300. 00 18000 . 00 15000 500. 00
Incercati-va aptitudinile cu acesta. 13. Selectai informaiile dup cum sunt selectate.
Cine, cnd i cum -------------------------------------------------------------------SMITH HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 13-JUN-83 ALLEN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 15-AUG-83 WARD HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 26-MAR-84 JONES HAS HELD THE POSITION OF MANAGER IN DEPT 20 SINCE 31-OCT-83 MARTIN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 05-DEC-83 BLAKE HAS HELD THE POSITION OF MANAGER IN DEPT 30 SINCE 11-JUN-84 CLARK HAS HELD THE POSITION OF MANAGER IN DEPT 10 SINCE 14-MAY-84 SCOTT HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-MAR-84 KING HAS HELD THE POSITION OF PRESIDENT IN DEPT 10 SINCE 09-JUL-84 TURNER HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 04-JUN-84 ADAMS HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 04-JUN-84 JAMES HAS HELD THE POSITION OF CLERK IN DEPT 30 SINCE 23-JUL-84 FORD HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-DEC-83 MILLER HAS HELD THE POSITION OF CLERK IN DEPT 10 SINCE 21-NOV-83 14 nregistrri selectate.
Capitolul 2 - Rezolvri
1. 2. 3.
SELECT FROM SELECT FROM SELECT FROM WHERE SELECT FROM ORDER BY SELECT FROM SELECT FROM WHERE ORDER BY SELECT FROM WHERE AND SELECT FROM WHERE OR SELECT FROM WHERE SELECT FROM SELECT FROM WHERE SELECT FROM WHERE AND JOB ORDER BY SELECT
* SALGRADE; * EMP; ENAME, DEPTNO, SAL EMP SAl BETWEEN 1000 AND 2000; DEPTNO, DEPT DNAME; DNAME
4.
5. 6.
DISTINCT JOB EMP; * EMP DEPTNO IN (10, ENAME; ENAME, JOB EMP JOB = 'CLERK' DEPTNO = 20; ENAME EMP ENAME LIKE '%TH%' ENAME LIKE '%LL%'; ENAME, JOB, SAL EMP MGR IS NOT NULL; ENAME, EMP; SAL*12+NVL(COMM, 0) REMUNERATION
20)
7.
8.
9.
10. 11.
ENAME, DEPTNO, HIREDATE EMP HIREDATE LIKE '%83'; ENAME, SAL*12 ANNUAL SAL, EMP SAL >COMM = 'SALESMAN' SAL DESC, ENAME; COMM
12.
13.
FROM
ENAME|| ' HAS HELD THE POSITION OF '|| JOB|| ' IN DEPT '|| DEPTNO|| ' SINCE '|| HIREDATE "Who, what and when" EMP;