https://github.com/alifa-ara-heya/postgresql-assignment
This is assignment 2 on PostgreSQL.
https://github.com/alifa-ara-heya/postgresql-assignment
postgresql postgresql-database sql
Last synced: 5 months ago
JSON representation
This is assignment 2 on PostgreSQL.
- Host: GitHub
- URL: https://github.com/alifa-ara-heya/postgresql-assignment
- Owner: alifa-ara-heya
- Created: 2025-05-24T19:47:36.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-25T02:04:49.000Z (about 1 year ago)
- Last Synced: 2025-08-05T07:32:55.255Z (11 months ago)
- Topics: postgresql, postgresql-database, sql
- Homepage:
- Size: 5.86 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# đ PostgreSQL Questions
### ā§§. PostgreSQL āĻā§?
**PostgreSQL** āĻāĻāĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞā§, āĻāĻĒā§āύ-āϏā§āϰā§āϏ **āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ (RDBMS)**āĨ¤ āĻāĻāĻŋ ANSI SQL āĻŽāĻžāύ āĻŽā§āύ⧠āĻāϞ⧠āĻāĻŦāĻ āĻĄā§āĻāĻž āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ **ACID** āύā§āϤāĻŋāĻŽāĻžāϞāĻž āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤
đš PostgreSQL āĻĻāĻŋā§ā§ āĻāĻŽāϰāĻž āĻā§ āĻā§ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ:
- āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ, āĻšāĻžāϞāύāĻžāĻāĻžāĻĻ, āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻ āĻ
āύā§āϏāύā§āϧāĻžāύ āĻāϰāĻžāĨ¤
- `JOIN`, `GROUP BY`, `JSON`, `CTE`, `Window Functions` āĻāϤā§āϝāĻžāĻĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻĢāĻŋāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
- GIS āĻŦāĻž Location Data āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ PostGIS āĻāϰ āĻŽāϤ āĻāĻā§āϏāĻā§āύāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
đš PostgreSQL āĻāϰ āĻāĻŋāĻā§ āϏāĻžāϧāĻžāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ:
- āĻā§ā§āĻŦ āĻ āĻŽā§āĻŦāĻžāĻāϞ āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āϤā§āϰāĻŋ,
- āĻĢāĻŋāύā§āϝāĻžāύā§āϏ, āϏā§āĻŦāĻžāϏā§āĻĨā§āϝ āĻ āϰāĻŋāϏāĻžāϰā§āĻ āĻĄā§āĻāĻžāĻŦā§āϏ āϤā§āϰāĻŋāϤā§
---
### ⧍. PostgreSQL-āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻāĻŋāĻŽāĻžāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻā§?
**āϏā§āĻāĻŋāĻŽāĻž (Schema)** āĻšāϞ⧠āĻāĻāĻāĻŋ āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻāĻŋāϤāϰ⧠āĻāϞāĻžāĻĻāĻž āĻĢā§āϞā§āĻĄāĻžāϰ āϝāĻž āĻā§āĻŦāĻŋāϞ, āĻāĻŋāĻ, āĻĢāĻžāĻāĻļāύ āĻāϤā§āϝāĻžāĻĻāĻŋāĻā§ āĻā§āĻāĻŋā§ā§ āϰāĻžāĻā§āĨ¤ āĻāĻāĻŋ āĻĄā§āĻāĻžāĻŦā§āϏ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻ
āĻāĻļ āϤā§āϰāĻŋ āĻāϰ⧠āϝāĻžāϤ⧠āĻāĻāĻžāϧāĻŋāĻ āĻāĻāĻāĻžāϰ āĻŦāĻž āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻāĻ āĻĄā§āĻāĻžāĻŦā§āϏ⧠āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ⧠āϏāĻŽāϏā§āϝāĻž āĻāĻžā§āĻžāĨ¤
đ¸ āϝā§āĻŽāύ:
```sql
CREATE SCHEMA school;
CREATE TABLE school.students (...);
CREATE TABLE school.teachers (...);
```
āĻāĻāĻžāύ⧠`school` āϏā§āĻāĻŋāĻŽāĻžāϰ āĻ
āϧā§āύ⧠`students` āĻāĻŦāĻ `teachers` āĻā§āĻŦāĻŋāϞ āĻĻā§āĻāĻāĻŋ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŋāϤāĨ¤
---
### ā§Š. Primary Key āĻāĻŦāĻ Foreign Key āĻā§?
**Primary Key**:
- āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞā§āϰ āĻāĻāύāĻŋāĻ āĻāĻāĻĄā§āύā§āĻāĻŋāĻĢāĻžā§āĻžāϰāĨ¤
- NULL āĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻā§āϝāĻžāϞ⧠āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
```sql
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
```
**Foreign Key**:
- āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāϞāĻžāĻŽ āϝāĻž āĻ
āύā§āϝ āĻā§āĻŦāĻŋāϞā§āϰ `PRIMARY KEY` āĻāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āĻĨāĻžāĻā§āĨ¤
- āĻāĻāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻŦāĻž āϏāĻŽā§āĻĒāϰā§āĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
```sql
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY,
student_id INT REFERENCES students(student_id)
);
```
āĻāĻāĻžāύ⧠`courses.student_id` āĻšāϞ⧠`students.student_id` āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āύāĻŋāϰā§āĻāϰāĻļā§āϞāĨ¤
---
### ā§Ē. SELECT āϏā§āĻā§āĻāĻŽā§āύā§āĻā§ WHERE āĻā§āϞāĻā§āϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻā§?
`WHERE` āĻā§āϞāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻļāϰā§āϤ āĻ
āύā§āϝāĻžā§ā§ āĻĄā§āĻāĻž āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻž āϝāĻžā§āĨ¤
đš āĻāĻĻāĻžāĻšāϰāĻŖ:
```sql
SELECT * FROM employees WHERE department = 'HR';
```
āĻāĻāĻžāύ⧠āĻļā§āϧ⧠HR āĻĄāĻŋāĻĒāĻžāϰā§āĻāĻŽā§āύā§āĻā§āϰ āĻāĻŽāĻĒā§āϞā§āĻŋāĻĻā§āϰ āϰā§āĻāϰā§āĻĄ āĻĻā§āĻāĻžāύ⧠āĻšāĻŦā§āĨ¤
`WHERE` āĻāĻžā§āĻž `SELECT` āĻāϰāϞ⧠āϏāĻŦ āϰā§āĻāϰā§āĻĄ āĻĻā§āĻāĻžā§, āĻāĻŋāύā§āϤ⧠āĻļāϰā§āϤāϝā§āĻā§āϤ āĻĢāĻŋāϞā§āĻāĻžāϰāĻŋāĻ āĻāϰ āĻāύā§āϝ `WHERE` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
---
### ā§Ģ. LIMIT āĻāĻŦāĻ OFFSET āĻā§āϞāĻ āĻā§ āĻāĻžāĻā§ āϞāĻžāĻā§?
- `LIMIT`: āĻā§āĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻĻā§āĻāĻžāĻŦā§ āϤāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āĨ¤
- `OFFSET`: āĻā§āĻāĻŋ āϰā§āĻāϰā§āĻĄ āϏā§āĻāĻŋāĻĒ āĻāϰāĻŦā§ āϤāĻž āĻŦāϞ⧠āĻĻā§ā§āĨ¤
đš āĻāĻĻāĻžāĻšāϰāĻŖ:
```sql
SELECT * FROM students LIMIT 5 OFFSET 10;
```
āĻāĻ āĻā§ā§ā§āϰāĻŋāĻāĻŋ ā§§ā§§ āĻĨā§āĻā§ ā§§ā§Ģ āύāĻŽā§āĻŦāϰ āĻļāĻŋāĻā§āώāĻžāϰā§āĻĨā§āϰ āϤāĻĨā§āϝ āĻĻā§āĻāĻžāĻŦā§āĨ¤
Limit āĻāĻŦāĻ Offset Pagination āĻŦāĻž Page-by-page āϰā§āĻāĻžāϞā§āĻ āĻĻā§āĻāĻžāύā§āϰ āĻāύā§āϝ āĻā§āĻŦāĻ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤
---
### ā§Ŧ. PostgreSQL-āĻ JOIN āĻ
āĻĒāĻžāϰā§āĻļāύā§āϰ āĻā§āϰā§āϤā§āĻŦ āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§?
**JOIN** āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻžāϧāĻŋāĻ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻĄā§āĻāĻž āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻž āϝāĻžā§āĨ¤ āĻāĻāĻŋ **āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ** āĻ
āύā§āϝāϤāĻŽ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻĢāĻŋāĻāĻžāϰāĨ¤
đš āĻāĻĻāĻžāĻšāϰāĻŖ:
```sql
SELECT students.name, departments.name
FROM students
JOIN departments ON students.department_id = departments.id;
```
āĻāĻāĻžāύ⧠`students` āĻāĻŦāĻ `departments` āĻā§āĻŦāĻŋāϞāĻā§ `department_id` āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϝā§āĻā§āϤ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
**JOIN-āĻāϰ āĻĒā§āϰāĻāĻžāϰāĻā§āĻĻ:**
- `INNER JOIN`: āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻŽāĻŋāϞ⧠āϝāĻžāĻā§āĻž āϰā§āĻāϰā§āĻĄ
- `LEFT JOIN`: āĻŦāĻžāĻŽ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ, āĻĄāĻžāύ āĻĻāĻŋāĻā§ āύāĻž āĻŽāĻŋāϞāϞ⧠`NULL`
- `RIGHT JOIN`: āĻĄāĻžāύ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ, āĻŦāĻžāĻŽā§ āύāĻž āĻŽāĻŋāϞāϞ⧠`NULL`
- `FULL JOIN`: āĻāĻā§ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ, āύāĻž āĻŽāĻŋāϞāϞ⧠`NULL`
āĻāϞ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ **āĻā§āĻŦāĻ āϏāĻšāĻ āĻāĻŦāĻ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ āĻāĻĻāĻžāĻšāϰāĻŖ** āĻĻā§āĻāĻŋ â āϝā§āĻāĻžāύ⧠āĻĨāĻžāĻāĻŦā§ **Students** āĻāĻŦāĻ **Clubs** āĻā§āĻŦāĻŋāϞāĨ¤
---
āĻā§āĻŦāĻŋāϞ ā§§: `students`
| student_id | name |
| ---------- | ------- |
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
---
āĻā§āĻŦāĻŋāϞ ⧍: `clubs`
| student_id | club_name |
| ---------- | ---------- |
| 2 | Chess Club |
| 3 | Drama Club |
| 4 | Math Club |
---
āĻāĻāύ āĻāĻŽāϰāĻž `student_id` āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠`LEFT JOIN` āĻāĻŦāĻ `RIGHT JOIN` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦāĨ¤
đĸ LEFT JOIN: "āϏāĻŦ student āĻĻā§āĻāĻžāĻ, āĻāĻŽāύāĻāĻŋ āϝāĻžāϰāĻž āĻā§āύ⧠āĻā§āϞāĻžāĻŦā§ āύā§āĻ"
```sql
SELECT students.name, clubs.club_name
FROM students
LEFT JOIN clubs ON students.student_id = clubs.student_id;
```
### đ āĻĢāϞāĻžāĻĢāϞ:
| name | club_name | |
| ------- | ---------- | ------------------------ |
| Alice | NULL | â Alice āĻā§āύ⧠āĻā§āϞāĻžāĻŦā§ āύā§āĻ |
| Bob | Chess Club | â
Bob āĻā§āϞāĻžāĻŦā§ āĻāĻā§ |
| Charlie | Drama Club | â
Charlie āĻā§āϞāĻžāĻŦā§ āĻāĻā§ |
â
**āϏāĻŦ student āĻĻā§āĻāĻžāϝāĻŧ**, āĻāĻŽāύāĻāĻŋ āϝāĻĻāĻŋ āϤāĻžāĻĻā§āϰ āĻā§āϞāĻžāĻŦā§ āύāĻž-āĻ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤
---
đĩ RIGHT JOIN: "āϏāĻŦ āĻā§āϞāĻžāĻŦ āĻĻā§āĻāĻžāĻ, āĻāĻŽāύāĻāĻŋ āϏā§āĻ āϏāĻŦ āĻā§āϞāĻžāĻŦāĻ āϝāĻžāĻĻā§āϰ student āύā§āĻ"
```sql
SELECT students.name, clubs.club_name
FROM students
RIGHT JOIN clubs ON students.student_id = clubs.student_id;
```
### đ āĻĢāϞāĻžāĻĢāϞ:
| name | club_name | |
| ------- | ---------- | ---------------------------- |
| Bob | Chess Club | â
āĻŽāĻŋāϞ⧠āĻā§āĻā§ |
| Charlie | Drama Club | â
āĻŽāĻŋāϞ⧠āĻā§āĻā§ |
| NULL | Math Club | â student_id 4 āϤāĻžāϞāĻŋāĻāĻžāϝāĻŧ āύā§āĻ |
â
**āϏāĻŦ āĻā§āϞāĻžāĻŦ āĻĻā§āĻāĻžāϝāĻŧ**, āĻāĻŽāύāĻāĻŋ student āϤāĻžāϞāĻŋāĻāĻžāϝāĻŧ āύāĻž āĻĨāĻžāĻāϞā§āĻāĨ¤
---
đ§ āϏāĻžāϰāĻžāĻāĻļ:
| JOIN āĻāĻžāĻāĻĒ | āϏāĻŦāϏāĻŽāϝāĻŧ āĻā§āύ āĻā§āĻŦāĻŋāϞ āϰāĻžāĻā§ | āĻŽāĻŋāϞ āύāĻž āĻĒā§āϞ⧠āĻā§āĻĨāĻžāϝāĻŧ NULL āĻšāϝāĻŧ |
| ---------- | ---------------------- | --------------------------- |
| LEFT JOIN | āĻŦāĻžāĻŽ āĻā§āĻŦāĻŋāϞ (`students`) | āĻĄāĻžāύ āĻā§āĻŦāĻŋāϞ (`clubs`) |
| RIGHT JOIN | āĻĄāĻžāύ āĻā§āĻŦāĻŋāϞ (`clubs`) | āĻŦāĻžāĻŽ āĻā§āĻŦāĻŋāϞ (`students`) |
---
> A LEFT JOIN B āĻāϰ B RIGHT JOIN A āĻāĻāĻāĨ¤
### ā§. GROUP BY āĻā§āϞāĻ āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ Aggregation-āĻāϰ āĻā§āώā§āϤā§āϰ⧠āĻā§āĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§?
`GROUP BY` āĻā§āϞāĻ āĻĻāĻŋā§ā§ āĻāĻŽāϰāĻž āĻĄā§āĻāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āϰā§āĻĒā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻā§āϰā§āĻĒā§ āĻāϞāĻžāĻĻāĻž āĻāϰ⧠Aggregation āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
đš āĻāĻĻāĻžāĻšāϰāĻŖ:
```sql
SELECT department, COUNT(*) AS total_employees
FROM employees
GROUP BY department;
```
āĻāĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĄāĻŋāĻĒāĻžāϰā§āĻāĻŽā§āύā§āĻā§ āĻāϤāĻāύ āĻāϰā§āĻŽā§ āĻāĻā§āύ āϤāĻž āĻāĻŖāύāĻž āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
---
### ā§Ž. PostgreSQL-āĻ COUNT(), SUM(), AVG() āĻĢāĻžāĻāĻļāύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§?
āĻāĻ āĻĢāĻžāĻāĻļāύāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĄā§āĻāĻžāϰ āĻāĻĒāϰ āĻāĻŖāύāĻžāĻŽā§āϞāĻ āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāϰāĻž āϝāĻžā§:
| āĻĢāĻžāĻāĻļāύ | āĻāĻžāĻ |
| --------- | ---------------- |
| `COUNT()` | āĻāϤāĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻāĻā§ |
| `SUM()` | āĻŽāĻžāύāĻā§āϞā§āϰ āϝā§āĻāĻĢāϞ |
| `AVG()` | āĻā§ āĻŽāĻžāύ āĻšāĻŋāϏāĻžāĻŦ āĻāϰ⧠|
đš āĻāĻĻāĻžāĻšāϰāĻŖ:
```sql
SELECT COUNT(*) FROM orders;
SELECT SUM(price) FROM products;
SELECT AVG(salary) FROM employees;
```
---