Database System

Tugas 3


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/claraevania/
RPubs https://rpubs.com/claradellaevania/

1. INTRODUCTION

Database Relasional tentunya memiliki sebuah kekuatan yang terletak pada kemampuan dalam mengambil serta menganalisis data dengan cepat dimana dengan menjalankan QUERY. Query ini merupakan sebuah permintaan akan informasi dimana meliputi informasi yang diterima ataupun diambil dari database. Jadi Query ini akan mengambil sebuah informasi dari satu ataupun beberapa tabel dengan berdasar pada serangkaian kondisi pencarian yang ditetapkan.

Langkah pertama yang harus dilakukan adalah menghubungkan kedatabase kita.

# Mengatur koneksi dan penyimpanan kedalam ruang kerja
library(RMySQL)
library(DBI)
Clara <- dbConnect(RMySQL::MySQL(),
                  dbname='new_mariadb',
                  username='root',
                  password='', 
                  host='localhost',
                  port=3306)
knitr::opts_chunk$set(connection = "Clara") # Untuk mengatur koneksi pada Rmarkdown

2. SELECT

SQL SELECT digunakan dalam mengambil suatu data dari tabel-tabel database dimana akan mengembalikan data tersebut kedalam bentuk tabel hasil yang disebut result-sets. Sintaks dasarnya adalah

SQL Select

SQL Select

Dapat mengasumsikan coloumn1,coloumn2,coloumnN,... sebuah kolom atau bidang tabel yang akan diambil nilainya dan jika ingin mengambil beberapa bidang atau kolom yang tersedia dapat menggunakan sintaks :

SELECT CustomerName, Address, City, Country 
  FROM CUSTOMERS;
Displaying records 1 - 10
CustomerName Address City Country
Alfreds Futterkiste Obere Str. 57 Hamburg 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

Jika ingin mengambil seluruh kolom tabel “CUSTOMERS” kita dapat menggunakan queri :

SELECT *
  FROM CUSTOMERS;
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfreds Mario Obere Str. 57 Hamburg 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

3. DISTINCT

SQL DISTINCT diguanakan secara bersamaan dengan SELECT dalam menghilangkan seluruh catatan duplikat dimana hanya mengambil sebuah catatan yang unik ataupun berbeda pada suatu data. Jadi didalam sebuah tabel, kolom sering berisi banyak nilai duplikat dan perintah tersebut hanya menampilkan nilai yang berbeda dari suatu data.

Sintaks dasar kata kunci DISTINCT untuk menghilangkan rekaman duplikat:

SELECT DISTINCT column_name
  FROM table_name

Contohnya adalah mengambil kolom Country dari Data Customers dimana terdapat 21 data yang berbeda.

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

4. WHERE

WHERE digunakan dalam memfilter atau menyaring record dimana untuk mengekstrak record yang memenuhi sebuah persyaratan tertentu.

SELECT column1, column2, ...
  FROM table_name
    WHERE [condition];

WHERE digunakan dalam pernyataan UPDATE,DELETE,Dll.

Contohnya dalam memilih seluruh pelanggan dari negara “MEKSIKO” pada data “CUSTOMERS”.

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

Beberapa Operator yang dapat digunakan dalam klausa WHERE adalah :

Operator Description
= Sama Dengan
> Lebih Besar
< Lebih Kecil
>= Lebih Besar sama dengan
<= lebih kecil sama dengan
<> Tidak Sama dengan , Versi SQL = !=
IS NULL or IS NOT NUL Kolom dengan nilai NULL merupakan kolom tanpa nilai
BETWEEN antara sebuah rentang tertentu
LIKE Mencari sebuah polla pattern.
IN Menentukan beberapa kemungkinan nilai pada kolom

5. BETWEEN

Operator ini dapat menentukan atau memilih nilai dalam rentang tertentu, dimana nilainya tersebut dapat berupa angka, teks ataupun tanggal. Operator BETWEEN ini bersifat inklusif dimana nantinya nilai awal dan akhir disertakan atau dimasukkan.

SELECT column_name(s)
  FROM table_name
    WHERE column_name 
      BETWEEN value1 AND value2;

Contohnya adalah memilih semua produk dengan harga antara 10 dan 20:

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

Contoh Selanjutnya adalah memilih orderDate antara 01-July-1996 dan 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

6. IN

Operator ini dapat menentukan beberapa nilai yang terkandung dalam WHERE.

SELECT column_name(s)
  FROM table_name
    WHERE column_name 
      IN (SELECT STATEMENT);

Contoh memilih seluruh CUSTOMERS yang berlokasi di “Germany”,“France” atau “UK”

SELECT * 
  FROM Customers
    WHERE Country 
      IN ('Germany', 'France', 'UK');
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfreds Mario Obere Str. 57 Hamburg 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

Contoh selanjutnya adalah memilih seluruh CUSTOMERS dari negara yang sama dengan pemasok

SELECT * 
  FROM Customers
    WHERE Country 
      IN (SELECT Country FROM Suppliers);
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfreds Mario Obere Str. 57 Hamburg 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

7. LIKE

LIKE digunakan dalam mencari pola tertentu pada kolom dimana terdapat 2 wildcard yang sering digunakan secara bersamaan dengan operator LIKE, yaitu :

  • % : Tanda persen mewakili nol, satu, atau beberapa karakter

  • _ Garis bawah mewakili satu karakter

Syntax Dasarnya adalah

SELECT column1, column2, ...
  FROM table_name
    WHERE column LIKE pattern;

Contohnya dalam emmilih seluruh CUSTOMERS dengan Nama Pelanggan dimulai dengan huruf “a”.

SELECT * 
  FROM Customers
    WHERE CustomerName 
      LIKE 'a%';
4 records
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfreds Mario Obere Str. 57 Hamburg 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 yang menunjukkan operator LIKE yang berbeda dengan wildcard ‘%’ dan ’_’.

LIKE Operator Description
WHERE CustomerName LIKE ‘a%’ Menemukan nilai yang dimulai dengan “a”
WHERE CustomerName LIKE ‘%a’ Menemukan nilai yang diakhiri dengan “a”
WHERE CustomerName LIKE ‘%or%’ Menemukan nilai yang memiliki “or” pada posisi manapun
WHERE CustomerName LIKE ’_r%’ Menemukan nilai apa pun yang memiliki “r” pada 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

8. AND,OR,and NOT

WHERE dapat digabungkan dengan operator AND, OR, dan NOT.

  • AND = menampilkan record jika semua kondisi yang dipisahkan oleh AND adalah TRUE.
  • OR = menampilkan record jika salah satu kondisi yang dipisahkan oleh OR adalah TRUE.
  • NOT = menampilkan record jika kondisi NOT TRUE.
SELECT column1, column2, ...
  FROM table_name
    WHERE condition1 AND condition2 OR condition3 NOT condition4

Contoh memilih seluruh kolom dari data CUSTOMERS dimana negaranya “Germany” dan Kota “Berlin” ATAU “München”.

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

9. ORDER BY

SQL ORDER BY digunakan dalam mengurutkan suatu data dimana dalam urutan menaik maupun menurun dengan berdasarkan pada satu atau beberapa kolom. Sintaks dasar ORDER BY adalah sebagai berikut:

SELECT column-list 
  FROM table_name 
    [WHERE condition] 
      [ORDER BY column1, column2, .. columnN] [ASC | DESC];

Secara umum ataupun default ORDER BY mengurutkan sebuah data dalam urutan menaik.Untuk mengurutkan data dalam urutan menurun kita dapat menggunakan kata Kunci DESC lalu untuk mengurutkan dalam urutan Menaik dapat menggunakan kata Kunci ASC. Kita dapat menggunakan lebih dari satu kolom dalam ORDER BY. Namun untuk mengurutkan kolom yang ada pada daftar blok diharuskan memastikan kolom yang digunakan. Blok kode berikut memiliki contoh, yang akan mengurutkan hasilnya dalam urutan menaik berdasarkan Kota dan Negara:

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München')
  ORDER BY Country, City;
1 records
CustomerID CustomerName ContactName Address City PostalCode Country
25 Frankenversand Peter Franken Berliner Platz 43 München 80805 Germany

10. LIMIT

Jika terdapat beberapa tupel yang memenuhi kondisi QUERY akan lebih mudah melihat hanya dalam satu waktu.

  • Digunakan untuk Menetapkan Batas atas Jumlah Tupel yang dikembalikan oleh SQL
  • Dapat ditentukan menggunakan klausa SQL 2008 OFFSET/FETCH FIRST.
  • Ekspresi limit/offset harus berupa bilangan bulat non-negatif.
SELECT column-list 
  FROM table_name 
    [WHERE condition] 
      [ORDER BY column1, column2, .. columnN] [ASC | DESC]
        LIMIT rows_to_skip, next_rows_to_skip;

Contoh mengumpulkan 3 baris TOP

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München')
  ORDER BY Country, City
      LIMIT 3;
1 records
CustomerID CustomerName ContactName Address City PostalCode Country
25 Frankenversand Peter Franken Berliner Platz 43 München 80805 Germany

Contoh Selanjutnya mengumpulkan 5 baris TOP setelah 3 baris TOP

SELECT CustomerName, Address, City, Country 
  FROM customers
    ORDER BY City, Country DESC
      LIMIT 3, 5;
5 records
CustomerName Address City Country
Vaffeljernet Smagsløget 45 Århus Denmark
Galería del gastrónomo Rambla de Cataluña, 23 Barcelona Spain
LILA-Supermercado Carrera 52 con Ave. Bolívar #65-98 Llano Largo Barquisimeto Venezuela
Magazzini Alimentari Riuniti Via Ludovico il Moro 22 Bergamo Italy
Chop-suey Chinese Hauptstr. 29 Bern Switzerland

11. MIN and MAX

  • Fungsi MIN() = Mengembalikan nilai terkecil dari kolom yang dipilih.
  • Fungsi MAX() = Mengembalikan nilai terbesar dari kolom yang dipilih.
SELECT MIN/MAX(column_name)
  FROM table_name
    WHERE condition;

Contoh menemukan harga produk yang termurah :

SELECT MIN(Price) AS SmallestPrice
  FROM Products;
1 records
SmallestPrice
2.5

Contoh Selanjutnya menemukan harga produk yang termahal :

SELECT MAX(Price) AS LargestPrice
  FROM Products;
1 records
LargestPrice
263.5

12. COUNT,SUM,and AVG

  • Fungsi COUNT() digunakan untuk mengembalikan jumlah baris yang sesuai dengan kriteria yang sudah ditentukan.
  • Fungsi AVG() digunakan dalam mengembalikan nilai rata-rata pada kolom numerik.
  • Fungsi SUM() digunakan dalam mengembalikan jumlah total pada kolom numerik.
SELECT COUNT/SUM/AVG(column_name)
FROM table_name
WHERE condition;

Contoh Mencari Jumlah Baris Harga pada semua products

SELECT COUNT(Price)
  FROM Products;
1 records
COUNT(Price)
77

Contoh Selanjutnya Mencari Rata-Rata Harga pada semua products

SELECT AVG(Price)
  FROM Products;
1 records
AVG(Price)
28.86636

Contoh Selanjutnya Mencari Jumlah Harga pada semua products

SELECT SUM(Price)
  FROM Products;
1 records
SUM(Price)
2222.71

13. HAVING

Pada SQL, HAVING ditambahkan dikarenakan kata kunci WHERE tidak daoat digunakan dengan fungsi agregat.

SELECT column_name(s)
  FROM table_name
    WHERE condition
      GROUP BY column_name(s)
        HAVING condition
          ORDER BY column_name(s);

Contoh mencantumkan jumlah pelanggan pada setiap negara yang diurutkan dari tinggi ke rendah dengan lebih dari 5 pelanggan.

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 Germany
11 France
9 Brazil
7 UK

14. CASE

CASE mengembalikan nilai saat pada kondisi seperti pernyataan IF-THEN-ELSE terpenuhi. Jadi jika suatu kondisi benar-benar terpenuhi itu nanti akan berhenti membaca serta mengembalikan hasilnya. namun jika tidak terdapat kondisi yang benar atau terpenuhi, maka akan mengembalikan nilai dalam ELSE. Jika tidak terdapat ELSE dan tidak terdapat kondisi yang benar atau terpenuhi, akan mengembalikan NULL.

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

Contoh SQL mengembalikan nilai saat kondisi pertama terpenuhi.

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;
Displaying records 1 - 10
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

Contoh selanjutnya mengurutkan CUSTOMERS berdasarkan Kota namun Jika Kota NULL maka berdasarkan Negara.

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

15. EXERCISE

Menghubungkan ke dalam database kita.

# Mengatur koneksi dan penyimpanan kedalam ruang kerja
library(RMySQL)
library(DBI)
Clara <- dbConnect(RMySQL::MySQL(),
                  dbname='new_mariadb',
                  username='root',
                  password='', 
                  host='localhost',
                  port=3306)
knitr::opts_chunk$set(connection = "Clara") # Untuk mengatur koneksi pada Rmarkdown

a. Memilih Beberapa atribut pemasok dalam urutan abjad

SELECT SupplierID, SupplierName, Address, City, Country
  FROM Suppliers S
     ORDER BY S.SupplierName ASC;
Displaying records 1 - 10
SupplierID SupplierName Address City Country
18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France
16 Bigfoot Breweries 3400 - 8th Avenue Suite 210 Bend USA
5 Cooperativa de Quesos ‘Las Cabras’ Calle del Rosal 4 Oviedo Spain
27 Escargots Nouveaux 22, rue H. Voiron Montceau France
1 Exotic Liquid 49 Gilbert St. Londona UK
29 Forêts d’érables 148 rue Chasseur Ste-Hyacinthe Canada
14 Formaggi Fortini s.r.l. Viale Dante, 75 Ravenna Italy
24 G’day, Mate 170 Prince Edward Parade Hunter’s Hill Sydney Australia
28 Gai pâturage Bat. B 3, rue des Alpes Annecy France
3 Grandma Kelly’s Homestead 707 Oxford Rd. Ann Arbor USA

b. Memilih Beberapa atribut pemasok dalam urutan abjad terbalik!

SELECT SupplierID, SupplierName, Address, City, Country
  FROM Suppliers S
     ORDER BY S.SupplierName DESC;
Displaying records 1 - 10
SupplierID SupplierName Address City Country
22 Zaanse Snoepfabriek Verkoop Rijnweg 22 Zaandam Netherlands
4 Tokyo Traders 9-8 Sekimai Musashino-shi Tokyo Japan
17 Svensk Sjöföda AB Brovallavägen 231 Stockholm Sweden
8 Specialty Biscuits, Ltd. 29 King’s Way Manchester UK
10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brazil
12 Plutzer Lebensmittelgroßmärkte AG Bogenallee 51 Frankfurt Germany
9 PB Knäckebröd AB Kaloadagatan 13 Göteborg Sweden
7 Pavlova, Ltd. 74 Rose St. Moonie Ponds Melbourne Australia
26 Pasta Buttini s.r.l. Via dei Gelsomini, 153 Salerno Italy
15 Norske Meierier Hatlevegen 5 Sandvika Norway

c. Beberapa atribut pemasok dipesan berdasarkan negara, lalu berdasarkan kota!

SELECT SupplierID, SupplierName, Address, City, Country
  FROM Suppliers S
     ORDER BY S.Country ASC, S.City ASC;
Displaying records 1 - 10
SupplierID SupplierName Address City Country
7 Pavlova, Ltd. 74 Rose St. Moonie Ponds Melbourne Australia
24 G’day, Mate 170 Prince Edward Parade Hunter’s Hill Sydney Australia
10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brazil
25 Ma Maison 2960 Rue St. Laurent Montréal Canada
29 Forêts d’érables 148 rue Chasseur Ste-Hyacinthe Canada
21 Lyngbysild Lyngbysild Fiskebakken 10 Lyngby Denmark
23 Karkki Oy Valtakatu 12 Lappeenranta Finland
28 Gai pâturage Bat. B 3, rue des Alpes Annecy France
27 Escargots Nouveaux 22, rue H. Voiron Montceau France
18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France

d. Memilih Semua atribut pemasok dan urutan abjad terbalik menurut negara, lalu menurut kota

SELECT S.*
  FROM Suppliers S
     ORDER BY S.Country DESC, S.City DESC;
Displaying records 1 - 10
SupplierID SupplierName ContactName Address City PostalCode Country Phone
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA (100) 555-4822
19 New England Seafood Cannery Robb Merchant Order Processing Dept. 2100 Paul Revere Blvd. Boston 2134 USA (617) 555-3267
16 Bigfoot Breweries Cheryl Saylor 3400 - 8th Avenue Suite 210 Bend 97101 USA (503) 555-9931
3 Grandma Kelly’s Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA (313) 555-5735
8 Specialty Biscuits, Ltd. Peter Wilson 29 King’s Way Manchester M14 GSD UK (161) 555-4448
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. Londona EC1 4SD UK (171) 555-2222
17 Svensk Sjöföda AB Michael Björn Brovallavägen 231 Stockholm S-123 45 Sweden 08-123 45 67
9 PB Knäckebröd AB Lars Peterson Kaloadagatan 13 Göteborg S-345 67 Sweden 031-987 65 43
5 Cooperativa de Quesos ‘Las Cabras’ Antonio del Valle Saavedra Calle del Rosal 4 Oviedo 33007 Spain (98) 598 76 54
20 Leka Trading Chandra Leka 471 Serangoon Loop, Suite #402 Singapore 512 Singapore 555-8787

e. Semua pesanan, diurutkan berdasarkan jumlah total dengan nilai yang terbesar dahulu.

SELECT O.*, OD.Quantity
  FROM Orders O
    RIGHT JOIN orderdetails OD
      ON O.OrderID = OD.OrderID
        ORDER BY OD.Quantity DESC;
Displaying records 1 - 10
OrderID CustomerID EmployeeID OrderDate ShipperID Quantity
10398 71 2 1996-12-30 3 120
10286 63 8 1996-08-21 3 100
10440 71 4 1997-02-10 2 90
10373 37 4 1996-12-05 3 80
10359 72 5 1996-11-21 3 80
10345 63 2 1996-11-04 2 80
10442 20 3 1997-02-11 2 80
10324 71 9 1996-10-08 1 80
10351 20 1 1996-11-11 1 77
10401 65 1 1997-01-01 1 70

f. mendapatkan semua kecuali 10 produk paling mahal yang diurutkan dengan berdasarkan harga

SELECT P.*
  FROM products P
    ORDER BY P.Price DESC
      LIMIT 10;
Displaying records 1 - 10
ProductID ProductName SupplierID CategoryID Unit Price
38 Côte de Blaye 18 1 12 - 75 cl bottles 263.50
29 Thüringer Rostbratwurst 12 6 50 bags x 30 sausgs. 123.79
9 Mishi Kobe Niku 4 6 18 - 500 g pkgs. 97.00
20 Sir Rodney’s Marmalade 8 3 30 gift boxes 81.00
18 Carnarvon Tigers 7 8 16 kg pkg. 62.50
59 Raclette Courdavault 28 4 5 kg pkg. 55.00
51 Manjimup Dried Apples 24 7 50 - 300 g pkgs. 53.00
62 Tarte au sucre 29 3 48 pies 49.30
43 Ipoh Coffee 20 1 16 - 500 g tins 46.00
28 Rössle Sauerkraut 12 7 25 - 825 g cans 45.60

g. Mendapatkan produk termahal ke-10 hingga ke-15 yang diurutkan dengan berdasarkan harga

SELECT P.*
  FROM products P
    ORDER BY P.Price DESC
      LIMIT 6 OFFSET 9;
6 records
ProductID ProductName SupplierID CategoryID Unit Price
28 Rössle Sauerkraut 12 7 25 - 825 g cans 45.6
63 Vegie-spread 7 2 15 - 625 g jars 43.9
27 Schoggi Schokolade 11 3 100 - 100 g pieces 43.9
8 Northwoods Cranberry Sauce 3 2 12 - 12 oz jars 40.0
17 Alice Mutton 7 6 20 - 1 kg tins 39.0
12 Queso Manchego La Pastora 5 4 10 - 500 g pkgs. 38.0

h. Seluruh daftar semua negara pemasok dalam urutan abjad

SELECT DISTINCT Country
  FROM suppliers S
    ORDER BY S.Country ASC;
Displaying records 1 - 10
Country
Australia
Brazil
Canada
Denmark
Finland
France
Germany
Italy
Japan
Netherlands

i. Menemukan produk termurah dan Pesanan Mahal.

SELECT P.ProductName, P.Unit, P.Price
  FROM products P
      ORDER BY P.Price ASC
        LIMIT 1;
1 records
ProductName Unit Price
Geitost 500 g 2.5
SELECT P.ProductName, P.Unit, P.Price
  FROM products P
      ORDER BY P.Price DESC
        LIMIT 1;
1 records
ProductName Unit Price
Côte de Blaye 12 - 75 cl bottles 263.5

j. Menemukan nomor Supplier USA

SELECT S.Country, COUNT(S.Country) AS 'Total_Supplier'
  FROM suppliers S
    WHERE S.Country='USA' ;
1 records
Country Total_Supplier
USA 4

k.Menghitung jumlah total orderitem

SELECT SUM(OD.Quantity) AS 'TotalQuantity'
  FROM orderdetails OD
1 records
TotalQuantity
12743

l. Menghitung Harga Satuan rata-rata dari semua produk

SELECT AVG(P.Price) AS 'Average_UnitPrice'
  FROM products P
1 records
Average_UnitPrice
28.86636

m. Mendapatkan semua informasi tentang pelanggan bernama Thomas Hardy

SELECT C.*
  FROM customers C
    WHERE ContactName='Thomas Hardy';
1 records
CustomerID CustomerName ContactName Address City PostalCode Country
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK

n. Mendata semua pelanggan dari Spanyol atau Prancis

SELECT C.*
  FROM customers C
    WHERE Country="Spain" OR Country="France";
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
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
18 Du monde entier Janine Labrune 67, rue des Cinquante Otages Nantes 44000 France
22 FISSA Fabrica Inter. Salchichas S.A. Diego Roel C/ Moralzarzal, 86 Madrid 28034 Spain
23 Folies gourmandes Martine Rancé 184, chaussée de Tournai Lille 59000 France
26 France restauration Carine Schmitt 54, rue Royale Nantes 44000 France
29 Galería del gastrónomo Eduardo Saavedra Rambla de Cataluña, 23 Barcelona 8022 Spain
30 Godos Cocina Típica José Pedro Freyre C/ Romero, 33 Sevilla 41101 Spain
40 La corne d’abondance Daniel Tonini 67, avenue de l’Europe Versailles 78000 France

o. Mendata semua pelanggan yang bukan dari AS

SELECT C.*
  FROM customers C
    WHERE NOT Country="USA"
Displaying records 1 - 10
CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfreds Mario Obere Str. 57 Hamburg 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

p. Mendata semua pesanan yang tidak antara $50 dan $15000!

SELECT O.*,P.ProductID, P.ProductName, P.Price
  FROM orders O
    LEFT JOIN orderdetails OD
      ON O.OrderID = OD.OrderID
    LEFT JOIN products P
      ON OD.ProductID = P.ProductID
  WHERE P.Price 
    NOT BETWEEN 50 AND 15000;
Displaying records 1 - 10
OrderID CustomerID EmployeeID OrderDate ShipperID ProductID ProductName Price
10248 90 5 1996-07-04 3 11 Queso Cabrales 21.00
10248 90 5 1996-07-04 3 42 Singaporean Hokkien Fried Mee 14.00
10248 90 5 1996-07-04 3 72 Mozzarella di Giovanni 34.80
10249 81 6 1996-07-05 1 14 Tofu 23.25
10250 34 4 1996-07-08 2 41 Jack’s New England Clam Chowder 9.65
10250 34 4 1996-07-08 2 65 Louisiana Fiery Hot Pepper Sauce 21.05
10251 84 3 1996-07-08 1 22 Gustaf’s Knäckebröd 21.00
10251 84 3 1996-07-08 1 57 Ravioli Angelo 19.50
10251 84 3 1996-07-08 1 65 Louisiana Fiery Hot Pepper Sauce 21.05
10252 76 4 1996-07-09 2 33 Geitost 2.50

q. Mendata semua produk antara $10 dan $20

SELECT DISTINCT P.*
  FROM products P
    WHERE P.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

r. Mendata semua produk tidak antara $10 dan $100 diurutkan berdasarkan harga

SELECT DISTINCT P.*
  FROM products P
    WHERE P.Price 
     NOT BETWEEN 10 AND 100
ORDER BY P.Price ASC;
Displaying records 1 - 10
ProductID ProductName SupplierID CategoryID Unit Price
33 Geitost 15 4 500 g 2.50
24 Guaraná Fantástica 10 1 12 - 355 ml cans 4.50
13 Konbu 6 8 2 kg box 6.00
52 Filo Mix 24 5 16 - 2 kg boxes 7.00
54 Tourtière 25 6 16 pies 7.45
75 Rhönbräu Klosterbier 12 1 24 - 0.5 l bottles 7.75
23 Tunnbröd 9 5 12 - 250 g pkgs. 9.00
19 Teatime Chocolate Biscuits 8 3 10 boxes x 12 pieces 9.20
45 Røgede sild 21 8 1k pkg. 9.50
47 Zaanse koeken 22 3 10 - 4 oz boxes 9.50

s. Mendapatkan daftar pesanan dan jumlah yang terjual antara 01 Jan 1996 dan 31 Des 1996

SELECT O.OrderID, O.OrderDate, sum(OD.Quantity) AS 'AmountSold'
  FROM orders O
    JOIN orderdetails OD
      ON O.OrderID = OD.OrderID
    GROUP BY O.OrderID
    HAVING O.OrderDate
    BETWEEN '1996-01-01' AND '1996-12-31'
  ORDER BY O.OrderDate;
Displaying records 1 - 10
OrderID OrderDate AmountSold
10248 1996-07-04 27
10249 1996-07-05 49
10250 1996-07-08 60
10251 1996-07-08 41
10252 1996-07-09 105
10253 1996-07-10 102
10254 1996-07-11 57
10255 1996-07-12 110
10256 1996-07-15 27
10257 1996-07-16 46

t. Mendata semua pemasok dari AS, Inggris, ATAU Jepang

SELECT S.*
  FROM suppliers S
    WHERE S.Country 
      IN ('USA', 'UK', 'JAPAN');
8 records
SupplierID SupplierName ContactName Address City PostalCode Country Phone
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. Londona EC1 4SD UK (171) 555-2222
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA (100) 555-4822
3 Grandma Kelly’s Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA (313) 555-5735
4 Tokyo Traders Yoshi Nagase 9-8 Sekimai Musashino-shi Tokyo 100 Japan (03) 3555-5011
6 Mayumi’s Mayumi Ohno 92 Setsuko Chuo-ku Osaka 545 Japan (06) 431-7877
8 Specialty Biscuits, Ltd. Peter Wilson 29 King’s Way Manchester M14 GSD UK (161) 555-4448
16 Bigfoot Breweries Cheryl Saylor 3400 - 8th Avenue Suite 210 Bend 97101 USA (503) 555-9931
19 New England Seafood Cannery Robb Merchant Order Processing Dept. 2100 Paul Revere Blvd. Boston 2134 USA (617) 555-3267

u. Mendata semua produk yang tidak persis $10, $20, $30, $40, atau $50

SELECT P.*
  FROM products P
    WHERE P.Price
      NOT IN (10, 20, 30, 40, 50);
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
4 Chef Anton’s Cajun Seasoning 2 2 48 - 6 oz jars 22.00
5 Chef Anton’s Gumbo Mix 2 2 36 boxes 21.35
6 Grandma’s Boysenberry Spread 3 2 12 - 8 oz jars 25.00
9 Mishi Kobe Niku 4 6 18 - 500 g pkgs. 97.00
10 Ikura 4 8 12 - 200 ml jars 31.00
11 Queso Cabrales 5 4 1 kg pkg. 21.00
12 Queso Manchego La Pastora 5 4 10 - 500 g pkgs. 38.00
13 Konbu 6 8 2 kg box 6.00

v. Mendata semua pelanggan yang berasal dari negara yang sama dengan pemasok

SELECT C.CustomerName, S.SupplierName, C.Country AS 'CustomerCountry', S.Country AS 'SupplierCountry'
  FROM customers C
    JOIN Orders O
      ON C.CustomerID=O.CustomerID
    JOIN OrderDetails OD
      ON O.OrderID=OD.OrderID
    JOIN Products P
      ON OD.ProductID=P.ProductID
    JOIN Suppliers S
      ON P.SupplierID=S.SupplierID
    WHERE 
      CASE
         WHEN C.Country=S.Country THEN '1'
         ELSE '0'
        END = '1';
Displaying records 1 - 10
CustomerName SupplierName CustomerCountry SupplierCountry
Old World Delicatessen New England Seafood Cannery USA USA
Rattlesnake Canyon Grocery New Orleans Cajun Delights USA USA
Rattlesnake Canyon Grocery Grandma Kelly’s Homestead USA USA
Morgenstern Gesundkost Plutzer Lebensmittelgroßmärkte AG Germany Germany
Berglunds snabbköp Svensk Sjöföda AB Sweden Sweden
Lehmanns Marktstand Heli Süßwaren GmbH & Co. KG Germany Germany
B’s Beverages Exotic Liquid UK UK
Blondel père et fils Aux joyeux ecclésiastiques France France
Die Wandernde Kuh Plutzer Lebensmittelgroßmärkte AG Germany Germany
Die Wandernde Kuh Plutzer Lebensmittelgroßmärkte AG Germany Germany

w. Mendata semua produk yang dimulai dengan ‘Cha’ atau ‘Chan’ dan memiliki satu karakter lagi

SELECT P.ProductName
  FROM products P
    WHERE ProductName LIKE 'Cha_' OR ProductName LIKE 'Chan_';
1 records
ProductName
Chang

x. Mendata semua pemasok yang memiliki nomor faks

Dalam Database tidak terdapat nomor Fax pada data suppliers dan hanya terdapat supplier ID dalam bentuk Integer.

y. Mendata semua pelanggan dengan pesanan rata-rata antara $1000 dan $1200!

SELECT CustomerName, AVG(TotalOrderAmount) AS AverageOrder
  FROM 
      ( 
       SELECT CustomerName, SUM(OD.Quantity*P.Price) AS TotalOrderAmount
        FROM customers C
          JOIN orders O
            ON C.CustomerID = O.CustomerID
          JOIN orderdetails OD
            ON O.OrderID = OD.OrderID
          JOIN products P
            ON OD.ProductID = P.ProductID
        GROUP BY OD.OrderID
        ) S
  GROUP BY S.CustomerName
    HAVING AverageOrder
      BETWEEN 1000 AND 1200
  ORDER BY AverageOrder ASC;
6 records
CustomerName AverageOrder
Que Delícia 1012.275
Königlich Essen 1039.375
Tortuga Restaurante 1067.350
Folk och fä HB 1078.475
Magazzini Alimentari Riuniti 1080.300
Chop-suey Chinese 1124.500

z. Mendata total pelanggan di setiap negara.

SELECT C.Country, COUNT(C.Country) AS 'TotalCustomer'
  FROM customers C
    GROUP BY C.Country WITH ROLLUP
Displaying records 1 - 10
Country TotalCustomer
Argentina 3
Austria 2
Belgium 2
Brazil 9
Canada 3
Denmark 2
Finland 2
France 11
Germany 11
Ireland 1