diff --git a/.vscode/settings.json b/.vscode/settings.json index 375aedb..62fdbf9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,7 +26,7 @@ "port": 3306, "driver": "MySQL", "name": "mysql", - "database": "default", + "database": "gym", "username": "root", "askForPassword": true }, @@ -36,7 +36,7 @@ "port": 5432, "driver": "PostgreSQL", "name": "postgresql", - "database": "default", + "database": "gym", "username": "postgres", "askForPassword": true } diff --git a/data/01-mathematical-functions.sql b/data/01-mathematical-functions.sql new file mode 100644 index 0000000..a18f98e --- /dev/null +++ b/data/01-mathematical-functions.sql @@ -0,0 +1,10 @@ +SELECT price * billing_frequency AS annual_revenue +FROM memberships; + +-- CEIL() +-- FLOOR() +-- ROUND() +-- TRUNC() TRUNCATE() mysql + +SELECT TRUNC(consumption, 0) +FROM memberships; diff --git a/data/02-string-functions.sql b/data/02-string-functions.sql new file mode 100644 index 0000000..62fbcef --- /dev/null +++ b/data/02-string-functions.sql @@ -0,0 +1,25 @@ +SELECT CONCAT(first_name, ' ', last_name) +FROM memberships; + +SELECT CONCAT('$ ', price) +FROM memberships; + +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender) +VALUES ( + '2021-10-18', '2021-11-18', '2021-11-01 08:56:01', '2021-11-01 09:20:12', + NULL, 'John', 'Doe', 19.99, 12, LOWER('DivErs')); + +SELECT * FROM memberships +WHERE LENGTH(last_name) < 7; + +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender) +VALUES ( + '2021-05-02', NULL, '2021-06-05 11:52:25', '2021-06-05 11:58:08', + NULL, 'Monti', 'Durns', 199.99, 1, TRIM(TRAILING ' ' FROM 'male ') +); + +SELECT LENGTH(gender) FROM memberships; diff --git a/data/03-date-time-functions.sql b/data/03-date-time-functions.sql new file mode 100644 index 0000000..e773548 --- /dev/null +++ b/data/03-date-time-functions.sql @@ -0,0 +1,18 @@ +SELECT EXTRACT(MINUTE FROM last_checkin), last_checkin +FROM memberships; + +-- MySQL syntax +SELECT WEEKDAY(last_checkin) + 1, last_checkin +FROM memberships; + +-- PostgreSQL syntax +SELECT EXTRACT(ISODOW FROM last_checkin), last_checkin +FROM memberships; + +-- MySQL syntax +SELECT CONVERT(last_checkin, DATE), CONVERT(last_checkin, TIME) +FROM memberships; + +-- PostgreSQL syntax +SELECT last_checkin::TIMESTAMP::DATE, last_checkin::TIMESTAMP::TIME +FROM memberships; diff --git a/data/04-date-time-differences.sql b/data/04-date-time-differences.sql new file mode 100644 index 0000000..f94cddb --- /dev/null +++ b/data/04-date-time-differences.sql @@ -0,0 +1,11 @@ +-- MySQL syntax +SELECT TIMESTAMPDIFF(MINUTE, last_checkin, last_checkout) +FROM memberships; + +-- MySQL syntax +SELECT DATEDIFF(NOW(), membership_start) +FROM memberships; + +-- PostgreSQL syntax +SELECT NOW() - membership_start +FROM memberships; diff --git a/data/05-changing-dates.sql b/data/05-changing-dates.sql new file mode 100644 index 0000000..3fd03d6 --- /dev/null +++ b/data/05-changing-dates.sql @@ -0,0 +1,11 @@ +-- PostgreSQL syntax +SELECT membership_start + 7, membership_start +FROM memberships; + +-- MySQL syntax +SELECT DATE_ADD(membership_start, INTERVAL 7 DAY), membership_start +FROM memberships; + +-- PostgreSQL syntax +SELECT (membership_start + INTERVAL '7 DAY')::TIMESTAMP::DATE, membership_start +FROM memberships; diff --git a/data/06-like-pattern-matching.sql b/data/06-like-pattern-matching.sql new file mode 100644 index 0000000..cf49201 --- /dev/null +++ b/data/06-like-pattern-matching.sql @@ -0,0 +1,9 @@ +SELECT first_name LIKE '__o%', first_name +FROM memberships; + +SELECT first_name LIKE 'Ma%', first_name +FROM memberships; + +SELECT first_name +FROM memberships +WHERE first_name LIKE 'J____'; diff --git a/data/07-exists-subquery-expressions.sql b/data/07-exists-subquery-expressions.sql new file mode 100644 index 0000000..f7ea05c --- /dev/null +++ b/data/07-exists-subquery-expressions.sql @@ -0,0 +1,17 @@ +SELECT first_name, last_name +FROM customers +WHERE email = 'max@test.com'; + +SELECT EXISTS( + SELECT first_name, last_name + FROM customers + WHERE email = 'manu@test.com' +); + +SELECT o.id +FROM orders AS o +WHERE EXISTS( + SELECT c.email + FROM customers as c + WHERE o.customer_id = c.id AND c.email = 'max@test.com' +); diff --git a/data/08-in-subquery-expressions.sql b/data/08-in-subquery-expressions.sql new file mode 100644 index 0000000..5fda70a --- /dev/null +++ b/data/08-in-subquery-expressions.sql @@ -0,0 +1,19 @@ +SELECT email FROM customers; + +SELECT c.email FROM customers AS c +INNER JOIN orders AS o ON c.id = o.customer_id; + +SELECT id +FROM customers +WHERE first_name = 'Max' OR first_name = 'Manu'; + +SELECT id, first_name +FROM customers +WHERE first_name IN('Max', 'Manu'); + +SELECT email +FROM customers +WHERE id IN( + SELECT customer_id + FROM orders +); diff --git a/data/09-conditional-expressions.sql b/data/09-conditional-expressions.sql new file mode 100644 index 0000000..3cf625e --- /dev/null +++ b/data/09-conditional-expressions.sql @@ -0,0 +1,21 @@ +SELECT amount_billed, + CASE WHEN amount_billed > 15 AND amount_billed <= 30 THEN 'Normal Day' + WHEN amount_billed > 30 THEN 'Good Day' + ELSE 'Bad Day' + END +FROM orders; + +-- MySQL syntax +SELECT weekday_nr, + CASE WHEN weekday_nr = 1 THEN 'Monday' + WHEN weekday_nr = 2 THEN 'Tuesday' + WHEN weekday_nr = 3 THEN 'Wednesday' + WHEN weekday_nr = 4 THEN 'Thursday' + WHEN weekday_nr = 5 THEN 'Friday' + WHEN weekday_nr = 6 THEN 'Saturday' + ELSE 'Sunday' + END +FROM ( + SELECT WEEKDAY(last_checkin) + 1 AS weekday_nr + FROM memberships +) AS weekday_numbers; diff --git a/data/create-data/01-create-database.sql b/data/create-data/01-create-database.sql new file mode 100644 index 0000000..378eb9d --- /dev/null +++ b/data/create-data/01-create-database.sql @@ -0,0 +1 @@ +CREATE DATABASE gym; diff --git a/data/create-data/02-create-table.sql b/data/create-data/02-create-table.sql new file mode 100644 index 0000000..a389487 --- /dev/null +++ b/data/create-data/02-create-table.sql @@ -0,0 +1,14 @@ +CREATE TABLE memberships ( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + membership_start DATE, + membership_end DATE, + last_checkin TIMESTAMP, + last_checkout TIMESTAMP, + consumption NUMERIC(5, 2), + first_name VARCHAR(200), + last_name VARCHAR(200), + price NUMERIC(5, 2), + billing_frequency INT, + gender VARCHAR(200) +); diff --git a/data/create-data/03-add-table-data.sql b/data/create-data/03-add-table-data.sql new file mode 100644 index 0000000..724409d --- /dev/null +++ b/data/create-data/03-add-table-data.sql @@ -0,0 +1,8 @@ +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender +) +VALUES + ('2021-10-01', NULL, '2021-10-01 05:17:36', '2021-10-01 06:20:45', 26.49, 'Max', 'Schwarz', 19.99, 12, 'male'), + ('2020-05-10', '2022-05-09', '2021-11-03 10:01:56', '2021-11-03 14:30:00', 100.26, 'Manu', 'Lorenz', 199.99, 1, 'male'), + ('2021-02-18', '2022-02-17', '2021-10-29 15:26:05', '2021-10-29 17:01:33', 5.10, 'Julie', 'Barnes', 199.99, 1, 'female'); diff --git a/data/create-data/04-create-additional-tables.sql b/data/create-data/04-create-additional-tables.sql new file mode 100644 index 0000000..9d198f9 --- /dev/null +++ b/data/create-data/04-create-additional-tables.sql @@ -0,0 +1,14 @@ +CREATE TABLE customers( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + first_name VARCHAR(200), + last_name VARCHAR(200), + email VARCHAR(200) +); + +CREATE TABLE orders( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + amount_billed NUMERIC(5, 2), + customer_id INT REFERENCES customers +); \ No newline at end of file diff --git a/data/create-data/05-insert-additional-data.sql b/data/create-data/05-insert-additional-data.sql new file mode 100644 index 0000000..7f8363e --- /dev/null +++ b/data/create-data/05-insert-additional-data.sql @@ -0,0 +1,8 @@ +INSERT INTO customers(first_name, last_name, email) +VALUES + ('Max', 'Schwarz', 'max@test.com'), + ('Manu', 'Lorenz', 'manu@test.com'), + ('Julia', 'Meyers', 'juli@test.com'); + +INSERT INTO orders(amount_billed, customer_id) +VALUES (48.99,1), (27.45, 2), (19.49, 1), (8.49, 3); diff --git a/data/create-data/06-add-customer.sql b/data/create-data/06-add-customer.sql new file mode 100644 index 0000000..b6a0e58 --- /dev/null +++ b/data/create-data/06-add-customer.sql @@ -0,0 +1,2 @@ +INSERT INTO customers(first_name, last_name, email) +VALUES('Ken', 'Brooks', 'ken@test.com');