An open API service indexing awesome lists of open source software.

https://github.com/afsar-dev/wildlife-conservation-sql


https://github.com/afsar-dev/wildlife-conservation-sql

Last synced: 4 months ago
JSON representation

Awesome Lists containing this project

README

          

# 📘 PostgreSQL Concepts Explained

āύāĻŋāĻšā§‡ PostgreSQL āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ ā§§ā§ĻāϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āĻŦāĻžāĻ‚āϞāĻžā§Ÿ āĻĻ⧇āĻ“ā§ŸāĻž āĻšāϞ⧋:

---

### ā§§. PostgreSQL āϕ⧀?

PostgreSQL āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ-āϏ⧋āĻ°ā§āϏ āĻāĻŦāĻ‚ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āϰāĻŋāϞ⧇āĻļāύāĻžāϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ (RDBMS), āϝāĻž SQL āĻāĻŦāĻ‚ JSON āωāĻ­āϝāĻŧ āϧāϰāύ⧇āϰ āĻĄā§‡āϟāĻž āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ ACID āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āĻāĻŦāĻ‚ āĻŦ⧜ āĻ¸ā§āϕ⧇āϞ āĻĄā§‡āϟāĻž āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤāĨ¤ PostgreSQL āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āϜāϟāĻŋāϞ āĻ•ā§‹ā§Ÿā§‡āϰāĻŋ, āĻŸā§āϰāĻžāύāĻœā§āϝāĻžāĻ•āĻļāύ, āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻž āĻĻā§‡ā§ŸāĨ¤

---

### ⧍. PostgreSQL-āĻ āĻĄāĻžāϟāĻžāĻŦ⧇āϜ āĻ¸ā§āĻ•āĻŋāĻŽāĻžāϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āϕ⧀?

āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ (āϝ⧇āĻŽāύ āĻŸā§‡āĻŦāĻŋāϞ, āĻ­āĻŋāω, āĻĢāĻžāĻ‚āĻļāύ) āϗ⧁āϞ⧋āϕ⧇ āϞāϜāĻŋāĻ•āĻžāϞāĻŋ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰāĻžāϰ āĻāĻ•āϟāĻŋ āωāĻĒāĻžā§ŸāĨ¤ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĄāĻžāϟāĻžāĻŦ⧇āϜāϕ⧇ āϏāĻ‚āĻ—āĻ āĻŋāϤ āĻ“ āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāϟāĻŋ āĻāĻ•āχ āύāĻžāĻŽā§‡ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϰāĻžāĻ–āĻžāϰ āϏ⧁āĻŦāĻŋāϧāĻžāĻ“ āĻĻā§‡ā§Ÿ (āĻ­āĻŋāĻ¨ā§āύ āĻ¸ā§āĻ•āĻŋāĻŽāĻžāϤ⧇)āĨ¤

**Schema-āϰ āϏ⧁āĻŦāĻŋāϧāĻž:**

- āĻĄā§‡āϟāĻž āϏāĻ‚āĻ—āĻ āύ āĻāĻŦāĻ‚ āĻ—ā§āϰ⧁āĻĒāĻŋāĻ‚
- Access control āĻāĻŦāĻ‚ security
- āύ⧇āĻŽāĻŋāĻ‚ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āĻāĻĄāĻŧāĻžāύ⧋
- Multi-tenant applications āϏāĻžāĻĒā§‹āĻ°ā§āϟ

---

### ā§Š. Primary Key āĻāĻŦāĻ‚ Foreign Key āϕ⧀?

Primary Key āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽ āĻŦāĻž āĻ•āϞāĻžāĻŽā§‡āϰ āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧ āϝāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄāϕ⧇ āĻ…āύāĻ¨ā§āϝāĻ­āĻžāĻŦ⧇ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇āĨ¤

**āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ:**

- āĻ…āύāĻ¨ā§āϝ (Unique) āĻšāϤ⧇ āĻšāĻŦ⧇
- NULL āĻŽāĻžāύ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āύāĻž
- āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ Primary Key āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇

Foreign Key āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽ āϝāĻž āĻ…āĻ¨ā§āϝ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ Primary Key-āϰ āϏāĻžāĻĨ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇āĨ¤

```sql
CREATE TABLE departments (
-- Primary Key
dept_id SERIAL PRIMARY KEY,
dept_name VARCHAR(50) NOT NULL,
location VARCHAR(100)
);

CREATE TABLE employees (
emp_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
salary DECIMAL(10,2),
hire_date DATE DEFAULT CURRENT_DATE,
-- Foreign Key
dept_id INTEGER REFERENCES departments(dept_id)
);
```

---

### ā§Ē. VARCHAR āĻāĻŦāĻ‚ CHAR āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āϕ⧀?
- **CHAR(n)**: āĻāϟāĻŋ āĻĢāĻŋāĻ•ā§āϏāĻĄ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ⧇āϰ āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ, āϝ⧇āĻ–āĻžāύ⧇ āϏāĻŦāϏāĻŽā§Ÿ n āϏāĻ‚āĻ–ā§āϝāĻ• āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āϰāĻžāĻ–āĻž āĻšā§Ÿ, āĻāĻŽāύāĻ•āĻŋ āχāύāĻĒ⧁āϟ āϝāĻĻāĻŋ āϛ⧋āϟ āĻšā§Ÿ āϤāĻŦ⧁āĻ“ āĻ¸ā§āĻĒ⧇āϏ āĻĻāĻŋā§Ÿā§‡ āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāĻž āĻšā§ŸāĨ¤
- **VARCHAR(n)**: āĻāϟāĻŋ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ⧇āϰ āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ, āϝ⧇āĻ–āĻžāύ⧇ āχāύāĻĒ⧁āϟ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻŦāĻžā§œāϤāĻŋ āĻ¸ā§āĻĒ⧇āϏ āĻ¨ā§‡ā§Ÿ āύāĻžāĨ¤

---

### ā§Ģ. SELECT āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡ WHERE āĻ•ā§āϞāĻœā§‡āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧀?
`WHERE` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ SELECT statement-āĻ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻļāĻ°ā§āϤ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĄā§‡āϟāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āĻāϟāĻŋ āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āϰ⧇āĻ•āĻ°ā§āĻĄāϗ⧁āϞāĻŋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āϝāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻļāĻ°ā§āϤ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇āĨ¤ āϝ⧇āĻŽāύ:

```sql
-- Basic WHERE
SELECT * FROM employees
WHERE salary > 50000;

-- AND
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 45000 AND dept_id = 1;

-- OR
SELECT * FROM employees
WHERE dept_id = 1 OR dept_id = 2;

-- LIKE
SELECT * FROM employees
WHERE first_name LIKE 'āφ%';

-- IN
SELECT * FROM employees
WHERE dept_id IN (1, 2);
```
---

### ā§Ŧ. LIMIT āĻāĻŦāĻ‚ OFFSET āĻ•ā§āϞāĻœā§‡āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧀?

- **LIMIT** āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻ‚āĻ–ā§āϝāĻ• āϰ⧋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤
- **OFFSET** āϰ⧋ āĻ¸ā§āĻ•āĻŋāĻĒ āĻ•āϰ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϰ⧋ āĻĨ⧇āϕ⧇ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻĻ⧇āĻ–āĻžāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

```sql
SELECT * FROM products LIMIT 5 OFFSET 10;
```

āĻāϟāĻŋ ā§§ā§§ āύāĻŽā§āĻŦāϰ āϰ⧋ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ ā§ĢāϟāĻŋ āϰ⧋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤

---

### ā§­. UPDATE āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšā§Ÿ?

`UPDATE` āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āϟ āĻĻāĻŋā§Ÿā§‡ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϰ⧋-āϰ āϤāĻĨā§āϝ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

```sql
UPDATE students SET name = 'Rahim' WHERE id = 1;
```

āωāĻĒāϰ⧇āϰ āĻ•ā§‹ā§Ÿā§‡āϰāĻŋāϤ⧇ id ā§§ āϝāĻžāĻĻ⧇āϰ, āϤāĻžāĻĻ⧇āϰ āύāĻžāĻŽ 'Rahim' āĻ āφāĻĒāĻĄā§‡āϟ āĻšāĻŦ⧇āĨ¤

---

### ā§Ž. JOIN āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āϗ⧁āϰ⧁āĻ¤ā§āĻŦ āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

`JOIN` āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇ āĻĄā§‡āϟāĻž āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ Foreign Key āĻāĻŦāĻ‚ Primary Key āĻāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

```sql
SELECT orders.id, customers.name
FROM orders
JOIN customers ON orders.customer_id = customers.id;
```

āĻāĻ–āĻžāύ⧇ āĻĻ⧁āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻāĻ•āĻ¤ā§āϰ⧇ āĻŽāĻŋāϞāĻŋā§Ÿā§‡ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇āĨ¤

---

### ⧝. GROUP BY āĻ•ā§āϞāϜ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ Aggregation-āĻ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇?

`GROUP BY` āĻ•ā§āϞāϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϞāĻžāĻŽ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĄā§‡āϟāĻžāϕ⧇ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰ⧇ Aggregation āĻĢāĻžāĻ‚āĻļāύ (COUNT, SUM āχāĻ¤ā§āϝāĻžāĻĻāĻŋ) āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

```sql
SELECT department, COUNT(*) FROM employees GROUP BY department;
```

āωāĻĒāϰ⧇āϰ āĻ•ā§‹ā§Ÿā§‡āϰāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻ•āϤāϜāύ āĻ•āĻ°ā§āĻŽā§€ āφāϛ⧇ āϤāĻž āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤

---

### ā§§ā§Ļ. PostgreSQL-āĻ COUNT(), SUM(), āĻāĻŦāĻ‚ AVG() āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ?

āĻāχ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āĻ—āĻžāĻŖāĻŋāϤāĻŋāĻ• āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰāĻž āϝāĻžāϝāĻŧ:

- `COUNT()` → āĻŽā§‹āϟ āϰ⧋ āϏāĻ‚āĻ–ā§āϝāĻž āĻ—āĻŖāύāĻž āĻ•āϰ⧇
- `SUM()` → āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϞāĻžāĻŽā§‡āϰ āĻŽā§‹āϟ āϝ⧋āĻ—āĻĢāϞ āĻĻā§‡ā§Ÿ
- `AVG()` → āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϞāĻžāĻŽā§‡āϰ āĻ—ā§œ āĻŽāĻžāύ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇

āωāĻĻāĻžāĻšāϰāĻŖ:

```sql
SELECT COUNT(*), SUM(salary), AVG(salary) FROM employees;
```

---