{"id":30004649,"url":"https://github.com/alifa-ara-heya/postgresql-assignment","last_synced_at":"2026-02-08T23:35:23.968Z","repository":{"id":295339505,"uuid":"989772023","full_name":"alifa-ara-heya/postgresql-assignment","owner":"alifa-ara-heya","description":"This is assignment 2 on PostgreSQL.","archived":false,"fork":false,"pushed_at":"2025-05-25T02:04:49.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-05T07:32:55.255Z","etag":null,"topics":["postgresql","postgresql-database","sql"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alifa-ara-heya.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-24T19:47:36.000Z","updated_at":"2025-06-21T03:13:10.000Z","dependencies_parsed_at":"2025-05-25T01:47:30.082Z","dependency_job_id":null,"html_url":"https://github.com/alifa-ara-heya/postgresql-assignment","commit_stats":null,"previous_names":["alifa-ara-heya/postgresql-assignment"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alifa-ara-heya/postgresql-assignment","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alifa-ara-heya%2Fpostgresql-assignment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alifa-ara-heya%2Fpostgresql-assignment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alifa-ara-heya%2Fpostgresql-assignment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alifa-ara-heya%2Fpostgresql-assignment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alifa-ara-heya","download_url":"https://codeload.github.com/alifa-ara-heya/postgresql-assignment/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alifa-ara-heya%2Fpostgresql-assignment/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29249492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T22:49:53.206Z","status":"ssl_error","status_checked_at":"2026-02-08T22:49:51.384Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["postgresql","postgresql-database","sql"],"created_at":"2025-08-05T07:17:00.810Z","updated_at":"2026-02-08T23:35:23.897Z","avatar_url":"https://github.com/alifa-ara-heya.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📘 PostgreSQL Questions\n\n### ১. PostgreSQL কী?\n\n**PostgreSQL** একটি শক্তিশালী, ওপেন-সোর্স **রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS)**। এটি ANSI SQL মান মেনে চলে এবং ডেটা সঠিকভাবে সংরক্ষণ ও পরিচালনার জন্য **ACID** নীতিমালা অনুসরণ করে।\n\n🔹 PostgreSQL দিয়ে আমরা কী কী করতে পারি:\n\n- ডেটা সংরক্ষণ, হালনাগাদ, মুছে ফেলা ও অনুসন্ধান করা।\n- `JOIN`, `GROUP BY`, `JSON`, `CTE`, `Window Functions` ইত্যাদি শক্তিশালী ফিচার ব্যবহার করতে পারি।\n- GIS বা Location Data পরিচালনার জন্য PostGIS এর মত এক্সটেনশন ব্যবহার করতে পারি।\n\n🔹 PostgreSQL এর কিছু সাধারণ ব্যবহার:\n\n- ওয়েব ও মোবাইল এপ্লিকেশন তৈরি,\n- ফিন্যান্স, স্বাস্থ্য ও রিসার্চ ডেটাবেস তৈরিতে\n\n---\n\n### ২. PostgreSQL-এ ডাটাবেস স্কিমার উদ্দেশ্য কী?\n\n**স্কিমা (Schema)** হলো একটি ডেটাবেসের ভিতরে আলাদা ফোল্ডার যা টেবিল, ভিউ, ফাংশন ইত্যাদিকে গুছিয়ে রাখে। এটি ডেটাবেসে বিভিন্ন অংশ তৈরি করে যাতে একাধিক ইউজার বা অ্যাপ্লিকেশন একই ডেটাবেসে কাজ করতে পারে কোনো সমস্যা ছাড়া।\n\n🔸 যেমন:\n\n```sql\nCREATE SCHEMA school;\nCREATE TABLE school.students (...);\nCREATE TABLE school.teachers (...);\n```\n\nএখানে `school` স্কিমার অধীনে `students` এবং `teachers` টেবিল দুইটি আলাদাভাবে সংরক্ষিত।\n\n---\n\n### ৩. Primary Key এবং Foreign Key কী?\n\n**Primary Key**:\n\n- একটি টেবিলের ইউনিক আইডেন্টিফায়ার।\n- NULL ও ডুপ্লিকেট ভ্যালু থাকতে পারে না।\n\n```sql\nCREATE TABLE students (\n    student_id SERIAL PRIMARY KEY,\n    name VARCHAR(50)\n);\n```\n\n**Foreign Key**:\n\n- একটি টেবিলে এমন একটি কলাম যা অন্য টেবিলের `PRIMARY KEY` এর সাথে সংযুক্ত থাকে।\n- এটি রেফারেন্স বা সম্পর্ক তৈরি করে।\n\n```sql\nCREATE TABLE courses (\n    course_id SERIAL PRIMARY KEY,\n    student_id INT REFERENCES students(student_id)\n);\n```\n\nএখানে `courses.student_id` হলো `students.student_id` এর উপর ভিত্তি করে নির্ভরশীল।\n\n---\n\n### ৪. SELECT স্টেটমেন্টে WHERE ক্লজের উদ্দেশ্য কী?\n\n`WHERE` ক্লজ ব্যবহার করে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারা যায়।\n\n🔹 উদাহরণ:\n\n```sql\nSELECT * FROM employees WHERE department = 'HR';\n```\n\nএখানে শুধু HR ডিপার্টমেন্টের এমপ্লয়িদের রেকর্ড দেখানো হবে।\n\n`WHERE` ছাড়া `SELECT` করলে সব রেকর্ড দেখায়, কিন্তু শর্তযুক্ত ফিল্টারিং এর জন্য `WHERE` ব্যবহার করতে হবে।\n\n---\n\n### ৫. LIMIT এবং OFFSET ক্লজ কী কাজে লাগে?\n\n- `LIMIT`: কয়টি রেকর্ড দেখাবে তা নির্ধারণ করে।\n- `OFFSET`: কয়টি রেকর্ড স্কিপ করবে তা বলে দেয়।\n\n🔹 উদাহরণ:\n\n```sql\nSELECT * FROM students LIMIT 5 OFFSET 10;\n```\n\nএই কুয়েরিটি ১১ থেকে ১৫ নম্বর শিক্ষার্থীর তথ্য দেখাবে।\n\nLimit এবং Offset Pagination বা Page-by-page রেজাল্ট দেখানোর জন্য খুবই গুরুত্বপূর্ণ।\n\n---\n\n### ৬. PostgreSQL-এ JOIN অপারেশনের গুরুত্ব কী এবং এটি কীভাবে কাজ করে?\n\n**JOIN** ব্যবহার করে একাধিক টেবিল থেকে সম্পর্কিত ডেটা নিয়ে কাজ করা যায়। এটি **রিলেশনাল ডাটাবেসের** অন্যতম শক্তিশালী ফিচার।\n\n🔹 উদাহরণ:\n\n```sql\nSELECT students.name, departments.name\nFROM students\nJOIN departments ON students.department_id = departments.id;\n```\n\nএখানে `students` এবং `departments` টেবিলকে `department_id` এর মাধ্যমে যুক্ত করা হয়েছে।\n\n**JOIN-এর প্রকারভেদ:**\n\n- `INNER JOIN`: শুধুমাত্র মিলে যাওয়া রেকর্ড\n- `LEFT JOIN`: বাম টেবিলের সব রেকর্ড, ডান দিকে না মিললে `NULL`\n- `RIGHT JOIN`: ডান টেবিলের সব রেকর্ড, বামে না মিললে `NULL`\n- `FULL JOIN`: উভয় টেবিলের সব রেকর্ড, না মিললে `NULL`\n\nচলো আমরা একটি **খুবই সহজ এবং প্রাসঙ্গিক উদাহরণ** দেখি — যেখানে থাকবে **Students** এবং **Clubs** টেবিল।\n\n---\n\nটেবিল ১: `students`\n\n| student_id | name    |\n| ---------- | ------- |\n| 1          | Alice   |\n| 2          | Bob     |\n| 3          | Charlie |\n\n---\n\nটেবিল ২: `clubs`\n\n| student_id | club_name  |\n| ---------- | ---------- |\n| 2          | Chess Club |\n| 3          | Drama Club |\n| 4          | Math Club  |\n\n---\n\nএখন আমরা `student_id` এর উপর ভিত্তি করে `LEFT JOIN` এবং `RIGHT JOIN` ব্যবহার করব।\n\n🟢 LEFT JOIN: \"সব student দেখাও, এমনকি যারা কোনো ক্লাবে নেই\"\n\n```sql\nSELECT students.name, clubs.club_name\nFROM students\nLEFT JOIN clubs ON students.student_id = clubs.student_id;\n```\n\n### 🔍 ফলাফল:\n\n| name    | club_name  |                          |\n| ------- | ---------- | ------------------------ |\n| Alice   | NULL       | ❌ Alice কোনো ক্লাবে নেই |\n| Bob     | Chess Club | ✅ Bob ক্লাবে আছে        |\n| Charlie | Drama Club | ✅ Charlie ক্লাবে আছে    |\n\n✅ **সব student দেখায়**, এমনকি যদি তাদের ক্লাবে না-ও পাওয়া যায়।\n\n---\n\n🔵 RIGHT JOIN: \"সব ক্লাব দেখাও, এমনকি সেই সব ক্লাবও যাদের student নেই\"\n\n```sql\nSELECT students.name, clubs.club_name\nFROM students\nRIGHT JOIN clubs ON students.student_id = clubs.student_id;\n```\n\n### 🔍 ফলাফল:\n\n| name    | club_name  |                              |\n| ------- | ---------- | ---------------------------- |\n| Bob     | Chess Club | ✅ মিলে গেছে                 |\n| Charlie | Drama Club | ✅ মিলে গেছে                 |\n| NULL    | Math Club  | ❌ student_id 4 তালিকায় নেই |\n\n✅ **সব ক্লাব দেখায়**, এমনকি student তালিকায় না থাকলেও।\n\n---\n\n🧠 সারাংশ:\n\n| JOIN টাইপ  | সবসময় কোন টেবিল রাখে  | মিল না পেলে কোথায় NULL হয় |\n| ---------- | ---------------------- | --------------------------- |\n| LEFT JOIN  | বাম টেবিল (`students`) | ডান টেবিল (`clubs`)         |\n| RIGHT JOIN | ডান টেবিল (`clubs`)    | বাম টেবিল (`students`)      |\n\n---\n\n\u003e A LEFT JOIN B আর B RIGHT JOIN A একই।\n\n### ৭. GROUP BY ক্লজ কী এবং এটি Aggregation-এর ক্ষেত্রে কীভাবে ব্যবহৃত হয়?\n\n`GROUP BY` ক্লজ দিয়ে আমরা ডেটা নির্দিষ্ট গ্রুপে ভাগ করতে পারি এবং প্রতিটি গ্রুপে আলাদা করে Aggregation করতে পারি।\n\n🔹 উদাহরণ:\n\n```sql\nSELECT department, COUNT(*) AS total_employees\nFROM employees\nGROUP BY department;\n```\n\nএখানে প্রতিটি ডিপার্টমেন্টে কতজন কর্মী আছেন তা গণনা করা হয়েছে।\n\n---\n\n### ৮. PostgreSQL-এ COUNT(), SUM(), AVG() ফাংশন কিভাবে কাজ করে?\n\nএই ফাংশনগুলো ব্যবহার করে ডেটার উপর গণনামূলক বিশ্লেষণ করা যায়:\n\n| ফাংশন     | কাজ              |\n| --------- | ---------------- |\n| `COUNT()` | কতটি রেকর্ড আছে  |\n| `SUM()`   | মানগুলোর যোগফল   |\n| `AVG()`   | গড় মান হিসাব করে |\n\n🔹 উদাহরণ:\n\n```sql\nSELECT COUNT(*) FROM orders;\nSELECT SUM(price) FROM products;\nSELECT AVG(salary) FROM employees;\n```\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falifa-ara-heya%2Fpostgresql-assignment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falifa-ara-heya%2Fpostgresql-assignment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falifa-ara-heya%2Fpostgresql-assignment/lists"}