Exercise 1
Database:
CREATE TABLE Patient (
PID INT PRIMARY KEY,
Pname VARCHAR(50),
Paddress VARCHAR(100),
Pgender VARCHAR(10),
disease VARCHAR(50)
);
CREATE TABLE Doctor (
DID INT PRIMARY KEY,
Dname VARCHAR(50),
Daddress VARCHAR(100),
Department VARCHAR(50),
salary DECIMAL(10, 2)
);
CREATE TABLE Appointment (
PID INT,
DID INT,
time DATETIME,
PRIMARY KEY (PID, DID),
FOREIGN KEY (PID) REFERENCES Patient(PID),
FOREIGN KEY (DID) REFERENCES Doctor(DID)
);
INSERT INTO Patient (PID, Pname, Paddress, Pgender, disease) VALUES
(1, 'Ruma Khan', '123 Main St, Cairo', 'Female', 'Tuberculosis'),
(2, 'Ruben Diaz', '456 Park Ave, Alexandria', 'Male', 'Flu'),
(3, 'Sara Ali', '789 Nile Rd, Giza', 'Female', 'Diabetes'),
(4, 'Ahmed Tarek', '321 Lotus St, Cairo', 'Male', 'Tuberculosis'),
(5, 'Lina Hassan', '654 Rose Ln, Luxor', 'Female', 'Asthma'),
(6, 'Rula Sami', '987 Palm St, Aswan', 'Female', 'TB');
INSERT INTO Doctor (DID, Dname, Daddress, Department, salary) VALUES
(101, 'Ali Hassan', '100 Hospital Rd, Cairo', 'Forensic', 10000.00),
(102, 'Mona Khalil', '200 Clinic St, Giza', 'ENT', 15000.00),
(103, 'Omar Said', '300 Med Center, Alexandria', 'Cardiology', 13000.00),
(104, 'Sara Elmasry', '400 Health Ave, Luxor', 'Forensic', 11000.00),
(105, 'Hassan Ali', '500 Doc Rd, Aswan', 'ENT', 9000.00);
INSERT INTO Appointment (PID, DID, time) VALUES
(1, 101, '2025-05-13 10:00:00'),
(1, 102, '2025-05-13 11:00:00'),
(2, 101, '2025-05-13 12:00:00'),
(3, 103, '2025-05-13 09:00:00'),
(4, 102, '2025-05-13 14:00:00'),
(5, 104, '2025-05-13 15:00:00'),
(6, 101, '2025-05-13 16:00:00');
1) List name and id of doctors whose salary is less than 12000
🧾 Output Table:
| Dname | DID |
|---|---|
| Ali Hassan | 101 |
| Sara Elmasry | 104 |
| Hassan Ali | 105 |
💻 SQL Code:
SELECT Dname, DID
FROM Doctor
WHERE salary < 12000;
2) Find name of patients whose name begins with 'Ru'
🧾 Output Table:
| Pname |
|---|
| Ruma Khan |
| Ruben Diaz |
| Rula Sami |
💻 SQL Code:
SELECT Pname
FROM Patient
WHERE Pname LIKE 'Ru%';
3) Display name and address of patients who are suffering from Tuberculosis(TB)
🧾 Output Table:
| Pname | Paddress |
|---|---|
| Ruma Khan | 123 Main St, Cairo |
| Ahmed Tarek | 321 Lotus St, Cairo |
| Rula Sami | 987 Palm St, Aswan |
💻 SQL Code:
SELECT Pname, Paddress
FROM Patient
WHERE disease = 'Tuberculosis' OR disease = 'TB';
4) Count the number of doctors working in ENT department
🧾 Output Table:
| ent_doctor_count |
|---|
| 2 |
💻 SQL Code:
SELECT COUNT(*) AS ent_doctor_count
FROM Doctor
WHERE Department = 'ENT';
5) Display name of doctor who is receiving maximum salary
🧾 Output Table:
| Dname |
|---|
| Mona Khalil |
💻 SQL Code:
SELECT Dname
FROM Doctor
WHERE salary = (SELECT MAX(salary) FROM Doctor);
6) List all the patients who were checked by doctors “Ali” and “Mona”
🧾 Output Table:
| Pname |
|---|
| Ruma Khan |
💻 SQL Code:
SELECT DISTINCT P.Pname
FROM Patient P
JOIN Appointment A ON P.PID = A.PID
JOIN Doctor D ON A.DID = D.DID
WHERE D.Dname IN ('Ali Hassan', 'Mona Khalil')
GROUP BY P.Pname
HAVING COUNT(DISTINCT D.Dname) = 2;
Exercise 2
Database:
CREATE TABLE Employee (
E_ID INT PRIMARY KEY,
E_Name VARCHAR(50),
Dept_Name VARCHAR(50),
Salary DECIMAL(10, 2),
Address VARCHAR(50)
);
INSERT INTO Employee (E_ID, E_Name, Dept_Name, Salary, Address) VALUES
(1, 'Mohamed', 'HR', 15000.00, 'Cairo'),
(2, 'Ahmed', 'IT', 9000.00, 'Asyut'),
(3, 'Sara', 'Finance', 12000.00, 'Cairo'),
(4, 'Salem', 'Marketing', 8000.00, 'Qena'),
(5, 'Nabil', 'HR', 11000.00, 'Alexandria'),
(6, 'Saeed', 'IT', 20000.00, 'Luxor'),
(7, 'Samir', 'Finance', 9500.00, 'Cairo'),
(8, 'Sohaib', 'Marketing', 7000.00, 'Asyut'),
(9, 'Rania', 'HR', 13000.00, 'Qena'),
(10, 'Kamal', 'IT', 8500.00, 'Giza'),
(11, 'Sameh', 'Finance', 6000.00, 'Cairo');
INSERT INTO Employee (E_ID, E_Name, Dept_Name, Salary, Address) VALUES
(12, 'Soham', 'Marketing', 7500.00, 'Asyut');
1. Display the Name of the Employee with the Maximum Salary
Output Table
| E_Name |
|---|
| Saeed |
SELECT E_Name
FROM Employee
WHERE Salary = (SELECT MAX(Salary) FROM Employee);
2. Display All Department Names with Fewer Than 10 Employees
Output Table
| Dept_Name |
|---|
| HR |
| IT |
| Finance |
| Marketing |
SELECT Dept_Name
FROM Employee
GROUP BY Dept_Name
HAVING COUNT(*) < 10;
3. Display Names of Employees Residing in Asyut, Cairo, or Qena
Output Table
| E_Name |
|---|
| Mohamed |
| Ahmed |
| Sara |
| Salem |
| Samir |
| Sohaib |
| Rania |
| Sameh |
| Soham |
SELECT E_Name
FROM Employee
WHERE Address IN ('Asyut', 'Cairo', 'Qena');
4. Display ID and Name of Employees Whose Name Starts with 'S' and Ends with 'M'
Output Table
| E_ID | E_Name |
|---|---|
| 4 | Salem |
| 12 | Soham |
SELECT E_ID, E_Name
FROM Employee
WHERE E_Name LIKE 'S%M';
Exercise 3
Database:
CREATE TABLE actor (
act_id INTEGER PRIMARY KEY,
act_fname CHAR(20),
act_lname CHAR(20),
act_gender CHAR(1)
);
CREATE TABLE director (
dir_id INTEGER PRIMARY KEY,
dir_fname CHAR(20),
dir_lname CHAR(20)
);
CREATE TABLE genres (
gen_id INTEGER PRIMARY KEY,
gen_title CHAR(20)
);
CREATE TABLE reviewer (
rev_id INTEGER PRIMARY KEY,
rev_name CHAR(30)
);
CREATE TABLE movie (
mov_id INTEGER PRIMARY KEY,
mov_title CHAR(50),
mov_year INTEGER,
mov_time INTEGER,
mov_lang CHAR(50),
mov_dt_rel DATE,
mov_rel_country CHAR(5)
);
CREATE TABLE movie_cast (
act_id INTEGER,
mov_id INTEGER,
role CHAR(30),
PRIMARY KEY (act_id, mov_id),
FOREIGN KEY (act_id) REFERENCES actor(act_id),
FOREIGN KEY (mov_id) REFERENCES movie(mov_id)
);
CREATE TABLE movie_direction (
dir_id INTEGER,
mov_id INTEGER,
PRIMARY KEY (dir_id, mov_id),
FOREIGN KEY (dir_id) REFERENCES director(dir_id),
FOREIGN KEY (mov_id) REFERENCES movie(mov_id)
);
CREATE TABLE movie_genres (
mov_id INTEGER,
gen_id INTEGER,
PRIMARY KEY (mov_id, gen_id),
FOREIGN KEY (mov_id) REFERENCES movie(mov_id),
FOREIGN KEY (gen_id) REFERENCES genres(gen_id)
);
CREATE TABLE rating (
mov_id INTEGER,
rev_id INTEGER,
rev_stars INTEGER,
num_o_ratings INTEGER,
PRIMARY KEY (mov_id, rev_id),
FOREIGN KEY (mov_id) REFERENCES movie(mov_id),
FOREIGN KEY (rev_id) REFERENCES reviewer(rev_id)
);
-- Insert Sample Data (updated to cover all queries)
INSERT INTO actor (act_id, act_fname, act_lname, act_gender) VALUES
(1, 'Tom', 'Hanks', 'M'),
(2, 'Meryl', 'Streep', 'F'),
(3, 'Leonardo', 'DiCaprio', 'M'),
(4, 'Scarlett', 'Johansson', 'F'),
(5, 'Brad', 'Pitt', 'M'),
(6, 'Diane', 'Keaton', 'F'), -- For Annie Hall
(7, 'Woody', 'Allen', 'M'); -- For Annie Hall
INSERT INTO director (dir_id, dir_fname, dir_lname) VALUES
(101, 'Steven', 'Spielberg'),
(102, 'Christopher', 'Nolan'),
(103, 'Greta', 'Gerwig'),
(104, 'Woody', 'Allen'), -- For query 9
(105, 'Paul', 'Thomas Anderson'); -- For Boogie Nights
INSERT INTO genres (gen_id, gen_title) VALUES
(201, 'Drama'),
(202, 'Action'),
(203, 'Comedy'),
(204, 'Sci-Fi');
INSERT INTO reviewer (rev_id, rev_name) VALUES
(301, 'John Doe'),
(302, 'Jane Smith'),
(303, 'Alex Brown');
INSERT INTO movie (mov_id, mov_title, mov_year, mov_time, mov_lang, mov_dt_rel, mov_rel_country) VALUES
(1001, 'Forrest Gump', 1994, 142, 'English', '1994-07-06', 'USA'),
(1002, 'Inception', 2010, 148, 'English', '2010-07-16', 'USA'),
(1003, 'Little Women', 2019, 135, 'English', '2019-12-25', 'USA'),
(1004, 'The Avengers', 2012, 143, 'English', '2012-05-04', 'USA'),
(1005, 'American Beauty', 1999, 122, 'English', '1999-10-01', 'USA'), -- For query 2 & 3
(1006, 'Boogie Nights', 1997, 155, 'English', '1997-10-10', 'USA'), -- For query 7
(1007, 'Annie Hall', 1977, 93, 'English', '1977-04-20', 'USA'), -- For query 10
(1008, 'No Ratings Movie', 2020, 100, 'English', '2020-01-01', 'UK'), -- For query 6 & 8
(1009, 'Manhattan', 1979, 96, 'English', '1979-04-25', 'USA'); -- For query 9
INSERT INTO movie_cast (act_id, mov_id, role) VALUES
(1, 1001, 'Forrest Gump'),
(3, 1002, 'Cobb'),
(2, 1003, 'Jo March'),
(4, 1004, 'Black Widow'),
(5, 1002, 'Saito'),
(6, 1007, 'Annie Hall'), -- For query 10
(7, 1007, 'Alvy Singer'); -- For query 10
INSERT INTO movie_direction (dir_id, mov_id) VALUES
(101, 1001),
(102, 1002),
(103, 1003),
(102, 1004),
(105, 1006), -- Boogie Nights by Paul Thomas Anderson
(104, 1007), -- Annie Hall by Woody Allen
(104, 1009); -- Manhattan by Woody Allen
INSERT INTO movie_genres (mov_id, gen_id) VALUES
(1001, 201),
(1002, 202),
(1002, 204),
(1003, 201),
(1004, 202),
(1005, 201),
(1006, 201),
(1007, 203),
(1009, 203);
INSERT INTO rating (mov_id, rev_id, rev_stars, num_o_ratings) VALUES
(1001, 301, 8, 1000), -- 8 stars for query 5
(1001, 302, 9, 1500), -- 9 stars for query 5
(1002, 301, 7, 2000), -- 7 stars for query 5
(1003, 303, 6, 800),
(1004, 302, 8, 2500), -- 8 stars for query 5
(1005, 301, 3, 1200), -- For query 11
(1006, 302, 4, 900), -- For query 11
(1007, 303, 5, 700); -- For query 11
1. Display Movie Title and Release Year of All Movies
Output Table
| mov_title | mov_year |
|---|---|
| Forrest Gump | 1994 |
| Inception | 2010 |
| Little Women | 2019 |
| The Avengers | 2012 |
| American Beauty | 1999 |
| Boogie Nights | 1997 |
| Annie Hall | 1977 |
| No Ratings Movie | 2020 |
| Manhattan | 1979 |
SELECT mov_title, mov_year
FROM movie;
2. Display Release Year of the Movie 'American Beauty'
Output Table
| mov_year |
|---|
| 1999 |
SELECT mov_year
FROM movie
WHERE mov_title = 'American Beauty';
3. Display Movie Titles Released in 1999
Output Table
| mov_title |
|---|
| American Beauty |
SELECT mov_title
FROM movie
WHERE mov_year = 1999;
4. Display Movie Titles Released Before 1998
Output Table
| mov_title |
|---|
| Forrest Gump |
| Boogie Nights |
| Annie Hall |
| Manhattan |
SELECT mov_title
FROM movie
WHERE mov_year < 1998;
5. Display Reviewer Names Who Gave Seven or More Stars
Output Table
| rev_name |
|---|
| John Doe |
| Jane Smith |
SELECT DISTINCT r.rev_name
FROM reviewer r
JOIN rating ra ON r.rev_id = ra.rev_id
WHERE ra.rev_stars >= 7;
6. Display Movie Titles Without Any Ratings
Output Table
| mov_title |
|---|
| No Ratings Movie |
| Manhattan |
SELECT m.mov_title
FROM movie m
LEFT JOIN rating ra ON m.mov_id = ra.mov_id
WHERE ra.mov_id IS NULL;
7. Display Movie ID, Title, and Release Year for Movies Containing 'Boogie Nights'
Output Table
| mov_id | mov_title | mov_year |
|---|---|---|
| 1006 | Boogie Nights | 1997 |
SELECT mov_id, mov_title, mov_year
FROM movie
WHERE mov_title LIKE '%Boogie Nights%'
ORDER BY mov_year ASC;
8. Display Details of Movies Released Outside the United Kingdom
Output Table
| mov_title | mov_year | mov_time | mov_dt_rel | mov_rel_country |
|---|---|---|---|---|
| Forrest Gump | 1994 | 142 | 1994-07-06 | USA |
| Inception | 2010 | 148 | 2010-07-16 | USA |
| Little Women | 2019 | 135 | 2019-12-25 | USA |
| The Avengers | 2012 | 143 | 2012-05-04 | USA |
| American Beauty | 1999 | 122 | 1999-10-01 | USA |
| Boogie Nights | 1997 | 155 | 1997-10-10 | USA |
| Annie Hall | 1977 | 93 | 1977-04-20 | USA |
| Manhattan | 1979 | 96 | 1979-04-25 | USA |
SELECT mov_title, mov_year, mov_time, mov_dt_rel, mov_rel_country
FROM movie
WHERE mov_rel_country != 'UK';
9. Display Movie Titles Directed by Woody Allen
Output Table
| mov_title |
|---|
| Annie Hall |
| Manhattan |
SELECT m.mov_title
FROM movie m
JOIN movie_direction md ON m.mov_id = md.mov_id
JOIN director d ON md.dir_id = d.dir_id
WHERE d.dir_fname = 'Woody' AND d.dir_lname = 'Allen';
10. Display All Actor Details for 'Annie Hall' Cast
Output Table
| act_id | act_fname | act_lname | act_gender |
|---|---|---|---|
| 6 | Diane | Keaton | F |
| 7 | Woody | Allen | M |
SELECT a.*
FROM actor a
JOIN movie_cast mc ON a.act_id = mc.act_id
JOIN movie m ON mc.mov_id = m.mov_id
WHERE m.mov_title = 'Annie Hall';
11. Display Movie Years with At Least One Movie Rated Three or More Stars
Output Table
| mov_year |
|---|
| 1977 |
| 1994 |
| 1997 |
| 1999 |
| 2010 |
| 2012 |
| 2019 |
SELECT DISTINCT m.mov_year
FROM movie m
JOIN rating ra ON m.mov_id = ra.mov_id
WHERE ra.rev_stars >= 3
ORDER BY m.mov_year ASC;
12. Display Reviewer Name, Movie Title, and Stars for Rated Movies
Output Table
| rev_name | mov_title | rev_stars |
|---|---|---|
| Alex Brown | Annie Hall | 5 |
| Alex Brown | Little Women | 6 |
| Jane Smith | Boogie Nights | 4 |
| Jane Smith | Forrest Gump | 9 |
| Jane Smith | The Avengers | 8 |
| John Doe | American Beauty | 3 |
| John Doe | Forrest Gump | 8 |
| John Doe | Inception | 7 |
SELECT r.rev_name, m.mov_title, ra.rev_stars
FROM reviewer r
JOIN rating ra ON r.rev_id = ra.rev_id
JOIN movie m ON ra.mov_id = m.mov_id
WHERE ra.rev_stars IS NOT NULL
ORDER BY r.rev_name, m.mov_title, ra.rev_stars ASC;
Exercise 4
Database:
-- Create the employee table (emp)
CREATE TABLE emp (
eno INT PRIMARY KEY,
ename VARCHAR(50),
bdate DATE,
title VARCHAR(10),
salary DECIMAL(10, 2),
dno VARCHAR(5)
);
-- Create the project table (proj)
CREATE TABLE proj (
pno INT PRIMARY KEY,
pname VARCHAR(50),
budget DECIMAL(15, 2),
dno VARCHAR(5)
);
-- Create the department table (dept)
CREATE TABLE dept (
dno VARCHAR(5) PRIMARY KEY,
dname VARCHAR(50),
mgreno INT
);
-- Create the works on table (workson)
CREATE TABLE workson (
eno INT,
pno INT,
resp VARCHAR(20),
hours DECIMAL(5, 2),
PRIMARY KEY (eno, pno)
);
-- Insert data into the employee table (emp)
INSERT INTO emp (eno, ename, bdate, title, salary, dno) VALUES
(101, 'Ahmed Khaled', '1990-05-15', 'EE', 45000.00, 'D1'),
(102, 'Sara Ali', '1988-09-22', 'SA', 38000.00, 'D1'),
(103, 'Mohamed Reda', '1992-03-10', 'Manager', 60000.00, 'D2'),
(104, 'Laila Hassan', '1985-11-30', 'EE', 42000.00, 'D3'),
(105, 'Omar Salem', '1991-07-25', 'SA', 35000.00, 'D2');
-- Insert data into the department table (dept)
INSERT INTO dept (dno, dname, mgreno) VALUES
('D1', 'Consulting', 101),
('D2', 'Development', 103),
('D3', 'Marketing', 104);
-- Insert data into the project table (proj)
INSERT INTO proj (pno, pname, budget, dno) VALUES
(1001, 'Project A', 120000.00, 'D1'),
(1002, 'Project B', 45000.00, 'D2'),
(1003, 'Project C', 150000.00, 'D3'),
(1004, 'Project D', 30000.00, 'D1');
-- Insert data into the works on table (workson)
INSERT INTO workson (eno, pno, resp, hours) VALUES
(101, 1001, 'Manager', 15.50),
(102, 1002, 'Developer', 8.00),
(103, 1003, 'Manager', 12.75),
(104, 1004, 'Coordinator', 5.00),
(105, 1001, 'Analyst', 20.00);
1. Display Project Number and Name for Projects with Budget Greater Than $100,000
Output Table
| pno | pname |
|---|---|
| 1001 | Project A |
| 1003 | Project C |
SELECT pno, pname
FROM proj
WHERE budget > 100000;
2. Display Works On Records with Hours Less Than 10 and Responsibility as 'Manager'
Output Table
| eno | pno | resp | hours |
|---|---|---|---|
SELECT *
FROM workson
WHERE hours < 10 AND resp = 'Manager';
3. Display Employee Number and Name with Title 'EE' or 'SA' and Salary Greater Than $35,000
Output Table
| eno | ename |
|---|---|
| 101 | Ahmed Khaled |
| 102 | Sara Ali |
| 104 | Laila Hassan |
SELECT eno, ename
FROM emp
WHERE title IN ('EE', 'SA') AND salary > 35000;
4. Display Employee Names in Department 'D1' Ordered by Decreasing Salary
Output Table
| ename |
|---|
| Ahmed Khaled |
| Sara Ali |
SELECT ename
FROM emp
WHERE dno = 'D1'
ORDER BY salary DESC;
5. Display All Department Fields Ordered by Ascending Department Name
Output Table
| dno | dname | mgreno |
|---|---|---|
| D1 | Consulting | 101 |
| D2 | Development | 103 |
| D3 | Marketing | 104 |
SELECT *
FROM dept
ORDER BY dname ASC;
6. Display Employee Name, Department Name, and Employee Title
Output Table
| ename | dname | title |
|---|---|---|
| Ahmed Khaled | Consulting | EE |
| Sara Ali | Consulting | SA |
| Mohamed Reda | Development | Manager |
| Laila Hassan | Marketing | EE |
| Omar Salem | Development | SA |
SELECT e.ename, d.dname, e.title
FROM emp e
JOIN dept d ON e.dno = d.dno;
7. Display Project Name, Hours Worked, and Project Number for Works On Records with Hours Greater Than 10
Output Table
| pname | hours | pno |
|---|---|---|
| Project A | 15.50 | 1001 |
| Project C | 12.75 | 1003 |
| Project A | 20.00 | 1001 |
SELECT p.pname, w.hours, w.pno
FROM workson w
JOIN proj p ON w.pno = p.pno
WHERE w.hours > 10;
8. Display Project Name, Department Name, and Budget for Projects with Budget Less Than $50,000
Output Table
| pname | dname | budget |
|---|---|---|
| Project B | Development | 45000.00 |
| Project D | Consulting | 30000.00 |
SELECT p.pname, d.dname, p.budget
FROM proj p
JOIN dept d ON p.dno = d.dno
WHERE p.budget < 50000;
9. Display Employee Numbers and Salaries in the 'Consulting' Department Ordered by Descending Salary
Output Table
| eno | salary |
|---|---|
| 101 | 45000.00 |
| 102 | 38000.00 |
SELECT e.eno, e.salary
FROM emp e
JOIN dept d ON e.dno = d.dno
WHERE d.dname = 'Consulting'
ORDER BY e.salary DESC;
10. Display Employee Name, Project Name, Employee Title, and Hours for All Works On Records
Output Table
| ename | pname | title | hours |
|---|---|---|---|
| Ahmed Khaled | Project A | EE | 15.50 |
| Sara Ali | Project B | SA | 8.00 |
| Mohamed Reda | Project C | Manager | 12.75 |
| Laila Hassan | Project D | EE | 5.00 |
| Omar Salem | Project A | SA | 20.00 |
SELECT e.ename, p.pname, e.title, w.hours
FROM workson w
JOIN emp e ON w.eno = e.eno
JOIN proj p ON w.pno = p.pno;
Exercise 5
Database:
-- Create the salesman table
CREATE TABLE salesman (
salesman_id INT PRIMARY KEY,
name VARCHAR(50),
city VARCHAR(50),
commission DECIMAL(4, 2)
);
-- Create the customer table
CREATE TABLE customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
city VARCHAR(50),
grade INT,
salesman_id INT,
FOREIGN KEY (salesman_id) REFERENCES salesman(salesman_id)
);
-- Create the order table
CREATE TABLE orders (
order_no INT PRIMARY KEY,
purch_amt DECIMAL(10, 2),
order_date DATE,
customer_id INT,
salesman_id INT,
FOREIGN KEY (customer_id) REFERENCES customer(customer_id),
FOREIGN KEY (salesman_id) REFERENCES salesman(salesman_id)
);
-- Insert data into the salesman table
INSERT INTO salesman (salesman_id, name, city, commission) VALUES
(5001, 'James Hoog', 'New York', 0.15),
(5002, 'Nail Knite', 'Paris', 0.13),
(5005, 'Pit Alex', 'London', 0.11),
(5006, 'Mc Lyon', 'Paris', 0.14),
(5003, 'Lauson Hen', 'Paris', 0.12),
(5007, 'Paul Adam', 'Rome', 0.13);
-- Insert data into the customer table
INSERT INTO customer (customer_id, customer_name, city, grade, salesman_id) VALUES
(3002, 'Nick Rimando', 'New York', 100, 5001),
(3005, 'Graham Zusi', 'California', 200, 5002),
(3001, 'Brad Guzan', 'London', 200, 5005),
(3004, 'Fabian Johns', 'Paris', 300, 5006),
(3007, 'Brad Davis', 'New York', 200, 5001),
(3009, 'Geoff Cameron', 'Berlin', 100, 5002),
(3008, 'Julian Green', 'London', 300, 5002),
(3003, 'Jozy Altidor', 'Moncow', 200, 5007);
-- Insert data into the order table
INSERT INTO orders (order_no, purch_amt, order_date, customer_id, salesman_id) VALUES
(70001, 150.5, '2016-10-05', 3005, 5002),
(70009, 270.65, '2016-09-10', 3001, 5005),
(70002, 65.26, '2016-10-05', 3002, 5001),
(70004, 110.5, '2016-08-17', 3009, 5003),
(70007, 948.5, '2016-09-10', 3005, 5002),
(70005, 2400.6, '2016-07-27', 3007, 5001),
(70008, 5760, '2016-09-10', 3002, 5001),
(70010, 1983.43, '2016-10-10', 3004, 5006),
(70003, 2480.4, '2016-10-10', 3009, 5003),
(70012, 250.45, '2016-06-27', 3008, 5002),
(70011, 75.29, '2016-08-17', 3003, 5007);
1. Display Name and Commission of All Salesmen
Output Table
| name | commission |
|---|---|
| James Hoog | 0.15 |
| Nail Knite | 0.13 |
| Lauson Hen | 0.12 |
| Pit Alex | 0.11 |
| Mc Lyon | 0.14 |
| Paul Adam | 0.13 |
SELECT name, commission
FROM salesman;
2. Retrieve Unique Salesman IDs from Orders Table
Output Table
| salesman_id |
|---|
| 5001 |
| 5002 |
| 5003 |
| 5005 |
| 5006 |
| 5007 |
SELECT DISTINCT salesman_id
FROM orders;
3. Display Names and City of Salesmen in Paris
Output Table
| name | city |
|---|---|
| Nail Knite | Paris |
| Lauson Hen | Paris |
| Mc Lyon | Paris |
SELECT name, city
FROM salesman
WHERE city = 'Paris';
4. Display All Information for Customers with Grade 200
Output Table
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3001 | Brad Guzan | London | 200 | 5005 |
| 3003 | Jozy Altidor | Moncow | 200 | 5007 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3007 | Brad Davis | New York | 200 | 5001 |
SELECT *
FROM customer
WHERE grade = 200;
5. Display Order Details for Salesman ID 5001
Output Table
| order_no | order_date | purch_amt |
|---|---|---|
| 70002 | 2016-10-05 | 65.26 |
| 70005 | 2016-07-27 | 2400.60 |
| 70008 | 2016-09-10 | 5760.00 |
SELECT order_no, order_date, purch_amt
FROM orders
WHERE salesman_id = 5001;
6. Display Customers in New York or with Grade 100 or Less
Output Table
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Cameron | Berlin | 100 | 5002 |
SELECT *
FROM customer
WHERE city = 'New York' OR grade <= 100;
7. Display Salesmen with Commission Between 0.12 and 0.14
Output Table
| salesman_id | name | city | commission |
|---|---|---|---|
| 5002 | Nail Knite | Paris | 0.13 |
| 5003 | Lauson Hen | Paris | 0.12 |
| 5006 | Mc Lyon | Paris | 0.14 |
| 5007 | Paul Adam | Rome | 0.13 |
SELECT *
FROM salesman
WHERE commission BETWEEN 0.12 AND 0.14;
8. Display Customers with Names Ending in 'n'
Output Table
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3001 | Brad Guzan | London | 200 | 5005 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3009 | Geoff Cameron | Berlin | 100 | 5002 |
SELECT *
FROM customer
WHERE customer_name LIKE '%n';
9. Display Salesmen with Names Starting with 'N' and Fourth Character 'l'
Output Table
| salesman_id | name | city | commission |
|---|---|---|---|
| 5002 | Nail Knite | Paris | 0.13 |
SELECT *
FROM salesman
WHERE name LIKE 'N__l%';
10. Display Customers with NULL Grade
Output Table
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
SELECT *
FROM customer
WHERE grade IS NULL;
11. Display Total Purchase Amount of All Orders
Output Table
| SUM(purch_amt) |
|---|
| 14495.58 |
SELECT SUM(purch_amt)
FROM orders;
12. Display Number of Unique Salesmen with Customers
Output Table
| COUNT(DISTINCT salesman_id) |
|---|
| 5 |
SELECT COUNT(DISTINCT salesman_id)
FROM customer;
13. Display Highest Grade for Each Customer City
Output Table
| city | MAX(grade) |
|---|---|
| London | 300 |
| New York | 200 |
| Moncow | 200 |
| Paris | 300 |
| California | 200 |
| Berlin | 100 |
SELECT city, MAX(grade)
FROM customer
GROUP BY city;
14. Display Highest Purchase Amount for Each Customer
Output Table
| customer_id | MAX(purch_amt) |
|---|---|
| 3001 | 270.65 |
| 3002 | 5760.00 |
| 3003 | 75.29 |
| 3004 | 1983.43 |
| 3005 | 948.50 |
| 3007 | 2400.60 |
| 3008 | 250.45 |
| 3009 | 2480.40 |
SELECT customer_id, MAX(purch_amt)
FROM orders
GROUP BY customer_id;
15. Display Highest Purchase Amount on August 17, 2012 for Each Salesman
Output Table
| salesman_id | MAX(purch_amt) |
|---|---|
SELECT salesman_id, MAX(purch_amt)
FROM orders
WHERE order_date = '2012-08-17'
GROUP BY salesman_id;
16. Display Highest Purchase Amount with Customer ID and Order Date for Amounts Over 2000
Output Table
| customer_id | order_date | MAX(purch_amt) |
|---|---|---|
| 3009 | 2016-10-10 | 2480.40 |
| 3007 | 2016-07-27 | 2400.60 |
| 3002 | 2016-09-10 | 5760.00 |
SELECT customer_id, order_date, MAX(purch_amt)
FROM orders
GROUP BY customer_id, order_date
HAVING MAX(purch_amt) > 2000;
17. Count Orders for August 17, 2012
Output Table
| COUNT(*) |
|---|
| 0 |
SELECT COUNT(*)
FROM orders
WHERE order_date = '2012-08-17';
18. Display Customers and Salesmen Living in the Same City
Output Table
| customer_name | city | name |
|---|---|---|
| Nick Rimando | New York | James Hoog |
| Brad Davis | New York | James Hoog |
| Brad Guzan | London | Pit Alex |
| Fabian Johns | Paris | Mc Lyon |
SELECT c.customer_name, c.city, s.name
FROM customer c
JOIN salesman s ON c.salesman_id = s.salesman_id
WHERE c.city = s.city;
19. Display Customer Names and Their Salesmen
Output Table
| customer_name | name |
|---|---|
| Nick Rimando | James Hoog |
| Brad Davis | James Hoog |
| Graham Zusi | Nail Knite |
| Julian Green | Nail Knite |
| Geoff Cameron | Nail Knite |
| Brad Guzan | Pit Alex |
| Fabian Johns | Mc Lyon |
| Jozy Altidor | Paul Adam |
SELECT c.customer_name, s.name
FROM customer c
JOIN salesman s ON c.salesman_id = s.salesman_id;
20. Display Orders by Customers Not in the Same City as Their Salesmen
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70001 | 150.50 | 2016-10-05 | 3005 | 5002 |
| 70007 | 948.50 | 2016-09-10 | 3005 | 5002 |
| 70012 | 250.45 | 2016-06-27 | 3008 | 5002 |
| 70003 | 2480.40 | 2016-10-10 | 3009 | 5003 |
| 70004 | 110.50 | 2016-08-17 | 3009 | 5003 |
| 70011 | 75.29 | 2016-08-17 | 3003 | 5007 |
SELECT o.*
FROM orders o
JOIN customer c ON o.customer_id = c.customer_id
JOIN salesman s ON o.salesman_id = s.salesman_id
WHERE c.city != s.city;
21. Display Orders Issued by Salesman 'Paul Adam'
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70011 | 75.29 | 2016-08-17 | 3003 | 5007 |
SELECT o.*
FROM orders o
JOIN salesman s ON o.salesman_id = s.salesman_id
WHERE s.name = 'Paul Adam';
22. Display Orders with Amounts Greater Than the Average Order Value on October 10, 2012
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
SELECT *
FROM orders
WHERE purch_amt > (
SELECT AVG(purch_amt)
FROM orders
WHERE order_date = '2012-10-10'
);
23. Display Orders Attributed to Salesmen in Paris
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70001 | 150.50 | 2016-10-05 | 3005 | 5002 |
| 70007 | 948.50 | 2016-09-10 | 3005 | 5002 |
| 70012 | 250.45 | 2016-06-27 | 3008 | 5002 |
| 70003 | 2480.40 | 2016-10-10 | 3009 | 5003 |
| 70004 | 110.50 | 2016-08-17 | 3009 | 5003 |
| 70010 | 1983.43 | 2016-10-10 | 3004 | 5006 |
SELECT o.*
FROM orders o
JOIN salesman s ON o.salesman_id = s.salesman_id
WHERE s.city = 'Paris';
24. Display Orders by the Salesman with the Highest Commission
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70002 | 65.26 | 2016-10-05 | 3002 | 5001 |
| 70005 | 2400.60 | 2016-07-27 | 3007 | 5001 |
| 70008 | 5760.00 | 2016-09-10 | 3002 | 5001 |
SELECT o.*
FROM orders o
JOIN salesman s ON o.salesman_id = s.salesman_id
WHERE s.commission = (
SELECT MAX(commission)
FROM salesman
);
25. Display Orders with Amounts Greater Than Any Order from September 10, 2012
Output Table
| order_no | purch_amt | order_date | customer_id | salesman_id |
|---|---|---|---|---|
SELECT *
FROM orders
WHERE purch_amt > ANY (
SELECT purch_amt
FROM orders
WHERE order_date = '2012-09-10'
);
26. Display Customers with Grades Higher Than All Customers in New York
Output Table
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3008 | Julian Green | London | 300 | 5002 |
SELECT *
FROM customer
WHERE grade > ALL (
SELECT grade
FROM customer
WHERE city = 'New York'
);