Xin chào Habr!
Trong hơn 3 năm nay, tôi đã dạy SQL ở nhiều trung tâm đào tạo khác nhau và một trong những quan sát của tôi là học sinh nắm vững và hiểu SQL tốt hơn nếu họ được giao một nhiệm vụ chứ không chỉ được nghe về các khả năng và nền tảng lý thuyết.
Trong bài viết này, tôi sẽ chia sẻ với bạn danh sách các vấn đề mà tôi giao cho học sinh làm bài tập về nhà và dựa trên đó chúng tôi tiến hành nhiều kiểu động não khác nhau để giúp bạn hiểu sâu sắc và rõ ràng về SQL.
SQL (ˈɛsˈkjuˈɛl; ngôn ngữ truy vấn có cấu trúc tiếng Anh) là ngôn ngữ lập trình khai báo được sử dụng để tạo, sửa đổi và quản lý dữ liệu trong cơ sở dữ liệu quan hệ được quản lý bởi hệ thống quản lý cơ sở dữ liệu thích hợp.
Bạn có thể đọc về SQL từ nhiều nguồn khác nhau
Bài viết này không nhằm mục đích dạy bạn SQL từ đầu.
Vậy hãy đi đi.
Chúng tôi sẽ sử dụng những gì nổi tiếng
Tôi lưu ý rằng chúng tôi sẽ chỉ xem xét các nhiệm vụ CHỌN. Không có nhiệm vụ DML hoặc DDL nào ở đây.
nhiệm vụ
Hạn chế và sắp xếp dữ liệu
Bảng nhân viên. Nhận danh sách chứa thông tin về tất cả nhân viên
phán quyết
SELECT * FROM employees
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên 'David'
phán quyết
SELECT *
FROM employees
WHERE first_name = 'David';
Bảng nhân viên. Lấy danh sách tất cả nhân viên có job_id bằng 'IT_PROG'
phán quyết
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Bảng nhân viên. Lấy danh sách toàn bộ nhân viên phòng 50 (department_id) có mức lương (mức lương) lớn hơn 4000
phán quyết
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Bảng nhân viên. Lấy danh sách toàn bộ nhân viên phòng 20 và 30 (department_id)
phán quyết
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có chữ cái cuối cùng trong tên của họ là 'a'
phán quyết
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Bảng nhân viên. Lấy danh sách tất cả nhân viên từ bộ phận 50 và 80 (department_id) có thưởng (giá trị ở cột Commission_pct không được để trống)
phán quyết
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên chứa ít nhất 2 chữ cái 'n'
phán quyết
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên dài hơn 4 chữ cái
phán quyết
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Bảng nhân viên. Lấy danh sách tất cả nhân viên có mức lương nằm trong khoảng từ 8000 đến 9000 (bao gồm)
phán quyết
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên chứa ký hiệu '%'
phán quyết
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Bảng nhân viên. Nhận danh sách tất cả ID người quản lý
phán quyết
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Bảng nhân viên. Lấy danh sách nhân viên với các vị trí công việc theo dạng: Donald(sh_clerk)
phán quyết
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Sử dụng các hàm một hàng để tùy chỉnh đầu ra
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên dài hơn 10 chữ cái
phán quyết
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có chữ 'b' trong tên của họ (không phân biệt chữ hoa chữ thường)
phán quyết
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có tên chứa ít nhất 2 chữ cái 'a'
phán quyết
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có lương là bội số của 1000
phán quyết
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Bảng nhân viên. Lấy số có 3 chữ số đầu tiên trong số điện thoại của nhân viên nếu số của anh ta ở định dạng XXX.XXX.XXXX
phán quyết
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Bảng các khoa. Lấy từ đầu tiên trong tên phòng ban đối với những người có nhiều hơn một từ trong tên
phán quyết
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Bảng nhân viên. Nhận tên nhân viên không có chữ cái đầu và cuối trong tên
phán quyết
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có chữ cái cuối cùng trong tên của họ là 'm' và có tên dài hơn 5
phán quyết
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Bảng kép. Nhận ngày thứ Sáu tiếp theo
phán quyết
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Bảng nhân viên. Lấy danh sách toàn bộ nhân viên đã làm việc cho công ty trên 17 năm
phán quyết
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Bảng nhân viên. Lấy danh sách tất cả các nhân viên có chữ số cuối trong số điện thoại của họ là số lẻ và gồm 3 số cách nhau bằng dấu chấm
phán quyết
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Bảng nhân viên. Lấy danh sách tất cả nhân viên có giá trị job_id sau dấu '_' có ít nhất 3 ký tự, nhưng giá trị này sau dấu '_' không bằng 'CLERK'
phán quyết
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Bảng nhân viên. Nhận danh sách tất cả nhân viên bằng cách thay thế tất cả '.' trong giá trị PHONE_NUMBER TRÊN '-'
phán quyết
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Sử dụng hàm chuyển đổi và biểu thức điều kiện
Bảng nhân viên. Lấy danh sách toàn bộ nhân viên đến làm việc ngày đầu tháng (bất kỳ)
phán quyết
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Bảng nhân viên. Lấy danh sách toàn bộ CBCNV đến làm việc năm 2008
phán quyết
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
Bảng KÉP. Hiển thị ngày của ngày mai ở định dạng: Ngày mai là ngày thứ hai của tháng một
phán quyết
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Bảng nhân viên. Lấy danh sách nhân viên và ngày đến làm việc theo mẫu: 21/2007/XNUMX
phán quyết
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Bảng nhân viên. Lấy danh sách nhân viên được tăng lương 20%. Hiển thị mức lương bằng ký hiệu đô la
phán quyết
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Bảng nhân viên. Lấy danh sách tất cả nhân viên bắt đầu làm việc vào tháng 2007 năm XNUMX.
phán quyết
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';
Bảng KÉP. Đưa ra ngày hiện tại, + giây, + phút, + giờ, + ngày, + tháng, + năm
phán quyết
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;
Bảng nhân viên. Nhận danh sách tất cả nhân viên có mức lương đầy đủ (lương + hoa hồng_pct(%)) ở định dạng: 24,000.00 USD
phán quyết
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
Bảng nhân viên. Nhận danh sách tất cả nhân viên và thông tin về mức lương thưởng sẵn có (Có/Không)
phán quyết
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Bảng nhân viên. Lấy mức lương của từng nhân viên: Nhỏ hơn 5000 được coi là Cấp thấp, Lớn hơn hoặc bằng 5000 và nhỏ hơn 10000 được coi là Cấp bình thường, Lớn hơn hoặc bằng 10000 được coi là Cấp cao
phán quyết
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;
Các nước trong bảng. Đối với mỗi quốc gia, hiển thị khu vực nơi quốc gia đó tọa lạc: 1-Châu Âu, 2-Châu Mỹ, 3-Châu Á, 4-Châu Phi (không tham gia)
phán quyết
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;
Báo cáo dữ liệu tổng hợp bằng các hàm nhóm
Bảng nhân viên. Nhận báo cáo theo Department_id với mức lương tối thiểu và tối đa, ngày đến nơi làm việc sớm và muộn cũng như số lượng nhân viên. Sắp xếp theo số lượng nhân viên (giảm dần)
phán quyết
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;
Bảng nhân viên. Có bao nhiêu nhân viên có tên bắt đầu bằng cùng một chữ cái? Sắp xếp theo số lượng. Chỉ hiển thị những nơi có số lượng lớn hơn 1
phán quyết
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;
Bảng nhân viên. Có bao nhiêu nhân viên làm việc trong cùng một bộ phận và nhận được mức lương như nhau?
phán quyết
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Bảng nhân viên. Nhận báo cáo về số lượng nhân viên được thuê vào mỗi ngày trong tuần. Sắp xếp theo số lượng
phán quyết
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Bảng nhân viên. Nhận báo cáo về số lượng nhân viên được thuê theo năm. Sắp xếp theo số lượng
phán quyết
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Bảng nhân viên. Lấy số phòng ban có nhân viên
phán quyết
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Bảng nhân viên. Lấy danh sách các Department_id có hơn 30 nhân viên
phán quyết
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Bảng nhân viên. Nhận danh sách các phòng ban và mức lương trung bình làm tròn của nhân viên trong mỗi phòng ban.
phán quyết
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Các nước trong bảng. Lấy danh sách Region_id tổng của tất cả các chữ cái của tất cả các tên quốc gia trong đó có hơn 60
phán quyết
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Bảng nhân viên. Lấy danh sách các Department_ids trong đó nhân viên của một số (>1) job_ids làm việc
phán quyết
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Bảng nhân viên. Lấy danh sách manager_ids có số cấp dưới lớn hơn 5 và tổng lương của cấp dưới lớn hơn 50000
phán quyết
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Bảng nhân viên. Nhận danh sách manager_ids có mức lương trung bình của tất cả cấp dưới của anh ta nằm trong khoảng từ 6000 đến 9000 và những người không nhận được tiền thưởng (commission_pct trống)
phán quyết
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;
Bảng nhân viên. Nhận mức lương tối đa từ tất cả nhân viên job_id kết thúc bằng từ 'CLERK'
phán quyết
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';
Bảng nhân viên. Nhận mức lương tối đa trong số tất cả mức lương trung bình của bộ phận
phán quyết
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Bảng nhân viên. Lấy số lượng nhân viên có cùng số chữ cái trong tên của họ. Đồng thời chỉ hiển thị những người có độ dài tên lớn hơn 5 và số nhân viên có cùng tên lớn hơn 20. Sắp xếp theo độ dài tên
phán quyết
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);
Hiển thị dữ liệu từ nhiều bảng bằng cách sử dụng các phép nối
Bảng Nhân viên, Phòng ban, Địa điểm, Quốc gia, Khu vực. Lấy danh sách các khu vực và số lượng nhân viên ở từng khu vực
phán quyết
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;
Bảng Nhân viên, Phòng ban, Địa điểm, Quốc gia, Khu vực. Nhận thông tin chi tiết về từng nhân viên:
First_name, Last_name, Department, Job, Street, Country, Region
phán quyết
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);
Bảng nhân viên. Hiển thị tất cả những người quản lý có hơn 6 nhân viên cấp dưới
phán quyết
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;
Bảng nhân viên. Hiển thị tất cả nhân viên không báo cáo với bất cứ ai
phán quyết
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;
Bảng Nhân viên, Job_history. Bảng Nhân viên lưu trữ tất cả nhân viên. Bảng Job_history lưu trữ những nhân viên đã rời công ty. Nhận báo cáo về tất cả nhân viên và tình trạng của họ trong công ty (Làm việc hoặc rời công ty kể từ ngày khởi hành)
Ví dụ:
tên_đầu tiên | trạng thái
Jennifer | Rời công ty vào ngày 31 tháng 2006 năm XNUMX
Clara | Hiện đang làm việc
phán quyết
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);
Bảng Nhân viên, Phòng ban, Địa điểm, Quốc gia, Khu vực. Lấy danh sách nhân viên sống tại Châu Âu (tên_vùng)
phán quyết
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';
Bảng Nhân viên, Phòng ban. Hiển thị tất cả các phòng ban có trên 30 nhân viên
phán quyết
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
Bảng Nhân viên, Phòng ban. Hiển thị tất cả nhân viên không thuộc bộ phận nào
phán quyết
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;
Bảng Nhân viên, Phòng ban. Hiển thị tất cả các phòng ban không có nhân viên
phán quyết
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Bảng nhân viên. Hiển thị tất cả nhân viên không có ai cấp dưới cho họ
phán quyết
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
Bảng Nhân viên, Công việc, Phòng ban. Hiển thị nhân viên theo định dạng: First_name, Job_title, Department_name.
Ví dụ:
Tên_tên | Job_title | Tên bộ phận
Donald | Vận chuyển | Thư ký vận chuyển
phán quyết
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);
Bảng nhân viên. Lấy danh sách nhân viên có người quản lý có việc làm vào năm 2005, nhưng đồng thời bản thân những nhân viên này cũng có việc làm trước năm 2005
phán quyết
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');
Bảng nhân viên. Lấy danh sách nhân viên có người quản lý nhận việc vào tháng 15 của năm bất kỳ và độ dài job_title của những nhân viên này lớn hơn XNUMX ký tự
phán quyết
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;
Sử dụng truy vấn con để giải quyết truy vấn
Bảng nhân viên. Lấy danh sách nhân viên có tên dài nhất.
phán quyết
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Bảng nhân viên. Lấy danh sách nhân viên có mức lương lớn hơn mức lương trung bình của tất cả nhân viên.
phán quyết
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Bảng Nhân viên, Phòng ban, Địa điểm. Lấy thành phố mà tổng số nhân viên kiếm được ít nhất.
phán quyết
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);
Bảng nhân viên. Lấy danh sách nhân viên có người quản lý nhận lương trên 15000.
phán quyết
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Bảng Nhân viên, Phòng ban. Hiển thị tất cả các phòng ban không có nhân viên
phán quyết
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Bảng nhân viên. Hiển thị tất cả nhân viên không phải là người quản lý
phán quyết
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Bảng nhân viên. Hiển thị tất cả những người quản lý có hơn 6 nhân viên cấp dưới
phán quyết
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Bảng Nhân viên, Phòng ban. Hiển thị những nhân viên làm việc trong bộ phận CNTT
phán quyết
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Bảng Nhân viên, Công việc, Phòng ban. Hiển thị nhân viên theo định dạng: First_name, Job_title, Department_name.
Ví dụ:
Tên_tên | Job_title | Tên bộ phận
Donald | Vận chuyển | Thư ký vận chuyển
phán quyết
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;
Bảng nhân viên. Lấy danh sách nhân viên có người quản lý có việc làm vào năm 2005, nhưng đồng thời bản thân những nhân viên này cũng có việc làm trước năm 2005
phán quyết
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');
Bảng nhân viên. Lấy danh sách nhân viên có người quản lý nhận việc vào tháng 15 của năm bất kỳ và độ dài job_title của những nhân viên này lớn hơn XNUMX ký tự
phán quyết
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;
Đó là tất cả cho bây giờ.
Tôi hy vọng các nhiệm vụ thú vị và hấp dẫn.
Tôi sẽ thêm vào danh sách nhiệm vụ này nhiều nhất có thể.
Tôi cũng sẽ rất vui khi nhận được bất kỳ ý kiến và đề xuất nào.
Tái bút: Nếu ai đó nghĩ ra một nhiệm vụ CHỌN thú vị, hãy viết bình luận và tôi sẽ thêm nó vào danh sách.
Cảm ơn bạn.
Nguồn: www.habr.com