@@ -1,19 +1,81 @@ | |||
-- Exercise 1 | |||
SELECT category_name | |||
FROM categories | |||
WHERE category_id IN | |||
(SELECT DISTINCT category_id FROM products) | |||
ORDER BY category_name; | |||
-- Exercise 2 | |||
SELECT | |||
product_name, | |||
list_price | |||
FROM products | |||
WHERE list_price > | |||
(SELECT AVG(list_price) | |||
FROM products) | |||
ORDER BY list_price DESC; | |||
-- Exercise 3 | |||
SELECT category_name | |||
FROM categories | |||
WHERE NOT EXISTS | |||
(SELECT * | |||
FROM products | |||
WHERE category_id = categories.category_id); | |||
-- Exercise 4 | |||
SELECT | |||
email_address, | |||
i.order_id, | |||
SUM((i.item_price - i.discount_amount) * quantity) AS 'order_total' | |||
FROM customers c JOIN orders o | |||
ON c.customer_id = o.customer_id | |||
JOIN order_items i | |||
ON o.order_id = i.order_id | |||
GROUP BY email_address, order_id; | |||
-- Exercise 4 Part 2 | |||
SELECT | |||
email_address, | |||
MAX(order_total) | |||
FROM | |||
(SELECT email_address, | |||
i.order_id, | |||
SUM((i.item_price - i.discount_amount) * quantity) AS 'order_total' | |||
FROM customers c JOIN orders o | |||
ON c.customer_id = o.customer_id | |||
JOIN order_items i | |||
ON o.order_id = i.order_id | |||
GROUP BY email_address, order_id) f | |||
GROUP BY email_address; | |||
-- Exercise 5 | |||
SELECT | |||
product_name, | |||
discount_percent | |||
FROM products | |||
WHERE discount_percent NOT IN | |||
(SELECT discount_percent | |||
FROM products | |||
GROUP BY discount_percent | |||
HAVING COUNT(discount_percent) > 1) | |||
ORDER BY product_name; | |||
-- Exercise 6 | |||
SELECT | |||
email_address, | |||
order_id, | |||
order_date | |||
FROM customers c JOIN orders o | |||
ON c.customer_id = o.customer_id | |||
WHERE order_date = | |||
(SELECT MIN(order_date) | |||
FROM orders | |||
WHERE customer_id = o.customer_id); |
@@ -1,19 +1,81 @@ | |||
-- Exercise 1 | |||
SELECT | |||
COUNT(order_id), | |||
SUM(tax_amount) | |||
FROM orders; | |||
-- Exercise 2 | |||
SELECT | |||
category_name, | |||
COUNT(product_id) AS count, | |||
MAX(list_price) AS max_price | |||
FROM categories c JOIN products p | |||
ON c.category_id = p.category_id | |||
GROUP BY category_name | |||
ORDER BY category_name DESC; | |||
-- Exercise 3 | |||
SELECT | |||
c.email_address, | |||
SUM(item_price) * quantity, | |||
SUM(discount_amount) * quantity | |||
FROM orders o JOIN order_items i | |||
ON o.order_id = i.order_id | |||
JOIN customers c | |||
ON o.customer_id = c.customer_id | |||
GROUP BY c.customer_id | |||
ORDER BY item_price DESC; | |||
-- Exercise 4 | |||
SELECT | |||
c.email_address, | |||
COUNT(i.order_id), | |||
SUM(item_price - discount_amount) * quantity AS 'total_amount' | |||
FROM orders o JOIN order_items i | |||
ON i.order_id = o.order_id | |||
JOIN customers c | |||
ON o.customer_id = c.customer_id | |||
GROUP BY email_address | |||
HAVING COUNT(i.order_id) > 1 | |||
ORDER BY SUM(item_price - discount_amount) * COUNT(i.order_id) DESC; | |||
-- Exercise 5 | |||
SELECT | |||
c.email_address, | |||
COUNT(i.order_id), | |||
SUM(item_price - discount_amount) * quantity AS 'total_amount' | |||
FROM orders o JOIN order_items i | |||
ON i.order_id = o.order_id | |||
JOIN customers c | |||
ON o.customer_id = c.customer_id | |||
WHERE i.item_price > 400 | |||
GROUP BY email_address | |||
HAVING COUNT(i.order_id) > 1 | |||
ORDER BY SUM(item_price - discount_amount) * COUNT(i.order_id) DESC; | |||
-- Exercise 6 | |||
SELECT | |||
product_name, | |||
SUM(item_price - discount_amount) * quantity AS 'total_amount' | |||
FROM products p JOIN order_items i | |||
ON p.product_id = i.product_id | |||
GROUP BY product_name WITH ROLLUP; | |||
-- Exercise 7 | |||
SELECT | |||
email_address, | |||
COUNT(product_id) AS 'distinct_products' | |||
FROM customers c JOIN orders o | |||
ON c.customer_id = o.customer_id | |||
JOIN order_items i | |||
ON o.order_id = i.order_id | |||
GROUP BY email_address | |||
HAVING COUNT(o.order_id) > 1; | |||
@@ -1,30 +1,53 @@ | |||
-- Exercise 1 | |||
INSERT INTO categories | |||
VALUES (default, 'Brass'); | |||
-- Exercise 2 | |||
UPDATE categories | |||
SET category_name = 'Woodwinds' | |||
WHERE category_id = 5; | |||
-- Exercise 3 | |||
DELETE FROM categories | |||
WHERE category_id = 5; | |||
-- Exercise 4 | |||
INSERT INTO products (product_id, category_id, product_code, product_name, description, list_price, discount_percent, date_added) | |||
VALUES (default, 4, 'dgx_640', 'Yamaha DGX 640 88-Key Digital Piano', 'Long description to come.', 799.99, 0, now()); | |||
-- Exercise 5 | |||
UPDATE products | |||
SET discount_percent = 35 | |||
WHERE product_id = 11; | |||
-- Exercise 6 | |||
DELETE FROM categories | |||
WHERE category_id = 4; | |||
DELETE FROM products | |||
WHERE product_id = 11; | |||
-- Exercise 7 | |||
INSERT INTO customers (email_address, password, first_name, last_name) | |||
VALUES ('rick@raven.com', '', 'Rick', 'Raven'); | |||
-- Exercise 8 | |||
UPDATE customers | |||
SET password = 'secret' | |||
WHERE email_address = 'rick@raven.com'; | |||
-- Exercise 9 | |||
UPDATE customers | |||
SET password = 'reset' | |||
LIMIT 100 | |||
-- Exercise 10 | |||
@@ -1,22 +1,65 @@ | |||
-- Exercise 1 | |||
SELECT | |||
product_code, | |||
product_name, | |||
list_price, | |||
discount_percent | |||
FROM products | |||
ORDER BY list_price; | |||
-- Exercise 2 | |||
SELECT CONCAT(last_name, ', ', first_name) AS full_name | |||
FROM customers | |||
WHERE last_name >= 'M%' | |||
ORDER BY last_name ASC; | |||
-- Exercise 3 | |||
SELECT | |||
product_name, | |||
list_price, | |||
date_added | |||
FROM products | |||
WHERE list_price > 500 AND list_price < 2000 | |||
ORDER BY date_added DESC; | |||
-- Exercise 4 | |||
SELECT | |||
product_name, | |||
list_price, | |||
discount_percent, | |||
round(list_price * discount_percent/100, 2) AS discount_amount, | |||
round(list_price - list_price * discount_percent/100, 2) AS discount_price | |||
FROM products | |||
ORDER BY discount_price DESC | |||
LIMIT 5; | |||
-- Exercise 5 | |||
SELECT | |||
item_id, | |||
item_price, | |||
discount_amount, | |||
quantity, | |||
item_price * quantity AS price_total, | |||
discount_amount * quantity AS discount_total, | |||
(item_price - discount_amount) * quantity AS item_total | |||
FROM order_items | |||
WHERE ((item_price - discount_amount) * quantity) > 500 | |||
ORDER BY item_total DESC; | |||
-- Exercise 6 | |||
SELECT | |||
order_id, | |||
order_date, | |||
ship_date | |||
FROM orders | |||
WHERE ship_date IS NULL; | |||
-- Exercise 7 | |||
SELECT NOW() AS today_unformatted, | |||
date_format(NOW(), '%d-%b-%Y') AS today_formatted; | |||
-- Exercise 8 | |||
SELECT 100 AS price, | |||
0.07 AS tax_rate, | |||
100 * 0.07 AS tax_amount, | |||
100 + (100 * 0.07) AS total; |
@@ -1,19 +1,73 @@ | |||
-- Exercise 1 | |||
SELECT | |||
category_name, | |||
product_name, | |||
list_price | |||
FROM categories c JOIN products p | |||
ON c.category_id = p.category_id | |||
ORDER BY category_name, product_name ASC; | |||
-- Exercise 2 | |||
SELECT | |||
first_name, | |||
last_name, | |||
line1, | |||
city, | |||
state, zip_code | |||
FROM customers c JOIN addresses a | |||
ON c.customer_id = a.customer_id | |||
WHERE email_address LIKE 'allan.sherwood@yahoo.com'; | |||
-- Exercise 3 | |||
SELECT | |||
first_name, | |||
last_name, | |||
line1, | |||
city, | |||
state, | |||
zip_code | |||
FROM customers c JOIN addresses a | |||
ON c.customer_id = a.customer_id | |||
WHERE c.shipping_address_id = a.address_id; | |||
-- Exercise 4 | |||
SELECT | |||
last_name, | |||
first_name, | |||
order_date, | |||
product_name, | |||
item_price, | |||
discount_amount, | |||
quantity | |||
FROM customers c JOIN orders o | |||
ON c.customer_id = o.customer_id | |||
JOIN order_items oi | |||
ON oi.order_id = o.order_id | |||
JOIN products p | |||
ON p.product_id = oi.product_id | |||
ORDER BY last_name, order_date, product_name; | |||
-- Exercise 5 | |||
SELECT | |||
p1.product_name, | |||
p1.list_price | |||
FROM products p1 JOIN products p2 | |||
ON p1.list_price = p2.list_price | |||
AND p1.product_id <> p2.product_id; | |||
-- Exercise 6 | |||
SELECT * | |||
FROM categories c JOIN products p | |||
ON p.category_id = c.category_id | |||
WHERE p.product_id IS NULL; | |||
-- Exercise 7 | |||
SELECT 'SHIPPED' AS ship_status, order_id, order_date | |||
FROM orders | |||
WHERE ship_date IS NOT NULL | |||
UNION | |||
SELECT 'NOT SHIPPED' AS ship_status, order_id, order_date | |||
FROM orders | |||
WHERE ship_date IS NULL | |||
ORDER BY order_date; |