Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
CERERI MONOTABEL
SQL (Structured Query Language) este un limbaj neprocedural pentru interogarea si prelucrarea informatiilor din baza de date. Compilatorul limbajului SQL genereaza automat o procedura care acceseaza baza de date si executa comanda dorita. SQL permite atat definirea, prelucrarea si interogarea datelor, cat si controlul accesului la acestea. Comenzile SQL pot fi integrate in programe scrise in alte limbaje, de exemplu Cobol, C, C++, Java etc.
Ce este SQL*Plus? Comenzile SQL*Plus acceseaza baza de date ?
SQL*Plus este un utilitar Oracle, avand comenzi proprii specifice; este o interfata specifica sistemului Oracle pentru executia instructiunilor SQL.
Nu permite prelucrarea informatiilor din baza de date.
Comenzile SQL*Plus accepta abrevieri? Este necesar vreun caracter de incheiere a comenzii?
Comenzile pot fi abreviate.
Nu sunt necesare caractere pentru a specifica incheierea comenzii.
Accepta "- drept caracter de continuare pentru comenzile scrise pe mai multe linii.
Care sunt limbajele SQL?
In functie de tipul actiunii pe care o realizeaza, instructiunile SQL se impart in mai multe categorii.
limbajul de definire a datelor (LDD) - comenzile CREATE, ALTER, DROP;
limbajul de prelucrare a datelor (LMD) - comenzile INSERT, UPDATE, DELETE, SELECT;
limbajul de control al datelor (LCD) - comenzile COMMIT, ROLLBACK.
Analizati sintaxa simplificata a comenzii SELECT. Care dintre clauze sunt obligatorii?
SELECT | ALL] lista_campuri | *}Comenzile SQL accepta abrevieri, e nevoie de caracter de terminare?
Comenzile SQL nu accepta abrevieri, iar caracterul de terminare al unei comenzi SQL este ;".
Gasiti erorile din instructiunea urmatoare.
SELECT employee_id, last_name
salary x 12 salariu anual
FROM employees;
Varianta 1:
SELECT employee_id, last_name, salary * 12 AS salariu_anual
FROM employees;
Varianta 2:
SELECT employee_id, last_name, salary * 12 ' Salariu Anual
FROM employees;
Obs.: Numai aliasul specificat intre ghilimele pastreaza formatul exact (litere mari si mici), celelalte sunt transformate implicit in majuscule.
Cuvantul cheie care specifica un alias este AS. Acesta este facultativ.
a) Consultati diagrama exemplu HR (Human Resources) pentru lucrul in cadrul laboratoarelor SQL.
b) Identificati cheile primare si cele externe ale tabelelor existente in schema, precum si tipul relatiilor dintre aceste tabele.
Sa se initieze o sesiune SQL*Plus folosind user ID-ul si parola indicate.
Sa se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOBS, JOB_HISTORY, LOCATIONS, COUNTRIES, REGIONS), observand tipurile de date ale coloanelor.
Obs: Se va utiliza comanda SQL*Plus DESC[RIBE] nume_tabel.
Sa se listeze continutul tabelelor din schema considerata, afisand valorile tuturor campurilor.
Obs: Se va utiliza comanda SQL
SELECT * FROM nume_tabel;
Sa se obtina inca o data rezultatul cererii precedente, fara a rescrie cererea.
Obs: Ultima cerere SQL lansata de catre client este pastrata in buffer-ul SQL.
Pentru rularea buffer-ului, se utilizeaza /" sau RUN
Listati structura tabelului EMPLOYEES si apoi dati comanda RUN (sau /"). Ce observati? Comenzile SQL*Plus sunt pastrate in buffer?
DESC employees
RUN
Sa se afiseze codul angajatului, numele, codul job-ului, data angajarii. Salvati instructiunea SQL intr-un fisier p1_14.sql.
Obs: Se utilizeaza comanda SAVE pentru salvarea buffer-ului intr-un fisier. Precizarea extensiei .SQL a fisierului nu este obligatorie.
FROM employees;
SAVE h: . p1_14.sql
Executati cererea din fisierul p1_14.sql.
sau
Editati fisierul p1_14.sql, astfel incat, la rulare, capetele coloanelor sa aiba numele cod, nume, cod job, data angajarii.
Cererea se modifica astfel:
SELECT employee_id cod, last_name nume, job_id ' cod job ', hire_date ' data angajarii
FROM employees;
Sa se listeze, cu si fara duplicate, codurile job-urilor din tabelul EMPLOYEES.
SELECT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;
Sa se afiseze numele concatenat cu job_id-ul, separate prin virgula si spatiu. Etichetati coloana Angajat si titlu".
Obs: Operatorul de concatenare este ||". Sirurile de caractere se specifica intre apostrofuri (NU intre ghilimele, caz in care ar fi interpretate ca alias-uri).
SELECT last_name|| ', ' || job_id 'Angajat si titlu'
FROM employees;
Sa se listeze numele si salariul angajatilor care castiga mai mult de 2850 $. Salvati instructiunea SQL intr-un fisier numit p1_19. Sa se ruleze acest fisier.
SELECT last_name, salary
FROM employees
WHERE salary > 2850;
SAVE h: . p1_19
h: . p1_19
Sa se modifice p1_19 pentru a afisa numele si salariul pentru toti angajatii al caror salariu nu se afla in domeniul 1500-2850$. Salvati din nou instructiunea intr-un fisier numit p1_21. Executati cererea.
Obs: Pentru testarea apartenentei la un domeniu de valori se poate utiliza operatorul
[NOT] BETWEEN valoare1 AND valoare2
Cererea se modifica astfel:
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 1500 AND 2850;
h: . p1_19.sql
Sa se creeze o cerere pentru a afisa numele angajatului si numarul departamentului pentru angajatul nr. 104.
SELECT last_name, department_id
FROM employees
WHERE employee_id =104;
Sa se afiseze numele, job-ul si data la care au inceput lucrul salariatii angajati intre 20 Februarie 1987 si 1 Mai 1989. Rezultatul va fi ordonat crescator dupa data de inceput.
SELECT last_name, job_id, hire_date
FROM employees
WHERE hire_date BETWEEN '20-02-1987' AND '01-05-1989'
ORDER BY hire_date;
Sa se afiseze numele salariatilor si codul departamentelor pentru toti angajatii din departamentele 10 si 30 in ordine alfabetica a numelor.
Obs: Apartenenta la o multime finita de valori se poate testa prin intermediul operatorului IN, urmat de lista valorilor intre paranteze si separate prin virgule:
expresie IN (valoare_1, valoare_2, . , valoare_n)
SELECT last_name, department_id
FROM employees
WHERE department_id IN (10, 30)
ORDER BY last_name;
Sa listeze numele si salariile angajatilor care castiga mai mult de 1500 $ si lucreaza in departamentul 10 sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar.
SELECT last_name 'Angajat' , salary 'Salariu lunar'
FROM employees
WHERE salary>1500 AND department_id IN (10, 30);
Care este data curenta?
Obs: Pseudocoloana care returneaza data curenta este SYSDATE. Pentru completarea sintaxei obligatorii a comenzii SELECT, se utilizeaza tabelul DUAL:
SELECT SYSDATE
FROM DUAL;
Datele calendaristice pot fi formatate cu ajutorul functiei TO_CHAR(data, format), unde formatul poate fi alcatuit dintr-o combinatie a urmatoarelor elemente:
Element |
Semnificatie |
D |
Numarul zilei din saptamana (duminica=1; luni=2; . sambata=6) |
DD |
Numarul zilei din luna. |
DDD |
Numarul zilei din an. |
DY |
Numele zilei din saptamana, printr-o abreviere de 3 litere (MON, THU etc.) |
DAY |
Numele zilei din saptamana, scris in intregime. |
MM |
Numarul lunii din an. |
MON |
Numele lunii din an, printr-o abreviere de 3 litere (JAN, FEB etc.) |
MONTH |
Numele lunii din an, scris in intregime. |
Y |
Ultima cifra din an |
YY, YYY, YYYY |
Ultimele 2, 3, respectiv 4 cifre din an. |
YEAR |
Anul, scris in litere (ex: two thousand four). |
HH12, HH24 |
Orele din zi, intre 0-12, respectiv 0-24. |
MI |
Minutele din ora. |
SS |
Secundele din minut. |
SSSSS |
Secundele trecute de la miezul noptii. |
Sa se afiseze numele si data angajarii pentru fiecare salariat care a fost angajat in 1987. Se cer 2 solutii: una in care se lucreaza cu formatul implicit al datei si alta prin care se formateaza data.
Varianta1:
SELECT first_name, last_name, hire_date
FROM employees
WHERE hire_date LIKE (
Varianta 2:
SELECT first_name, last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, YYYY
Sunt obligatorii ghilimelele de la sirul ? Ce observati?
Sa se afiseze numele si job-ul pentru toti angajatii care nu au manager.
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;
Sa se afiseze numele, salariul si comisionul pentru toti salariatii care castiga comisioane. Sa se sorteze datele in ordine descrescatoare a salariilor, iar pentru angajatii cu acelasi salariu, in ordine crescatoare a comisioanelor.
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC, commission_pct ASC;
Eliminati clauza WHERE din cererea anterioara. Unde sunt plasate valorile NULL in ordinea crescatoare?
Sa se listeze numele tuturor angajatilor care au a treia litera din nume a
Obs: Pentru a forma mastile de caractere utilizate impreuna cu operatorul LIKE cu scopul de a compara sirurile de caractere, se utilizeaza caracterele:
% - reprezentand orice sir de caractere, inclusiv sirul vid;
_ (underscore) - reprezentand un singur caracter si numai unul.
SELECT DISTINCT last_name
FROM employees
WHERE last_name LIKE __a
Copyright © 2024 - Toate drepturile rezervate