Consider the following relations.
- Users(userID, username, password, email, dateOfBirth, gender, registerDate)
- Categories(categoryID, categoryName, upperLimit)
- Expenses(expenseID, spentDate, amount, categoryID, userID)
Write down the SQL statements for the following:
- Insert a new user.
- Find users whose date of birth is before Jan 01, 2000.
- Find top 5 categories on which users spend their money.
- Find categories in which no expenditure has been made so far.
- Find those users whose expenditure is not less than that of userID 405.
A: SQL Queries for Tables(Users, Categories, Expenses) - 27
When writing SQL queries, there are several possible ways to achieve the same goal. While attending exams writing any one of them is fine.
a. Insert a new user.
Since the values are not given we will assume some values and insert them into the Users table.
Method #1: Assuming the userID is NOT an AUTO_INCREMENT
field.
INSERT INTO Users
VALUES (403,
'Ram',
'Abc2@1234',
'ram1232@gmail.com',
'1995-05-10',
'Male',
'2022-6-8');
--- OR --
INSERT INTO Users
(userID,
username,
password,
email,
dateOfBirth,
gender,
registerDate)
VALUES (403,
'Ram',
'Abc2@1234',
'ram1232@gmail.com',
'1995-05-10',
'Male',
'2022-6-8');
Method #2: Assuming the userID is an AUTO_INCREMENT
field.
INSERT INTO Users
(username,
password,
email,
dateOfBirth,
gender,
registerDate)
VALUES ('Sita',
'Sita@1234',
'sita123@gmail.com',
'1995-06-12',
'Male',
'2022-6-10');
b. Find users whose date of birth is before Jan 01, 2000.
Method #1: Using the DATE
function
SELECT *
FROM Users
WHERE DATE(dateOfBirth) < DATE('2000-01-01');
Method #2: Without the DATE
function
SELECT *
FROM Users
WHERE dateOfBirth < '2000-01-01';
c. Find top 5 categories on which users spend their money.
SELECT categoryID,
SUM(amount)
FROM Expenses
GROUP BY categoryID
ORDER BY SUM(amount) DESC
LIMIT 5;
d. Find categories in which no expenditure has been made so far.
Method #1: Using Nested Queries
SELECT categoryID
FROM Categories
WHERE categoryID NOT IN (SELECT categoryID
FROM Expenses);
Method #2: Using LEFT OUTER JOIN
SELECT Categories.categoryID
FROM Categories
LEFT OUTER JOIN Expenses
ON Categories.categoryID = Expenses.categoryID
WHERE Expenses.expenseID IS NULL;
Method #3: Using RIGHT OUTER JOIN
SELECT Categories.categoryID
FROM Expenses
RIGHT OUTER JOIN Categories
ON Expenses.categoryID = Categories.categoryID
WHERE Expenses.expenseID IS NULL;
e. Find those users whose expenditure is not less than that of userID 405.
SELECT userID,
SUM(amount)
FROM Expenses
GROUP BY userID
HAVING SUM(amount) >= (SELECT SUM(amount)
FROM Expenses
WHERE userID = 405);
Asked in Year
2016
Course
BIM
University
TU