Database System

Tugas 3 ~ Data Manipulation - Simple Query


Kontak : \(\downarrow\)
Email
Instagram yyosia
RPubs https://rpubs.com/yosia/

Introduction

Seperti yang kita ketahui database dapat menyimpan dan memelihara serta mengelola data, dalam database SQL yang dapat digunakan untuk menyimpan dan memelihara serta mengelola data dalam database tersebut baik secara langsung maupun menggunakan macam-macam bahasa pemrograman. database yang relasional akan mengambil data dan menganalisis data dengan menggunakan query. kita akan mempelajari beberapa query untuk mengolah data.

sebelumnya kita konekan R dengan database kita. coding :

library(RMySQL)
library(DBI)
yosia <- dbConnect(RMySQL::MySQL(),
                   dbname = 'new_mariadb',
                   username = 'root',
                   password = '',
                   host = 'localhost',
                   port = 3306)
knitr::opts_chunk$set(connection = "yosia")

Jadi kita konekan SQL dengan nama ‘yosia’ agar lebih simpel dalam memasukan coding

SELECT

di sesi ini kita akan mengambil data dari tabel yang sudah di gabungkan, kita memilih tabel mana yang akan kita ambil. contohnya :

SELECT  CustomerName, Address, City, Country
FROM CUSTOMERS;
Displaying records 1 - 10
CustomerName Address City Country
Alfreds Futterkiste Obere Str. 57 Frankfurt Germany
Ana Trujillo Emparedados y helados Avda. de la Constitución 2222 México D.F. Mexico
Antonio Moreno Taquería Mataderos 2312 México D.F. Mexico
Around the Horn 120 Hanover Sq. London UK
Berglunds snabbköp Berguvsvägen 8 Luleå Sweden
Blauer See Delikatessen Forsterstr. 57 Mannheim Germany
Blondel père et fils 24, place Kléber Strasbourg France
Bólido Comidas preparadas C/ Araquil, 67 Madrid Spain
Bon app’ 12, rue des Bouchers Marseille France
Bottom-Dollar Marketse 23 Tsawassen Blvd. Tsawassen Canada

dari tabel-tabel di atas muncul tabel yang sudah kita select atau pilih.

DISTINCT

DISTINCT digunakan saat kita ingin menampilkan representasi dari suatu tabel, dengan kata lain hanya 1 varian data yang muncul jika ada data yang sama. contohnya :

SELECT DISTINCT Country
From CUSTOMERS;
Displaying records 1 - 10
Country
Germany
Mexico
UK
Sweden
France
Spain
Canada
Argentina
Switzerland
Brazil

dari tabel di atas kita melihat bahwa dari 91 data dari CUSTOMERS yang tabelnya COUNTRY ternyata ada 21 varian data yang berbeda, dan sisanya data yang duplicate.

WHERE

WHERE merupakan perintah dasar SQL yang di gunakan untuk mem-filter hasil SELECT dengan mengekstrak record yang memenuhi persyaratan tertentu.

SELECT *
FROM customers
WHERE country='Mexico';
5 records
CustomerID CustomerName ContactName Address City PostalCode Country
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 5021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 5023 Mexico
13 Centro comercial Moctezuma Francisco Chang Sierras de Granada 9993 México D.F. 5022 Mexico
58 Pericles Comidas clásicas Guillermo Fernández Calle Dr. Jorge Cash 321 México D.F. 5033 Mexico
80 Tortuga Restaurante Miguel Angel Paolino Avda. Azteca 123 México D.F. 5033 Mexico

dilihat dari tabel diatas berarti kita mengambil data dari customers dan kita hanya memilih negara mexico yang di dalam data customers.

catatan

Operator Deskripsi
= sama dengan
> lebih besar
< lebih kecil
>= lebih besar sama dengan
<= lebih kecil sama dengan
<> tidak sama dengan, beberapa versi SQL dapat ditulis !=
IS NULL or IS NOT NULL field dengan nilai NULL adalah field tanpa nilai
BETWEEN Antara rentang tertentu
LIKE mencari pola
IN Untuk menentukan beberapa kemungkinan nilai untuk kolom

BETWEEN

kondisi yang memungkinkan kita untuk melakukan pengujian jika sebuah nilai berada dalam suatu rentang nilai tertentu. jadi kita ingin menampilkan data-data yang kita sudah tentukan. Contohnya:

SELECT *
FROM products
WHERE price
BETWEEN 10 AND 20;
Displaying records 1 - 10
ProductID ProductName SupplierID CategoryID Unit Price
1 Chais 1 1 10 boxes x 20 bags 18.00
2 Chang 1 1 24 - 12 oz bottles 19.00
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10.00
15 Genen Shouyu 6 2 24 - 250 ml bottles 15.50
16 Pavlova 7 3 32 - 500 g boxes 17.45
21 Sir Rodney’s Scones 8 3 24 pkgs. x 4 pieces 10.00
25 NuNuCa Nuß-Nougat-Creme 11 3 20 - 450 g glasses 14.00
31 Gorgonzola Telino 14 4 12 - 100 g pkgs 12.50
34 Sasquatch Ale 16 1 24 - 12 oz bottles 14.00
35 Steeleye Stout 16 1 24 - 12 oz bottles 18.00

dari data di atas kita melihat bahwa price berada dalam rentang 10-20. kondisi between juga bisa digunakan dalam tanggal, jadi kita menentukan dari tanggal berapa dan sampai tanggal berapa. Contohnya OrderDate BETWEEN ‘01-July-1996’ and ‘31-July-1996’:

SELECT *
FROM orders
WHERE orderdate
BETWEEN '1996-07-01' AND '1996-07-31';
Displaying records 1 - 10
OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
10251 84 3 1996-07-08 1
10252 76 4 1996-07-09 2
10253 34 3 1996-07-10 2
10254 14 5 1996-07-11 2
10255 68 9 1996-07-12 3
10256 88 3 1996-07-15 2
10257 35 4 1996-07-16 3

IN

kondisi ini digunakan pada saat datanya string/character

SELECT *
FROM customers
WHERE country
IN ('Germany', 'France', 'UK');
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
6 Blauer See Delikatessen Hanna Moos Forsterstr. 57 Mannheim 68306 Germany
7 Blondel père et fils Frédérique Citeaux 24, place Kléber Strasbourg 67000 France
9 Bon app’ Laurence Lebihans 12, rue des Bouchers Marseille 13008 France
11 B’s Beverages Victoria Ashworth Fauntleroy Circus London EC2 5NT UK
16 Consolidated Holdings Elizabeth Brown Berkeley Gardens 12 Brewery London WX1 6LT UK
17 Drachenblut Delikatessend Sven Ottlieb Walserweg 21 Aachen 52066 Germany
18 Du monde entier Janine Labrune 67, rue des Cinquante Otages Nantes 44000 France
19 Eastern Connection Ann Devon 35 King George London WX3 6FW UK
SELECT *
FROM customers
WHERE country
IN (SELECT country FROM suppliers);
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden
6 Blauer See Delikatessen Hanna Moos Forsterstr. 57 Mannheim 68306 Germany
7 Blondel père et fils Frédérique Citeaux 24, place Kléber Strasbourg 67000 France
8 Bólido Comidas preparadas Martín Sommer C/ Araquil, 67 Madrid 28023 Spain
9 Bon app’ Laurence Lebihans 12, rue des Bouchers Marseille 13008 France
10 Bottom-Dollar Marketse Elizabeth Lincoln 23 Tsawassen Blvd. Tsawassen T2F 8M4 Canada
11 B’s Beverages Victoria Ashworth Fauntleroy Circus London EC2 5NT UK
15 Comércio Mineiro Pedro Afonso Av. dos Lusíadas, 23 São Paulo 05432-043 Brazil

LIKE

Kondisi ini dilakukan untuk mencari pola tertentu. ada 2 wildcard yang sering digunakan pada kondisi LIKE;

  • % = mewakili nol, satu, atau beberapa karakter
  • _ = mewakili satu karakter

kita ingin mencari customername yang namanya awalan ‘a’ :

SELECT *
FROM customers
WHERE customername
LIKE 'a%';
4 records
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 5021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 5023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK

beberapa contoh perbedaan operator LIKE antara ‘%’ dan ’_’ wildcard:

Operator LIKE Deskripsi
WHERE CustomerName LIKE ‘a%’ mencari huruf yang awalan “a”
WHERE CustomerName LIKE ‘%a’ mencari huruf yang akhiran “a”
WHERE CustomerName LIKE ‘%or%’ mencari huruf yang ada “or” dalam data
WHERE CustomerName LIKE ’_r%’ Menemukan nilai apa pun yang memiliki “r” di posisi kedua
WHERE CustomerName LIKE ‘a_%’ Menemukan nilai apa pun yang dimulai dengan “a” dan panjangnya minimal 2 karakter
WHERE CustomerName LIKE ’a__%’ Menemukan nilai apa pun yang dimulai dengan “a” dan panjangnya minimal 3 karakter
WHERE ContactName LIKE ‘a%o’ Menemukan nilai apa pun yang dimulai dengan “a” dan diakhiri dengan “o”

AND, OR and NOT

Operator AND, OR dan NOT merupakan perintah dasar SQL yang biasanya di kombinasikan dengan perintah WHERE. Ketiganya di gunakan untuk mem-filter record berdasarkan suatu kondisi, operator AND akan menampilkan record apabila semua kondisi bernilai TRUE, operator OR akan menampilkan record apabila salah satu kondisi bernilai TRUE, sedangkan operator NOT akan menampilkan record apabila semua kondisi bernilai FALSE.

SELECT * FROM customers
where country='Germany' AND (city='Berlin' OR city='München');
1 records
CustomerID CustomerName ContactName Address City PostalCode Country
25 Frankenversand Peter Franken Berliner Platz 43 München 80805 Germany

ORDER BY

di gunakan untuk mengurutkan result-set dalam pengurutan ‘ascending’ atau ’descending. mengurutkan dari yang terkecil ke terbesar.

SELECT * FROM orderdetails
WHERE quantity BETWEEN 20 AND 50  
ORDER BY quantity, orderid;
Displaying records 1 - 10
OrderDetailID OrderID ProductID Quantity
11 10251 65 20
15 10253 31 20
21 10255 2 20
40 10261 35 20
39 10261 21 20
51 10265 70 20
59 10269 72 20
68 10273 33 20
71 10274 71 20
77 10277 28 20

LIMIT

kondisi ini kita gunakan saat kita hanya ingin menampilkan data teratas dari tabel yang kita pilih. contohnya saya akan menampilkan 3 teratas :

SELECT * FROM orderdetails
WHERE quantity BETWEEN 20 AND 50  
ORDER BY quantity, orderid
LIMIT 3;
3 records
OrderDetailID OrderID ProductID Quantity
11 10251 65 20
15 10253 31 20
21 10255 2 20

selanjutnya, kita akan mengambil 5 baris teratas setelah 3 baris teratas.

SELECT * FROM orderdetails
WHERE quantity BETWEEN 20 AND 50  
ORDER BY quantity, orderid
LIMIT 3,5;
5 records
OrderDetailID OrderID ProductID Quantity
40 10261 35 20
39 10261 21 20
51 10265 70 20
59 10269 72 20
68 10273 33 20

MIN and MAX

function MIN() digunakan untuk mencari nilai terkecil. dan function MAX() digunakan untuk mencari nilai terbesar. kedua fungsi ini hanya menampilkan 1 nilai tidak seperti order by. Contohnya

kita ingin mencari harga termurah dari suatu produk

SELECT MIN(price) AS SmallestPrice
FROM products ;
1 records
SmallestPrice
2.5

selanjutnya kita ingin mencari nilai tertinggi dari suatu produk

SELECT MAX(price) AS LargestPrice
FROM products ;
1 records
LargestPrice
263.5

COUNT, SUM, and AVG

fungsi COUNT() digunakan untuk mengetahui berapa kolom pada tabel. fungsi AVG() digunakan untuk mencari rata-rata. fungsi SUM() digunakan untuk mengetahui jumlahan atau total dari suatu kolom.

mencari rata-rata

SELECT AVG(price)
From Products
1 records
AVG(price)
28.86636

mencari jumlahan

SELECT SUM(price)
From Products
1 records
SUM(price)
2222.71

mencari berapa data

SELECT COUNT(price)
From Products
1 records
COUNT(price)
77

HAVING

digunakan saat fungsi where tidak bisa digunakan. Penggunaan WHERE pada fungsi agregat akan menyebabkan error

Pernyataan SQL berikut mencantumkan jumlah customers di setiap country, diurutkan dari tinggi ke rendah (Hanya sertakan country dengan lebih dari 5 customers):

SELECT COUNT(customerid), country
FROM customers
GROUP BY country
HAVING count(customerid) > 5
ORDER BY count(customerid) DESC;
5 records
COUNT(customerid) country
13 USA
11 France
11 Germany
9 Brazil
7 UK

CASE

digunakan untuk memberikan pesan atau catatan dari suatu tabel. pernyataan sama seperti (IF, THEN, ELSE). jadi jika kondisi terpenuhi dia akan stop membaca dan memasukan hasilnya. tapi jika kondisi tidak terpenuhi dia akan memasukan nilai dari klausa ELSE. jika ELSE tidak terpenuhi juga maka akan diberikan nilai NULL.

Contohnya:

SELECT orderid, quantity,
CASE
  WHEN quantity > 30 THEN 'kuantitas lebih besar dari 30'
  WHEN quantity = 30 THEN 'kuantitas sama dengan 30'
  ELSE 'Kuantitas lebih kecil dari  30'
END AS QuantityText
FROM orderdetails;
Displaying records 1 - 10
orderid quantity QuantityText
10248 12 Kuantitas lebih kecil dari 30
10248 10 Kuantitas lebih kecil dari 30
10248 5 Kuantitas lebih kecil dari 30
10249 9 Kuantitas lebih kecil dari 30
10249 40 kuantitas lebih besar dari 30
10250 10 Kuantitas lebih kecil dari 30
10250 35 kuantitas lebih besar dari 30
10250 15 Kuantitas lebih kecil dari 30
10251 6 Kuantitas lebih kecil dari 30
10251 15 Kuantitas lebih kecil dari 30

SQL berikut akan mengurutkan customers berdasarkan city. Namun, jika city adalah NULL, maka order by Country:

SELECT customername, city, country
FROM customers
ORDER BY
(CASE
  WHEN city IS NULL THEN country
  ELSE city
END);
Displaying records 1 - 10
customername city country
Drachenblut Delikatessend Aachen Germany
Rattlesnake Canyon Grocery Albuquerque USA
Old World Delicatessen Anchorage USA
Vaffeljernet Ã…rhus Denmark
Galería del gastrónomo Barcelona Spain
LILA-Supermercado Barquisimeto Venezuela
Magazzini Alimentari Riuniti Bergamo Italy
Chop-suey Chinese Bern Switzerland
Save-a-lot Markets Boise USA
Folk och fä HB Bräcke Sweden