SQL Questions 1-100
SQL Questions 1-100
Let's start with a structured plan to help you learn the basics of SQL through practical
exercises. We'll cover various aspects of SQL, including data definition, data manipulation, and
querying. Here is a list of 100 SQL exercises to get you started:
Basic SQL
1. Create a Database:
2. Create a Table:
INSERT INTO employees (id, name, position, salary) VALUES (1, 'Alice', 'Manager',
60000.00);
INSERT INTO employees (id, name, position, salary) VALUES (2, 'Bob', 'Developer',
50000.00), (3, 'Charlie', 'Designer', 40000.00);
7. Where Clause:
8. AND, OR Operators:
SELECT * FROM employees WHERE position = 'Developer' AND salary > 45000.00;
9. Order By Clause:
Intermediate SQL
CREATE TABLE departments ( id INT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO
departments (id, name) VALUES (1, 'HR'), (2, 'IT'), (3, 'Design'); SELECT
employees.name, departments.name AS department FROM employees INNER JOIN
departments ON employees.id = departments.id;
SELECT position, COUNT(*) FROM employees GROUP BY position HAVING COUNT(*) > 1;
Advanced SQL
SELECT name FROM employees WHERE id IN (SELECT id FROM departments WHERE name =
'IT');
SELECT name, CASE WHEN salary > 55000 THEN 'High' WHEN salary BETWEEN 40000 AND
55000 THEN 'Medium' ELSE 'Low' END AS salary_level FROM employees;
24. Union Operator:
SELECT name FROM employees UNION ALL SELECT name FROM departments;
CREATE VIEW high_salary_employees AS SELECT * FROM employees WHERE salary > 50000;
CALL get_employee_by_id(1);
SELECT get_employee_count();
BEGIN; UPDATE employees SET salary = 70000 WHERE name = 'Alice'; COMMIT; BEGIN;
UPDATE employees SET salary = 70000 WHERE name = 'Alice'; ROLLBACK;
Aggregation Functions
36. Count:
sql Copy code
37. Sum:
38. Average:
39. Min:
40. Max:
String Functions
41. Concatenate:
42. Substring:
44. Length:
45. Replace:
Date Functions
SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
50. Extract:
Data Manipulation
INSERT INTO employees (id, name, position, salary) SELECT id, name, position,
salary FROM employees_backup;
Advanced Joins
Advanced Subqueries
SELECT name, salary FROM employees e1 WHERE salary > (SELECT AVG(salary) FROM
employees e2 WHERE e1.position = e2.position);
58. Exists:
SELECT name FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.id
= d.id);
SELECT name FROM employees e WHERE NOT EXISTS (SELECT 1 FROM departments d WHERE
e.id = d.id);
Set Operations
60. Intersect:
61. Except:
Window Functions
SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num FROM
employees;
63. Rank:
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees;
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank FROM
employees;
65. NTILE:
66. Lag:
67. Lead:
INSERT INTO employees_json (id, details) VALUES (1, '{"name": "Alice", "position":
"Manager", "salary": 60000}');
WITH HighSalary AS ( SELECT * FROM employees WHERE salary > 50000 ) SELECT * FROM
HighSalary;
SELECT position, salary FROM PivotTable UNPIVOT ( salary FOR position IN (Manager,
Developer, Designer) ) AS UnpivotTable;
Data Security
Practice Projects
CREATE TABLE books ( id INT PRIMARY KEY, title VARCHAR(100), author VARCHAR(100),
published_year INT );
CREATE TABLE members ( id INT PRIMARY KEY, name VARCHAR(100), join_date DATE );
CREATE TABLE loans ( id INT PRIMARY KEY, book_id INT, member_id INT, loan_date
DATE, return_date DATE, FOREIGN KEY (book_id) REFERENCES books(id), FOREIGN KEY
(member_id) REFERENCES members(id) );
INSERT INTO books (id, title, author, published_year) VALUES (1, '1984', 'George
Orwell', 1949), (2, 'To Kill a Mockingbird', 'Harper Lee', 1960);
INSERT INTO members (id, name, join_date) VALUES (1, 'John Doe', '2023-01-15'),
(2, 'Jane Smith', '2023-03-22');
INSERT INTO loans (id, book_id, member_id, loan_date, return_date) VALUES (1, 1,
1, '2023-06-01', '2023-06-15'), (2, 2, 2, '2023-06-05', '2023-06-20');
SELECT b.title, b.author FROM books b INNER JOIN loans l ON b.id = l.book_id WHERE
l.member_id = 1;
SELECT m.name, b.title, l.loan_date, l.return_date FROM members m INNER JOIN loans
l ON m.id = l.member_id INNER JOIN books b ON l.book_id = b.id WHERE l.return_date
< CURRENT_DATE;
Advanced Practice
SET @sql = 'SELECT name FROM employees WHERE salary > ?'; PREPARE stmt FROM @sql;
SET @salary = 50000; EXECUTE stmt USING @salary; DEALLOCATE PREPARE stmt;
CREATE TEMPORARY TABLE temp_employees AS SELECT * FROM employees WHERE salary >
50000;
CREATE TABLE employees_xml ( id INT PRIMARY KEY, details XML ); INSERT INTO
employees_xml (id, details) VALUES (1, '<employee><name>Alice</name>
<position>Manager</position><salary>60000</salary></employee>'); SELECT
EXTRACTVALUE(details, '/employee/name') AS name FROM employees_xml;
WITH RECURSIVE Subordinates AS ( SELECT id, name, manager_id FROM employees WHERE
manager_id IS NULL UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e
INNER JOIN Subordinates s ON s.id = e.manager_id ) SELECT * FROM Subordinates;
These exercises should cover a broad range of SQL functionalities, from basic CRUD operations to
advanced querying techniques and database management. You can practice each of these to get a
solid understanding of SQL. If you need more specific examples or explanations, feel free to ask!