Anda di halaman 1dari 9

Praktikum 4 Memanipulasi Text, Angka dan Tanggal

Pemrograman Basis Data


Objectives:
Mahasiswa dapat menggunakan fungsi-fungsi untuk memanipulasi data teks, numerik dan
tanggal

Kerjakan semua soal


1. Tampilkan nama depan, nama belakang dan nama lengkap untuk pegawai yang saat ini
bertugas sebagai Senior Engineer.

USE employees;

SELECT employees.first_name AS nama_depan,


employees.last_name AS nama_belakang,
CONCAT(employees.first_name, ' ', employees.last_name) AS nama_lengkap
FROM employees
JOIN titles ON employees.emp_no = titles.emp_no
WHERE titles.title = 'Senior Engineer';

First name Last name Full name


georgi Facello Georgi facello
2. Tampilkan nama depan, nama belakang dan inisial dalam huruf besar untuk pegawai yang
saat ini bertugas di departemen Finance. Inisial merupakan gabungan dari huruf pertama
dari nama depan dan nama belakang.

USE employees;

SELECT e.first_name, e.last_name, UPPER(CONCAT(SUBSTRING(e.first_name, 1, 1),


SUBSTRING(e.last_name, 1, 1))) AS initial
FROM employees e
JOIN dept_emp de ON e.emp_no = de.emp_no
JOIN departments d ON de.dept_no = d.dept_no
WHERE d.dept_name = 'Finance'

First name Last name Inisial


Magy stimotou MS
3. Tampilkan nama lengkap dan jumlah huruf dari setiap pegawai yang saat ini bertugas di
departemen Marketing.
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'
)
);

First name Last name Full name


Sumnct Pec Sumnct Pec
6. Tampilkan semua manager yang aktif saat ini beserta dengan nama departemennya
seperti di bawah ini:
Dengan ketentuan:
• Department – ditampilkan dalam bentuk inisial yang merupakan empat huruf pertama
dari nama departemennya.
• Manager – Merupakan nama lengkap dari manager yang terdiri dari huruf besar
semua.
• Bertugas sejak – Tanggal dimana manager tersebut bertugas sebagai manager di
departemen yang ada.

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;

9. Untuk masing-masing jabatan, tampilkanlah jumlah pegawai. Jika setiap pegawai


dikelompokkan dalam 7 orang, ada berapa kelompok yang diperoleh dan berapa sisa dari
pegawai yang tidak mempunyai kelompok. Data yang ditampilkan adalah: Nama jabatan,
jumlah pegawai, jumlah kelompok, sisa pegawai.

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;

Anda mungkin juga menyukai