Write SQL Queries for Tables (Users, Categories, Expenses)

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:

  1. Insert a new user.
  2. Find users whose date of birth is before Jan 01, 2000.
  3. Find top 5 categories on which users spend their money.
  4. Find categories in which no expenditure has been made so far.
  5. Find those users whose expenditure is not less than that of userID 405.

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