Oracle SQL
1. DERS
Dbms ve rdbms ferqi
SQL –
DDL,DCL,DML,TCL,
DQL haqqinda
melumat
SQL TABLE
FORMS
SELECT * FROM TABLE NAME
ALIAS ,as or “”
SELECT COLUM NAME FROM TABLE
COMMENTS FOR COLUMN NAME
SCRIPTLERI SAVE ETMEK, OPEN
*,+,-,/ COLUMNS
All objects(tables)
Null deyeri(prabel null deyil)
• Null+100=null
Concat or ||
distinct
Table view (column adlari ve
tiplerine baxmaq ucun)
Oracle / PLSQL: Data Types
• Character Datatypes
• Numeric Datatypes
• Large Object (LOB) Datatypes
• Date/Time Datatypes
• Rowid Datatypes
Telefon nomresi, kart pani, fin kod
Nvarchar2: Latin elifbasini destekleyir, varchar ise desteklemir ?? Isaresi atir yerine
Comparison Operators
•>
•<
• <>,!=
• >=
• <=
Unary and Binary Operators
• unary : operator operand(-560,+54)
• binary : operand1 operator operand2(1254+2564, 2460-300)
Logical Operators
And,or,not
Where sherti
• Where id=90
• Where with strings(uppercase lowercase)-tek dirnaq olmalidir
• Where with date
• select * from [Link] where hire_date>='17-jan-2023';
between
• select * from [Link] where manager_id between 100 and
200;
Like, not
• _o%
• %ou%
• Ou%
• %ou
• select * from [Link] where country_name like 'A%’;
• select * from [Link] where country_name like '_r%';
In,not
• select * from [Link] where region_id in (2,3);
• select * from [Link] where job_id not in ('AD_PRES','AD_VP')
Is null,not
• select * from [Link] where commission_pct is not null
• select * from [Link] where commission_pct is null
ORDER BY Clause
• Asc
• Desc
• Column number(8)
• 1=1
• 1=2
• Salary+10+500 as motivation
order by motivation
[Link]
DDL( • Table creation using CREATE statement
CREATE TABLE customers (
Create, customer_id number(10) NOT NULL,
customer_name varchar2(50) NOT NULL,
city varchar2(50) );
alter, and • Creating table from another table
drop
CREATE TABLE florist
AS
SELECT * FROM product WHERE category = 'flower';
schema • Dropping a table using DROP command
DROP TABLE Shippers;
objects) • Using truncate command(It performs the same function as a
DELETE statement without a WHERE clause.)
TRUNCATE TABLE customers;
Alter
ALTER TABLE customers
ADD customer_name varchar2(45);
ALTER TABLE customers
DROP COLUMN customer_name;
ALTER TABLE customers
RENAME COLUMN customer_name TO cname;
ALTER TABLE customers
RENAME TO contacts;
ALTER TABLE employees
MODIFY employee_name varchar2(75);
With DML Commands
DML : INSERT, UPDATE, DELETE, MERGE
INSERT INTO Student (Stu_id, Stu_Name, Stu_Marks, Stu_Age)
VALUES (104, Anmol, 89, 19);
UPDATE Product SET Product_Price = 80 WHERE Product_Id = 'P102' ;
DELETE FROM Product WHERE Product_Id = 'P202' ;
MERGE INTO people_target pt USING people_source ps ON
(pt.person_id = ps.person_id)
WHEN NOT MATCHED THEN INSERT (pt.person_id,
pt.first_name, pt.last_name, [Link]) VALUES (ps.person_id,
ps.first_name, ps.last_name, [Link]);
How to copy data from one table to another table?
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
How to copy the structure alone from a table?
create table <target_table> as
select * from <source_table> where 1=2;
Difference between Delete and Truncate command
[Link]
Integrity Constraints (Constraints are used to limit the type of data that can go into a table.)
•NOT NULL - Ensures that a column cannot have a NULL value
•UNIQUE - Ensures that all values in a column are different
•PRIMARY KEY - A combination of a NOT NULL and UNIQUE. Uniquely identifies each row in a table
•FOREIGN KEY - Prevents actions that would destroy links between tables
•CHECK - Ensures that the values in a column satisfies a specific condition
•DEFAULT - Sets a default value for a column if no value is specified
NOT NULL constraint
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
ALTER TABLE Persons
MODIFY Age int NOT NULL;
UNIQUE Constraint
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
CHECK Constraint
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
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='Sand
nes')
);
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandn
es');
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
DEFAULT Constraint
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
PRIMARY KEY Constraint
Primary keys must contain UNIQUE values, and cannot contain NULL values.
A table can have only ONE primary key; and in the table, this primary key can consist of single or
multiple columns (fields).
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
FOREIGN KEY Constraint
A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in
another table.
The table with the foreign key is called the child table, and the table with the primary key is
called the referenced or parent table.
CREATE TABLE Orders ( CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY, OrderID int NOT NULL,
OrderNumber int NOT NULL, OrderNumber int NOT NULL,
PersonID PersonID int,
int FOREIGN KEY REFERENCES Persons(PersonID) PRIMARY KEY (OrderID),
); CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
CREATE TABLE departments ( REFERENCES Persons(PersonID)
department_id NUMBER PRIMARY KEY, );
department_name VARCHAR2(100)
);
ALTER TABLE Orders
CREATE TABLE employees ( ADD CONSTRAINT FK_PersonOrder
employee_id NUMBER PRIMARY KEY, FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
employee_name VARCHAR2(100),
department_id NUMBER, ALTER TABLE Orders
FOREIGN KEY (department_id) REFERENCES departments(department_id) DROP CONSTRAINT FK_PersonOrder;
);
Enable/disable Constraints
ALTER TABLE products DISABLE CONSTRAINT fk_supplier;
ALTER TABLE products ENABLE CONSTRAINT fk_supplier;
How to get information about constraints?
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE How to declare column level constraints?
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'your_table_name';
1. NOT NULL
2. UNIQUE
3. PRIMARY KEY
4. FOREIGN KEY
5. CHECK
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(100) UNIQUE,
Age INT CHECK (Age >= 18)
);
How to declare row level constraints ?
1. CHECK constraints
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
OrderDate DATE NOT NULL,
ShipDate DATE,
CHECK (ShipDate >= OrderDate)
);
Oracle SQL Single row
functions
Single row functions return one single result per
row or query whereas Multiple-row functions return
one result per a set of rows.
Character Functions Returning Character Values
• CHR
• CONCAT
• INITCAP select initcap('aynura’) from dual
• LOWER
• LPAD
• LTRIM
• REGEXP_REPLACE
• REGEXP_SUBSTR
• REPLACE select replace('python course','python','sql') from dual
• RPAD select rpad('ltc',10,'*') from dual
• RTRIM
• SUBSTR
• TRIM select trim(leading/trailing/both '*' from '***ltc**') from dual/select trim(' ltc ') from dual
• UPPER
Datetime Functions: dd-mm-yy:
hiredate+5 gunun uzerine gelir
date+number/24-satin uzerine gelir
• ADD_MONTHS select add_months(sysdate,12) from dual/select add_months(sysdate,-12) from dual
• CURRENT_DATE
• LAST_DAY select last_day(sysdate) from dual—ayin son gununu qaytari
• MONTHS_BETWEEN aylarin sayini qaytarir select months_between(sysdate,'1-jan-2024’) from dual
• NEXT_DAY select next_day(sysdate,'wednesday') from dual—gelecek heftenin gunu ayin necesine dusur
• SYSDATE. select sysdate+4/24 from employees-+4 saat
• TRUNC (date) select trunc(sysdate,'month’) from dual/select trunc(sysdate,'year’) from dual
• Conversion
ASCIISTR Functions
• CAST SELECT CAST(' 2093 ' AS NUMBER) from dual/ SELECT sysdate, CAST(sysdate AS
TIMESTAMP) AS OUTPUT_VALUE FROM dual;
• TO_DATE select to_date('13/08/2024','dd-mm-yyyy') from dual
• TO_CHAR select to_char(sysdate,'mm/yyyy') from dual/ select to_char(sysdate,
‘month') from dual / select to_char(sysdate, ‘DY') from dual/ select
to_char(sysdate,'DD/MM/YYYY HH24:MI:SS') from dual
• TO_NUMBER select to_number('$13,34.00','$99999.99') from dual
Numeric Functions
• ABS
• ACOS
• ASIN
• ATAN
• ATAN2
• BITAND
• CEIL
• COS
• COSH
• EXP
• FLOOR
• LN
• LOG
• MOD select mod(10,2) from dual/select mod(10,3) from dual
• POWER select power(10,2) from dual
• REMAINDER
• ROUND (number) select round(378.977) from dual/select round(378.977,-2) from dual/select round(378.977,2) from dual
• SIGN
• SIN
• SINH
• SQRT
• TAN
• TANH
• TRUNC (number) select trunc(378.977,2) from dual/select trunc(378.977,-2) from dual
• WIDTH_BUCKET
NULL-Related Functions
• COALESCE -SELECT COALESCE(NULL,NULL,8,NULL) FROM dual-ILK NULL OLMAYAN DEYER
• NULLIF-Eger 2 deyer bir birine beraberdirse null qaytarir , deyilse 1ci: SELECT nullif(4,4) FROM dual
• NVL SELECT NVL(COMMISSION_PCT, 0) +6 FROM EMPLOYEES
• NVL2 SELECT COMMISSION_PCT,NVL2(COMMISSION_PCT, 'NULL DEYIL',0) FROM EMPLOYEES
• CASE SELECT T.*,CASE WHEN EMPLOYEE_ID >105 THEN 'HIGH'
• ELSE 'LOW' END AS HL_POSITION FROM EMPLOYEES T
• DECODE, case ile eynidir, lakin sadece = uzerinden yerine yetirilir. select T.*,
• DECODE(EMPLOYEE_ID, 100, 'NEW EMPLOYEE', 101 , 'OLD EMPLOYEE’,’DIGER’) as is_new
• from employeeS T;
AGGREGATE functions(multi-row functions)
• The multi-row function in SQL is used to retrieve data per set of rows at the time when we work on
the group by clause we use the Multi-Row Function.
• Maximum(Max)
• Minimum(MIN)
• Average(Avg)
• Sum
• Count
SUM function
• select sum(salary) from employeeS T;
• select sum(distinct salary) from employeeS T;
AVG function
• Null deyerleri nezere almir
• select avg( salary) from employeeS T;
• select avg( commission_pct) from employeeS T;
MIN/MAX function
• select min( commission_pct) from employeeS T;
• select max(salary) from employeeS T;
• select max( hire_date) from employeeS T;
• select min( last_name) from employeeS T;
COUNT function
• select count( *) from employeeS T;--butun null deyerleri alir *
yazdiqda
• select count( distinct first_name) from employeeS T;
GROUP BY clause aggregate
functions
GROUP BY clause- verilənləri müəyyən bir sütun üzrə qruplaşdırmaq üçün istifadə olunur. Bu, bir qrup
üçün aggregate funksiyalarını tətbiq etməyə imkan verir.
• select round(avg(salary),2),
Sum(salary ), department_id from employeeS T
group by department_id
Order by department_id
Wrong case
• select round(avg(salary),2),
Sum(salary ),job_id ,department_id from employeeS T
group by department_id
Order by department_id
HAVING CLAUSE in SQL
HAVING clause- GROUP BY clausu ilə birlikdə istifadə olunur və qruplara filtr tətbiq etmək
üçün nəzərdə tutulub. WHERE clausu fərdi qeydlərə tətbiq olunur, lakin HAVING qruplara
tətbiq edilir.
• select avg(salary),department_id from employeeS T
group by department_id
having avg(salary)>6000
Where hissede sherti versek error olur, aggregate funksiyalarda having den istifade edilir,
Group by dan sonra yazmaq daha duzgundur.
Importance Of JOIN
•JOIN əməliyyatları iki və ya daha çox
cədvəli müəyyən bir əlaqəyə əsaslanaraq
birləşdirmək üçün istifadə olunur.
•Inner Join
•Left Join
•Right Join
•Full Join
•Self Join
•Cross Join
Inner Join
• INNER JOIN iki cədvəldə uyğun gələn qeydləri birləşdirir. Yalnız hər iki cədvəldə də uyğun gələn
məlumatlar nəticədə yer alır.
SELECT e.first_name, d.department_name
FROM [Link] e
INNER JOIN [Link] d
ON e.department_id = d.department_id;
select * from [Link] r
inner join [Link] c
on r.region_id=c.region_id;
• Left Join
• LEFT JOIN sol cədvəldən bütün qeydləri və sağ cədvəldən uyğun gələn qeydləri qaytarır. Əgər sağ
cədvəldə uyğun gələn bir qeyd yoxdursa, nəticədə sağ cədvəlin sütunları üçün NULL dəyərlər
göstəriləcək.
SELECT e.employee_id, e.first_name, e.last_name,
d.department_name
FROM [Link] e
LEFT JOIN [Link] d ON e.department_id =
d.department_id;
Right Join
• RIGHT JOIN sağ cədvəldən bütün qeydləri və sol cədvəldən uyğun gələn qeydləri qaytarır. Əgər sol
cədvəldə uyğun gələn bir qeyd yoxdursa, nəticədə sol cədvəlin sütunları üçün NULL dəyərlər
göstəriləcək.
SELECT e.employee_id, d.first_name
FROM hr.JOB_HISTORY e
RIGHT JOIN [Link] d ON e.department_id =
d.department_id;
SELECT e.employee_id, e.first_name, e.last_name,
d.department_name
FROM [Link] e
RIGHT JOIN [Link] d ON e.department_id =
d.department_id;
Full Join
• FULL JOIN hər iki cədvəldən uyğun gələn bütün qeydləri qaytarır. Əgər bir cədvəldə uyğun
gəlməyən qeydlər varsa, həmin cədvəlin uyğun gəlməyən qeydləri üçün NULL dəyərlər
göstəriləcək.
SELECT e.employee_id, e.first_name, e.last_name,
d.department_name
FROM [Link] e
FULL JOIN [Link] d ON e.department_id =
d.department_id;
Self Join
• SQL özü-özünə birləşmə bir cədvələ qoşulma mexanizmidir. Bu birləşmədən eyni cədvəldəki bəzi
digər qeydlər ilə cədvəldəki qeydləri birləşdirən bir nəticə toplusu yaratmaq istədikdə istifadə
edilir.
• Məsələn, bir işçi cədvəlində (employee table) işçilərin hamısını qaytaran və rəhbərlərinin kim
olduğunu göstərən bir nəticə toplusuna nəzər salmaq istədikdə “self join” istifadə edə bilərik.
SELECT A.FIRST_NAME AS EMPLOYEE_NAME, B.MANAGER_ID
AS MANAGER
FROM [Link] A
JOIN [Link] B ON A.EMPLOYEE_id = B. EMPLOYEE_ID;
Cross Join
• CROSS JOIN cədvəllərdəki hər bir qeydi digər cədvəldəki hər bir qeyd ilə birləşdirir. Bu, verilənlər
cartesian product-i yaradır və nəticədə çoxlu sayda qeydlər meydana çıxır.
SELECT employees.first_name, departments.department_name
FROM [Link]
CROSS JOIN [Link]
--where departments.department_name='Administration'
Set Operators
• İki ayrı ayrılıqda yazılmış sorğuların
birləşdirilməsində,həmin sorğularda kəsişən sətirlərin
seçilməsində,birinci cədvəldə olan ikinci cədvəldə olmayan
istisna məlumatlərın seçilməsinə istifadə olunur.
1. Union
2. Union All
3. Intersect
4. Except (Also known as Minus, in other Databases)
UNION
İki və ya daha çox sorğunun nəticələrini birləşdirir və nəticə dəstindəki təkrarlanan sətirləri silir.
Sorğuların gətirdiyi nəticənin içindən dublikat olan (sorğuda üst üstə düşən) sətirləri DISTINCT edərək sadəcə
birini sorğuda əks etdirir.
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;
SELECT department_id FROM employees
UNION
SELECT department_id FROM departments;
UNION ALL
• UNION ALL operatoru UNION kimi iki ayrı-ayrı sorğunu birləş[Link] ALL operatoru UNION-
dan fərqli olaraq dublikatları əks [Link] iki ayrı sorğunu olduğu kimi birləş[Link]
dəyərləridə birləşdirir.
SELECT department_id FROM [Link]
UNION ALL
SELECT department_id FROM [Link];
INTERSECT
• INTERSECT(kəsişmək) operatoru iki ayrı ayrılıqda yazılmış sorğulardan bir biriləri ilə kəsişənləri birləşdirir.Yəni
birinci sorğuda olan dəyər ikinci sorğudada varsa deməli üst üstə düşən,kəsişən dəyər sayılır.Həmin dəyərlər
sorğuda əks olunur.
SELECT department_id FROM [Link]
INTERSECT
SELECT department_id FROM [Link];;
MINUS
• Minus operatoru başqa,istisna və s mənasını verir.İki ayrı sorğudan birincidə olan ikincidə olmayan
dəyərləri əks etdirir.
SELECT job_id FROM [Link]
MINUS
SELECT job_title FROM [Link]
Set operators
SQL set operatorlarını istifadə edərkən bir neçə şərt yerinə yetirilməlidir.
• Sütun Sayı Eyni Olmalıdır
• Sütunların Sırası Eyni Olmalıdır
• Sütunların Məlumat Tipi Eyni Olmalıdır
Pseudo columns
• Pseudo columnlar fiziki olaraq cədvəldə mövcud olmayan, amma sorğularda istifadə edildikdə,
cədvəlin columnu kimi davranan xüsusi columnlardir.
ROWID və ROWNUM
Oracle SQL-də iki fərqli konseptdir və hər biri cədvəllərdəki sətirləri identifikasiya etmək və sıralamaq üçün istifadə olunur.
ROWID bir cədvəldəki hər bir sətir üçün unikal bir identifikatordır. Bu identifikator sətirin fiziki yerini göstərir və cədvəldəki
sətirə sürətli bir şəkildə çatmağı mümkün edir. ROWID məlumatların fiziki yerini təmsil edir və bu səbəbdən də dəyişməz
(immutable) olur.
SELECT ROWID, employee_id, first_name, last_name
FROM [Link];
ROWNUM bir SQL sorğusunda nəticə sıralamasına görə sətirləri nömrələmək üçün istifadə olunur. Bu nömrələmə dinamik
olaraq tətbiq olunur və sorğunun icra müddətində tətbiq edilir. ROWNUM sətirləri sıralamaq üçün istifadə edilir, amma
nəticənin sıralanması ilə əlaqəli deyil.
SELECT ROWNUM, employee_id, first_name, last_name
FROM [Link]
WHERE ROWNUM <= 10;
Sub Queries
SQL alt sorğuları (sub queries) əsasən mürəkkəb sorğuların daxilində yerinə yetirilən və başqa bir sorğunun
nəticələrini əldə etmək üçün istifadə olunan sorğulardır.
Bu alt sorğular WHERE bəndində, FROM bəndində və ya SELECT bəndində yerləşə bilər.
Oracle WHERE bəndində 255 səviyyəyə qədər alt sorğuya icazə verir.
Alt sorğu mötərizə içərisində olmalıdır.
Subqueries
• They are also known as the inner query or inner select, and the query that contains them is
known as the outer query or outer select.
• Subqueries are nested inside statements like SELECT, INSERT, UPDATE, DELETE, or any other
subquery.
• Subqueries are present in the WHERE clause, FROM clause, or HAVING clause of the PARENT SQL
query.
• They are used with comparison operators and logical operators like >, <, >=, <>,
<=, SOME, ANY, ALL, and IN.
• They execute before the outer query at the run time and pass the result to complete the
statement.
Types of Subqueries in SQL
• Multiple Row Subquery
• Single Row Subquery-Subqueries
• Multiple Column Subqueries
• Nested Subqueries
• Correlated Subqueries
Single Row Subquery-
Subqueries
• Single Row Subquery-Subqueries that return a single row
as an output to their parent query are called single-row
subqueries.
select * from [Link] where
salary> (select salary from [Link] where
first_name='Diana')
select * from [Link] where
salary> (select salary from [Link] where
first_name='Diana')
and job_id =(select job_id from [Link] where
first_name='Ismael')
and department_id=(select department_id from [Link]
where first_name='Luis')
Single Row Subquery-
Subqueries
select * from [Link] where
salary> (select avg(salary) from [Link] where
department_id=60)
SELECT * FROM sales_agents WHERE agency_fee >
(SELECT AVG(agency_fee) FROM sales_agents);
Multiple Row Subquery
• Subqueries that return multiple rows as an output to their parent query are called multiple-row
subqueries. Multiple row subqueries can be used in a SQL SELECT statement with
a HAVING clause, WHERE clause, a FROM clause, and a logical operator(ALL, IN, NOT IN, and
ANY).
SELECT AVG(agency_fee) FROM sales_agents
WHERE id NOT IN (SELECT id FROM managers);
Multiple Row Subquery
select * from [Link] where
salary in (select min(salary) from [Link] group by
department_id )
select * from [Link] where
salary in (select employee_id from hr.job_history )
select * from [Link] where
salary < (select min(salary) from [Link] group by Error atacaq, cunki multiple row subquerydir
department_id )
Multiple Column Subqueries
• Subqueries that return multiple columns as an output to their
parent query are called multiple-column subqueries.
SELECT id, name, price
FROM paintings
WHERE (name, price) IN
(SELECT name, MIN(price)
FROM paintings
Group by name);
Any
select * from [Link] where Error qaytaracaq, cunki multiple row subquery ni < ile istifade edirik.
salary< (select salary from [Link] where
department_id=90 )
select * from [Link] where
Salary sutunundaki deyerler any subquerydeki
salary> any(select salary from [Link]
deyerlerin her hansisa birinden kicik olmalidir
where department_id=90 ) ;
select * from [Link] where
salary> 3500 or salary> 4500 or
select * from [Link] where
salary> 4000
salary> any(3500,4500,2100)
All
select * from [Link] where
salary> all(select salary from [Link] where
department_id=100 )
select * from [Link] where Salary sutunundaki deyerler
salary> all(3500,4000,9000 ,15000) subquerydeki deyerlerin hamisindan boyuk olmalidir.
select * from [Link] where
salary> 3500
and salary> 4000 and salary> 9000 and salary> 15000
Exists
select * from [Link] t where Deyerin movcudlugunu yoxlayir
not exists (select * from hr.job_history s where
s.employee_id=t.employee_id)
select * from [Link] t where
exists (select 1 from hr.job_history s where
Subqueryden hansi sutunu select etmeyin onemi yoxdur
s.employee_id=t.employee_id)
select * from [Link] t where
exists (select sysdate from hr.job_history s where
s.employee_id=t.employee_id)
From subquery (inline view)
select * from (select employee_id, count(*) as cnt from
hr.job_history group by employee_id )
select * from (select employee_id, count(*) as cnt from
hr.job_history group by employee_id ) sq
join [Link] e on e.employee_id=sq.employee_id
With cte as
with cte as
(select employee_id , count(*) as from [Link] group by
employee_id)
select * from cte
with cte as
(select department_id ,count(*) as from [Link] group
by department_id)
select c.* from cte c join [Link] d on
d.department_id =c.department_id
with cte as
(select employee_id ,count(*) as from [Link] group by
employee_id),
job_hist as (select employee_id, count(*) from hr.job_history
f group by employee_id)
select c.*,h.* from cte c join job_hist h on
c.employee_id=h.employee_id
Correlated Subqueries
• Subqueries that return multiple columns as output depending on
the information obtained from the parent query are called
correlated subqueries.
SELECT city,
(SELECT count(*)
FROM paintings p
WHERE [Link] = p.gallery_id) total_paintings
FROM galleries g;
Nested Subqueries
• Subqueries that are inside another subquery are called nested
subqueries.
SELECT name AS painting,
price,
(SELECT AVG(price)
FROM paintings
WHERE price IN
(SELECT price
FROM paintings
WHERE price >= 5000)
) AS avg_price
FROM paintings;
Subqueries with INSERT statement
• Subqueries are used to insert statements to insert selective rows
from one table to another.
INSERT INTO neworder
SELECT * FROM orders
WHERE advance_amount in(2000,1800);
Subqueries with the UPDATE statement
• Subqueries are used in an UPDATE statement to set new values
to a column that the returned by the subquery as output.
UPDATE neworder
SET ord_date='15-JAN-10'
WHERE ord_amount-advance_amount<
(SELECT MIN(ord_amount) FROM orders);
Subqueries with DELETE statement
• Subqueries are used in a DELETE statement to delete specific
rows that is returned as a result of the subquery.
DELETE FROM neworder
WHERE advance_amount<
(SELECT MAX(advance_amount) FROM orders);
Working with data query language using TCL
TCL : COMMIT, ROLLBACK, SAVEPOINT
CREATE TABLE TEACHERS (
CODE INT NOT NULL,
SUBJECT VARCHAR (15) NOT NULL,
NAME VARCHAR (15) NOT NULL,
PRIMARY KEY (CODE)
);
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM');
INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM');
INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK');
COMMIT;
DELETE FROM TEACHERS WHERE CODE= 3;
ROLLBACK;
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL');
SAVEPOINT s;
INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE');
INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD');
ROLLBACK TO s;
INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY');
COMMIT;
Views
An Oracle VIEW, in essence, is a virtual table that does not
physically exist. Rather, it is created by a query
joining one or more tables.
SELECT * FROM sup_orders;
CREATE VIEW view_name AS SELECT columns
FROM tables
WHERE conditions; DROP VIEW view_name;
CREATE VIEW sup_orders AS
SELECT suppliers.supplier_id, [Link], [Link] CREATE or REPLACE VIEW sup_orders AS
e SELECT suppliers.supplier_id, [Link], or
FROM suppliers e
INNER JOIN orders FROM suppliers
ON suppliers.supplier_id = supplier_id INNER JOIN orders
WHERE suppliers.supplier_name = 'VOJO'; ON suppliers.supplier_id = supplier_id
WHERE suppliers.supplier_name = 'HCL';
Sequence- NEXTVAL and CURRVAL
A sequence is a schema object that can generate unique sequential values. These values
are often used for primary and unique keys. You can refer to sequence values in SQL
statements with these pseudocolumns:
•CURRVAL: Returns the current value of a sequence
•NEXTVAL: Increments the sequence and returns the next value
CYCLE: Bu parametr göstərildikdə, ardıcıllıq maksimum (və ya minimum) dəyərə
çatdıqda, növbəti dəfə sıfırdan başlayaraq yenidən dəyərlər yaradır. Yəni, ardıcıllıq
CREATE SEQUENCE customers_seq "dairəvi" olur və təkrarən dəyərlər yarada bilir.
START WITH 1000 NOCYCLE: Bu parametr göstərildikdə, ardıcıllıq maksimum (və ya minimum)
dəyərə çatdıqdan sonra daha yeni dəyər yarada bilmir. Yəni, maksimum və ya
INCREMENT BY 1 minimum dəyərə çatdıqdan sonra ardıcıllıq dayanır. Bu, ardıcıllığın müəyyən bir
NOCACHE nöqtədən sonra təkrar etməməsini təmin edir.
NOCYCLE;
"CACHE" və "NOCACHE" seçimləri bu ardıcıllığın nömrələrinin yaddaşda necə saxlanacağını
müəyyən edir:
•CACHE: Bu parametr göstərildikdə, verilənlər bazası yaddaşda ardıcıl nömrələrin müəyyən
sayını saxlayır (məsələn, 20). Bu, performansı artırır, çünki verilənlər bazası hər yeni nömrə
yaratdıqda diskə müraciət etməli olmur.
•NOCACHE: Bu parametr göstərildikdə, verilənlər bazası ardıcıl nömrələri yaddaşda saxlamır.
Hər yeni nömrə yaradılarkən birbaşa diskdən oxunur. Bu, bir az daha yavaş olsa da, nömrələrin
itirilməsinin qarşısını alır (məsələn, server qəzası zamanı).
Sequence- NEXTVAL and CURRVAL
Default: MAXVALUE 999999999999999999999999999
select [Link], [Link] from dual;
ALTER SEQUENCE seq_name
INCREMENT BY 124;
CREATE SEQUENCE supplier_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
DROP SEQUENCE sequence_name;
CREATE SEQUENCE supplier_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Synonyms
SQL verilənlər bazasında synonym (sinonim) anlayışı, bir obyektə başqa bir adla müraciət etməyə imkan
Sinonimlər verilənlər bazası obyektlərinin (cədvəl, görünüş, prosedur, funksiya və s.) fərqli adlarla əlçatan
olmasını təmin edir və mürəkkəb adların sadələşdirilməsinə kömək edir.
CREATE SYNONYM emp FOR [Link];
DROP SYNONYM emp;
Index
Index (indeks) verilənlər bazasında cədvəldə olan sətirləri daha tez tapmaq üçün istifadə olunan bir
strukturdur. Bu, cədvəldə müəyyən sütunlara görə məlumatların axtarışını və sıralanmasını sürətləndirir.
CREATE INDEX emp_name_idx ON employees (last_name);
ALTER INDEX old_Index_Name RENAME TO new_I
ndex_Name;
DROP INDEX Index_Name;
Types of Indexes
•Unique Index
•Single-Column Index
•Composite Index
Unique Index: Cədvəlin bir və ya bir neçə sütununda təkrarlanan dəyərlərin olmadığını təmin edir.
CREATE UNIQUE INDEX emp_unique_idx ON employees (employee_id);
Composite Index: Bir neçə sütunun birləşməsinə əsaslanan indeksdir. Bu, mürəkkəb axtarışlarda
istifadə edilir.
CREATE INDEX emp_composite_idx ON employees (last_name, first_name);
Single-Column Indexes
CREATE INDEX index_name ON table_name (column_name);
Oracle Analytic Functions
Oracle Analitik Funksiyaları verilənlər bazasında məlumatların təhlili və manipulyasiyası üçün istifadə olunan
funksiyalardır. Bu funksiyalar müəyyən bir sətirin üzərində, həm də sətirlər qrupu üzərində əməliyyatlar
aparmağa imkan verir. Analitik funksiyalar pəncərə (window) üzərində işləyir və bu, hər bir sətir üçün xüsusi
hesablamalar aparmağa imkan verir.
•DENSE_RANK
•FIRST_VALUE
•LAG
•LAST_VALUE
•LEAD
•NTH_VALUE
•NTILE
•RANK
•ROW_NUMBER
Oracle Analytic Functions
DENSE_RANK
SELECT employee_id, last_name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM [Link];
LAG
SELECT employee_id, last_name, salary,
LAG(salary, 1, 0) OVER (ORDER BY salary DESC) AS previous_salary
FROM [Link];
LEAD
SELECT employee_id, last_name, salary,
LEAD(salary, 1, 0) OVER (ORDER BY salary DESC) AS previous_salary
FROM [Link];
NTILE
SELECT employee_id, last_name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM [Link];
RANK
SELECT employee_id, last_name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM [Link];
LAST_VALUE
SELECT employee_id, last_name, salary,
LAST_VALUE(salary) OVER (ORDER BY employee_id) AS
last_salary
FROM [Link];
FIRST_VALUE()
SELECT employee_id, last_name, salary,
FIRST_VALUE(last_name) OVER (ORDER BY salary DESC) AS
top_earner
FROM [Link];
SELECT department_id, employee_id, last_name, salary,
FIRST_VALUE(last_name) OVER (PARTITION BY
department_id ORDER BY salary DESC) AS top_earner
FROM [Link];
SH
schema
Oe
schema