SQL ဖျော်ဖဌေရေသ ပဟေဠိမျာသ

မင်္ဂလာပါ Habr။

လေ့ကျင့်ရေသဌာနအသီသသီသတလင် SQL ကို ၃ နဟစ်ကျော် သင်ကဌာသခဲ့ပဌီသ၊ ကျလန်ုပ်၏ လေ့လာတလေ့ရဟိချက်တစ်ခုမဟာ ကျောင်သသာသမျာသသည် အလုပ်တစ်ခုကို ပေသအပ်ပါက ဖဌစ်နိုင်ခဌေမျာသနဟင့် သီအိုရီအခဌေခံအုတ်မဌစ်မျာသကို ပဌောဆိုရုံသာမကဘဲ SQL ကို ကျလမ်သကျင်ပဌီသ နာသလည်နိုင်စေရန်မဟာ ပိုမိုကောင်သမလန်ပါသည်။

ကဆောင်သပါသတလင်၊ ကျလန်ုပ်သည် ကျောင်သသာသမျာသအာသ အိမ်စာအဖဌစ် ကျလန်ုပ်ပေသသော အလုပ်မျာသစာရင်သနဟင့် SQL ကို နက်နဲရဟင်သလင်သစလာ နာသလည်နိုင်စေရန် ညသတည်သည့် ညသနဟောက်မုန်တိုင်သအမျိုသမျိုသကို လုပ်ဆောင်ပေသသည့် လုပ်ငန်သမျာသကို မျဟဝေပါမည်။

SQL ဖျော်ဖဌေရေသ ပဟေဠိမျာသ

SQL (ˈɛsˈkjuˈɛl; eng. structured query language) သည် သင့်လျော်သော ဒေတာဘေ့စ် စီမံခန့်ခလဲမဟုစနစ်ဖဌင့် စီမံခန့်ခလဲသော ဆက်စပ်ဒေတာဘေ့စ်တစ်ခုတလင် အချက်အလက်ဖန်တီသခဌင်သ၊ ပဌင်ဆင်ခဌင်သနဟင့် စီမံခန့်ခလဲရန် အသုံသပဌုသည့် ကဌေငဌာထာသသော ပရိုဂရမ်သမင်သဘာသာစကာသတစ်ခုဖဌစ်သည်။ နောက်ထပ် ...

SQL အကဌောင်သ အမျိုသမျိုသကို ဖတ်နိုင်ပါတယ်။ အရင်သအမဌစ်မျာသ.
ကဆောင်သပါသသည် သင့်အာသ SQL ကို အစမဟ သင်ကဌာသရန် ရည်ရလယ်ခဌင်သမဟုတ်ပါ။

ဒါကဌောင့်ထိုပဌည်၌သင်တို့သည်သလာသပါ။

လူသိကိုသုံသမယ်။ HR အစီအစဉ် Oracle တလင် ၎င်သ၏ဇယာသမျာသ (ပိုမျာသသော):

SQL ဖျော်ဖဌေရေသ ပဟေဠိမျာသ
ကျလန်ုပ်တို့သည် SELECT တလင် လုပ်ဆောင်စရာမျာသကိုသာ ထည့်သလင်သစဉ်သစာသမည်ကို ကျလန်ုပ်သတိပဌုမိပါသည်။ DML နဟင့် DDL တလင် လုပ်ဆောင်စရာမျာသ မရဟိပါ။

တာဝန်မျာသကို

ကန့်သတ်ခဌင်သနဟင့် ဒေတာစီခဌင်သ

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သအာသလုံသ၏ အချက်အလက်ပါရဟိသော စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT * FROM employees

ဝန်ထမ်သစာသပလဲ။ 'David' အမည်ရဟိ ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE first_name = 'David';

ဝန်ထမ်သစာသပလဲ။ 'IT_PROG' နဟင့် ညီမျဟသော job_id ရဟိသော ဝန်ထမ်သမျာသအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

ဝန်ထမ်သစာသပလဲ။ လစာ (လစာ) 50 ထက်မျာသသော ဌာန 4000 (department_id) မဟ ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE department_id = 50 AND salary > 4000;

ဝန်ထမ်သစာသပလဲ။ 20th နဟင့် 30th ဌာန (department_id) မဟ ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE department_id = 20 OR department_id = 30;

ဝန်ထမ်သစာသပလဲ။ ၎င်သတို့၏အမည် နောက်ဆုံသစာလုံသ 'a' ရဟိသော ဝန်ထမ်သမျာသအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE first_name LIKE '%a';

ဝန်ထမ်သစာသပလဲ။ ဘောနပ်စ်တစ်ခုရရဟိသော 50th နဟင့် 80th ဌာန (department_id) မဟ ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ (ကော်မရဟင်_pct ကော်လံရဟိ တန်ဖိုသသည် ဗလာမဟုတ်ပါ)
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE     (department_id = 50 OR department_id = 80)
       AND commission_pct IS NOT NULL;

ဝန်ထမ်သစာသပလဲ။ အနည်သဆုံသ 'n' စာလုံသ 2 လုံသပါရဟိသော အမည်ရဟိသော ဝန်ထမ်သမျာသအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE first_name LIKE '%n%n%';

ဝန်ထမ်သစာသပလဲ။ အမည် စာလုံသ 4 လုံသထက် ပိုရဟည်သော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE first_name LIKE '%_____%';

ဝန်ထမ်သစာသပလဲ။ လစာ 8000 နဟင့် 9000 ကဌာသရဟိသော ဝန်ထမ်သမျာသအာသလုံသ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

ဝန်ထမ်သစာသပလဲ။ အမည် '%' သင်္ကေတပါရဟိသော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE first_name LIKE '%%%' ESCAPE '';

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာ ID မျာသအာသလုံသ၏စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

ဝန်ထမ်သစာသပလဲ။ ဖော်မတ်- Donald(sh_clerk)၊
ဆုံသဖဌတ်ချက်

SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;

Output ကိုစိတ်ကဌိုက်ပဌင်ဆင်ရန် Single-Row Functions ကိုအသုံသပဌုခဌင်သ။

ဝန်ထမ်သစာသပလဲ။ အမည် စာလုံသ 10 လုံသထက် ပိုရဟည်သော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE LENGTH (first_name) > 10;

ဝန်ထမ်သစာသပလဲ။ ၎င်သတို့၏အမည်တလင် အက္ခရာ 'b' ပါသော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ (အသေသစိတ်မပါသော)
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name), 'b') > 0;

ဝန်ထမ်သစာသပလဲ။ အနည်သဆုံသ 'a' စာလုံသ 2 လုံသပါရဟိသော အမည်ရဟိသော ဝန်ထမ်သမျာသအာသလုံသ၏ စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name),'a',1,2) > 0;

ဝန်ထမ်သစာသပလဲ။ လစာ 1000 နဟင့် ပေါင်သထာသသော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE MOD (salary, 1000) = 0;

ဝန်ထမ်သစာသပလဲ။ ၎င်သ၏နံပါတ်ဖော်မက်တလင် ХХХ.ХХХ.ХХХХ ဝန်ထမ်သ၏ဖုန်သနံပါတ်၏ ပထမဂဏန်သ 3 လုံသနံပါတ်ကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
  FROM employees
 WHERE phone_number LIKE '___.___.____';

ဌာနဆိုင်ရာဇယာသ။ အမည်တလင် စကာသလုံသတစ်လုံသထက်ပိုသောသူမျာသအတလက် ဌာနအမည်မဟ ပထမဆုံသစကာသလုံသကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT department_name,
       SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
           first_word
  FROM departments
 WHERE INSTR (department_name, ' ') > 0;

ဝန်ထမ်သစာသပလဲ။ နာမည်တလင် ပထမနဟင့် နောက်ဆုံသစာလုံသမပါဘဲ ဝန်ထမ်သအမည်မျာသကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
  FROM employees;

ဝန်ထမ်သစာသပလဲ။ အမည်၏နောက်ဆုံသစာလုံသ 'm' နဟင့်ညီမျဟသည့် ဝန်ထမ်သအာသလုံသ၏စာရင်သကို ရယူပဌီသ အမည်၏အရဟည်သည် 5 ထက်ကဌီသသည်
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;

စာသပလဲနဟစ်လုံသ။ လာမည့်သောကဌာနေ့ကိုရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;

ဝန်ထမ်သစာသပလဲ။ ကုမ္ပဏီတလင် 17 နဟစ်ကျော်နေထိုင်ခဲ့သော ဝန်ထမ်သအာသလုံသ၏ စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;

ဝန်ထမ်သစာသပလဲ။ ဖုန်သနံပါတ်၏နောက်ဆုံသဂဏန်သသည် ထူသဆန်သပဌီသ အစက်တစ်ခုခဌာသထာသသော နံပါတ် 3 ပါ၀င်သည့် ဝန်ထမ်သမျာသအာသလုံသ၏စာရင်သကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE     MOD (SUBSTR (phone_number, -1), 2) != 0
       AND INSTR (phone_number,'.',1,3) = 0;

ဝန်ထမ်သစာသပလဲ။ '_' ဆိုင်သဘုတ်နောက်တလင် အနည်သဆုံသ စာလုံသ 3 လုံသပါသည့် job_id တန်ဖိုသရဟိသော ဝန်ထမ်သမျာသ၏စာရင်သကို ရယူပါ၊ သို့သော် '_' ပဌီသနောက် ကတန်ဖိုသသည် 'CLERK' နဟင့် မညီမျဟပါ
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE     LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
       AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';

ဝန်ထမ်သစာသပလဲ။ PHONE_NUMBER တန်ဖိုသတလင် '.' အာသလုံသကို အစာသထိုသခဌင်သဖဌင့် ဝန်ထမ်သအာသလုံသ၏စာရင်သကို ရယူပါ။ '-'
ဆုံသဖဌတ်ချက်

SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
  FROM employees;

Conversion Functions နဟင့် Conditional Expressions ကိုအသုံသပဌုခဌင်သ။

ဝန်ထမ်သစာသပလဲ။ လ၏ပထမနေ့တလင် အလုပ်လာလုပ်သော ဝန်ထမ်သအာသလုံသ (မည်သူမဆို) စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'DD') = '01';

ဝန်ထမ်သစာသပလဲ။ 2008 တလင် အလုပ်လာလုပ်သော ဝန်ထမ်သစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'YYYY') = '2008';

DUAL စာသပလဲ။ မနက်ဖဌန်၏ရက်စလဲကို ဖော်မက်ဖဌင့် ပဌပါ- မနက်ဖဌန်သည် ဇန်နဝါရီလ၏ ဒုတိယမဌောက်နေ့ဖဌစ်သည်။
ဆုံသဖဌတ်ချက်

SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month')     info
  FROM DUAL;

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သအာသလုံသ၏စာရင်သနဟင့် ၎င်သတို့၏စတင်မည့်ရက်စလဲကို ဖော်မတ်- ဇလန်လ 21 ရက်၊ 2007 ခုနဟစ်တလင် ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
  FROM employees;

ဝန်ထမ်သစာသပလဲ။ လစာ 20% တိုသမဌဟင့်ထာသသော ဝန်ထမ်သစာရင်သကို ရယူပါ။ ဒေါ်လာဈေသဖဌင့် လစာပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
  FROM employees;

ဝန်ထမ်သစာသပလဲ။ ၂၀၀၇ ခုနဟစ် ဖေဖေါ်ဝါရီလတလင် အလုပ်လာလုပ်သော ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
                     AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));

SELECT *
  FROM employees
 WHERE to_char(hire_date,'MM.YYYY') = '02.2007'; 

DUAL စာသပလဲ။ လက်ရဟိရက်စလဲ၊ + ဒုတိယ၊ + မိနစ်၊ + နာရီ၊ + နေ့၊ + လ၊ + နဟစ်ကို ထုတ်ယူပါ။
ဆုံသဖဌတ်ချက်

SELECT SYSDATE                          now,
       SYSDATE + 1 / (24 * 60 * 60)     plus_second,
       SYSDATE + 1 / (24 * 60)          plus_minute,
       SYSDATE + 1 / 24                 plus_hour,
       SYSDATE + 1                      plus_day,
       ADD_MONTHS (SYSDATE, 1)          plus_month,
       ADD_MONTHS (SYSDATE, 12)         plus_year
  FROM DUAL;

ဝန်ထမ်သစာသပလဲ။ လစာအပဌည့် (လစာ + commission_pct(%)) ဖော်မတ်- $24,000.00 ဖဌင့် ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
  FROM employees;

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သအာသလုံသ၏စာရင်သနဟင့် လစာဘောနပ်စ်ရရဟိနိုင်မဟုဆိုင်ရာ အချက်အလက်ကို ရယူပါ (Yes/No)
ဆုံသဖဌတ်ချက်

SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
  FROM employees;

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သတစ်ညသစီ၏ လစာအဆင့်ကို ရယူပါ- 5000 အောက်ကို အနိမ့်အဆင့်ဟု သတ်မဟတ်သည်၊ 5000 ထက် ကဌီသသည် သို့မဟုတ် ညီသည်၊ 10000 အောက်ကို ပုံမဟန်အဆင့်ဟု သတ်မဟတ်သည်၊ 10000 ထက် ကဌီသသည် သို့မဟုတ် ညီသည် High level ဟု သတ်မဟတ်သည်
ဆုံသဖဌတ်ချက်

SELECT first_name,
       salary,
       CASE
           WHEN salary < 5000 THEN 'Low'
           WHEN salary >= 5000 AND salary < 10000 THEN 'Normal'
           ELSE 'High'
       END salary_level
  FROM employees;

နိုင်ငံမျာသဇယာသ။ နိုင်ငံတစ်ခုစီအတလက်၊ ၎င်သတည်ရဟိရာဒေသကို ပဌသပါ- ၁-ဥရောပ၊ ၂-အမေရိက၊ ၃-အာရဟ၊ ၄-အာဖရိက (မပူသပေါင်သဘဲ)
ဆုံသဖဌတ်ချက်

SELECT country_name country,
       DECODE (region_id,
               1, 'Europe',
               2, 'America',
               3, 'Asia',
               4, 'Africa',
               'Unknown')
           region
  FROM countries;

SELECT country_name
           country,
       CASE region_id
           WHEN 1 THEN 'Europe'
           WHEN 2 THEN 'America'
           WHEN 3 THEN 'Asia'
           WHEN 4 THEN 'Africa'
           ELSE 'Unknown'
       END
           region
  FROM countries;

Group Functions ကိုအသုံသပဌု၍ စုစည်သထာသသောဒေတာကို အစီရင်ခံခဌင်သ။

ဝန်ထမ်သစာသပလဲ။ အနိမ့်ဆုံသနဟင့် အမျာသဆုံသလစာ၊ အစောပိုင်သနဟင့် နောက်ကျရောက်ရဟိမည့်ရက်စလဲနဟင့် ဝန်ထမ်သအရေအတလက်တို့နဟင့်အတူ department_id မဟ အစီရင်ခံစာကို ရယူပါ။ ဝန်ထမ်သအရေအတလက်အလိုက်စီပါ (desc)
ဆုံသဖဌတ်ချက်

  SELECT department_id,
         MIN (salary) min_salary,
         MAX (salary) max_salary,
         MIN (hire_date) min_hire_date,
         MAX (hire_date) max_hire_Date,
         COUNT (*) count
    FROM employees
GROUP BY department_id
order by count(*) desc;

ဝန်ထမ်သစာသပလဲ။ တူညီသောအက္ခရာဖဌင့် နံမည်စသည့် ဝန်ထမ်သမည်မျဟရဟိသနည်သ။ အရေအတလက်အလိုက် စီပါ။ နံပါတ် 1 ထက်ကဌီသသောသူမျာသကိုသာ ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*)
    FROM employees
GROUP BY SUBSTR (first_name, 1, 1)
  HAVING COUNT (*) > 1
ORDER BY 2 DESC;

ဝန်ထမ်သစာသပလဲ။ တူညီသောဌာနတလင် ဝန်ထမ်သမည်မျဟအလုပ်လုပ်ပဌီသ တူညီသောလစာကို ရရဟိမည်နည်သ။
ဆုံသဖဌတ်ချက်

SELECT department_id, salary, COUNT (*)
    FROM employees
GROUP BY department_id, salary
  HAVING COUNT (*) > 1;

ဝန်ထမ်သစာသပလဲ။ ရက်သတ္တပတ်တစ်ရက်လျဟင် ဝန်ထမ်သမည်မျဟ ခန့်အပ်ကဌောင်သ အစီရင်ခံစာကို ရယူပါ။ အရေအတလက်အလိုက် စီပါ။
ဆုံသဖဌတ်ချက်

SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;

ဝန်ထမ်သစာသပလဲ။ တစ်နဟစ်လျဟင် ဝန်ထမ်သမည်မျဟ ခန့်အပ်ခံရကဌောင်သ အစီရင်ခံစာကို ရယူပါ။ အရေအတလက်အလိုက် စီပါ။
ဆုံသဖဌတ်ချက်

SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သပါသော ဌာနအရေအတလက်ကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT COUNT (COUNT (*))     department_count
    FROM employees
   WHERE department_id IS NOT NULL
GROUP BY department_id;

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သ 30 ကျော်နဟင့်အတူ department_id စာရင်သကိုရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (*) > 30;

ဝန်ထမ်သစာသပလဲ။ Department_ids စာရင်သနဟင့် ဌာနတစ်ခုစီရဟိ ဝန်ထမ်သမျာသ၏ ပျမ်သမျဟလစာကို ရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT department_id, ROUND (AVG (salary)) avg_salary
    FROM employees
GROUP BY department_id;

နိုင်ငံမျာသဇယာသ။ 60 ကျော်ရဟိသည့် country_name အာသလုံသ၏ စာလုံသအာသလုံသ၏ region_id ပေါင်သစုစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT region_id
    FROM countries
GROUP BY region_id
  HAVING SUM (LENGTH (country_name)) > 60;

ဝန်ထမ်သစာသပလဲ။ (>1) job_id အမျာသအပဌာသ အလုပ်လုပ်သော ဝန်ထမ်သမျာသအတလက် ဌာန_id စာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (DISTINCT job_id) > 1;

ဝန်ထမ်သစာသပလဲ။ လက်အောက်ငယ်သာသအရေအတလက် 5 ထက်မျာသသော မန်နေဂျာ_id စာရင်သကို ရယူပဌီသ လက်အောက်ငယ်သာသမျာသ၏ လစာအာသလုံသ 50000 ထက် ပိုကဌီသသည်
ဆုံသဖဌတ်ချက်

  SELECT manager_id
    FROM employees
GROUP BY manager_id
  HAVING COUNT (*) > 5 AND SUM (salary) > 50000;

ဝန်ထမ်သစာသပလဲ။ ဘောနပ်စ်မရရဟိသော သူ၏လက်အောက်ငယ်သာသအာသလုံသ၏ ပျမ်သမျဟလစာ 6000 နဟင့် 9000 ကဌာသရဟိသော manager_id စာရင်သကို ရယူပါ (commission_pct သည် ဗလာဖဌစ်သည်)
ဆုံသဖဌတ်ချက်

  SELECT manager_id, AVG (salary) avg_salary
    FROM employees
   WHERE commission_pct IS NULL
GROUP BY manager_id
  HAVING AVG (salary) BETWEEN 6000 AND 9000;

ဝန်ထမ်သစာသပလဲ။ 'CLERK' ဟူသောစကာသလုံသဖဌင့်အဆုံသသတ်သော ဝန်ထမ်သမျာသအာသလုံသမဟ အမဌင့်ဆုံသလစာကို ရယူပါ
ဆုံသဖဌတ်ချက်

SELECT MAX (salary) max_salary
  FROM employees
 WHERE job_id LIKE '%CLERK';

SELECT MAX (salary) max_salary
  FROM employees
 WHERE SUBSTR (job_id, -5) = 'CLERK';

ဝန်ထမ်သစာသပလဲ။ ဌာနအတလက် ပျမ်သမျဟလစာအာသလုံသတလင် အမျာသဆုံသလစာကို ရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT MAX (AVG (salary))
    FROM employees
GROUP BY department_id;

ဝန်ထမ်သစာသပလဲ။ ၎င်သတို့၏အမည်ဖဌင့် တူညီသော စာလုံသအရေအတလက်နဟင့် ဝန်ထမ်သအရေအတလက်ကို ရယူပါ။ တစ်ချိန်တည်သတလင်၊ 5 ထက်ရဟည်သောအမည်မျာသကိုသာပဌသပဌီသ တူညီသောအမည်ရဟိ ဝန်ထမ်သအရေအတလက်သည် 20 ကျော်ရဟိသည်။ အမည်အရဟည်ဖဌင့်စီရန်
ဆုံသဖဌတ်ချက်

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
GROUP BY LENGTH (first_name)
  HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20
ORDER BY LENGTH (first_name);

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
   WHERE LENGTH (first_name) > 5
GROUP BY LENGTH (first_name)
  HAVING COUNT (*) > 20
ORDER BY LENGTH (first_name);

Joins ကိုအသုံသပဌုပဌီသ Multiple Tables မဟ Data ကိုပဌသခဌင်သ။

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ၊ တည်နေရာမျာသ၊ နိုင်ငံမျာသ၊ တိုင်သဒေသကဌီသမျာသ။ တိုင်သဒေသကဌီသစာရင်သနဟင့် ဒေသတစ်ခုစီရဟိ ဝန်ထမ်သအရေအတလက်ကို ရယူပါ။
ဆုံသဖဌတ်ချက်

  SELECT region_name, COUNT (*)
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
         JOIN countries c ON (l.country_id = c.country_id)
         JOIN regions r ON (c.region_id = r.region_id)
GROUP BY region_name;

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ၊ တည်နေရာမျာသ၊ နိုင်ငံမျာသ၊ တိုင်သဒေသကဌီသမျာသ။ ဝန်ထမ်သတစ်ညသစီ၏ အသေသစိတ်အချက်အလက်မျာသကို ရယူပါ-
First_name၊ Last_name၊ ဌာန၊ အလုပ်၊ လမ်သ၊ နိုင်ငံ၊ ဒေသ
ဆုံသဖဌတ်ချက်

SELECT First_name,
       Last_name,
       Department_name,
       Job_id,
       street_address,
       Country_name,
       Region_name
  FROM employees  e
       JOIN departments d ON (e.department_id = d.department_id)
       JOIN locations l ON (d.location_id = l.location_id)
       JOIN countries c ON (l.country_id = c.country_id)
       JOIN regions r ON (c.region_id = r.region_id);

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သ ၆ ညသထက်ပိုသော မန်နေဂျာအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

  SELECT man.first_name, COUNT (*)
    FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
GROUP BY man.first_name
  HAVING COUNT (*) > 6;

ဝန်ထမ်သစာသပလဲ။ ဘယ်သူ့ကိုမဟ သတင်သမပို့တဲ့ ဝန်ထမ်သအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT emp.first_name
  FROM employees  emp
       LEFT JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE man.FIRST_NAME IS NULL;

SELECT first_name
  FROM employees
 WHERE manager_id IS NULL;

ဝန်ထမ်သဇယာသ၊ Job_history။ Employee table သည် ဝန်ထမ်သမျာသအာသလုံသကို သိမ်သဆည်သထာသသည်။ Job_history table သည် ကုမ္ပဏီမဟ ထလက်သလာသသော ဝန်ထမ်သမျာသကို သိမ်သဆည်သထာသသည်။ ကုမ္ပဏီရဟိဝန်ထမ်သမျာသအာသလုံသနဟင့် ၎င်သတို့၏အခဌေအနေဆိုင်ရာ အစီရင်ခံစာကိုရယူပါ (အလုပ်ထလက်ချိန် သို့မဟုတ် ကုမ္ပဏီမဟထလက်ခလာသည့်နေ့စလဲဖဌင့်)
ဥပမာ:
first_name | အခဌေအနေ
ဂျနီဖာ | ၂၀၀၆ ဒီဇင်ဘာ ၃၁ တလင် ကုမ္ပဏီမဟ ထလက်ခလာခဲ့သည်။
Clara | လက်ရဟိအလုပ်လုပ်နေပါတယ်။
ဆုံသဖဌတ်ချက်

SELECT first_name,
       NVL2 (
           end_date,
           TO_CHAR (end_date, 'fm""Left the company at"" DD ""of"" Month, YYYY'),
           'Currently Working')
           status
  FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ၊ တည်နေရာမျာသ၊ နိုင်ငံမျာသ၊ တိုင်သဒေသကဌီသမျာသ။ ဥရောပတလင်နေထိုင်သော ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ (ဒေသ_အမည်)
ဆုံသဖဌတ်ချက်

 SELECT first_name
  FROM employees
       JOIN departments USING (department_id)
       JOIN locations USING (location_id)
       JOIN countries USING (country_id)
       JOIN regions USING (region_id)
 WHERE region_name = 'Europe';
 
 SELECT first_name
  FROM employees  e
       JOIN departments d ON (e.department_id = d.department_id)
       JOIN locations l ON (d.location_id = l.location_id)
       JOIN countries c ON (l.country_id = c.country_id)
       JOIN regions r ON (c.region_id = r.region_id)
 WHERE region_name = 'Europe';

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ။ ဝန်ထမ်သ 30 ကျော်ရဟိသောဌာနအာသလုံသကိုပဌသပါ။
ဆုံသဖဌတ်ချက်

SELECT department_name, COUNT (*)
    FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
  HAVING COUNT (*) > 30;

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ။ မည်သည့်ဌာနမဟမဟုတ်သော ဝန်ထမ်သမျာသအာသလုံသကို ပဌသပါ။
ဆုံသဖဌတ်ချက်

SELECT first_name
  FROM employees  e
       LEFT JOIN departments d ON (e.department_id = d.department_id)
 WHERE d.department_name IS NULL;

SELECT first_name
  FROM employees
 WHERE department_id IS NULL;

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ။ ဝန်ထမ်သမရဟိသော ဌာနအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT department_name
  FROM employees  e
       RIGHT JOIN departments d ON (e.department_id = d.department_id)
 WHERE first_name IS NULL;

ဝန်ထမ်သစာသပလဲ။ လက်အောက်ငယ်သာသမရဟိသော ဝန်ထမ်သမျာသအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT man.first_name
  FROM employees  emp
       RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE emp.FIRST_NAME IS NULL;

ဇယာသဝန်ထမ်သမျာသ၊ အလုပ်မျာသ၊ ဌာနမျာသ။ ဖော်မတ်တလင် ဝန်ထမ်သမျာသကို ပဌပါ- First_name၊ Job_title၊ Department_name။
ဥပမာ:
first_name | အလုပ်ခေါင်သစဉ် | ဌာန_အမည်
ဒေါ်နယ် | ပို့ဆောင်ခဌင်သ | စာရေသသင်္ဘော
ဆုံသဖဌတ်ချက်

SELECT first_name, job_title, department_name
  FROM employees  e
       JOIN jobs j ON (e.job_id = j.job_id)
       JOIN departments d ON (d.department_id = e.department_id);

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာမျာသသည် ၂၀၀၅ ခုနဟစ်တလင် အလုပ်ရခဲ့သော ဝန်ထမ်သမျာသစာရင်သကို ရယူခဲ့သော်လည်သ တစ်ချိန်တည်သတလင် အဆိုပါ အလုပ်သမာသမျာသကိုယ်တိုင် ၂၀၀၅ ခုနဟစ်မတိုင်မီ အလုပ်ရခဲ့သည်။
ဆုံသဖဌတ်ချက်

SELECT emp.*
  FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE     TO_CHAR (man.hire_date, 'YYYY') = '2005'
       AND emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာမျာသသည် မည်သည့်နဟစ်၏ ဇန်န၀ါရီလတလင် အလုပ်ရထာသသော ဝန်ထမ်သမျာသစာရင်သကို ရယူပဌီသ အဆိုပါဝန်ထမ်သမျာသ၏ အလုပ်ခေါင်သစဉ်အရဟည်မဟာ စာလုံသရေ 15 လုံသထက် ပိုပါသည်။
ဆုံသဖဌတ်ချက်

SELECT emp.*
  FROM employees  emp
       JOIN employees man ON (emp.manager_id = man.employee_id)
       JOIN jobs j ON (emp.job_id = j.job_id)
 WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) > 15;

မေသခလန်သမျာသကိုဖဌေရဟင်သရန် Subqueries ကိုအသုံသပဌုခဌင်သ။

ဝန်ထမ်သစာသပလဲ။ နာမည်အရဟည်ဆုံသ ဝန်ထမ်သစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE LENGTH (first_name) =
       (SELECT MAX (LENGTH (first_name)) FROM employees);

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သအာသလုံသ၏ ပျမ်သမျဟလစာထက် လစာပိုမျာသသော ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE salary > (SELECT AVG (salary) FROM employees);

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ၊ နေရာမျာသ။ ဝန်ထမ်သမျာသ စုစုပေါင်သ အနည်သဆုံသဝင်ငလေရဟိသည့်မဌို့ကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT city
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city
  HAVING SUM (salary) =
         (  SELECT MIN (SUM (salary))
              FROM employees e
                   JOIN departments d ON (e.department_id = d.department_id)
                   JOIN locations l ON (d.location_id = l.location_id)
          GROUP BY city);

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာလစာ 15000 အထက်ရရဟိသော ဝန်ထမ်သမျာသစာရင်သကို ရယူပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE manager_id IN (SELECT employee_id
                        FROM employees
                       WHERE salary > 15000)

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ။ ဝန်ထမ်သမရဟိသော ဌာနအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM departments
 WHERE department_id NOT IN (SELECT department_id
                               FROM employees
                              WHERE department_id IS NOT NULL);

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာမဟုတ်သော ဝန်ထမ်သမျာသအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE employee_id NOT IN (SELECT manager_id
                             FROM employees
                            WHERE manager_id IS NOT NULL)

ဝန်ထမ်သစာသပလဲ။ ဝန်ထမ်သ ၆ ညသထက်ပိုသော မန်နေဂျာအာသလုံသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees e
 WHERE (SELECT COUNT (*)
          FROM employees
         WHERE manager_id = e.employee_id) > 6;

ဇယာသဝန်ထမ်သမျာသ၊ ဌာနမျာသ။ IT ဌာနတလင် အလုပ်လုပ်သော ဝန်ထမ်သမျာသကို ပဌပါ။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE department_id = (SELECT department_id
                          FROM departments
                         WHERE department_name = 'IT');

ဇယာသဝန်ထမ်သမျာသ၊ အလုပ်မျာသ၊ ဌာနမျာသ။ ဖော်မတ်တလင် ဝန်ထမ်သမျာသကို ပဌပါ- First_name၊ Job_title၊ Department_name။
ဥပမာ:
first_name | အလုပ်ခေါင်သစဉ် | ဌာန_အမည်
ဒေါ်နယ် | ပို့ဆောင်ခဌင်သ | စာရေသသင်္ဘော
ဆုံသဖဌတ်ချက်

SELECT first_name,
       (SELECT job_title
          FROM jobs
         WHERE job_id = e.job_id)
           job_title,
       (SELECT department_name
          FROM departments
         WHERE department_id = e.department_id)
           department_name
  FROM employees e;

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာမျာသသည် ၂၀၀၅ ခုနဟစ်တလင် အလုပ်ရခဲ့သော ဝန်ထမ်သမျာသစာရင်သကို ရယူခဲ့သော်လည်သ တစ်ချိန်တည်သတလင် အဆိုပါ အလုပ်သမာသမျာသကိုယ်တိုင် ၂၀၀၅ ခုနဟစ်မတိုင်မီ အလုပ်ရခဲ့သည်။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees
 WHERE     manager_id IN (SELECT employee_id
                            FROM employees
                           WHERE TO_CHAR (hire_date, 'YYYY') = '2005')
       AND hire_date < TO_DATE ('01012005', 'DDMMYYYY');

ဝန်ထမ်သစာသပလဲ။ မန်နေဂျာမျာသသည် မည်သည့်နဟစ်၏ ဇန်န၀ါရီလတလင် အလုပ်ရထာသသော ဝန်ထမ်သမျာသစာရင်သကို ရယူပဌီသ အဆိုပါဝန်ထမ်သမျာသ၏ အလုပ်ခေါင်သစဉ်အရဟည်မဟာ စာလုံသရေ 15 လုံသထက် ပိုပါသည်။
ဆုံသဖဌတ်ချက်

SELECT *
  FROM employees e
 WHERE     manager_id IN (SELECT employee_id
                            FROM employees
                           WHERE TO_CHAR (hire_date, 'MM') = '01')
       AND (SELECT LENGTH (job_title)
              FROM jobs
             WHERE job_id = e.job_id) > 15;

လောလောဆယ်တော့ ဒီလောက်ပါပဲ။

အလုပ်တလေက စိတ်ဝင်စာသဖို့ကောင်သပဌီသ စိတ်လဟုပ်ရဟာသစရာကောင်သမယ်လို့ မျဟော်လင့်ပါတယ်။
ဒီစာရင်သထဲကို တတ်နိုင်သမျဟ ထည့်မယ်။
မဟတ်ချက်မျာသနဟင့် အကဌံပဌုချက်မျာသကိုလည်သ ဝမ်သမဌောက်မိပါသည်။

PS: SELECT တလင် စိတ်ဝင်စာသစရာကောင်သသော အလုပ်တစ်ခု ပေါ်လာပါက၊ မဟတ်ချက်မျာသတလင် ရေသပေသပါ၊ ၎င်သကို စာရင်သတလင် ထည့်သလင်သပါမည်။

သငျသညျကိုကျေသဇူသတင်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add