ایس کیو ایل۔ دل لگی پہیلیاں

ہیلو، حبر!

اب میں 3 سال سے زیادہ عرصے سے مختلف تربیتی مراکز میں SQL پڑھا رہا ہوں، اور میرے مشاہدے میں سے ایک یہ ہے کہ اگر طلباء کو کوئی کام دیا جائے تو وہ SQL کو بہتر طریقے سے سیکھتے ہیں اور سمجھتے ہیں، نہ کہ صرف امکانات اور نظریاتی بنیادوں کے بارے میں بتایا جاتا ہے۔

اس مضمون میں، میں آپ کے ساتھ اپنے مسائل کی فہرست شیئر کروں گا جو میں طلباء کو ہوم ورک کے طور پر دیتا ہوں اور جن پر ہم مختلف قسم کے دماغی طوفان کرتے ہیں، جو SQL کی گہری اور واضح تفہیم کا باعث بنتے ہیں۔

ایس کیو ایل۔ دل لگی پہیلیاں

ایس کیو ایل (ˈɛsˈkjuˈɛl؛ انگلش اسٹرکچرڈ استفسار کی زبان) ایک اعلانیہ پروگرامنگ زبان ہے جو ایک مناسب ڈیٹا بیس مینجمنٹ سسٹم کے زیر انتظام متعلقہ ڈیٹا بیس میں ڈیٹا بنانے، اس میں ترمیم کرنے اور اس کا نظم کرنے کے لیے استعمال ہوتی ہے۔ مزید معلومات حاصل کریں

آپ مختلف سے ایس کیو ایل کے بارے میں پڑھ سکتے ہیں۔ ذرائع.
اس مضمون کا مقصد آپ کو شروع سے SQL سکھانا نہیں ہے۔

تو، چلتے ہیں.

ہم معروف استعمال کریں گے۔ HR خاکہ اوریکل میں اس کی میزوں کے ساتھ (مزید):

ایس کیو ایل۔ دل لگی پہیلیاں
میں نوٹ کرتا ہوں کہ ہم صرف SELECT کاموں پر غور کریں گے۔ یہاں کوئی DML یا DDL کام نہیں ہیں۔

ٹاسکس

ڈیٹا کو محدود کرنا اور چھانٹنا

ملازمین کی میز۔ تمام ملازمین کے بارے میں معلومات کے ساتھ ایک فہرست حاصل کریں۔
حل

SELECT * FROM employees

ملازمین کی میز۔ 'ڈیوڈ' نام کے تمام ملازمین کی فہرست حاصل کریں
حل

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;

ملازمین کی میز۔ 20 ویں اور 30 ​​ویں ڈیپارٹمنٹ سے تمام ملازمین کی فہرست حاصل کریں (department_id)
حل

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

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے نام کا آخری حرف 'a' ہے
حل

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

ملازمین کی میز۔ 50ویں اور 80ویں ڈپارٹمنٹ (department_id) کے تمام ملازمین کی فہرست حاصل کریں جن کے پاس بونس ہے (کمیشن_پی سی ٹی کالم میں قیمت خالی نہیں ہے)
حل

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

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے ناموں میں کم از کم 2 حروف 'n' ہوں
حل

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 '';

ملازمین کی میز۔ تمام مینیجر IDs کی فہرست حاصل کریں۔
حل

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

ملازمین کی میز۔ فارمیٹ میں ان کے عہدوں کے ساتھ ملازمین کی فہرست حاصل کریں: Donald(sh_clerk)
حل

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

آؤٹ پٹ کو حسب ضرورت بنانے کے لیے سنگل-رو فنکشنز کا استعمال

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے نام 10 حروف سے زیادہ لمبے ہیں۔
حل

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

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے نام میں حرف 'b' ہے (کیس غیر حساس)
حل

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

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے ناموں میں کم از کم 2 حروف 'a' ہوں
حل

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

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کی تنخواہ 1000 سے زیادہ ہے۔
حل

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

ملازمین کی میز۔ کسی ملازم کے فون نمبر کا پہلا 3 ہندسوں والا نمبر حاصل کریں اگر اس کا نمبر XXX.XXX.XXXX فارمیٹ میں ہے
حل

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;

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جن کے '_' نشان کے بعد job_id کی قدر میں کم از کم 3 حروف ہیں، لیکن '_' کے بعد یہ قدر '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;

تبادلوں کے افعال اور مشروط اظہار کا استعمال

ملازمین کی میز۔ ان تمام ملازمین کی فہرست حاصل کریں جو مہینے کے پہلے دن کام پر آئے تھے (کوئی بھی)
حل

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;

ملازمین کی میز۔ فروری 2007 میں کام کرنے والے تمام ملازمین کی فہرست حاصل کریں۔
حل

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;

ملازمین کی میز۔ مکمل تنخواہ کے ساتھ تمام ملازمین کی فہرست حاصل کریں (تنخواہ + کمیشن_pct(%)) فارمیٹ میں: $24,000.00
حل

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

ملازمین کی میز۔ تمام ملازمین کی فہرست اور تنخواہ کے بونس کی دستیابی کے بارے میں معلومات حاصل کریں (ہاں/نہیں)
حل

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

ملازمین کی میز۔ ہر ملازم کی تنخواہ کی سطح حاصل کریں: 5000 سے کم کو نچلی سطح سمجھا جاتا ہے، 5000 سے زیادہ یا اس کے برابر اور 10000 سے کم کو نارمل لیول سمجھا جاتا ہے، 10000 سے زیادہ یا اس کے برابر کو ہائی لیول سمجھا جاتا ہے۔
حل

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;

ٹیبل ممالک۔ ہر ملک کے لیے، وہ خطہ دکھائیں جس میں یہ واقع ہے: 1-یورپ، 2-امریکہ، 3-ایشیا، 4-افریقہ (بغیر شمولیت کے)
حل

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;

گروپ کے افعال کا استعمال کرتے ہوئے مجموعی ڈیٹا کی اطلاع دینا

ملازمین کی میز۔ کم از کم اور زیادہ سے زیادہ تنخواہ، کام پر پہنچنے کی ابتدائی اور دیر سے تاریخوں اور ملازمین کی تعداد کے ساتھ ڈپارٹمنٹ_آئی ڈی کے ذریعے رپورٹ حاصل کریں۔ ملازمین کی تعداد کے لحاظ سے ترتیب دیں (نزولی)
حل

  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 سے ​​زیادہ ملازمین ہیں۔
حل

  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;

ٹیبل ممالک۔ فہرست کا علاقہ_id تمام ملک_ناموں کے تمام حروف کا مجموعہ حاصل کریں جن میں 60 سے زیادہ ہیں
حل

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

ملازمین کی میز۔ Department_ids کی ایک فہرست حاصل کریں جس میں کئی (>1) job_ids کے ملازمین کام کرتے ہیں۔
حل

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

ملازمین کی میز۔ مینیجر_آئی ڈیز کی فہرست حاصل کریں جن کے ماتحتوں کی تعداد 5 سے زیادہ ہے اور اس کے ماتحتوں کی تمام تنخواہوں کا مجموعہ 50000 سے زیادہ ہے۔
حل

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

ملازمین کی میز۔ مینیجر_آئی ڈیز کی فہرست حاصل کریں جن کے تمام ماتحتوں کی اوسط تنخواہ 6000 سے 9000 کے درمیان ہے اور جنہیں بونس نہیں ملتا (کمیشن_پی سی ٹی خالی ہے)
حل

  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;

ملازمین کی میز۔ تمام ملازمین سے زیادہ سے زیادہ تنخواہ حاصل کریں job_id جو لفظ '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);

جوائنز کا استعمال کرتے ہوئے متعدد ٹیبلز سے ڈیٹا ڈسپلے کرنا

ٹیبل ملازمین، محکمے، مقامات، ممالک، علاقے۔ علاقوں کی فہرست اور ہر علاقے میں ملازمین کی تعداد حاصل کریں۔
حل

  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;

ٹیبل ملازمین، محکمے، مقامات، ممالک، علاقے۔ ہر ملازم کے بارے میں تفصیلی معلومات حاصل کریں:
پہلا_نام، آخری_نام، محکمہ، نوکری، گلی، ملک، علاقہ
حل

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);

ملازمین کی میز۔ ان تمام مینیجرز کو دکھائیں جن کے ماتحت 6 سے زیادہ ملازمین ہیں۔
حل

  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;

ٹیبل ملازمین، جاب_ہسٹری۔ ایمپلائی ٹیبل تمام ملازمین کو اسٹور کرتا ہے۔ جاب_ہسٹری ٹیبل ان ملازمین کو اسٹور کرتا ہے جو کمپنی چھوڑ چکے ہیں۔ تمام ملازمین اور کمپنی میں ان کی حیثیت کے بارے میں ایک رپورٹ حاصل کریں (روانگی کی تاریخ کے ساتھ کام کرتا ہے یا کمپنی چھوڑ دیتا ہے)
: مثال کے طور پر
پہلا نام | حالت
جینیفر | 31 دسمبر 2006 کو کمپنی چھوڑ دی۔
کلارا | فی الحال کام کر رہے ہیں۔
حل

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;

ٹیبل ملازمین، نوکریاں، محکمے۔ ملازمین کو فارمیٹ میں دکھائیں: پہلا_نام، جاب_ٹائٹل، محکمہ_نام۔
: مثال کے طور پر
پہلا_نام | جاب_ٹائٹل | محکمہ نام
ڈونلڈ | شپنگ | کلرک شپنگ
حل

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);

ملازمین کی میز۔ ان ملازمین کی فہرست حاصل کریں جن کے مینیجرز کو 2005 میں ملازمت ملی تھی لیکن ساتھ ہی ان ملازمین کو خود بھی 2005 سے پہلے ملازمت مل گئی تھی۔
حل

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;

سوالات کو حل کرنے کے لیے ذیلی سوالات کا استعمال

ملازمین کی میز۔ سب سے طویل نام والے ملازمین کی فہرست حاصل کریں۔
حل

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)

ملازمین کی میز۔ ان تمام مینیجرز کو دکھائیں جن کے ماتحت 6 سے زیادہ ملازمین ہیں۔
حل

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

ٹیبل ملازمین، محکمے۔ آئی ٹی ڈیپارٹمنٹ میں کام کرنے والے ملازمین کو دکھائیں۔
حل

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

ٹیبل ملازمین، نوکریاں، محکمے۔ ملازمین کو فارمیٹ میں دکھائیں: پہلا_نام، جاب_ٹائٹل، محکمہ_نام۔
: مثال کے طور پر
پہلا_نام | جاب_ٹائٹل | محکمہ نام
ڈونلڈ | شپنگ | کلرک شپنگ
حل

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;

ملازمین کی میز۔ ان ملازمین کی فہرست حاصل کریں جن کے مینیجرز کو 2005 میں ملازمت ملی تھی لیکن ساتھ ہی ان ملازمین کو خود بھی 2005 سے پہلے ملازمت مل گئی تھی۔
حل

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 ٹاسک لے کر آتا ہے تو کمنٹس میں لکھیں اور میں اسے فہرست میں شامل کر دوں گا۔

آپ کا شکریہ.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں