USE employees;
USE employees;
SELECT
CONCAT(first_name, ' ', last_name) AS nama_lengkap,
LENGTH(CONCAT(first_name, last_name)) AS jumlah_huruf
FROM employees
WHERE emp_no IN (
SELECT emp_no
FROM dept_emp
WHERE dept_no = (
SELECT dept_no
FROM departments
WHERE dept_name = 'Marketing'
)
);
Full name Jumlah huruf
Cristinel Bouloucos 18
4. Menggunakan fungsi Instr, tampilkanlah nama lengkap pegawai dan tentukan di huruf ke
berapa huruf “o” ditemukan. Tampilan hasil query akan seperti di bawah ini.
Full name Huruf O ada di
Georgie Facello 2
5. Tampilkan semua nama lengkap pegawai yang ada di departemen Quality Management
namun Ketika menampilkan nama lengkap tersebut, hilangkan huruf “a” dari semua
nama.
USE employees;
SELECT
REPLACE(CONCAT(first_name, ' ', last_name), 'a', '') AS nama_tanpa_a
FROM employees
WHERE emp_no IN (
SELECT emp_no
FROM dept_emp
WHERE dept_no = (
SELECT dept_no
FROM departments
WHERE dept_name = 'Quality Management'
)
);
7. Hitunglah gaji pegawai per minggu saat ini (aktif), dibulatkan sampai 2 angka di belakang
koma. Gaji perminggu dihitung dengan membagi gaji tahunan dengan 52 minggu. Data
yang ditampilkan adalah : Hitunglah berapa tahun pekerja sudah bekerja sampai hari ini.
Data yang ditampilkan berupa Employee ID, first name, last name, gaji setahun, gaji per
minggu.
USE employees;
SELECT
e.emp_no AS Employee_ID,
e.first_name,
e.last_name,
s.salary AS Gaji_Tahunan,
ROUND(s.salary / 52, 2) AS Gaji_Per_Minggu,
YEAR(NOW()) - YEAR(e.hire_date) AS Tahun_Bekerja
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.emp_no IN (
SELECT emp_no
FROM dept_emp
WHERE to_date = '9999-01-01'
);
8. Untuk masing-masing departemen, tampilkanlah jumlah pegawai. Jika setiap pegawai
dikelompokkan dalam 5 orang, ada berapa kelompok yang diperoleh dan berapa sisa dari
pegawai yang tidak mempunyai kelompok. Data yang ditampilkan adalah: Nama
departemen, jumlah pegawai, jumlah kelompok, sisa pegawai.
USE employees;
SELECT
departments.dept_name AS Nama_Departemen,
COUNT(employees.emp_no) AS Jumlah_Pegawai,
COUNT(employees.emp_no) / 5 AS Jumlah_Kelompok,
COUNT(employees.emp_no) % 5 AS Sisa_Pegawai
FROM employees
JOIN dept_emp ON employees.emp_no = dept_emp.emp_no
JOIN departments ON dept_emp.dept_no = departments.dept_no
GROUP BY departments.dept_name;
USE employees;
SELECT
titles.title AS Nama_Jabatan,
COUNT(employees.emp_no) AS Jumlah_Pegawai,
COUNT(employees.emp_no) / 7 AS Jumlah_Kelompok,
COUNT(employees.emp_no) % 7 AS Sisa_Pegawai
FROM employees
JOIN titles ON employees.emp_no = titles.emp_no
GROUP BY titles.title;
10. Hitunglah gaji yang harus dibayar oleh tiap departemen. Total gaji yang harus dibayar tiap
departemen dibulatkan sampai 2 angka di depan koma.
USE employees;
SELECT
departments.dept_name AS Nama_Departemen,
ROUND(SUM(salaries.salary), 2) AS Total_Gaji
FROM dept_emp
JOIN employees ON dept_emp.emp_no = employees.emp_no
JOIN salaries ON employees.emp_no = salaries.emp_no
JOIN departments ON dept_emp.dept_no = departments.dept_no
GROUP BY departments.dept_name;
11. Hitunglah berapa hari Manager yang aktif saat ini di departemen masing-masing sekarang
sudah menjadi Manager.
USE employees;
SELECT
departments.dept_name AS Nama_Departemen,
DATEDIFF(NOW(), dept_manager.from_date) AS Hari_Menjabat
FROM dept_manager
JOIN departments ON dept_manager.dept_no = departments.dept_no
WHERE dept_manager.to_date = '9999-01-01';
12. Hitunglah berapa hari semua pekerja sudah bekerja sampai hari ini. Data yang ditampilkan
berupa Employee ID, first name, last name, tanggal di hire, jumlah hari sudah bekerja.
Data yang ditampilkan berupa Employee ID, first name, last name, tanggal di hire, jumlah
bulan sudah bekerja.
USE employees;
SELECT
emp_no AS Employee_ID,
first_name,
last_name,
hire_date AS Tanggal_Hire,
DATEDIFF(NOW(), hire_date) AS Jumlah_Hari_Bekerja,
TIMESTAMPDIFF(MONTH, hire_date, NOW()) AS Jumlah_Bulan_Bekerja
FROM employees;
13. Hitunglah berapa bulan semua pekerja sudah bekerja sampai hari ini. Data yang
ditampilkan berupa Employee ID, first name, last name, tanggal di hire, jumlah tahun
sudah bekerja.
USE employees;
SELECT
emp_no AS Employee_ID,
first_name,
last_name,
hire_date AS Tanggal_Hire,
TIMESTAMPDIFF(YEAR, hire_date, NOW()) AS Jumlah_Tahun_Bekerja
FROM employees;
14. Hitunglah berapa tahun pekerja sudah bekerja sampai hari ini. Data yang ditampilkan
berupa Employee ID, first name, last name, tanggal di hire, jumlah tahun sudah bekerja.
USE employees;
SELECT
emp_no AS Employee_ID,
first_name,
last_name,
hire_date AS Tanggal_Hire,
YEAR(NOW()) - YEAR(hire_date) AS Jumlah_Tahun_Bekerja
FROM employees;
15. Hitunglah berapa tahun pekerja sudah bekerja sampai hari ini. Data yang ditampilkan
berupa Employee ID, first name, last name, tanggal di hire, berapa lama sudah bekerja.
Berapa lama bekerja dihitung dengan jumlah tahun + jumlah bulan + jumlah hari.
Misalkan: 7 tahun 6 bulan 17 hari.
USE employees;
SELECT
emp_no AS Employee_ID,
first_name,
last_name,
hire_date AS Tanggal_Hire,
CONCAT(
YEAR(NOW()) - YEAR(hire_date), ' tahun ',
MONTH(NOW()) - MONTH(hire_date), ' bulan ',
DATEDIFF(NOW(), hire_date) % 30, ' hari'
) AS Lama_Bekerja
FROM employees;
16. HRD ingin menampilkan 5 orang di setiap departemen yang paling lama sudah menjabat
di jabatannya saat ini. Kelima orang ini ingin dipromosikan. Tugas kamu adalah
memberikan nama-nama tersebut ke HRD.
USE employees;
WITH ranked_employees AS (
SELECT
e.emp_no,
e.first_name,
e.last_name,
e.hire_date,
DENSE_RANK() OVER (PARTITION BY de.dept_no ORDER BY DATEDIFF(NOW(),
e.hire_date) DESC) AS rank
FROM dept_emp de
JOIN employees e ON de.emp_no = e.emp_no
WHERE de.to_date = '9999-01-01'
)
SELECT
re.emp_no AS Employee_ID,
re.first_name,
re.last_name,
re.hire_date AS Tanggal_Hire,
DATEDIFF(NOW(), re.hire_date) AS Jumlah_Hari_Bekerja
FROM ranked_employees re
WHERE re.rank <= 5;