You are on page 1of 7

Ujian Pemrograman Basis

Data Yonatan Hidson


Simbolon 2181024

Bagian 1 : Menggunakan DDL

CREATE DATABASE ujianmid;

USE ujianmid;
Tabel Pegawai

CREATE TABLE Pegawai (

IDPeg INT PRIMARY KEY,

Nama VARCHAR(255) NOT

NULL, TglLahir DATE NOT NULL,

JK CHAR(1) NOT NULL, -- M atau F untuk jenis kelamin

Alamat TEXT

);
Tabel Absensi

CREATE TABLE Absensi

( Tanggal DATE,

IDPeg INT,

JamMasuk TIME,

JamKeluar TIME,

CONSTRAINT pk_absensi PRIMARY KEY (Tanggal, IDPeg), -- Primary Key

CONSTRAINT fk_absensi_pegawai FOREIGN KEY (IDPeg) REFERENCES Pegawai(IDPeg) -- Foreign Key

);

Tabel GajiPokok

CREATE TABLE GajiPokok (

IDPeg INT, -- ID Pegawai

TglMulai DATE, -- Tanggal Mulai

Jumlah DECIMAL(10, 2), -- Jumlah Gaji

TglAkhir DATE, -- Tanggal Akhir

PRIMARY KEY (IDPeg, TglMulai), -- Primary Key


FOREIGN KEY (IDPeg) REFERENCES Pegawai(IDPeg) -- Foreign Key

);

Bagian 2 : Gunakan database

Employee 1.

SELECT

e.emp_no AS IDPeg,

e.first_name AS NDepan,

e.last_name AS NKeluarga,

CONCAT(e.first_name, ' ', e.last_name) AS

NLengkap, d.dept_name AS Departemen,

s.salary AS Gaji

FROM employees

INNER JOIN dept_emp de ON e.emp_no = de.emp_no

INNER JOIN departments d ON de.dept_no = d.dept_no

INNER JOIN salaries s ON e.emp_no = s.emp_no

WHERE s.to_date = '9999-01-01'

ORDER BY d.dept_name;

2.

SELECT

d.dept_name AS Departemen,
COUNT(e.emp_no) AS Jumlah_Pegawai_Aktif

FROM departments d

LEFT JOIN dept_emp de ON d.dept_no = de.dept_no

INNER JOIN employees e ON de.emp_no =

e.emp_no INNER JOIN salaries s ON e.emp_no =

s.emp_no

WHERE s.to_date = '9999-01-01'

GROUP BY d.dept_name

ORDER BY Jumlah_Pegawai_Aktif DESC;

3.

SELECT

d.dept_name AS Departemen,

SUM(s.salary) AS

Total_Gaji_Departemen

FROM departments d

LEFT JOIN dept_emp de ON d.dept_no = de.dept_no

INNER JOIN employees e ON de.emp_no =

e.emp_no INNER JOIN salaries s ON e.emp_no =

s.emp_no

WHERE s.to_date = '9999-01-01' -- Hanya gaji saat ini

GROUP BY d.dept_name

ORDER BY Total_Gaji_Departemen DESC;


4.

SELECT

e.emp_no AS IDPeg,

e.first_name AS NDepan,

e.last_name AS NKeluarga,

CONCAT(e.first_name, ' ', e.last_name) AS

NLengkap, s.salary AS Gaji

FROM employees e

INNER JOIN salaries s ON e.emp_no = s.emp_no

WHERE s.to_date = '9999-01-01' -- Hanya gaji saat ini

AND s.salary > (

SELECT AVG(salary)

FROM salaries

WHERE to_date = '9999-01-01' -- Rata-rata gaji saat ini

);
5.

SELECT

e.first_name AS NDepan,

e.last_name AS NKeluarga,

LEFT(e.first_name, 1) AS Inisial_Depan,

LEFT(e.last_name, 1) AS Inisial_Belakang

FROM employees e

INNER JOIN titles t ON e.emp_no = t.emp_no

WHERE t.to_date = '9999-01-01' -- Jabatan aktif saat ini

AND t.title = 'Manager';

6.
SELECT

e.emp_no AS Emp_no,

e.first_name AS

First_name, e.last_name AS

Last_name, e.hire_date AS

Hire_date,

TIMESTAMPDIFF(YEAR, e.hire_date, CURDATE()) AS Years,

TIMESTAMPDIFF(MONTH, e.hire_date, CURDATE()) % 12 AS

Months,

DATEDIFF(CURDATE(), e.hire_date) % 30 AS Days

FROM employees e

ORDER BY Years DESC, Months DESC, Days DESC

LIMIT 10;

7.

SELECT

t.title AS Jabatan,

AVG(s.salary) AS

Rata_rata_Gaji FROM titles t

INNER JOIN salaries s ON t.emp_no = s.emp_no

WHERE t.to_date = '9999-01-01' -- Jabatan aktif saat ini

AND s.to_date = '9999-01-01' -- Gaji aktif saat ini

GROUP BY t.title

ORDER BY Rata_rata_Gaji DESC;

You might also like