BASIQ SQL
PART II
Untuk tugas kali ini, kita akan mengerjakan lanjutan basiq sql dari yang sebelumnya. Tools yang
saya gunakan adalah XAMPP versi 3.2.4.
Buka Aplikasi XAMPP lalu aktifkan apache dan mysql :
Kemudian klik Shell di sebelah kanan apache
Ketikkan mysql –u root –p di cmd
Setelah itu, lakukan import database dengan mengetikkan
source<tempat database disimpan>
Lalu, ketikkan show databases;
Ketikkan use classicmodels sebagai base untuk pengaplikasian
Lalu ketikkan show tables;
ALIAS
1. MySQL Alias For Columns
SELECT
CONCAT_WS (',', lastName, firstname)
FROM
employees;
SELECT
CONCAT_WS (',', lastName, firstname) AS `Full name`
FROM
employees;
SELECT
CONCAT_WS (',', lastName, firstname) `Full name`
FROM
employees
ORDER BY
`Full name`;
2. MySQL Alias For Tables
SELECT * FROM employees e;
SELECT e.firstName, e.lastName FROM employees e ORDER BY e.firstName;
SELECT
customers.customerName,
COUNT (orders.orderNumber) total
FROM
customers
INNER JOIN orders ON customers.customerNumber = orders.customerNumber
GROUP BY
customerName
ORDER BY
total DESC;
JOIN
Setting Up Sample Tables
CREATE TABLE members (
member_id INT AUTO_INCREMENT,
name VARCHAR (100),
PRIMARY KEY (member_id)
);
CREATE TABLE committees (
INT AUTO_INCREMENT committee_id,
name VARCHAR (100),
PRIMARY KEY (committee_id)
);
INSERT INTO members (name)
VALUES ('John'), ('Jane'), ('Mary'), ('David'), ('Amelia');
INSERT INTO committees (name)
VALUES ('John'), ('Mary'), ('Amelia'), ('Joe');
SELECT * FROM members;
SELECT * FROM committees;
1. INNER JOIN
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
INNER JOIN committees c
ON c.name = m.name;
SELECT
productCode,
productName,
textDescription
FROM
products t1
INNER JOIN productlines t2
ON t1.productline = t2.productline;
Inner Join with 3 tables;
SELECT
orderNumber,
orderDate,
orderLineNumber,
productName,
quantityOrdered,
priceEach
FROM
orders
INNER JOIN
orderdetails USING (orderNumber)
INNER JOIN
products USING (productCode)
ORDER BY
orderNumber,
orderLineNumber;
Inner with 4 join tables
SELECT
orderNumber,
orderDate,
customerName,
orderLineNumber,
productName,
quantityOrdered,
priceEach
FROM
orders
INNER JOIN order details
USING (orderNumber)
INNER JOIN products
USING (productCode)
INNER JOIN customers
USING (customerNumber)
ORDER BY
orderNumber,
orderLineNumber;
With operators
SELECT
orderNumber,
productName,
msrp,
priceEach
FROM
products p
INNER JOIN order details o
ON p.productcode = o.productcode
AND p.msrp> o.priceEach
WHERE
p.productcode = 'S10_1678';
2.LEFT JOIN
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
LEFT JOIN committees c USING (name);
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
LEFT JOIN committees c USING (name)
WHERE c.committee_id IS NULL;
3.RIGHT JOIN
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
RIGHT JOIN committees c on c.name = m.name;
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
RIGHT JOIN committees c USING (name)
WHERE m.member_id IS NULL;
Simple Right Join
SELECT
employeeNumber,
customerNumber
FROM
customers
RIGHT JOIN employees
ON salesRepEmployeeNumber = employeeNumber
ORDER BY
employeeNumber;
To find unmatching rows
SELECT
employeeNumber,
customerNumber
FROM
customers
RIGHT JOIN employees ON
salesRepEmployeeNumber =
employeeNumber WHERE customerNumber is
NULL ORDER BY employeeNumber;
4.CROSS JOIN
SELECT
m.member_id,
m.name member,
c.committee_id,
c.name committee
FROM
members m
CROSS JOIN committees c;
Setting Up Tables
1. Buat table baru salesdb dengan ketikkan create database :
2. Tukar data terakhir dengan salesdb :
3. Buat table baru didalam database salesdb :
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT, product_name
VARCHAR(100), price DECIMAL(13,2 )
);
CREATE TABLE stores (
id INT PRIMARY KEY AUTO_INCREMENT, store_name VARCHAR(100)
);
CREATE TABLE sales ( product_id INT, store_id INT,
quantity DECIMAL(13 , 2 ) NOT NULL, sales_date DATE NOT NULL, PRIMARY KEY
(product_id , store_id), FOREIGN KEY (product_id)
REFERENCES products (id)
ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (store_id)
REFERENCES stores (id)
ON DELETE CASCADE ON UPDATE
CASCADE );
INSERT INTO products (product_name, price)
VALUES ('iPhone', 699),
('iPad', 599),
('Macbook Pro', 1299);
INSERT INTO stores (store_name)
VALUES ('North'),
('South');
INSERT INTO sales (store_id, product_id, quantity, sales_date)
VALUES (1,1,20, '2017-01-02'),
(1,2,15, '2017-01-05'),
(1,3,25, '2017-01-05'),
(2,1,30, '2017-01-02'),
(2,2,35, '2017-01-05');
Join Example
SELECT
store_name,
product_name,
SUM (quantity * price) US revenue
FROM
sales
INNER JOIN
products ON products.id = sales.product_id
INNER JOIN
stores ON stores.id = sales.store_id
GROUP BY store_name, product_name;
SELECT
store_name, product_name
FROM
stores AS a
CROSS JOIN
products AS b;
SELECT
b.store_name,
a.product_name,
IFNULL (c.revenue, 0) AS revenue
FROM
US products a
CROSS JOIN
US stores b
LEFT JOIN
(SELECT
stores.id AS store_id,
products.id AS product_id,
store_name,
product_name,
ROUND (SUM (quantity * price), 0) US revenue
FROM
sales
INNER JOIN products ON products.id = sales.product_id
INNER JOIN stores ON stores.id = sales.store_id
GROUP BY stores.id, products.id, store_name, product_name) AS c ON c.store_id =
b.id
AND c.product_id = a.id
ORDER BY b.store_name;
Nama : Risa Amalia
NIM : 18050623019
Prodi : D3 Manajemen Informatika
5.SELF JOIN
SELECT
CONCAT (m.lastName, ',', m.firstName) AS Manager,
CONCAT (e.lastName, ',', e.firstName) AS 'Direct report'
FROM
employees e
INNER JOIN employees m ON
m.employeeNumber = e.reportsTo
ORDER BY
Manager;
Nama : Risa Amalia
NIM : 18050623019
Prodi : D3 Manajemen Informatika
Using Left
Join
SELECT
IFNULL (CONCAT (m.lastname, ',', m.firstname),
'Top Manager') AS 'Manager',
CONCAT (e.lastname, ',', e.firstname) AS 'Direct report'
FROM
employees e
LEFT JOIN employees m ON
m.employeeNumber = e.reportsto
ORDER BY
DESC manager;
Nama : Risa Amalia
NIM : 18050623019
Prodi : D3 Manajemen Informatika
To compare
successive rows
SELECT
c1.city,
c1.customerName,
c2.customerName
FROM
customers c1
INNER JOIN customers c2 ON
c1.city = c2.city
AND c1.customername > c2.customerName
ORDER BY
c1.city;