CREATE PROCEDURE syntax in SQL - Time & Space Complexity
When we create a procedure in SQL, we want to know how its running time changes as the data grows.
We ask: How does the procedure's work increase when the input gets bigger?
Analyze the time complexity of the following procedure.
CREATE PROCEDURE GetEmployeesByDept(IN dept_id INT)
BEGIN
SELECT * FROM Employees
WHERE DepartmentID = dept_id;
END
This procedure selects all employees from a specific department.
Look for repeated actions inside the procedure.
- Primary operation: Scanning the Employees table to find matching rows.
- How many times: Once per row in Employees, checking if DepartmentID matches.
The procedure checks each employee to see if they belong to the department.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The work grows directly with the number of employees.
Time Complexity: O(n)
This means the procedure takes longer in a straight line as the employee count grows.
[X] Wrong: "The procedure runs instantly no matter how many employees there are."
[OK] Correct: The procedure must check each employee to find matches, so more employees mean more work.
Understanding how procedures scale helps you explain database performance clearly and confidently.
"What if the procedure used an index on DepartmentID? How would the time complexity change?"
Practice
CREATE PROCEDURE statement in SQL?Solution
Step 1: Understand the purpose of CREATE PROCEDURE
TheCREATE PROCEDUREstatement is used to save a group of SQL commands as a procedure that can be executed later.Step 2: Compare options with the purpose
Options B, C, and D describe other SQL commands, not the purpose ofCREATE PROCEDURE.Final Answer:
To save a set of SQL commands that can be run later -> Option DQuick Check:
CREATE PROCEDURE saves commands = A [OK]
- Confusing CREATE PROCEDURE with CREATE TABLE
- Thinking it runs commands immediately
- Mixing it up with SELECT statement
GetUsers without parameters?Solution
Step 1: Recall standard procedure syntax
The correct syntax includes parentheses for parameters (empty if none), and a BEGIN...END block to enclose statements.Step 2: Check each option
CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END; correctly usesCREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END;. Options A, C, and D miss parentheses or BEGIN...END or have syntax errors.Final Answer:
CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END; -> Option CQuick Check:
Procedure syntax needs () and BEGIN...END = B [OK]
- Omitting parentheses after procedure name
- Not using BEGIN and END to wrap statements
- Missing semicolon inside procedure
CALL GetUserCount();?
CREATE PROCEDURE GetUserCount() BEGIN SELECT COUNT(*) AS TotalUsers FROM Users; END;
Solution
Step 1: Understand what the procedure does
The procedure runs a SELECT COUNT(*) query on the Users table and returns the count as TotalUsers.Step 2: Analyze the CALL statement output
CallingCALL GetUserCount();executes the procedure and returns the count of rows in Users table as a result set.Final Answer:
The total number of rows in the Users table -> Option BQuick Check:
CALL runs procedure and returns SELECT result = C [OK]
- Thinking procedures cannot return SELECT results
- Assuming parameters are always required
- Confusing procedure call with function call
CREATE PROCEDURE AddUser( IN username VARCHAR(50), IN email VARCHAR(100) ) INSERT INTO Users (Username, Email) VALUES (username, email); END;
Solution
Step 1: Check procedure block structure
Procedures must enclose statements inside BEGIN and END blocks. This code misses BEGIN before INSERT.Step 2: Verify other syntax parts
IN keyword for parameters is correct, END is needed, and procedure names can have parameters.Final Answer:
Missing BEGIN before the INSERT statement -> Option AQuick Check:
Procedures need BEGIN...END blocks = A [OK]
- Forgetting BEGIN before statements
- Removing IN keyword from parameters
- Omitting END keyword
UpdateUserEmail that takes a user ID and a new email, then updates the user's email in the Users table. Which of the following is the correct complete procedure?Solution
Step 1: Check parameter declaration and statement block
Parameters must have IN keyword and the statements must be inside BEGIN...END.Step 2: Verify the UPDATE statement correctness
CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = newEmail WHERE Id = userId; END; correctly uses parameters without quotes aroundnewEmail, so it updates with the variable value. CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = 'newEmail' WHERE Id = userId; END; incorrectly uses quotes, making it a string literal.Final Answer:
CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = newEmail WHERE Id = userId; END; -> Option AQuick Check:
Parameters with IN and BEGIN...END, no quotes on variables = D [OK]
- Omitting BEGIN...END block
- Forgetting IN keyword for parameters
- Using quotes around parameter variables in SQL
Ready to prove it?
Pass the test and this pattern moves unknown
