مرحبا هبر!
لأكثر من 3 سنوات ، كنت أقوم بتدريس SQL في مراكز تدريب مختلفة ، ومن ملاحظاتي أن الطلاب يتقنون SQL ويفهمونه بشكل أفضل إذا تم تكليفهم بمهمة ، وليس الحديث فقط عن الاحتمالات والأسس النظرية.
في هذه المقالة ، سوف أشارككم قائمة المهام التي أعطيها للطلاب كواجب منزلي والتي نجري عليها أنواعًا مختلفة من العصف الذهني ، مما يؤدي إلى فهم عميق وواضح لـ SQL.
SQL (ˈɛsˈkjuˈɛl ؛ لغة الاستعلام المهيكلة) هي لغة برمجة تعريفية تُستخدم لإنشاء وتعديل وإدارة البيانات في قاعدة بيانات علائقية يُدار بواسطة نظام إدارة قاعدة بيانات مناسب.
يمكنك أن تقرأ عن SQL من مختلف
لا تهدف هذه المقالة إلى تعليمك 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
حل
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;
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين يكون الحرف الأخير في اسمهم هو "أ"
حل
SELECT *
FROM employees
WHERE first_name LIKE '%a';
جدول الموظفين. احصل على قائمة بجميع الموظفين من الخمسين ومن القسم الثمانين (department_id) الذين حصلوا على مكافأة (القيمة في العمود Commission_pct ليست فارغة)
حل
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين يحتوي اسمهم على حرفين على الأقل '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;
جدول الموظفين. الحصول على قائمة الموظفين مع مناصبهم بالتنسيق: دونالد (sh_clerk)
حل
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
استخدام وظائف الصف الواحد لتخصيص الإخراج
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين تزيد أسماؤهم عن 10 أحرف
حل
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين لديهم الحرف "ب" في أسمائهم (غير حساس لحالة الأحرف)
حل
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين يحتوي اسمهم على حرفين على الأقل "أ"
حل
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;
جدول الموظفين. احصل على قائمة بجميع الموظفين الذين يساوي حرفهم الأخير في الاسم "م" وطول الاسم أكبر من 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';
طاولة مزدوجة. اعرض تاريخ الغد بالتنسيق: غدًا هو اليوم الثاني من شهر يناير
حل
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';
طاولة مزدوجة. تصدير التاريخ الحالي ، + ثانية ، + دقيقة ، + ساعة ، + يوم ، + شهر ، + سنة
حل
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;
جدول الموظفين. احصل على قائمة بجميع الموظفين مع رواتب كاملة (الراتب + العمولة (٪)) بالصيغة: 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;
الإبلاغ عن البيانات المجمعة باستخدام وظائف المجموعة
جدول الموظفين. احصل على تقرير من قبل department_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;
جدول الموظفين. احصل على قائمة معرف القسم مع أكثر من 30 موظفًا
حل
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
جدول الموظفين. احصل على قائمة بمعرفات الأقسام والمتوسط التقريبي للراتب للموظفين في كل قسم.
حل
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
جدول البلدان. احصل على قائمة بمجموع معرف المنطقة لجميع الأحرف لجميع أسماء البلدان التي يزيد عدد أحرفها عن 60
حل
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
جدول الموظفين. احصل على قائمة معرف القسم الذي يعمل فيه موظفون من عدة (> 1) job_id
حل
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
جدول الموظفين. احصل على قائمة manager_id الذي يزيد عدد مرؤوسيه عن 5 ومجموع جميع رواتب مرؤوسيه أكبر من 50000
حل
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
جدول الموظفين. احصل على قائمة manager_id الذي يتراوح متوسط راتبه لجميع مرؤوسيه بين 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;
جدول الموظفين ، والإدارات ، والمواقع ، والبلدان ، والمناطق. احصل على معلومات مفصلة عن كل موظف:
First_name، Last_name، Department، Job، Street، Country، Region
حل
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. يخزن جدول الموظف جميع الموظفين. يخزن جدول 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);
جدول الموظفين ، والإدارات ، والمواقع ، والبلدان ، والمناطق. احصل على قائمة بالموظفين الذين يعيشون في أوروبا (اسم_المنطقة)
حل
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;
موظفي الجدول والإدارات. اعرض للموظفين الذين يعملون في قسم تكنولوجيا المعلومات
حل
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