Anda di halaman 1dari 16

JAWABAN MODUL PRAKTIKUM PEMROGRAMAN KOMPUTER

A. MODUL 1

1. Perbedaan Data definition language dengan Data manipulation language adalah sebagai
berikut :
a. Data definition language adalah kumpulan perintah SQL yang berkaitan dengan
pembuatan, perubahan, dan penghapusan database maupun objek-objek yang terdapat
di dalam database, seperti tabel, indeks, prosedur/fungsi, trigger dan sebagainya.
Perintah SQL yang termasuk dalam DDL :
- CREATE, berfungsi untuk membuat database dan objek-objek di dalam database
- ALTER,berfungsi untuk mengubah database dan objek-objek di dalam database
- DROP, berfungsi untuk menghapus database dan objek-objek di dalam database
b. Data manipulation language adalah kumpulan perintah SQL yang berkaitan dengan
manipulasi data atau isi dari suatu tabel. Dengan perintah-perintah di dalam UML. Kita
dapat memanipulasi (menambah, mengubah, dan manghapus} data yang terdapat pada
suatu tabel secara mudah.
Perintah SQL yang termasuk kategori DML :
- INSERT, berfungsi untuk menambah atau memasukkan data baru ke dalam tabel.
- UPDATE, berfungsi untuk mengubah data dalam tabel dengan nilai baru.
- DELETE, berfungsi untuk menghapus data dari suatu tabel

2. Tipe Data
Jenis-Jenis Tipe Data yang digunakan dalam SQL adalah :

2.1 Exact Numerics

1. BIGINT, angka dengan jangkauan nilai dari -263 (-9,223,372,036,854,775,808)


sampai 263 - 1 (9,223,372,036,854,775,807) dan membutuhkan tempat
penyimpanan 8 byte.
2. INT, angka dengan jangkauan nilai dari -231 (-2,147,483,648) sampai 231 - 1
(2,147,483,647) dan membutuhkan tempat penyimpanan 4 byte.
3. SMALLINT, angka dengan jangkauan nilai dari -215 (-32,768) sampai 215 - 1 (32,767)
dan membutuhkan tempat penyimpanan 2 byte.
4. TINYINT, angka dengan jangkauan nilai dari 0 sampai 255 dan membutuhkan
tempat penyimpanan 1 byte.
5. BIT, angka dengan jangkauan nilai dari 0 sampai 1 dan membutuhkan tempat
penyimpanan 1 byte untuk tabel yang berisi 8 baris dan seterusnya.
6. DECIMAL[(p[, s])] dan NUMERIC[(p[, s])], presisi dan angka skala yang tetap
dengan jangkauan nilai dari -1038 + 1 sampai 1038 – 1 dan membutuhkan tempat
penyimpanan dari 5 sampai 17 byte.
 p (presisi), total angka maksimum dari digit desimal yang dapat disimpan di sisi kiri
dan kanan tanda desimal. Jangkauan nilai presisi adalah mulai dari 1 sampai 38,
dengan nilai default 18.
 s (skala), angka maksimum dari digit desimal yang dapat disimpan di sebelah
kanan tanda desimal dengan jangkauan nilai dari 0 sampai p, dengan nilai default
0 sehingga 0 <= s <= p. Skala hanya dapat didefinisikan jika p sudah didefinisikan.
7. MONEY, angka mata uang dengan jangkauan nilai dari -922,337,203,685,477.5808
sampai 922,337,203,685,477.5807 dan membutuhkan tempat penyimpanan 8
byte.
8. SMALLMONEY, angka mata uang dengan jangkauan nilai dari -214,748.3648 to
214,748.3647 dan membutuhkan tempat penyimpanan 4 byte.

2.2 Approximate Numerics

1. FLOAT(n), angka aproksimasi dengan jangkauan nilai dari -1.79E+38 sampai -


2.23E-38, 0 dan 2.23E-38 sampai 1.79E+38 dan membutuhkan tempat
penyimpanan dari 4 dan 8 byte. Nilai n memiliki jangkauan dari 1 sampai 53.
2. REAL, angka aproksimasi dengan jangkauan nilai dari -1.18E-38, 0, dan 1.18E-38
sampai 3.40E+38 dan membutuhkan tempat penyimpanan 4 byte.

2.3 Date and Time

1. DATETIME, tanggal dan waktu dengan jangkauan nilai dari 1 Januari 1753 sampai
31 Desember 9999 dan memiliki presisi 3.33 milidetik.
2. SMALLDATETIME, tanggal dan waktu dengan jangkauan nilai dari 1 Januari 1900
sampai 6 Juni 2079 dan memiliki presisi 1 menit.

2.4 Character Strings

1. CHAR (n), karakter non-Unicode yang panjangnya bersifat tetap terhadap


kapasitas penyimpanan yang didefinisikan oleh n dan membutuhkan tempat
penyimpanan sebesar n byte. Nilai n memiliki jangkauan dari 1 sampai 8,000.
2. VARCHAR (n atau max), karakter non-Unicode yang panjangnya bersifat variabel
terhadap kapasitas penyimpanan yang didefinisikan oleh n dan membutuhkan
tempat penyimpanan sebesar [jumlah karakter yang disimpan + 2] byte. Nilai n
memiliki jangkauan dari 1 sampai 8,000 dan max bernilai 231 – 1 byte.
3. TEXT, karakter non-Unicode yang panjangnya bersifat variabel dengan jumlah
karakter maksimum sebesar 231 - 1 (2,147,483,647) dan membutuhkan tempat
penyimpanan sebesar [jumlah karakter yang disimpan] byte.

2.5 Unicode Character Strings

1. NCHAR, karakter Unicode yang panjangnya bersifat tetap terhadap kapasitas


penyimpanan yang didefinisikan oleh n dan membutuhkan tempat penyimpanan
sebesar 2 kali n byte. Nilai n memiliki jangkauan dari 1 sampai 4,000.
2. NVARCHAR (n atau max), karakter Unicode yang panjangnya bersifat variabel
terhadap kapasitas penyimpanan yang didefinisikan oleh n dan membutuhkan
tempat penyimpanan sebesar 2 kali jumlah karakter yang disimpan + 2 byte. Nilai
n memiliki jangkauan dari 1 sampai 4,000 dan max bernilai 230 – 1 byte.
3. NTEXT, karakter Unicode yang panjangnya bersifat variabel dengan jumlah
karakter maksimum sebesar 230 - 1 (1,073,741,823) dan membutuhkan tempat
penyimpanan sebesar [2 kali jumlah karakter yang disimpan] byte.

2.6 Binary Strings

1. BINARY (n), data biner yang panjangnya bersifat tetap terhadap kapasitas
penyimpanan yang didefinisikan oleh n dan membutuhkan tempat penyimpanan
sebesar n byte. Nilai n memiliki jangkauan dari 1 sampai 8,000.
2. VARBINARY (n atau max), data biner yang panjangnya bersifat variabel terhadap
kapasitas penyimpanan yang didefinisikan oleh n dan membutuhkan tempat
penyimpanan sebesar [jumlah data yang disimpan + 2] byte. Nilai n memiliki
jangkauan dari 1 sampai 8,000 dan max bernilai 231 – 1 byte.
3. IMAGE, data biner yang panjangnya bersifat variabel dengan jumlah data
maksimum sebesar 231 - 1 (2,147,483,647) dan membutuhkan tempat
penyimpanan sebesar [jumlah karakter yang disimpan] byte.

2.7 Tipe data yang lain

1. TIMESTAMP, angka biner yang unik, yang secara otomatis dihasilkan ketika terjadi
perubahaan dalam suatu row pada suatu tabel dan membutuhkan tempat
penyimpanam sebesar 8 byte.
2. UNIQUEIDENTIFIER, data globally unique indentifier (GUID) yang membutuhkan
tempat penyimpanan sebesar 16 byte. Contoh: 6F9619FF-8B86-D011-B42D-
00C04FC964FF.
B. MODUL 2

1. CREATE TABLE Data_Karyawan


(
IDKaryawan INT NOT NULL,
Nama_Karyawan NVARCHAR(60) NOT NULL,
Alamat NVARCHAR(256) NOT NULL,
Telepon INT NULL,
IDManajer INT NULL,
),

CREATE TABLE Data_Manajer


(
IDManajer INT NOT NULL,
Nama_Manajer NVARCHAR(60) NOT NULL,
Alamat NVARCHAR(65) NOT NULL,
Telepon INT NULL,
);
2. ALTER TABLE Data_Karyawan
ADD Status_Karyawan NVARCHAR(50) NULL,
ALTER TABLE Data_Karyawan
ADD CONSTRAINT PK_Karyawan PRIMARY KEY (IDKaryawan),
ALTER TABLE Data_Manajer
ADD CONSTRAINT PK_Manajer PRIMARY KEY (IDManajer),
ALTER TABLE Data_Karyawan
ADD CONSTRAINT FK_Karyawan FOREIGN KEY (IDManajer)
REFERENCES Data_Manajer;
3. INSERT INTO Data_Karyawan
(IDKaryawan, Nama_Karyawan, Alamat, Telepon, IDManajer)
VALUES (184, ‘Farida Sari’, ‘Dago Pakar’, 4143566, NULL);
4. UPDATE Data_Karyawan SET
Telepon = NULL
WHERE IDKaryawan = 184;
5. UPDATE Data_Karyawan SET
Status = ‘Menikah’
WHERE IDKaryawan = 184;

C. MODUL 3

1. Command pembuatan tabel terlebih dahulu

CREATE TABLE Data_Penjualan


(
ID_Produk INT NOT NULL,
Nama_Produk NVARCHAR(50) NOT NULL,
Harga_Beli MONEY(10) NOT NULL,
Harga_Jual MONEY(10) NOT NULL
Jumlah_Beli INT NOT NULL,
Jumlah_Terjual INT NOT NULL,
);

INSERT INTO Data_Penjualan


(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (1, ‘Gero Pasta’, 880, 1000, 40, 40)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (2, ‘Gero Cheese’, 1450, 1500, 40, 40)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (3, ‘Bang Bang’, 920, 1000, 45, 42)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (4, ‘Richuuse Wafer’, 690, 750, 50, 48)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (5, ‘Richuuse Ooh’, 1340, 1500, 50, 44)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (6, ‘Gero Pasta’, 945, 1000, 24, 19)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (7, ‘Auqa Mineral Water’, 2440, 2500, 24, 12)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (8, ‘Roti Keju Ciciwa’, 4200, 5000, 20, 20)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (9, ‘Roti Pandan Ciciwa’, 4100, 5000, 20, 20)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (10, ‘Ma’ijah level 6’, 2400, 3000, 22, 25)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (11, ‘Ma’ijah level 7’, 2890, 3500, 23, 25)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (12, ‘Maijah level 8’, 3350, 4000, 20, 25)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (13, ‘Chyko Chyko Vanilla’, 460, 500, 80, 76)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (14, ‘Old Green Tea’, 2450, 3000, 24, 21)
INSERT INTO Data_Penjualan
(ID_Produk, Nama_Produk, Nama_Produk, Harga_Beli,
Harga_Jual, Jumlah_beli, Jumlah_Terjual)
VALUES (15, ‘The Persegi’, 2100, 2500, 24, 22)

ALTER TABLE Data_Penjualan ADD Margin_Keuntungan MONEY(10);

SELECT ID_Produk, Nama_Produk, Harga_Jual–Harga_Beli AS


Margin_Keuntungan FROM Data_Penjualan ORDER BY
Margin_Keuntungan ASCE;

2. ALTER TABLE Data_Penjualan ADD Margin_Keuntungan MONEY(10);

SELECT Nama_Produk, Harga_Jual, Harga_Beli*Jumlah_Pembelian AS


Investasi FROM Data_Penjualan WHERE ID_Produk BETWEEN 5-12;

D. MODUL 4

1. Terdapat 3 tipe join yang sering digunakan, yaitu:

1. Equijoins
Dikenal juga sebagai Inner Join atau Simple Join. Tipe join ini digunakan bila ingin
menampilkan isi dari kolom tertentu pada suatu tabel dan menggabungkanya dengan kolom
tertentu pada tabel lainnya yang ditampilkan menurut kesamaan isi dari kolom yang sama-
sama dimiliki oleh kedua tabel tersebut yaitu Primary Key dan Foreign Key. Operator yang
digunakan adalah INNER JOIN dengan syntax query sebagai berikut.

SELECT <column_name>
FROM <main_table>
INNER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;
Contoh:
Diketahui bahwa terdapat tabel Pegawai dan Dept dengan spesifikasi dan konten sebagai
berikut.

Kita ingin menampilkan identitas antara lain: IDPeg, Nama, dan NamaDept. Kedua tabel
dihubungkan dengan Foreign Key pada tabel Pegawai, yakni IDDept yang dapat
dihubungkan dengan Primary Key pada tabel Dept, yakni IDDept. Dengan demikian, SQL
statement yang bisa kita gunakan adalah sebagai berikut.

SELECT Pegawai.IDPeg, Pegawai.Nama, Dept.NamaDept


FROM Dept INNER JOIN Pegawai
ON Pegawai.IDDept=Dept.IDDept;

Berikut ini penjelasan dari syntax query diatas.

SYNTAX KETERANGAN
SELECT  Menampilkan kolom IDPeg, Nama yang berasal
Pegawai.IDPeg, dari tabel Pegawai
Pegawai.Nama,  Serta kolom NamaDept yang berasal dari tabel
Dept.NamaDept Dept
FROM Dept INNER Kesemua kolom tersebut berasal dari tabel Dept yang
JOIN Pegawai dihubungkan dengan tabel Pegawai.

Catatan: Walaupun posisi penulisan tabel Dept dan


tabel Pegawai terbalik, tabel yang ditampilkan sama.
ON Menentukan kolom-kolom yang menjadi kolom
Pegawai.IDDept penghubung kedua tabel. Dalam hal ini
= Dept.IDDept menghubungkan kolom IDDept yang berasal dari
tabel Pegawai yang nilainya sama dengan/berasal
dari kolom IDDept pada tabel Dept.

Dari statement diatas terlihat bahwa kita ingin menampilkan IDPeg dan Nama (SELECT
Pegawai.IDPeg, Pegawai.Nama) dari table Pegawai. Sementara itu, NamaDept
didapatkan dari tabel Dept, sehingga untuk menampilkan juga NamaDept, ditambahkan
sintaks SELECT Dept.NamaDept.

Hal yang menyatukan keduanya adalah IDDept yang dimiliki tabel Pegawai maupun
tabel Dept. Karena itu, untuk menampilkan Nama yang sesuai, maka nilai IDDept pada
tabel Pegawai harus sama dengan nilai pada tabel Dept. Dalam statement query diatas
hal ini diterjemahakan pada bagian ON Pegawai.IDDept=Dept.IDDept.
Catatan: Kedua tabel tetap dapat dihubungkan meskipun nama kolom yang berhubungan
berbeda (dalam contoh nama kolom sama, yaitu IDDept). Hal yang paling
utama adalah kedua kolom yang berhubungan harus terhubung dengan
pendefinisian primary key dan foreign key terlebih dahulu.

2. Outer joins
Fungsi join condition yang digunakan untuk melihat semua baris yang terdapat pada tabel
utama yang dihubungkan dengan tabel lainnya. Berbeda dari fungsi inner join, fungsi outer
join ini juga menampilkan baris yang tidak memenuhi syarat join yang berikan. Outer join
dinyatakan dengan operator OUTER JOIN.

Pada Microsoft SQL 2005, terdapat dua jenis statement Outer join, yaitu Right Outer Join dan
Left Outer Join. Perbedaannya adalah kolom yang menjadi acuan untuk tampilan eksekusi.
Jika menggunakan Right Outer Join, maka yang dijadikan acuan adalah tabel yang
statemennya berada di sebelah kanan statement Right Outer Join tersebut. Sebaliknya, jika
menggunakan Left Outer Join, maka kolom yang dijadikan acuan adalah tabel yang
statemennya berada di sebelah kiri statement Left Outer Join.

Adapun syntax yang digunakan adalah sebagai berikut.

 Penggunaan RIGHT OUTER JOIN.

SELECT <column_name>
FROM <main_table>
RIGHT OUTER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;

 Penggunaan LEFT OUTER JOIN.

SELECT <column_name>
FROM <main_table>
LEFT OUTER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;

Contoh:
 Penggunaan RIGHT OUTER JOIN.

SELECT Pegawai.IDPeg, Pegawai.Nama, Dept.NamaDept


FROM Dept
RIGHT OUTER JOIN Pegawai
ON Pegawai.IDDept=Dept.IDDept;
Berikut ini penjelasan dari syntax query diatas.

SYNTAX KETERANGAN
SELECT  Menampilkan kolom IDPeg, Nama yang berasal dari
Pegawai.IDPeg, tabel Pegawai
Pegawai.Nama,  Serta kolom NamaDept yang berasal dari tabel Dept
Dept.NamaDept
FROM Dept RIGHT Kesemua kolom tersebut berasal dari tabel Dept yang
OUTER JOIN dihubungkan dengan tabel Pegawai dengan fungsi
Pegawai RIGHT OUTER JOIN.

Catatan: Karena menggunakan fungsi RIGHT OUTER


JOIN, maka seluruh record yang berada dalam tabel yang
disebelah kanan fungsi join akan ditampilkan. Dalam hal ini
tabel Pegawai.
ON Menentukan kolom-kolom yang menjadi kolom
Pegawai.IDDept penghubung kedua tabel. Dalam hal ini menghubungkan
= Dept.IDDept kolom IDDept yang berasal dari tabel Pegawai yang nilainya
sama dengan/berasal dari kolom IDDept pada tabel Dept.

 Penggunaan LEFT OUTER JOIN.

SELECT Pegawai.IDPeg, Pegawai.Nama, Dept.NamaDept


FROM Dept
LEFT OUTER JOIN Pegawai
ON Pegawai.IDDept=Dept.IDDept;

Berikut ini penjelasan dari syntax query diatas.

SYNTAX KETERANGAN
SELECT  Menampilkan kolom IDPeg, Nama yang berasal
Pegawai.IDPeg, dari tabel Pegawai
Pegawai.Nama,  Serta kolom NamaDept yang berasal dari tabel
Dept.NamaDept Dept
FROM Dept LEFT Kesemua kolom tersebut berasal dari tabel Dept yang
OUTER JOIN dihubungkan dengan tabel Pegawai dengan fungsi
Pegawai LEFT OUTER JOIN.

Catatan: Karena menggunakan fungsi LEFT OUTER


JOIN, maka seluruh record yang berada dalam tabel
yang disebelah kiri fungsi join akan ditampilkan. Dalam
hal ini tabel Dept.
ON Menentukan kolom-kolom yang menjadi kolom
Pegawai.IDDept= penghubung kedua tabel. Dalam hal ini menghubungkan
Dept.IDDept kolom IDDept yang berasal dari tabel Pegawai yang
nilainya sama dengan/berasal dari kolom IDDept pada
tabel Dept.

Pada Right Join, seluruh data dari tabel Pegawai ditampilkan baik yang memiliki Nama
Dept ataupun tidak. Sedangkan, pada Left Join berlaku sebaliknya, data seluruh
Departemen ditampilkan baik yang memiliki anggota Pegawai ataupun tidak. Pada contoh
Left Join diatas, Nama Departemen tercetak dua data atau lebih. Hal ini tidak menjadi
masalah meskipun pada tabel Dept hanya terdapat satu data Dept tersebut.

3. Self Joins

Pada pengelolaan basis data, terkadang kita ingin memberikan kolom tambahan yang
sebenarnya kolom tersebut sama dengan salah satu kolom dalam tabel tersebut. Disaat
seperti inilah fungsi self join digunakan. Dengan fungsi self join, kita dapat menghubungkan
tabel dengan tabel itu sendiri. Operator yang digunakan untuk memanggil fungsi self join ini
sebenarnya adalah INNER JOIN. Hanya saja yang dihubungkan adalah tabel yang sama.
Adapun syntax query yang digunakan untuk memanggil fungsi tersebut adalah sebagai
berikut.

SELECT <column_name>
FROM <main_table> AS A
INNER JOIN <main_table> AS B
ON A.<joined_column>= A.<joined_column>;

Contoh:

Pada tabel Pegawai yang telah dibuat sebelumnya, kita ingin menampilkan kolom IDPeg,
Nama, dan NamaAtasan. Untuk membuat nama atasan tersebut, sebelumnya kita perlu
menggabungkan kolom IDAtasan pada tabel Pegawai yang datanya berasal dari kolom
IDPeg yang juga berasal dari tabel Pegawai.

Adapun syntax yang digunakan untuk menampilkan tabel tersebut adalah:

SELECT P.IDPeg, P.Nama, A.Nama AS NamaAtasan


FROM Pegawai AS P
INNER JOIN Pegawai AS A
ON P.IDAtasan = A.IDPeg;
Berikut ini penjelasan dari syntax query diatas.

SYNTAX KETERANGAN
SELECT  Menampilkan kolom IDPeg, Nama yang berasal dari
P.IDPeg, tabel Pegawai
P.Nama, A.Nama  Serta kolom lain yang juga menampilkan kolom Nama dari
AS NamaAtasan
tabel Pegawai namun berdasarkan isi kolom IDAtasan
yang terhubung dengan kolom IDPeg. Dan kolom tersebut
diberi inisial NamaAtasan.
FROM Pegawai Kesemua kolom tersebut berasal dari tabel Pegawai yang
AS P INNER diberi initial P dan dihubungkan dengan tabel yang sama, yaitu
JOIN Pegawai tabel Pegawai yang diberi initial berbeda, yaitu A.
AS A
ON P.IDAtasan Menghubungkan kolom IDAtasan yang berasal dari tabel P
= A.IDPeg (Tabel Pegawai sebenarnya) yang nilainya sama
dengan/berasal dari kolom IDPeg pada tabel A (Tabel
Pegawai virtual)

2a. CREATE TABLE Produk.Spesifikasi


(
ID_Produk INT NOT NULL,
Nama_Produk NVARCHAR(60) NOT NULL,
Tanggal_Release DATETIME NOT NULL,
Pengrajin NVARCHAR(60) NOT NULL
)

CREATE TABLE Produk.RekapPenjualan


(
ID_RPenjualan INT NOT NULL,
ID_Produk INT NOT NULL,
Jumlah_Penjualan INT NOT NULL,
Jumlah_Pembelian INT NOT NULL,
Sisa_Barang INT NOT NULL
)

ALTER TABLE Produk.Spesifikasi


ADD CONSTRAINT PK_Produk PRIMARY KEY (ID_Produk)

ALTER TABLE Produk.RekapPenjualan


ADD CONSTRAINT PK_RPenjualan PRIMARY KEY (ID_RPenjualan)

ALTER TABLE Produk.RekapPenjualan


ADD CONSTRAINT FK_IDProduk FOREIGN KEY (ID_Produk)
REFERENCES Produk.Spesifikasi
SELECT ID_Penjualan, Nama_Produk, Pengrajin, Sisa_Barang
FROM Produk.Spesifikasi INNER JOIN Produk.RekapPenjualan
ON ID_Produk=ID_RPenjualan;

a. SELECT Nama_Produk, Tanggal_Release, Pengrajin, Sisa_Barang


FROM Produk.Spesifikasi INNER JOIN Produk.RekapPenjualan
ON ID_Produk=ID_RPenjualan WHERE Sisa_Barang < 10;

E. MODUL 5

1. CREATE TABLE Data_Karyawan


(
IDKaryawan INT NOT NULL,
Nama_Karyawan NVARCHAR(60) NOT NULL,
Alamat NVARCHAR(256) NOT NULL,
Telepon INT NULL,
IDManajer INT NULL,
),

CREATE TABLE Data_Manajer


(
IDManajer INT NOT NULL,
Nama_Manajer NVARCHAR(60) NOT NULL,
Alamat NVARCHAR(65) NOT NULL,
Telepon INT NULL,
),

ALTER TABLE Data_Karyawan


ADD CONSTRAINT PK_IDKaryawan PRIMARY KEY (ID_Karyawan)

ALTER TABLE Data_Manajer


ADD CONSTRAINT PK_IDManajer PRIMARY KEY (ID_Manajer)

ALTER TABLE Data_Karyawan


ADD CONSTRAINT FK_IDManajer FOREIGN KEY (ID_Manajer)
REFERENCES Data_Manajer

INSERT INTO Data_Karyawan


(IDKaryawan, Nama_Karyawan, Alamat, Telepon, IDManajer)
VALUES (134, ‘Sanusi Santoro’, ‘Cidadap’, 6546756, 457),

INSERT INTO Data_Karyawan


(IDKaryawan, Nama_Karyawan, Alamat, Telepon, IDManajer)
VALUES (176, ‘Raka Putranto’, ‘Batununggal’, 4676577, 457),

INSERT INTO Data_Karyawan


(IDKaryawan, Nama_Karyawan, Alamat, Telepon, IDManajer)
VALUES (234, ‘Gilang Septiawan’, ‘Kampung Pulo’, 7865854,
458);

INSERT INTO Data_Manajer


(IDManajer, Nama_Manajer, Alamat, Telepon)
VALUES (457, ‘Santi Widyanti’, ‘Simpang Lima’, 2343256);

INSERT INTO Data_Manajer


(IDManajer, Nama_Manajer, Alamat, Telepon)
VALUES (423, ‘Harianto’, ‘Cisitu’, 3979878);

INSERT INTO Data_Manajer


(IDManajer, Nama_Manajer, Alamat, Telepon)
VALUES (457, ‘Garinda Hari’, ‘Tebet’, 3268888);

SELECT Data_Karyawan.ID_Karyawan, Data_Karyawan.Nama_Karyawan,


Data_Manajer.Nama_Manajer FROM Data_Manajer INNER JOIN
Data_Karyawan ON Data_Karyawan.IDKaryawan =
Data_Manajer.IDManajer;

2. Pada modul ini, terdapat 5 query yang akan dijelaskan, yaitu:

1. Subquery with the INSERT statement

Subquery ini digunakan jika user ingin meng-copy isi suatu tabel yang telah dibuat
sebelumnya. Tabel baru ini selanjutnya dapat diubah sesuai dengan keinginan user tanpa
mengubah tabel awalnya.

Contoh penggunaan:

Untuk melakukan duplikasi tabel, dilakukan pembuatan tabel tersebut dengan isi kolom dan
tipe data yang sama seperti tabel yang akan di copy. Sebagai contoh, dilakukan pembuatan
tabel Pegawai2 sebagai berikut.

CREATE TABLE Pegawai2


(
IDPeg INT NOT NULL PRIMARY KEY,
Nama NVARCHAR(50) NOT NULL,
Usia INT NOT NULL,
IDDept INT NULL,
IDAtasan INT NULL
);

Fungsi Tabel Sebagai tabel yang data-datanya (record-nya) akan dipaste dari tabel
Baru lain yang memiliki tipe data dan kolom yang sama.
Dengan tabel tersebut, kemudian dilakukan INSERT tabel dari tabel Pegawai. Berikut ini syntax
subquery with the INSERT statement tersebut.

INSERT INTO Pegawai2


SELECT * FROM Pegawai;

Fungsi Untuk mengcopy isi dari tabel Pegawai dan me-paste-nya pada tabel
Syntax Pegawai2 yang telah dibuat templatanya.

2. Scalar subqueries

Subquery ini digunakan untuk melakukan statement query (SELECT, INSERT, UPDATE, atau
DELETE) untuk record-record yang memiliki kesamaan nilai dengan kriteria yang diberikan.
Untuk memahami lebih jelas penggunaan query ini, dapat melihat contoh berikut:

SELECT Nama
FROM Pegawai
WHERE IDDept =
(
SELECT IDDept
FROM Pegawai
WHERE Nama=’Angie’
);

Fungsi Syntax di atas digunakan untuk menampilkan seluruh Nama Pegawai yang
Syntax memiliki IDDept yang sama dengan IDDept pegawai yang bernama ‘Angie’.

Berikut ini penjelasan dari syntax subqueries diatas.

SYNTAX KETERANGAN
SELECT Nama Menampilkan kolom Nama yang berasal dari tabel
FROM Pegawai Pegawai yang memiliki IDDept memenuhi kriteria.
WHERE IDDept =
(SELECT IDDept Menampilkan kolom IDDept yang berasal dari tabel
FROM Pegawai Pegawai yang isi dari kolom Nama-nya adalah ‘Angie’.
WHERE Nama=
’Angie’);

Syntax diatas akan menghasilkan tampilan yang sama seperti pada penggunaan JOIN dibawah ini.
SELECT X.Nama
FROM Pegawai AS X
JOIN Pegawai AS Y
ON (X.IDDept=Y.IDDept)
WHERE Y.Nama='Angie';

3. Table subqueries

Table subquery digunakan bila user ingin melakukan statement query (SELECT, INSERT,
UPDATE, atau DELETE) untuk record-record yang tidak NULL dan tidak terdapat duplikasi.
Untuk memahami lebih jelas penggunaan query ini, dapat melihat contoh berikut:

SELECT NamaDept
FROM Dept
WHERE IDDept IN
(
SELECT DISTINCT IDDept
FROM Pegawai
);

Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
Syntax NamaDept yang memiliki IDDept yang tidak redundan pada tabel
Pegawai

4. Correlated subqueries
Terkadang user hanya ingin menampilkan atau melakukan statement query lainnya untuk
record-record pada suatu database yang nilai pada salah satu kolomnya memenuhi suatu
kriteria tertentu. Pada kondisi seperti itulah subquery ini digunakan, yaitu dengan
membandingkan nilai pada suatu kolom dari record tersebut dengan kriteria yang ditetapkan.
Sebagai contoh:

Bila user ingin menampilkan nama pegawai yang yang memiliki IDDept lebih besar dari rata-
rata IDDept seluruh pegawai, syntax yang digunakan adalah:

SELECT Nama
FROM Pegawai
WHERE IDDept <
(
SELECT AVG(IDDept) FROM Pegawai
);

Catatan: Syntax di atas hanya sebagai contoh karena pada kasus sebenarnya tidak mungkin
user akan merata-rata IDDept.
5. Subqueries with EXISTS, NOT EXISTS

Subquery ini digunakan untuk melakukan statement query (SELECT, INSERT, UPDATE, atau
DELETE) untuk record-record yang juga sudah terdaftar atau belum terdaftar pada tabel
lainnya. Bila ingin melakukan statement query untuk record-record yang telah terdaftar,
digunakan operator EXIST, namun bila ingin melakukan statement query untuk record-record
yang belum terdaftar, digunakan operator NOT EXIST.

Berikut ini contoh dari penggunaan subqueries with EXISTS.

SELECT NamaDept
FROM Dept
WHERE EXISTS
(
SELECT *
FROM Pegawai
WHERE Dept.IDDept=Pegawai.IDDept
);

Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
Syntax NamaDept yang memiliki IDDept.

Sedangkan, untuk NOT EXIST digunakan syntax berikut:

SELECT NamaDept
FROM Dept
WHERE EXISTS
(
SELECT *
FROM Pegawai
WHERE Dept.IDDept=Pegawai.IDDept
);

Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
NamaDept yang tidak memiliki IDDept.

Anda mungkin juga menyukai