Email : ardifo.okta@student.matanauniversity.ac.id
RPubs
: https://rpubs.com/ardifo/
Jurusan : Statistika
Address : ARA Center, Matana University Tower
Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua,
Tangerang, Banten 15810.
Kekuatan sebenarnya dari database relasional terletak pada kemampuannya untuk mengambil dan menganalisis data kita dengan cepat dengan menjalankan query. Query memungkinkan kita menarik informasi dari satu atau beberapa tabel berdasarkan serangkaian kondisi pencarian yang Anda tetapkan. Di bagian ini, kita akan mempelajari cara membuat Query satu tabel sederhana.
Pertama, kita perlu connect ke database kita. Silahkan ketik kode berikut di console R kita.
# set up connection and save it into workspace
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
library(RMySQL)
## Loading required package: DBI
library(DBI)
<- dbConnect(RMySQL::MySQL(),
lopo dbname ='new_mariadb',
username='root',
password ='',
host ='localhost',
port =3306)
::opts_chunk$set(connection = "lopo") # to set up the connection in your Rmarkdown chunk knitr
SQL SELECT digunakan untuk mengambil data dari tabel database yang mengembalikan data ini dalam bentuk tabel hasil. Tabel hasil ini disebut juga result-sets. Sintax dasar dari statment adalah sebagai berikut:
SELECT column1, column2, columnN
FROM table_name;
Asumsikan column1, column2… adalah bidang label yang nilainya ingin kita ambil. Nah, jika kita ingin mengambil beberapa bidang yang tersedia di bidang tersebut, maka kita dapat menggunakan sintax berikut.
SELECT CustomerName, Address, City, Country
FROM customers;
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 |
selanjutnya, merupakan cara untuk menyeleksi semua field pada tabel data customers kita.
SELECT *
FROM customers
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfed 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 |
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 |
Distint kegunaannya adalah sampir sama dengan Select, hanya saja distinct menamilkan record yang di seleksi tanpa duplikasi, sehingga setiap records hanya muncul sekali
Query dibawah adalah penenrapan fungsi distinct dengan menDISTINCT column country dari tabel customer.
SELECT DISTINCT Country
FROM customers;
Country |
---|
Germany |
Mexico |
UK |
Sweden |
France |
Spain |
Canada |
Argentina |
Switzerland |
Brazil |
Fungsi Where ini digunakan untuk memfilter records sesuai apa yang kita ingin, Query dibawah ini adalah penerapan fungsi Where dengan menyeleksi semua kolom yang ada pada tabel customers yang memiliki filter country yang berasal dari Mexico
SELECT *
FROM customers
WHERE Country='mexico';
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 |
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 |
Fungsi Between menyeleksi sesuai range yang diberikan. Range tersebut dapat berupa nomor, waktu, atau tanggal. Dibawah penerapan fungsi between untuk menampilkan field pada tabel products dengan harga diantara 10 dan 20
SELECT *
FROM products
WHERE price
BETWEEN 10 and 20
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 |
Nah, bibawah ini juga penerepan fungsi Between untuk menampilkan field tada table orders, dimana Order Date ada diantara 1 Juli 1996 hingga 31 Juli 1996
SELECT *
FROM orders
WHERE OrderDate
BETWEEN '1996-07-01' and '1996-07-31';
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID | OrdersDate |
---|---|---|---|---|---|
10248 | 90 | 5 | 1996-07-04 00:00:00.000000 | 3 | 1996-07-04 |
10249 | 81 | 6 | 1996-07-05 00:00:00.000000 | 1 | 1996-07-05 |
10250 | 34 | 4 | 1996-07-08 00:00:00.000000 | 2 | 1996-07-08 |
10251 | 84 | 3 | 1996-07-08 00:00:00.000000 | 1 | 1996-07-08 |
10252 | 76 | 4 | 1996-07-09 00:00:00.000000 | 2 | 1996-07-09 |
10253 | 34 | 3 | 1996-07-10 00:00:00.000000 | 2 | 1996-07-10 |
10254 | 14 | 5 | 1996-07-11 00:00:00.000000 | 2 | 1996-07-11 |
10255 | 68 | 9 | 1996-07-12 00:00:00.000000 | 3 | 1996-07-12 |
10256 | 88 | 3 | 1996-07-15 00:00:00.000000 | 2 | 1996-07-15 |
10257 | 35 | 4 | 1996-07-16 00:00:00.000000 | 3 | 1996-07-16 |
Fungsi In merupakan fungsi yang digunakan untuk menyeleksi dengan kriteria banyak value. Fungsi ini merupakan pengembangan dari fungsi Where
Dibawah merupakan penerapan fungsi In untuk menyeleksi field kolom COuntry yang berisi Germany, France, dan UK pada tabel basis data Customers
SELECT *
FROM customers
WHERE Country
IN ('Germany','France','UK');
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfed 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 |
Selanjutnya dibawah ini fungsi In yang digunakan untk menyeleksi semua customers yang berasal dari negara yang sama dengan suppliers.
SELECT *
FROM customers
WHERE Country
IN (SELECT Country FROM suppliers);
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfed 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 |
Operator LIKE merupakan pengembangan fungsi WHERE untuk mencari pola tertentu dalam suatu kolom. Pada fungsi Like terdapat dua operator :
% : Tanda persen mewakili nol, satu, atau beberapa karakter
_ : Tanda underscore mewakili single karakter
Query dibawah merupakan penerapan fungsi Like yang digunakan untuk menyeleksi semua kolom pada basis data customer dimana CustomerName diawali dengan huruf A
SELECT *
FROM customers
WHERE CustomerName
LIKE 'a%';
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Alfed 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 |
1 | Alfreds Futterkiste | Alfed 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 |
1 | Alfreds Futterkiste | Alfed 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 |
Berikut Merupakan beberapa contoh like operator
Like ‘a%’ mencari nilai yang diawali dengan huruf A
Like ‘%a’ mencari nilai yang diakhiri dengan huruf A
Like ‘%or%’ mencari nilai yang terdapat or disemua posisi
Like ’_r%’ Mencari nilai yang terdapat huruf r pada posisi kedua
Like ’a_% mencari nilai yang diawali dengan dengan huruf a dan memiliki paling sedikit 2 karakter
Like’a__%’ Mencari nilai yang diawali dengan huruf A dan memiliki paling sedikit 3 karakter
Fungsi Where dapat dikombinasikan dengan AND, OR, dan NOT operators. The AND and OR digunakan untuk memfilter record berdasarkan lebih dari 1 kondisi :
Operator AND akan menampilkan record jika semua kondisi yang dipisahkan dengan fungsi AND adalah TRUE
Operator OR akan menampilkan record jika salah satu kondisi yang dipisahkan dengan OR adalah TRUE
Operator NOT akan menampilkan Record apabila tidak ada kondisi yang terpenuhi
Query dibawah merupakan menyeleksi semua records yang ada pada basis data pada tabel customers dengan kondisi yang dengan Country bernilai Germany dan dengan CITY yang bernilai Berlin atau Munchen.
SELECT * FROM customers
WHERE Country='Germany' AND (City='Berlin' OR City='Munchen');
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
Fungsi Order By digunakan untuk menyeleksi data secara ascending or descending berdasarkan satu atau lebih kolom. Beberapa basis data biasanya sudah mengurutkan basis data dengan ascending
Berikut merupakan penggunaan fungsi order By dengan menyeleksi semua records pada tabel basis data customers dengan kondisi Country bernilai Germany dan Kota yang berasal dari Berlin atau Munchen dan kemudian mengurutkan country dan city secara ascending.
SELECT * FROM customers
WHERE COuntry='Germany' AND (City='Berlin' OR City='Munchen')
ORDER BY Country, City;
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
Fungsi Limit digunakan untuk membatasi jumlah record yang akan ditampilkan
Query dibawah merupakan cara untuk menampilkan seleksi semua records pada table customers dengan kondisi country bernilai Germany dan City bernilai Berlin atau Munchen kemudian kolom Country dan City diurutkan ascending berjumlah 3 records yang paling atas
SELECT * FROM customers
WHERE Country='Germany' AND (City='Berlin' OR City='Munchen')
ORDER BY Country, City
LIMIT 3;
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
25 | Frankenversand | Peter Franken | Berliner Platz 43 | München | 80805 | Germany |
Query dibawah merupakan cara untuk menampilkan seleksi semua records pada table customers dengan kondisi country bernilai Germany dan City bernilai Berlin atau Munchen kemudian kolom Country dan City diurutkan ascending berjumlah 5 records yang paling atas setelah 3 records.
SELECT CustomerName, Address, City, Country
FROM customers
ORDER BY City, Country DESC
LIMIT 3,5;
CustomerName | Address | City | Country |
---|---|---|---|
Drachenblut Delikatessend | Walserweg 21 | Aachen | Germany |
Drachenblut Delikatessend | Walserweg 21 | Aachen | Germany |
Drachenblut Delikatessend | Walserweg 21 | Aachen | Germany |
Drachenblut Delikatessend | Walserweg 21 | Aachen | Germany |
Drachenblut Delikatessend | Walserweg 21 | Aachen | Germany |
Menampilkan nilai minimal dari kolom yang diseleksi
Query dibawah merupakan cara mencari nilai minimal pada kolom Price yang diambil dari tabel basis data products
SELECT MIN(Price) AS SmallestPrice
FROM products;
SmallestPrice |
---|
2.5 |
Query dibawah merupakan cara mencari nilai maksimal pada kolom Price yang diambil dari tabel basis data products
SELECT MAX(Price) AS LargestPrice
FROM products
LargestPrice |
---|
263.5 |
Fungsi COUNT merupakan fungsi yang digunakan untuk menghitung jumlah baris yang sesuai dengan kondisi
Query dibawah merupakan cara untuk menghitung rataan pada kolom Price pada tabel basis data Products
SELECT AVG(Price)
FROM products;
AVG(Price) |
---|
28.86636 |
Fungsi HAVING merupakan pengembangan dari fungsi WHERE untuk menambahkan suatu kondisi agregat.
Berikut merupakan penerapan fungsi having untuk menghitung jumlah baris pada customer ID, dan menyeleksi kolom Country pada tabel Customer dan kemudian pengelompokkan berdasarkan Country. Record yang ditampilkan hanya negara yang memiliki lebih dari 5 customers dan kemudian nama negara diurutkan secara DESCENDING.
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
Having COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
COUNT(CustomerID) | Country |
---|---|
117 | USA |
99 | Germany |
99 | France |
81 | Brazil |
63 | UK |
45 | Spain |
45 | Mexico |
36 | Venezuela |
27 | Canada |
27 | Argentina |
FUngsi Case merupakan fungsi SQL yang sangat mirip dengan fungsi IF THEN ELSE. Ketika suatu kondisi benar maka komputer akan berhenti membaca dan memberikan output.
Berikut merupakan Query yang digunakan dengan menyeleksi orderID dan Quantity. Untuk Quantity yang lebih dari 30 menambahan text the quantity greater than 30, untuk quantity = 30 menambahkan text the quantity is 30 selain itu menampilkan text the Quantity is under 30. Text ditampilkan pada kolom dengan nama QuantityText. ORDER ID dan Quantity diambil dari table basis data orderdetails
SELECT OrderID, Quantity,
CASE
WHEN QUantity > 30 THEN 'THe quantity is greater than 30'
WHEN Quantity =30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END AS QuantityText
FROM orderdetails
OrderID | Quantity | QuantityText |
---|---|---|
10248 | 12 | The quantity is under 30 |
10248 | 10 | The quantity is under 30 |
10248 | 5 | The quantity is under 30 |
10249 | 9 | The quantity is under 30 |
10249 | 40 | THe quantity is greater than 30 |
10250 | 10 | The quantity is under 30 |
10250 | 35 | THe quantity is greater than 30 |
10250 | 15 | The quantity is under 30 |
10251 | 6 | The quantity is under 30 |
10251 | 15 | The quantity is under 30 |
Query dibawah menyeleksi CustomerName, City, Country yang berasal dari tabel basis data Customers dimana data diurutkan secara Ascending. Tetapi, jika City bernilai NULL kemudian diurutkan berdasarkan Country.
SELECT CustomerName, City, Country
FROM customers
ORDER BY
CASE
(WHEN City IS NULL THEN Country
ELSE City
END);
CustomerName | City | Country |
---|---|---|
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Drachenblut Delikatessend | Aachen | Germany |
Rattlesnake Canyon Grocery | Albuquerque | USA |