├── 1. Basics.sql ├── 2. Data Types.sql ├── 3. Functions.sql ├── 4. Operators.sql ├── 5. Constraints.sql ├── 6. One-to-many-and-joins.sql ├── 7. Many-to-many.sql ├── 8. Views.sql ├── README.md └── thumb.png /1. Basics.sql: -------------------------------------------------------------------------------- 1 | -- ----------------- 2 | -- SHOW DATABASES; 3 | -- ----------------- 4 | 5 | -- ----------------- 6 | -- CREATE DATABASE MACHINES; 7 | -- ----------------- 8 | 9 | -- ----------------- 10 | -- DROP DATABASE MACHINES; 11 | -- ----------------- 12 | 13 | -- ----------------- 14 | -- CREATE DATABASE MACHINES; 15 | -- USE MACHINES 16 | -- ----------------- 17 | 18 | -- ----------------- 19 | -- USE GAMES; 20 | -- SELECT DATABASE() 21 | -- ----------------- 22 | 23 | -- ----------------- 24 | -- CREATE DATABASE PC; 25 | -- USE PC; 26 | -- CREATE TABLE GAMES ( 27 | -- name VARCHAR(50), 28 | -- ratings INT 29 | -- ); 30 | -- ----------------- 31 | 32 | -- ----------------- 33 | -- SHOW TABLES; 34 | -- SHOW COLUMNS FROM GAMES; 35 | -- DESC GAMES; 36 | -- ----------------- 37 | 38 | -- ----------------- 39 | -- CREATE TABLE GAMES ( 40 | -- name VARCHAR(50) DEFAULT 'Anonymous', 41 | -- release_year INT DEFAULT 2024, 42 | -- ratings INT NOT NULL 43 | -- ); 44 | 45 | -- DESC GAMES; 46 | -- ----------------- 47 | 48 | -- ----------------- 49 | -- DROP TABLE GAMES; 50 | -- SHOW TABLES; 51 | -- ----------------- 52 | 53 | -- CREATE TABLE Movies ( 54 | -- name VARCHAR(50), 55 | -- release_year INT, 56 | -- ratings DECIMAL, 57 | -- comment CHAR(10), 58 | -- comment_date DATE DEFAULT "2025-04-02", 59 | -- comment_time TIME DEFAULT "14:10:42" 60 | -- ); 61 | 62 | 63 | 64 | -- ----------------- 65 | -- CREATE TABLE GAMES ( 66 | -- name VARCHAR(50) , 67 | -- release_year INT, 68 | -- ratings INT 69 | -- ); 70 | 71 | -- DESC GAMES; 72 | 73 | -- INSERT INTO GAMES(name, release_year, ratings) 74 | -- VALUES 75 | -- ('GTA 6', 2015, 6), 76 | -- ('GTA 5', 2013, 9), 77 | -- ('Batman: Arkham Knight', 2015, 7), 78 | -- ('AKR 2', 2017, 2); 79 | -- ----------------- 80 | 81 | -- ----------------- 82 | -- SELECT 2 + 2 83 | -- SELECT 2 - 2 84 | -- SELECT 2 * 2 85 | 86 | -- SELECT name FROM GAMES; 87 | -- SELECT ratings FROM GAMES; 88 | -- SELECT release_year FROM GAMES; 89 | 90 | -- SELECT name, ratings FROM GAMES; 91 | -- SELECT * FROM GAMES; 92 | -- ----------------- 93 | 94 | -- ----------------- 95 | -- CREATE TABLE MOVIES ( 96 | -- id INT PRIMARY KEY, -- 👈 Primary Key / Unique 97 | -- title VARCHAR(50), 98 | -- genre VARCHAR(50), 99 | -- director VARCHAR(50), 100 | -- cast_count INT, 101 | -- languages INT, 102 | -- release_year INT, 103 | -- imdb_ratings DOUBLE, 104 | -- duration INT 105 | -- ); 106 | 107 | -- INSERT INTO MOVIES( 108 | -- id, 109 | -- title, 110 | -- genre, 111 | -- director, 112 | -- cast_count, 113 | -- languages, 114 | -- release_year, 115 | -- imdb_ratings, 116 | -- duration 117 | -- ) 118 | -- VALUES 119 | -- (1, 'The Wither', 'Horror', 'Timur', 5,5,5,5.0,120), 120 | -- ❌ (1,'Extraction','Action','Sam Hargrave',5,5,5,5.0,120) 121 | -- (2, 'Extraction', 'Action', 'Sam Hargrave', 5,5,5,5.0,120); 122 | 123 | -- SELECT * FROM MOVIES; 124 | -- ----------------- 125 | 126 | -- ----------------- 127 | -- SELECT * FROM MOVIES; 128 | -- SELECT * FROM MOVIES WHERE genre = 'Action'; 129 | -- SELECT title FROM MOVIES WHERE genre = 'Action'; 130 | -- SELECT title, genre FROM MOVIES WHERE genre = 'Action'; 131 | -- SELECT title FROM MOVIES WHERE imdb_ratings = 5.0; 132 | -- ----------------- 133 | 134 | -- ----------------- 135 | -- SELECT id AS movie_id FROM MOVIES; 136 | -- SELECT title AS movie_name FROM MOVIES; 137 | -- SELECT imdb_ratings AS movie_rating FROM MOVIES; 138 | -- SELECT cast_count AS casts from MOVIES; 139 | -- ----------------- 140 | 141 | -- ----------------- 142 | -- CREATE TABLE USERS( 143 | -- id INT PRIMARY KEY, 144 | -- name VARCHAR(50), 145 | -- age INT, 146 | -- email VARCHAR(50), 147 | -- password VARCHAR(50) 148 | -- ); 149 | 150 | -- INSERT INTO USERS(id, name, age, email, password) 151 | -- VALUES 152 | -- (1, 'John', 25, 'U3Qc2@example.com', 'password123'), 153 | -- (2, 'Jane', 30, 'qGqQh@example.com', 'password456'), 154 | -- (3, 'Bob', 35, 'I3l0h@example.com', 'password789'); 155 | 156 | -- SELECT * FROM USERS; 157 | 158 | -- UPDATE USERS 159 | -- SET age = 30 160 | -- WHERE id = 1 161 | 162 | -- SELECT * FROM USERS; 163 | 164 | -- UPDATE USERS 165 | -- SET password = "newpassword" 166 | -- WHERE id = 1 167 | 168 | -- SELECT * FROM USERS; 169 | -- ----------------- 170 | 171 | 172 | -- ----------------- 173 | 174 | SELECT * FROM USERS; 175 | DELETE FROM USERS 176 | WHERE id = 1 177 | 178 | SELECT * FROM USERS; 179 | 180 | DELETE FROM USERS; 181 | 182 | SELECT * FROM USERS; 183 | 184 | -------------------------------------------------------------------------------- /2. Data Types.sql: -------------------------------------------------------------------------------- 1 | -- -------------------------------- 2 | CREATE TABLE games( 3 | name VARCHAR(10), 4 | genre CHAR(10) 5 | ); 6 | 7 | INSERT INTO games(name, genre) VALUES("game1", "action"); 8 | SELECT * FROM games; 9 | -- -------------------------------- 10 | 11 | -- -------------------------------- 12 | CREATE TABLE events ( 13 | event_name VARCHAR(255), 14 | event_date DATE, 15 | event_time TIME, 16 | event_datetime DATETIME 17 | ); 18 | 19 | DESC events 20 | 21 | INSERT INTO events (event_name, event_date, event_time, event_datetime) 22 | VALUES ('Meeting', '2024-03-02', '14:30:00', '2024-03-02 14:30:00'), 23 | ('Presentation', '2024-03-03', '09:00:00', '2024-03-03 09:00:00'), 24 | ('Party', '2024-03-04', '20:00:00', '2024-03-04 20:00:00'); 25 | 26 | SELECT * FROM events 27 | -- -------------------------------- 28 | 29 | -- -------------------------------- 30 | SELECT CURRENT_DATE(); 31 | SELECT CURRENT_TIME(); 32 | SELECT NOW(); 33 | -- -------------------------------- 34 | 35 | -- -------------------------------- 36 | CREATE TABLE comments ( 37 | id INT AUTO_INCREMENT PRIMARY KEY, 38 | author VARCHAR(255), 39 | content VARCHAR(255), 40 | created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 41 | updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 42 | ); 43 | 44 | INSERT INTO comments (author, content) 45 | VALUES ('HuXn', 'This is a great article!'), 46 | ('Jordan', 'I have a question about this topic.'), 47 | ('Charlie', 'Thanks for sharing this information.'); 48 | 49 | 50 | SELECT * FROM COMMENTS; 51 | 52 | -- updating 53 | UPDATE comments SET content="tf is going on here?" WHERE id=1; 54 | UPDATE comments SET content="Never mind my query is resolved" WHERE id=2; 55 | SELECT * FROM COMMENTS; 56 | -- -------------------------------- 57 | -------------------------------------------------------------------------------- /3. Functions.sql: -------------------------------------------------------------------------------- 1 | -- -------------------------- 2 | CREATE TABLE Users ( 3 | user_id INT PRIMARY KEY AUTO_INCREMENT, 4 | first_name VARCHAR(255) NOT NULL, 5 | last_name VARCHAR(255) NOT NULL, 6 | email VARCHAR(255) UNIQUE NOT NULL, 7 | password VARCHAR(255) NOT NULL, 8 | age INT 9 | ); 10 | 11 | INSERT INTO Users (first_name, last_name, email, password, age) 12 | VALUES 13 | ('Jane', 'Doe', 'jane@example.com', 'password4', 10), 14 | ('Michael', 'Brown', 'michael@example.com', 'password5', 20), 15 | ('Emma', 'Johnson', 'emma1@example.com', 'password6', 35), 16 | ('William', 'Davis', 'william@example.com', 'password7', 30), 17 | ('Olivia', 'Martinez', 'olivia@example.com', 'password8', 35), 18 | ('James', 'Miller', 'james@example.com', 'password9', 35), 19 | ('Sophia', 'Garcia', 'sophia@example.com', 'password10', 40), 20 | ('Benjamin', 'Rodriguez', 'benjamin@example.com', 'password11', 42), 21 | ('Amelia', 'Lopez', 'amelia@example.com', 'password12', 45), 22 | ('Elijah', 'Lee', 'elijah@example.com', 'password13', 50), 23 | ('Charlotte', 'Harris', 'charlotte@example.com', 'password14', 60), 24 | ('David', 'Clark', 'david@example.com', 'password15', 70), 25 | ('Mia', 'Lewis', 'mia@example.com', 'password16', 80), 26 | ('Alexander', 'Allen', 'alexander@example.com', 'password17', 15), 27 | ('Isabella', 'Young', 'isabella@example.com', 'password18', 18), 28 | ('Ethan', 'Wright', 'ethan@example.com', 'password19', 22), 29 | ('Ava', 'King', 'ava@example.com', 'password20', 24), 30 | ('Noah', 'Scott', 'noah@example.com', 'password21', 21), 31 | ('Liam', 'Green', 'liam@example.com', 'password22', 34), 32 | ('Emma', 'Baker', 'emma2@example.com', 'password23', 31); 33 | -- -------------------------- 34 | 35 | -- -------------------------- 36 | SELECT SUBSTRING("Hello World", 7, 5); 37 | SELECT SUBSTRING("HuXn", 3); 38 | SELECT SUBSTRING(first_name, 2) FROM USERS; 39 | SELECT SUBSTRING(first_name, 2, 6) FROM USERS; 40 | SELECT SUBSTRING(first_name, 1, 7) FROM USERS; 41 | -- -------------------------- 42 | 43 | -- -------------------------- 44 | SELECT REPLACE("HELLO WORLD", "HELLO", "BYE"); 45 | SELECT REPLACE('HuXn', "X", "Z"); 46 | SELECT REPLACE(first_name, "Jane", "Janeeeee") FROM USERS; 47 | SELECT REPLACE(last_name, "Doe", "Doeeee") FROM USERS; 48 | -- -------------------------- 49 | 50 | -- -------------------------- 51 | SELECT REVERSE('Hello World'); 52 | SELECT REVERSE('HuXn'); 53 | SELECT REVERSE(first_name) FROM USERS; 54 | SELECT REVERSE(last_name) FROM USERS; 55 | SELECT REVERSE(password) FROM USERS; 56 | -- -------------------------- 57 | 58 | -- -------------------------- 59 | SELECT CHAR_LENGTH('Hello World'); 60 | SELECT CHAR_LENGTH('HuXn'); 61 | SELECT CHAR_LENGTH(first_name) FROM USERS; 62 | SELECT CHAR_LENGTH(last_name) FROM USERS; 63 | -- -------------------------- 64 | 65 | -- -------------------------- 66 | SELECT LENGTH('Hello World'); 67 | SELECT LENGTH('HuXn'); 68 | SELECT LENGTH(first_name) FROM USERS; 69 | SELECT LENGTH(last_name) FROM USERS; 70 | -- -------------------------- 71 | 72 | -- -------------------------- 73 | SELECT first_name FROM USERS ORDER BY first_name ASC; 74 | SELECT first_name FROM USERS ORDER BY first_name DESC; 75 | SELECT first_name FROM USERS ORDER BY LENGTH(first_name); 76 | SELECT first_name FROM USERS ORDER BY LENGTH(first_name) DESC; 77 | -- -------------------------- 78 | 79 | -- -------------------------- 80 | SELECT first_name FROM USERS; 81 | SELECT first_name FROM USERS LIMIT 5; 82 | SELECT first_name FROM USERS LIMIT 2; 83 | -- -------------------------- 84 | 85 | -------------------------- 86 | -- % : This wildcard matches zero or more characters. 87 | -- _ : This wildcard matches exactly one character 88 | 89 | SELECT * FROM USERS 90 | -- WHERE first_name LIKE "%j%"; 91 | -- WHERE first_name LIKE "%%"; 92 | -- WHERE first_name LIKE "%mma%"; 93 | -- WHERE first_name LIKE "_mma"; 94 | WHERE first_name LIKE "__exander"; 95 | -------------------------- 96 | 97 | -------------------------- 98 | SELECT COUNT(*) FROM USERS; 99 | SELECT COUNT(first_name) from USERS; 100 | 101 | SELECT COUNT(*) FROM USERS 102 | WHERE first_name = "Emma"; 103 | 104 | SELECT COUNT(*) FROM USERS 105 | WHERE first_name = "Michael"; 106 | -------------------------- 107 | 108 | -------------------------- 109 | SELECT MIN(age) FROM USERS; 110 | SELECT MAX(age) FROM USERS; 111 | SELECT AVG(age) FROM USERS; 112 | SELECT SUM(age) FROM USERS; 113 | -------------------------- 114 | 115 | -------------------------- 116 | -- let's say you want to find out the average age of users grouped by their first names. 117 | SELECT first_name, AVG(age) AS average_age 118 | FROM Users 119 | GROUP BY first_name; 120 | -------------------------- -------------------------------------------------------------------------------- /4. Operators.sql: -------------------------------------------------------------------------------- 1 | -------------------------- 2 | -- SELECT first_name, last_name 3 | -- FROM Users 4 | -- -- WHERE age != 35 5 | -- -- WHERE first_name != "Emma"; 6 | -- WHERE password != "password4"; 7 | -------------------------- 8 | 9 | -------------------------- 10 | SELECT * 11 | FROM Users 12 | -- WHERE age > 50; 13 | -- WHERE age > 60; 14 | WHERE LENGTH(first_name) > 5; 15 | -------------------------- 16 | 17 | -------------------------- 18 | SELECT * 19 | FROM Users 20 | -- WHERE age < 50; 21 | -- WHERE age < 60; 22 | WHERE LENGTH(first_name) < 5; 23 | -------------------------- 24 | 25 | 26 | -------------------------- 27 | SELECT * 28 | FROM Users 29 | -- WHERE age > 50 AND LENGTH(first_name) > 5 30 | WHERE first_name = "Emma" AND last_name = "Johnson" 31 | -------------------------- 32 | 33 | -------------------------- 34 | SELECT * 35 | FROM Users 36 | -- WHERE age < 30 OR age > 70; 37 | WHERE first_name = 'Jane' OR last_name = 'Johnson'; 38 | -------------------------- 39 | 40 | -------------------------- 41 | SELECT * 42 | FROM Users 43 | WHERE age BETWEEN 40 AND 60; 44 | -------------------------- 45 | 46 | -------------------------- 47 | SELECT * 48 | FROM Users 49 | -- WHERE age IN (25, 30, 35); 50 | -- WHERE first_name IN ('Jane', 'Emma', 'Olivia'); 51 | WHERE email IN ('jane@example.com', 'olivia@example.com'); 52 | -------------------------- 53 | 54 | -------------------------- 55 | SELECT first_name, age, 56 | CASE 57 | WHEN age < 30 THEN 'Young' 58 | WHEN age >= 30 AND age < 60 THEN 'Middle-aged' 59 | ELSE 'Senior' 60 | END AS age_group 61 | FROM 62 | Users; 63 | -------------------------- 64 | -------------------------------------------------------------------------------- /5. Constraints.sql: -------------------------------------------------------------------------------- 1 | -- ------------------------------------ 2 | CREATE TABLE series ( 3 | id INT AUTO_INCREMENT PRIMARY KEY, 4 | title VARCHAR(255) UNIQUE, 5 | release_year INT, 6 | genre VARCHAR(255) 7 | ); 8 | 9 | INSERT INTO series (title, release_year, genre) 10 | VALUES ('Stranger Things', 2016, 'Science Fiction'), 11 | ('Game of Thrones', 2011, 'Fantasy'), 12 | ('Game of Thrones', 2011, 'Fantasy'); 13 | -- ('Breaking Bad', 2008, 'Drama'), 14 | -- ('The Crown', 2016, 'Historical Drama'); 15 | -- ------------------------------------ 16 | 17 | -- ------------------------------------ 18 | CREATE TABLE employee ( 19 | emp_id INT PRIMARY KEY, 20 | emp_name VARCHAR(50), 21 | emp_age INT CHECK (emp_age >= 18 AND emp_age <= 65), 22 | emp_salary DECIMAL(10, 2) CHECK (emp_salary >= 0) 23 | ); 24 | 25 | -- This should succeed 26 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (1, 'Alice', 25, 50000.00); 27 | 28 | -- This should fail due to age constraint 29 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (2, 'Bob', 16, 60000.00); 30 | 31 | -- This should fail due to salary constraint 32 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (3, 'Charlie', 30, -1000.00); 33 | -- ------------------------------------ 34 | 35 | 36 | -- ------------------------------------ 37 | -- DROP TABLE employee 38 | 39 | CREATE TABLE employee ( 40 | emp_id INT PRIMARY KEY, 41 | emp_name VARCHAR(50), 42 | emp_age INT, 43 | emp_salary DECIMAL(10, 2), 44 | CONSTRAINT chk_emp_age CHECK (emp_age >= 18 AND emp_age <= 65), 45 | CONSTRAINT chk_emp_salary CHECK (emp_salary >= 0) 46 | ); 47 | 48 | -- This should succeed 49 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (1, 'Alice', 25, 50000.00); 50 | 51 | -- This should fail due to age constraint 52 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (2, 'Bob', 16, 60000.00); 53 | 54 | -- This should fail due to salary constraint 55 | INSERT INTO employee (emp_id, emp_name, emp_age, emp_salary) VALUES (3, 'Charlie', 30, -1000.00); 56 | -- ------------------------------------ 57 | 58 | -- ------------------------------------ 59 | SELECT * FROM employee; 60 | 61 | ALTER TABLE employee 62 | DROP COLUMN emp_salary; 63 | 64 | SELECT * FROM employee; 65 | -- ------------------------------------ 66 | 67 | -- ------------------------------------ 68 | DESC EMPLOYEE 69 | 70 | ALTER TABLE employee 71 | MODIFY COLUMN emp_name VARCHAR(255); 72 | 73 | DESC EMPLOYEE 74 | -- ------------------------------------ 75 | 76 | 77 | -- ------------------------------------ 78 | DESC EMPLOYEE 79 | 80 | 81 | ALTER TABLE employee 82 | CHANGE COLUMN emp_name full_name VARCHAR(50); 83 | 84 | DESC EMPLOYEE; 85 | -- ------------------------------------ 86 | -------------------------------------------------------------------------------- /6. One-to-many-and-joins.sql: -------------------------------------------------------------------------------- 1 | -- -------------------------------------------------------------- 2 | CREATE TABLE engineer ( 3 | engineer_id INT AUTO_INCREMENT PRIMARY KEY, 4 | engineer_name VARCHAR(255) NOT NULL, 5 | profession VARCHAR(255) NOT NULL, 6 | email VARCHAR(50) 7 | ); 8 | 9 | CREATE TABLE tasks ( 10 | task_id INT AUTO_INCREMENT PRIMARY KEY, 11 | task_name VARCHAR(255), 12 | task_description TEXT, 13 | engineer_id INT, 14 | -- FOREIGN KEY (engineer_id) REFERENCES engineer(engineer_id) 15 | ); 16 | 17 | INSERT INTO engineer (engineer_name, profession, email) 18 | VALUES 19 | ('Alice Johnson', 'Full-Stack', 'aj@gmail.com'), 20 | ('Bob Smith', 'Back-End', 'bobsmith@gmail.com'), 21 | ('Charlie Brown', 'Front-End', 'charilebrown@gmail.com'); 22 | 23 | INSERT INTO tasks (task_name, task_description, engineer_id) 24 | VALUES 25 | ('Task 1', 'Design the UI in Figma', 1), 26 | ('Task 2', 'Build the Server In Bun', 2), 27 | ('Task 3', 'Code the UI in TailwindCSS', 1) 28 | -- ('Task 40', 'Description for Task 40', 40); ❌ 29 | -- -------------------------------------------------------------- 30 | 31 | CREATE TABLE engineer ( 32 | engineer_id INT AUTO_INCREMENT PRIMARY KEY, 33 | engineer_name VARCHAR(255) NOT NULL, 34 | profession VARCHAR(255) NOT NULL, 35 | email VARCHAR(50) 36 | ); 37 | 38 | CREATE TABLE tasks ( 39 | task_id INT AUTO_INCREMENT PRIMARY KEY, 40 | task_name VARCHAR(255), 41 | task_description TEXT, 42 | engineer_id INT, 43 | FOREIGN KEY (engineer_id) REFERENCES engineer(engineer_id) 44 | ); 45 | 46 | INSERT INTO engineer (engineer_name, profession, email) 47 | VALUES 48 | ('Alice Johnson', 'Full-Stack', 'aj@gmail.com'), 49 | ('Bob Smith', 'Back-End', 'bobsmith@gmail.com'), 50 | ('Charlie Brown', 'Front-End', 'charilebrown@gmail.com'); 51 | 52 | INSERT INTO tasks (task_name, task_description, engineer_id) 53 | VALUES 54 | ('Task 1', 'Design the UI in Figma', 1), 55 | ('Task 2', 'Build the Server In Bun', 2), 56 | ('Task 3', 'Code the UI in TailwindCSS', 1) 57 | -- ('Task 40', 'Description for Task 40', 40); ❌ 58 | 59 | SELECT * FROM tasks 60 | 61 | -- ------------------- CROSS JOIN 62 | -- A cross join is a type of join operation that combines each row from one table with every row from another table. It essentially creates a new result set containing all possible combinations of rows from the joined tables. 63 | 64 | SELECT * FROM engineer CROSS JOIN tasks; 65 | SELECT * FROM engineer, tasks 66 | 67 | -- ------------------ INNER JOIN 68 | -- An inner join selects records that have matching values in both tables. 69 | SELECT * FROM engineer 70 | INNER JOIN tasks ON engineer.engineer_id = tasks.engineer_id; 71 | 72 | SELECT * FROM engineer e 73 | INNER JOIN tasks t ON e.engineer_id = t.engineer_id; 74 | 75 | SELECT engineer_name, email, task_name, task_description FROM engineer e 76 | INNER JOIN tasks t ON e.engineer_id = t.engineer_id; 77 | 78 | SELECT * FROM tasks t 79 | JOIN engineer e ON e.engineer_id = t.engineer_id; 80 | ------------------------------------------ 81 | 82 | ------------------------------------------ 83 | -- LEFT JOIN 84 | -- A left join returns all records from the left table (engineer), and the matched records from the right table (tasks). 85 | -- If there's no match, the result is NULL from the right side. 86 | SELECT * FROM engineer e 87 | LEFT JOIN tasks t ON e.engineer_id = t.engineer_id; 88 | 89 | ------------------------------------------ 90 | -- RIGHT JOIN 91 | -- A right join returns all records from the right table (tasks), and the matched records from the left table (engineer). If there's no match, the result is NULL from the left side. 92 | SELECT * FROM engineer e 93 | RIGHT JOIN tasks t ON e.engineer_id = t.engineer_id; -------------------------------------------------------------------------------- /7. Many-to-many.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE MOVIES ( 2 | movie_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 3 | title VARCHAR(100) NOT NULL, 4 | year INT NOT NULL, 5 | director VARCHAR(100) NOT NULL, 6 | genre VARCHAR(100) NOT NULL 7 | ); 8 | 9 | CREATE TABLE Person ( 10 | person_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 11 | name VARCHAR(100) NOT NULL, 12 | age INT, 13 | email VARCHAR(255), 14 | gender VARCHAR(100), 15 | country VARCHAR(100) 16 | ); 17 | 18 | CREATE TABLE Comment ( 19 | comment_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 20 | comment_content TEXT NOT NULL, 21 | movie_id INT NOT NULL, 22 | person_id INT NOT NULL, 23 | FOREIGN KEY (movie_id) REFERENCES MOVIES(movie_id), 24 | FOREIGN KEY (person_id) REFERENCES Person(person_id) 25 | ); 26 | 27 | INSERT INTO Movies(title, year, director, genre) 28 | VALUES ('The Shawshank Redemption',1994,'Frank Darabont','Drama'), 29 | ('The Godfather',1972,'Francis Ford Coppola','Crime'), 30 | ('The Godfather: Part II',1974,'Francis Ford Coppola','Crime'), 31 | ('The Dark Knight',2008,'Christopher Nolan','Action'), 32 | ('12 Angry Men',1957,'Sidney Lumet','Drama'), 33 | ('Schindler''s List',1993,'Steven Spielberg','Drama'), 34 | ('Pulp Fiction',1994,'Quentin Tarantino','Crime'), 35 | ('The Lord of the Rings: The Return of the King',2003,'Peter Jackson','Action'), 36 | ('The Good, the Bad and the Ugly',1966,'Sergio Leone','Western'), 37 | ('Fight Club',1999,'David Fincher','Drama'); 38 | 39 | 40 | INSERT INTO PERSON(name,age,email,gender,country) 41 | VALUES ('Tom Hanks', 63, 'Vx5uZ@example.com', 'Male', 'United States'), 42 | ('Brad Pitt', 59, 'U7lZD@example.com', 'Male', 'United States'), 43 | ('Leonardo DiCaprio', 47, 'Vx5uZ@example.com', 'Male', 'United States'), 44 | ('Margot Robbie', 35, 'Vx5uZ@example.com', 'Female', 'United States'), 45 | ('Kate Winslet', 32, 'Vx5uZ@example.com', 'Female', 'United States'), 46 | ('Christian Bale', 45, 'Vx5uZ@example.com', 'Male', 'United States'), 47 | ('Heath Ledger', 49, 'Vx5uZ@example.com', 'Male', 'United States'), 48 | ('Gary Oldman', 51, 'Vx5uZ@example.com', 'Male', 'United States'), 49 | ('Tom Cruise', 47, 'Vx5uZ@example.com', 'Male', 'United States'); 50 | 51 | INSERT INTO Comment(movie_id, person_id, comment_content) 52 | VALUES (1,1,'I really like this movie.'), 53 | (2, 2, 'I really like this movie.'), 54 | (3, 3, 'I really like this movie.'), 55 | (4, 4, 'I really like this movie.'), 56 | (5, 5, 'I really like this movie.'), 57 | (6, 6, 'I really like this movie.'), 58 | (7, 7, 'I really like this movie.'), 59 | (8, 8, 'I really like this movie.'), 60 | (9, 9, 'I really like this movie.'); 61 | 62 | -------------------------------------------------------------------------------- /8. Views.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE employees ( 2 | id INT PRIMARY KEY, 3 | first_name VARCHAR(50), 4 | last_name VARCHAR(50), 5 | department VARCHAR(50), 6 | salary DECIMAL(10, 2) 7 | ); 8 | 9 | INSERT INTO employees (id, first_name, last_name, department, salary) 10 | VALUES 11 | (1, 'John', 'Doe', 'IT', 50000.00), 12 | (2, 'Jane', 'Smith', 'HR', 60000.00), 13 | (3, 'Alice', 'Johnson', 'Finance', 70000.00); 14 | 15 | -- Create a view 16 | CREATE VIEW employee_names AS 17 | SELECT id, CONCAT(first_name, ' ', last_name) AS full_name 18 | FROM employees; 19 | 20 | -- Query the view 21 | SELECT * FROM employee_names; 22 | 23 | -- Update the view (recreate it) 24 | -- Create a view if didn't exists already, or replace it with this new one. 25 | 26 | CREATE OR REPLACE VIEW employee_names AS 27 | SELECT id, CONCAT(first_name, ' ', last_name) AS full_name 28 | FROM employees 29 | WHERE department = 'IT'; 30 | 31 | SELECT * FROM employee_names; 32 | 33 | -- Delete the view 34 | DROP VIEW employee_names; 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuXn-WebDev/MySQL-Complete-Course/bda3ecbb9caf9b6e1fc0c6d6ff9a9f9a8384049d/README.md -------------------------------------------------------------------------------- /thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuXn-WebDev/MySQL-Complete-Course/bda3ecbb9caf9b6e1fc0c6d6ff9a9f9a8384049d/thumb.png --------------------------------------------------------------------------------