⚠️SELECT * ব্যবহার এড়িয়ে চলুন — শুধু প্রয়োজনীয় কলাম নির্দিষ্ট করুন।
অধ্যায় ০২
WHERE ক্লজ ও অপারেটর
WHERE ক্লজ দিয়ে শর্ত অনুযায়ী সারি ফিল্টার করা হয়। বিভিন্ন ধরনের অপারেটর ব্যবহার করে জটিল শর্ত তৈরি করা যায়।
WHERE অপারেটর
1-- BETWEEN অপারেটর2WHERE salary BETWEEN3000AND80003-- IN তালিকা4WHERE dept_id IN (10, 20, 30)
5-- LIKE প্যাটার্ন6WHERE last_name LIKE'S%'7-- NULL চেক8WHERE commission_pct IS NOT NULL9-- NOT অপারেটর10WHERE dept_id NOT IN (40, 50)
=
সমতা — নির্দিষ্ট মানের সাথে মিল যাচাই
≠
!= বা <> — অসমান তুলনা
%
LIKE % — যেকোনো অক্ষর; _ একটি অক্ষর
∈
IN (...) — তালিকার যেকোনো মানের সাথে মিল
∅
IS NULL — NULL মান যাচাই করে
🚫NULL-এর সাথে কখনো = বা != ব্যবহার করবেন না — সবসময় IS NULL / IS NOT NULL লিখুন।
অধ্যায় ০৩
SQL JOIN — একাধিক টেবিল একত্রিত
JOIN দিয়ে একটি সাধারণ কলামের ভিত্তিতে দুই বা ততোধিক টেবিলের সারি একত্রিত করা হয়।
employeesবাম টেবিল
departmentsডান টেবিল
INNER
LEFT
RIGHT
FULL OUTER
CROSS
INNER JOIN
SELECT e.first_name,
d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id
= d.department_id;
✓INNER JOIN — উভয় টেবিলে মিল থাকা সারিই শুধু ফেরত দেয়।
অধ্যায় ০৪
Aggregate Functions — সমষ্টিগত ফাংশন
Aggregate Functions একাধিক সারির উপর কাজ করে এবং একটি একক ফলাফল দেয়। GROUP BY-এর সাথে ব্যবহার করে ডেটা গ্রুপ করা যায়।
ফাংশন
কাজ
উদাহরণ
COUNT(*)
মোট সারির সংখ্যা
COUNT(*) → 45
SUM(col)
যোগফল
SUM(salary)
AVG(col)
গড়
AVG(salary)
MAX(col)
সর্বোচ্চ মান
MAX(salary)
MIN(col)
সর্বনিম্ন মান
MIN(salary)
LISTAGG()
মান জোড়া লাগায়
LISTAGG(name,',')
STDDEV()
Standard deviation
STDDEV(salary)
VARIANCE()
ভ্যারিয়েন্স
VARIANCE(sal)
GROUP BY + HAVING
1SELECT department_id,
2COUNT(*) AS মোট_কর্মচারী,
3AVG(salary) AS গড়_বেতন,
4MAX(salary) AS সর্বোচ্চ_বেতন,
5MIN(salary) AS সর্বনিম্ন_বেতন
6FROM employees
7GROUP BY department_id
8HAVINGCOUNT(*) >39ORDER BY গড়_বেতন DESC;
⚠️HAVING গ্রুপ ফিল্টার করে (GROUP BY পরে)। WHERE সারি ফিল্টার করে (গ্রুপিং আগে)।
অধ্যায় ০৫
Scalar Functions — একক-মান ফাংশন
Scalar Functions প্রতিটি সারির জন্য আলাদাভাবে কাজ করে এবং প্রতিটি সারির জন্য একটি মান ফেরত দেয়। Aggregate থেকে মূল পার্থক্য — এগুলো সারি ভেঙে দেয় না।
NumericNULL HandlingCASE / DECODE
ফাংশন
বর্ণনা
উদাহরণ
ফলাফল
ABS(n)
পরম মান
ABS(-15)
15
ROUND(n,d)
নির্দিষ্ট দশমিকে পূর্ণ
ROUND(3.567,2)
3.57
TRUNC(n,d)
দশমিক কেটে ফেলা
TRUNC(3.999,1)
3.9
CEIL(n)
উপরের পূর্ণসংখ্যা
CEIL(3.2)
4
FLOOR(n)
নিচের পূর্ণসংখ্যা
FLOOR(3.9)
3
MOD(n,m)
ভাগশেষ
MOD(10,3)
1
POWER(n,p)
n এর p-তম ঘাত
POWER(2,8)
256
অধ্যায় ০৬
String Functions — টেক্সট ফাংশন
Oracle-এ অনেক শক্তিশালী স্ট্রিং ফাংশন আছে যা VARCHAR2 ও CHAR ডেটা প্রক্রিয়া করে।
💡DUAL একটি বিশেষ single-row টেবিল যা Oracle-এ expression টেস্ট করতে ব্যবহৃত হয়।
অধ্যায় ০৭
Date & Time Functions — তারিখ ও সময়
Oracle-এ DATE টাইপে তারিখ ও সময় উভয়ই সংরক্ষিত থাকে। TIMESTAMP আরও বেশি নির্ভুলতা দেয়।
ফাংশন
বর্ণনা
ফলাফল
SYSDATE
বর্তমান তারিখ + সময়
07-APR-26
SYSTIMESTAMP
উচ্চ নির্ভুলতার সময়
07-APR-26 12:30:45
ADD_MONTHS(d,n)
মাস যোগ করা
তারিখ + n মাস
MONTHS_BETWEEN
দুই তারিখের মাসের ব্যবধান
সংখ্যা
NEXT_DAY(d,day)
পরবর্তী নির্দিষ্ট বার
তারিখ
LAST_DAY(d)
মাসের শেষ দিন
30-APR-26
TRUNC(d,'MM')
মাসের প্রথম দিন
01-APR-26
EXTRACT(p FROM d)
অংশ বের করা
YEAR→2026
Date উদাহরণ
1SELECT2SYSDATEAS আজকের_তারিখ,
3ADD_MONTHS(SYSDATE, 6) AS ছয়_মাস_পরে,
4LAST_DAY(SYSDATE) AS মাসের_শেষ,
5EXTRACT(YEAR FROMSYSDATE) AS বছর,
6EXTRACT(MONTH FROMSYSDATE) AS মাস,
7MONTHS_BETWEEN(
8SYSDATE, hire_date) AS কর্মকাল_মাস,
9TO_CHAR(SYSDATE,
10'DD-MON-YYYY HH24:MI') AS ফরম্যাট_তারিখ
11FROM employees;
অধ্যায় ০৮
Conversion Functions — রূপান্তর ফাংশন
ডেটা টাইপ রূপান্তর করতে ও NULL মান সামলাতে Conversion Functions ব্যবহার করা হয়।
ফাংশন
বর্ণনা
TO_CHAR(x, fmt)
সংখ্যা/তারিখ → স্ট্রিং
TO_NUMBER(s, fmt)
স্ট্রিং → সংখ্যা
TO_DATE(s, fmt)
স্ট্রিং → তারিখ
TO_TIMESTAMP
স্ট্রিং → TIMESTAMP
NVL(x, default)
NULL হলে বিকল্প মান
NVL2(x, a, b)
NULL/NOT NULL দুটি বিকল্প
COALESCE(a,b,c…)
প্রথম non-NULL মান
NULLIF(a,b)
a=b হলে NULL ফেরায়
CAST(x AS type)
ANSI মান রূপান্তর
Conversion উদাহরণ
1-- TO_CHAR: তারিখ ফরম্যাট2SELECTTO_CHAR(SYSDATE,
3'DD/MM/YYYY') -- 07/04/20264FROM dual;
5-- TO_DATE: স্ট্রিং থেকে তারিখ6SELECTTO_DATE('15-01-2026',
7'DD-MM-YYYY')
8FROM dual;
9-- NVL ও COALESCE10SELECT11NVL(commission_pct, 0),
12NVL2(commission_pct,
13 salary * commission_pct,
140) AS কমিশন,
15COALESCE(phone, mobile,
16'যোগাযোগ নেই') AS যোগাযোগ
17FROM employees;
💡TO_CHAR-এর format mask: 'YYYY'=বছর, 'MM'=মাস, 'DD'=দিন, 'HH24'=২৪ঘন্টা, 'MI'=মিনিট, 'SS'=সেকেন্ড।
অধ্যায় ০৯
Analytic (Window) Functions — উইন্ডো ফাংশন
Analytic Functions সম্পর্কিত একটি সেটের সারির উপর গণনা করে কিন্তু GROUP BY-এর মতো সারি একত্রিত করে না। প্রতিটি সারি তার ফলাফল রাখে।
FN()OVER (PARTITION BY dept_idORDER BY salary DESCROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
1SELECT2 first_name,
3 department_id,
4 salary,
5RANK() OVER (
6PARTITION BY department_id
7ORDER BY salary DESC8 ) AS dept_rank,
9SUM(salary) OVER (
10PARTITION BY department_id
11 ) AS dept_total,
12LAG(salary, 1, 0) OVER (
13ORDER BY hire_date
14 ) AS পূর্ববর্তী_বেতন,
15ROUND(100* salary /16SUM(salary) OVER(), 2) AS শতকরা
17FROM employees
18ORDER BY department_id, dept_rank;
অধ্যায় ০৯ — ফলাফল
Window Function ফলাফল বিশ্লেষণ
নিচের ফলাফল দেখুন — কীভাবে প্রতিটি সারি আলাদা র্যাংক ও বিভাগ-ভিত্তিক মোট পাচ্ছে, তবুও কোনো সারি মুছে যাচ্ছে না।
Window Function কোয়েরির ফলাফল
FIRST_NAME
DEPT_ID
SALARY
DEPT_RANK
DEPT_TOTAL
পূর্বে_বেতন
শতকরা %
Alexander
60
9,000
1
28,800
0
31.25
Bruce
60
6,000
2
28,800
9,000
20.83
David
60
4,800
3
28,800
6,000
16.67
Valli
60
4,800
3
28,800
4,800
16.67
Diana
60
4,200
5
28,800
4,800
14.58
Nancy
100
12,000
1
51,600
4,200
23.26
💡
RANK vs DENSE_RANK: উপরে David ও Valli উভয়ের RANK=3। RANK()-এ পরেরটি হবে 5, কিন্তু DENSE_RANK()-এ হবে 4।
✓
চলমান মোট (Running Total): SUM(salary) OVER(ORDER BY hire_date) প্রতিটি সারিতে যোগফল জমা করতে থাকে।
অধ্যায় ১০
Subqueries — নেস্টেড কোয়েরি
Subquery হলো একটি কোয়েরির ভেতরে আরেকটি কোয়েরি। SELECT, WHERE, FROM, HAVING ক্লজে ব্যবহার করা যায়।
Scalar Subquery
1-- গড়ের চেয়ে বেশি বেতন পায়2SELECT first_name, salary
3FROM employees
4WHERE salary > (
5SELECTAVG(salary)
6FROM employees
7 )
8ORDER BY salary DESC;
Correlated Subquery
1-- প্রতি বিভাগের সর্বোচ্চ বেতনধারী2SELECT first_name, salary,
3 department_id
4FROM employees e
5WHERE salary = (
6SELECTMAX(salary)
7FROM employees
8WHERE department_id
9= e.department_id
10 );
১
Scalar — একটি মান ফেরায়; WHERE বা SELECT-এ ব্যবহার
২
Row — একটি সারি ফেরায়
৩
Table — একাধিক সারি; IN / ANY / ALL-এর সাথে
৪
Correlated — বাইরের কোয়েরি রেফার করে; প্রতিটি সারির জন্য চলে
৫
Inline View — FROM ক্লজে subquery, ভার্চুয়াল টেবিল হিসেবে কাজ করে
💡WITH ক্লজ (CTE) ব্যবহার করে জটিল subquery সহজে পড়ার মতো করা যায় এবং পুনরায় ব্যবহার করা যায়।
অধ্যায় ১১
DDL — CREATE, ALTER, DROP
Data Definition Language ডেটাবেজের স্ট্রাকচার নিয়ন্ত্রণ করে। Oracle-এ DDL স্বয়ংক্রিয়ভাবে COMMIT করে।