SQL. دلڪش پزل

هيلو، حبر!

ھاڻي 3 سالن کان وڌيڪ عرصي کان مان مختلف تربيتي مرڪزن ۾ SQL سيکاريندو رھيو آھيان، ۽ منھنجو ھڪڙو مشاهدو اھو آھي ته شاگرد SQL کي بھتر سمجھندا آھن ۽ سمجھندا آھن جيڪڏھن کين ڪو ٽاسڪ ڏنو وڃي، ۽ رڳو امڪانن ۽ نظرياتي بنيادن بابت ٻڌايو وڃي.

هن آرٽيڪل ۾، مان توهان سان پنهنجي مسئلن جي لسٽ شيئر ڪندس جيڪي آئون شاگردن کي هوم ورڪ جي طور تي ڏيان ٿو ۽ جن تي اسان مختلف قسم جا دماغي طوفان هلايون ٿا، جيڪي SQL جي تمام گهڻي ۽ واضح سمجهه تائين پهچن ٿا.

SQL. دلڪش پزل

SQL (ˈɛsˈkjuˈɛl؛ انگريزي structured query language) هڪ بياني پروگرامنگ ٻولي آهي جيڪا هڪ مناسب ڊيٽابيس مينيجمينٽ سسٽم پاران منظم ڪيل تعلقي ڊيٽابيس ۾ ڊيٽا کي ٺاهڻ، تبديل ڪرڻ ۽ منظم ڪرڻ لاءِ استعمال ڪئي ويندي آهي. وڌيڪ پڙهو…

توهان مختلف مان SQL بابت پڙهي سگهو ٿا ذريعا.
هي آرٽيڪل توهان کي شروع کان SQL سيکارڻ جو ارادو ناهي.

سو اچو ته هلون.

اسان چڱي طرح استعمال ڪنداسين HR خاڪو Oracle ۾ ان جي جدولن سان (وڌيڪ):

SQL. دلڪش پزل
مان نوٽ ڪريان ٿو ته اسان صرف SELECT ڪمن تي غور ڪنداسين. هتي ڪوبه DML يا DDL ڪم نه آهي.

ڪمن

ڊيٽا کي محدود ڪرڻ ۽ ترتيب ڏيڻ

ملازمن جي ٽيبل. سڀني ملازمن جي باري ۾ معلومات سان هڪ فهرست حاصل ڪريو
فيصلو

SELECT * FROM employees

ملازمن جي ٽيبل. 'دائود' نالي سڀني ملازمن جي لسٽ حاصل ڪريو
فيصلو

SELECT *
  FROM employees
 WHERE first_name = 'David';

ملازمن جي ٽيبل. سڀني ملازمن جي لسٽ حاصل ڪريو job_id سان 'IT_PROG' جي برابر
فيصلو

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

ملازمن جي ٽيبل. 50هين ڊپارٽمينٽ (department_id) مان سڀني ملازمن جي لسٽ حاصل ڪريو جن جي تنخواه (تنخواه) 4000 کان وڌيڪ آهي
فيصلو

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

ملازمن جي ٽيبل. سڀني مئنيجر جي سڃاڻپ جي فهرست حاصل ڪريو
فيصلو

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 اکر تي مشتمل هجن
فيصلو

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;

گروپ جي ڪمن کي استعمال ڪندي مجموعي ڊيٽا جي رپورٽ ڪرڻ

ملازمن جي ٽيبل. ڊپارٽمينٽ_id طرفان گهٽ ۾ گهٽ ۽ وڌ ۾ وڌ تنخواه، ڪم تي پهچڻ جي شروعاتي ۽ دير جي تاريخن ۽ ملازمن جي تعداد سان رپورٽ حاصل ڪريو. ملازمن جي تعداد جي لحاظ سان ترتيب ڏيو (اڀرندي)
فيصلو

  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;

ملازمن جي ٽيبل. هڪ فهرست حاصل ڪريو Department_ids جن ۾ 30 کان وڌيڪ ملازم آهن
فيصلو

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

ملازمن جي ٽيبل. ڊپارٽمينٽ_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;

ملازمن جي ٽيبل. مينيجر_ids جي لسٽ حاصل ڪريو جن جي ماتحتن جو تعداد 5 کان وڌيڪ آھي ۽ سندس ماتحتن جي سڀني تنخوان جو مجموعو 50000 کان وڌيڪ آھي
فيصلو

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

ملازمن جي ٽيبل. مينيجر_ids جي لسٽ حاصل ڪريو جن جي سڀني ماتحتن جي سراسري تنخواه 6000 کان 9000 جي حد ۾ آهي ۽ جيڪي بونس وصول نٿا ڪن (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;

ملازمن جي ٽيبل. سڀني ملازمن کان وڌ ۾ وڌ پگهار حاصل ڪريو 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;

ٽيبل ملازم، نوڪري_هسٽري. ملازم ٽيبل سڀني ملازمن کي محفوظ ڪري ٿو. Job_history ٽيبل انهن ملازمن کي محفوظ ڪري ٿو جيڪي ڪمپني ڇڏي ويا آهن. سڀني ملازمن جي باري ۾ رپورٽ حاصل ڪريو ۽ ڪمپني ۾ انهن جي حيثيت (ڪم ڪري ٿو يا روانگي جي تاريخ سان ڪمپني ڇڏي)
مثال طور
پهريون نالو | حيثيت
جينيفر | 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);

ٽيبل ملازم، رياستون، هنڌ، ملڪ، علائقا. ملازمن جي هڪ فهرست حاصل ڪريو جيڪي يورپ ۾ رهن ٿا (region_name)
فيصلو

 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.
مثال طور
پهريون نالو | نوڪري_ عنوان | ڊپارٽمينٽ_ نالو
ڊونالڊ | شپنگ | ڪلرڪ شپنگ
فيصلو

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;

ٽيبل ملازمن، شعبن. IT ڊپارٽمينٽ ۾ ڪم ڪندڙ ملازمن کي ڏيکاريو
فيصلو

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

ٽيبل ملازم ، نوڪري ، ڊپارٽمينٽ. ملازمن کي فارميٽ ۾ ڏيکاريو: First_name، Job_title، Department_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;

ملازمن جي ٽيبل. انهن ملازمن جي لسٽ حاصل ڪريو جن جي مئنيجرن کي 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;

اهو سڀ ڪجهه هاڻي لاءِ آهي.

مون کي اميد آهي ته ڪم دلچسپ ۽ دلچسپ هئا.
مان جيترو ٿي سگھي ڪمن جي ھن لسٽ ۾ شامل ڪندس.
مون کي به ڪنهن به رايا ۽ تجويزون حاصل ڪرڻ لاء خوش ٿي ويندي.

پي ايس: جيڪڏهن ڪو هڪ دلچسپ SELECT ڪم سان گڏ اچي، تبصرن ۾ لکو ۽ مان ان کي لسٽ ۾ شامل ڪندس.

مهرباني

جو ذريعو: www.habr.com

تبصرو شامل ڪريو