This document contains a set of 30 beginner-friendly PostgreSQL questions along with detailed answers. These questions are suitable for interview preparation.
Answer: PostgreSQL is an open-source, object-relational database management system (ORDBMS) that supports both SQL (relational) and JSON (non-relational) querying. It is highly extensible, reliable, and supports advanced data types.
Answer:
CREATE DATABASE my_database;Answer:
\l
-- or using SQL
SELECT datname FROM pg_database;Answer:
\c my_databaseAnswer:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age > 0),
department VARCHAR(50)
);SERIALautomatically generates a unique number forid.CHECKenforces constraints on data integrity.
Answer:
INSERT INTO employees (name, age, department)
VALUES ('John Doe', 30, 'IT');Answer:
SELECT * FROM employees;Answer:
SELECT name, department FROM employees;Answer:
UPDATE employees
SET department = 'HR'
WHERE name = 'John Doe';WHEREclause ensures only the intended row(s) are updated.
Answer:
DELETE FROM employees
WHERE name = 'John Doe';Answer:
ALTER TABLE employees
ADD COLUMN salary NUMERIC(10,2);NUMERIC(10,2)stores numbers with 10 digits total and 2 decimal places.
Answer:
ALTER TABLE employees
DROP COLUMN salary;Answer:
ALTER TABLE employees
RENAME COLUMN department TO dept;Answer:
ALTER TABLE employees
RENAME TO staff;Answer:
CREATE INDEX idx_name ON employees(name);- Indexes improve query performance on frequently searched columns.
Answer:
CHAR(n): Fixed-length string, pads with spaces if less than n characters.VARCHAR(n): Variable-length string with a maximum limit of n characters.TEXT: Variable-length string with no maximum limit.
Answer:
SELECT * FROM employees
WHERE age > 25;Answer:
SELECT * FROM employees
ORDER BY age ASC;Answer:
SELECT * FROM employees
ORDER BY age DESC;Answer:
SELECT COUNT(*) FROM employees;Answer:
SELECT MAX(age) AS max_age, MIN(age) AS min_age
FROM employees;Answer:
SELECT AVG(age) AS average_age FROM employees;Answer:
SELECT DISTINCT department FROM employees;Answer:
SELECT * FROM employees
WHERE age > 25 AND department = 'IT';Answer:
SELECT * FROM employees
WHERE name LIKE 'J%'; -- Names starting with JAnswer:
SELECT * FROM employees
WHERE department IN ('IT', 'HR');Answer:
SELECT * FROM employees
WHERE age BETWEEN 25 AND 35;Answer:
SELECT e.name, d.name AS dept_name
FROM employees e
JOIN departments d ON e.department_id = d.id;JOINcombines rows from two tables based on a related column.
Answer:
SELECT department, COUNT(*) AS total_employees
FROM employees
GROUP BY department;GROUP BYaggregates rows with the same column value.
Answer:
DROP TABLE employees;Answer: SERIAL: Auto-incrementing integer (4 bytes), range up to ~2 billion. BIGSERIAL: Auto-incrementing big integer (8 bytes), range up to ~9 quintillion.
Answer:
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id),
order_date DATE
);Answer:
SELECT * FROM employees LIMIT 5;Answer:
SELECT * FROM employees
LIMIT 5 OFFSET 10;Answer:
SELECT name FROM employees
UNION
SELECT name FROM managers;Answer:
\d employeesAnswer:
SELECT current_database();Answer:
SELECT current_user;Answer:
SELECT first_name || ' ' || last_name AS full_name
FROM employees;Answer:
SELECT name,
CASE
WHEN age < 30 THEN 'Young'
ELSE 'Experienced'
END AS age_group
FROM employees;