0% found this document useful (0 votes)
22 views

SQL Questions 1-100

100 SQL Questions to learn basics of SQL
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

SQL Questions 1-100

100 SQL Questions to learn basics of SQL
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Sure!

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:

sql Copy code

CREATE DATABASE sample_db;

2. Create a Table:

sql Copy code

CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), position


VARCHAR(50), salary DECIMAL(10, 2) );

3. Insert Data into Table:

sql Copy code

INSERT INTO employees (id, name, position, salary) VALUES (1, 'Alice', 'Manager',
60000.00);

4. Insert Multiple Rows:

sql Copy code

INSERT INTO employees (id, name, position, salary) VALUES (2, 'Bob', 'Developer',
50000.00), (3, 'Charlie', 'Designer', 40000.00);

5. Select All Data:

sql Copy code

SELECT * FROM employees;

6. Select Specific Columns:


sql Copy code

SELECT name, salary FROM employees;

7. Where Clause:

sql Copy code

SELECT * FROM employees WHERE salary > 45000.00;

8. AND, OR Operators:

sql Copy code

SELECT * FROM employees WHERE position = 'Developer' AND salary > 45000.00;

9. Order By Clause:

sql Copy code

SELECT * FROM employees ORDER BY salary DESC;

10. Distinct Keyword:

sql Copy code

SELECT DISTINCT position FROM employees;

Intermediate SQL

11. Update Data:

sql Copy code

UPDATE employees SET salary = 65000.00 WHERE name = 'Alice';

12. Delete Data:

sql Copy code


DELETE FROM employees WHERE id = 3;

13. Alter Table - Add Column:

sql Copy code

ALTER TABLE employees ADD COLUMN email VARCHAR(100);

14. Alter Table - Drop Column:

sql Copy code

ALTER TABLE employees DROP COLUMN email;

15. Inner Join:

sql Copy code

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;

16. Left Join:

sql Copy code

SELECT employees.name, departments.name AS department FROM employees LEFT JOIN


departments ON employees.id = departments.id;

17. Right Join:

sql Copy code

SELECT employees.name, departments.name AS department FROM employees RIGHT JOIN


departments ON employees.id = departments.id;

18. Full Join:


sql Copy code

SELECT employees.name, departments.name AS department FROM employees FULL OUTER


JOIN departments ON employees.id = departments.id;

19. Group By Clause:

sql Copy code

SELECT position, COUNT(*) FROM employees GROUP BY position;

20. Having Clause:

sql Copy code

SELECT position, COUNT(*) FROM employees GROUP BY position HAVING COUNT(*) > 1;

Advanced SQL

21. Subquery in Select:

sql Copy code

SELECT name, (SELECT name FROM departments WHERE id = employees.id) AS department


FROM employees;

22. Subquery in Where:

sql Copy code

SELECT name FROM employees WHERE id IN (SELECT id FROM departments WHERE name =
'IT');

23. Case Statement:

sql Copy code

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:

sql Copy code

SELECT name FROM employees UNION SELECT name FROM departments;

25. Union All Operator:

sql Copy code

SELECT name FROM employees UNION ALL SELECT name FROM departments;

More Complex Queries

26. Create Index:

sql Copy code

CREATE INDEX idx_salary ON employees(salary);

27. Drop Index:

sql Copy code

DROP INDEX idx_salary ON employees;

28. Create View:

sql Copy code

CREATE VIEW high_salary_employees AS SELECT * FROM employees WHERE salary > 50000;

29. Select from View:

sql Copy code

SELECT * FROM high_salary_employees;

30. Delete View:


sql Copy code

DROP VIEW high_salary_employees;

31. Create Stored Procedure:

sql Copy code

CREATE PROCEDURE get_employee_by_id(IN emp_id INT) BEGIN SELECT * FROM employees


WHERE id = emp_id; END;

32. Call Stored Procedure:

sql Copy code

CALL get_employee_by_id(1);

33. Create Function:

sql Copy code

CREATE FUNCTION get_employee_count() RETURNS INT BEGIN DECLARE emp_count INT;


SELECT COUNT(*) INTO emp_count FROM employees; RETURN emp_count; END;

34. Use Function:

sql Copy code

SELECT get_employee_count();

35. Transaction Control - Begin, Commit, Rollback:

sql Copy code

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

SELECT COUNT(*) FROM employees;

37. Sum:

sql Copy code

SELECT SUM(salary) FROM employees;

38. Average:

sql Copy code

SELECT AVG(salary) FROM employees;

39. Min:

sql Copy code

SELECT MIN(salary) FROM employees;

40. Max:

sql Copy code

SELECT MAX(salary) FROM employees;

String Functions

41. Concatenate:

sql Copy code

SELECT CONCAT(name, ' - ', position) FROM employees;

42. Substring:

sql Copy code


SELECT SUBSTRING(name, 1, 3) FROM employees;

43. Upper and Lower:

sql Copy code

SELECT UPPER(name), LOWER(name) FROM employees;

44. Length:

sql Copy code

SELECT LENGTH(name) FROM employees;

45. Replace:

sql Copy code

SELECT REPLACE(name, 'a', 'A') FROM employees;

Date Functions

46. Current Date:

sql Copy code

SELECT CURRENT_DATE;

47. Current Time:

sql Copy code

SELECT CURRENT_TIME;

48. Date Add:

sql Copy code


SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

49. Date Sub:

sql Copy code

SELECT DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);

50. Extract:

sql Copy code

SELECT EXTRACT(YEAR FROM CURRENT_DATE);

Data Manipulation

51. Insert Data with Select:

sql Copy code

INSERT INTO employees (id, name, position, salary) SELECT id, name, position,
salary FROM employees_backup;

52. Update Multiple Rows:

sql Copy code

UPDATE employees SET salary = salary + 5000 WHERE position = 'Developer';

53. Delete with Condition:

sql Copy code

DELETE FROM employees WHERE salary < 45000;

Advanced Joins

54. Self Join:


sql Copy code

SELECT e1.name AS Employee, e2.name AS Manager FROM employees e1, employees e2


WHERE e1.manager_id = e2.id;

55. Cross Join:

sql Copy code

SELECT e.name, d.name FROM employees e CROSS JOIN departments d;

56. Natural Join:

sql Copy code

SELECT e.name, d.name FROM employees e NATURAL JOIN departments d;

Advanced Subqueries

57. Correlated Subquery:

sql Copy code

SELECT name, salary FROM employees e1 WHERE salary > (SELECT AVG(salary) FROM
employees e2 WHERE e1.position = e2.position);

58. Exists:

sql Copy code

SELECT name FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.id
= d.id);

59. Not Exists:

sql Copy code

SELECT name FROM employees e WHERE NOT EXISTS (SELECT 1 FROM departments d WHERE
e.id = d.id);
Set Operations

60. Intersect:

sql Copy code

SELECT name FROM employees INTERSECT SELECT name FROM departments;

61. Except:

sql Copy code

SELECT name FROM employees EXCEPT SELECT name FROM departments;

Window Functions

62. Row Number:

sql Copy code

SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num FROM
employees;

63. Rank:

sql Copy code

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees;

64. Dense Rank:

sql Copy code

SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank FROM
employees;

65. NTILE:

sql Copy code


SELECT name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM
employees;

66. Lag:

sql Copy code

SELECT name, salary, LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary


FROM employees;

67. Lead:

sql Copy code

SELECT name, salary, LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary


FROM employees;

68. First Value:

sql Copy code

SELECT name, salary, FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS top_salary


FROM employees;

69. Last Value:

sql Copy code

SELECT name, salary, LAST_VALUE(salary) OVER (ORDER BY salary DESC) AS


bottom_salary FROM employees;

Advanced Data Types

70. JSON Data Type:

sql Copy code

CREATE TABLE employees_json ( id INT PRIMARY KEY, details JSON );


71. Insert JSON Data:

sql Copy code

INSERT INTO employees_json (id, details) VALUES (1, '{"name": "Alice", "position":
"Manager", "salary": 60000}');

72. Select JSON Data:

sql Copy code

SELECT details->>'$.name' AS name FROM employees_json;

Common Table Expressions (CTE)

73. Simple CTE:

sql Copy code

WITH HighSalary AS ( SELECT * FROM employees WHERE salary > 50000 ) SELECT * FROM
HighSalary;

74. Recursive CTE:

sql Copy code

WITH RECURSIVE EmployeeHierarchy 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 EmployeeHierarchy eh ON e.manager_id = eh.id ) SELECT *
FROM EmployeeHierarchy;

More Complex Queries

75. Pivot Table:

sql Copy code

SELECT * FROM ( SELECT position, salary FROM employees ) AS SourceTable PIVOT (


AVG(salary) FOR position IN ([Manager], [Developer], [Designer]) ) AS PivotTable;

76. Unpivot Table:


sql Copy code

SELECT position, salary FROM PivotTable UNPIVOT ( salary FOR position IN (Manager,
Developer, Designer) ) AS UnpivotTable;

Data Security

77. Create User:

sql Copy code

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

78. Grant Privileges:

sql Copy code

GRANT SELECT, INSERT ON sample_db.* TO 'new_user'@'localhost';

79. Revoke Privileges:

sql Copy code

REVOKE INSERT ON sample_db.* FROM 'new_user'@'localhost';

80. Drop User:

sql Copy code

DROP USER 'new_user'@'localhost';

Practice Projects

81. Create a Library Database:

sql Copy code

CREATE DATABASE library;

82. Create Books Table:


sql Copy code

CREATE TABLE books ( id INT PRIMARY KEY, title VARCHAR(100), author VARCHAR(100),
published_year INT );

83. Create Members Table:

sql Copy code

CREATE TABLE members ( id INT PRIMARY KEY, name VARCHAR(100), join_date DATE );

84. Create Loans Table:

sql Copy code

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) );

85. Insert Sample Data into Books:

sql Copy code

INSERT INTO books (id, title, author, published_year) VALUES (1, '1984', 'George
Orwell', 1949), (2, 'To Kill a Mockingbird', 'Harper Lee', 1960);

86. Insert Sample Data into Members:

sql Copy code

INSERT INTO members (id, name, join_date) VALUES (1, 'John Doe', '2023-01-15'),
(2, 'Jane Smith', '2023-03-22');

87. Insert Sample Data into Loans:

sql Copy code

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');

88. Query to Find All Loans:


sql Copy code

SELECT * FROM loans;

89. Query to Find Books Loaned by a Member:

sql Copy code

SELECT b.title, b.author FROM books b INNER JOIN loans l ON b.id = l.book_id WHERE
l.member_id = 1;

90. Query to Find Overdue Loans:

sql Copy code

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

91. Dynamic SQL:

sql Copy code

SET @sql = 'SELECT name FROM employees WHERE salary > ?'; PREPARE stmt FROM @sql;
SET @salary = 50000; EXECUTE stmt USING @salary; DEALLOCATE PREPARE stmt;

92. Temporary Tables:

sql Copy code

CREATE TEMPORARY TABLE temp_employees AS SELECT * FROM employees WHERE salary >
50000;

93. Common Table Expressions (CTE) with Aggregation:

sql Copy code

WITH EmployeeCounts AS ( SELECT position, COUNT(*) AS count FROM employees GROUP


BY position ) SELECT * FROM EmployeeCounts;

94. Window Functions with Aggregation:

sql Copy code

SELECT name, salary, SUM(salary) OVER (PARTITION BY position) AS total_salary FROM


employees;

95. JSON Functions:

sql Copy code

SELECT JSON_EXTRACT(details, '$.name') AS name FROM employees_json;

96. XML Data Type and Functions:

sql Copy code

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;

97. Recursive CTE for Hierarchical Data:

sql Copy code

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;

98. Pivot and Unpivot:

sql Copy code

SELECT * FROM ( SELECT position, salary FROM employees ) AS SourceTable PIVOT (


AVG(salary) FOR position IN ([Manager], [Developer], [Designer]) ) AS PivotTable;

99. Create Index for Optimization:


sql Copy code

CREATE INDEX idx_position ON employees(position);

100. Use Explain to Analyze Query:


sql EXPLAIN SELECT * FROM employees WHERE salary > 50000;

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!

You might also like