Overview

বর্তমান তথ্যপ্রযুক্তির যুগে ডেটা (Data) বা তথ্য হলো সবচেয়ে মূল্যবান সম্পদ। কিন্তু এলোমেলো ডেটার কোনো মূল্য নেই; এই বিশাল ডেটাকে সঠিকভাবে সংরক্ষণ, পরিচালনা এবং বিশ্লেষণ করার জন্য একটি সুশৃঙ্খল সিস্টেমের প্রয়োজন, যাকে আমরা ডেটাবেজ (Database) বলি।

আর এই ডেটাবেজের সাথে মানুষের বা অ্যাপ্লিকেশনের যোগাযোগের প্রধান মাধ্যম হলো SQL (Structured Query Language)। এটি একটি ডিক্লারেটিভ (Declarative) প্রোগ্রামিং ভাষা, যার মাধ্যমে ডেটাবেজ থেকে তথ্য রিট্রিভ (Retrieve), ইনসার্ট (Insert), আপডেট (Update) এবং ডিলিট (Delete) করা যায়।

রিলেশনাল ডেটাবেজ (RDBMS) এর সাথে সম্পর্ক

SQL মূলত Relational Database Management System (RDBMS) এর জন্য ডিজাইন করা হয়েছে। রিলেশনাল ডেটাবেজে ডেটাগুলো টেবিল (সারি এবং কলাম) আকারে সাজানো থাকে। যেমন: MySQL, PostgreSQL, Oracle, বা Microsoft SQL Server।

এক্সেল শিটের সাথে এর মিল থাকলেও RDBMS অনেক বেশি শক্তিশালী, স্কেলেবল এবং সিকিউর। তুমি SQL এর মাধ্যমে সিস্টেমকে শুধু বলে দাও "কী ডেটা চাই", ডেটাবেজ ইঞ্জিন নিজে ঠিক করে "কীভাবে সেই ডেটা খুঁজে আনবে"।

কেন তোমার SQL শেখা উচিত? (গুরুত্ব ও সুবিধা)

টেক ইন্ডাস্ট্রিতে টিকে থাকতে হলে SQL শেখা অপরিহার্য। এর মূল কারণগুলো হলো:

  • ডেটা হ্যান্ডলিং ও বিশ্লেষণ (Data Handling): তুমি যদি ডেটা নিয়ে কাজ করো (ডেটা সায়েন্স, মেশিন লার্নিং বা বিগ ডেটা), তবে র-ডেটা (Raw data) প্রসেস করার জন্য SQL জানা বাধ্যতামূলক।

  • চাহিদাসম্পন্ন ক্যারিয়ার (Job Market): Data Analyst, Backend Developer, Database Administrator (DBA), বা Data Engineer—প্রায় প্রতিটি হাই-পেয়িং জবে ডেটাবেজ পরিচালনার জন্য SQL-এর দক্ষতা চাওয়া হয়।

  • সহজবোধ্য সিনট্যাক্স (Simplicity): অন্যান্য প্রোগ্রামিং ভাষার মতো এতে জটিল লুপ বা অ্যালগরিদম নেই। এর সিনট্যাক্স সাধারণ ইংরেজির মতো (যেমন: SELECT * FROM users), তাই শেখা তুলনামূলক অনেক সহজ।

  • শক্তিশালী কুয়েরি ক্ষমতা (Powerful Querying): মিলিয়ন্স বা বিলিয়ন্স ডেটা থেকে নির্দিষ্ট ডেটা ফিল্টার করা, জয়েন (Join) করা, গ্রুপিং বা জটিল রিপোর্ট তৈরি করা SQL দিয়ে খুব দ্রুত করা সম্ভব।

SQL কমান্ডের প্রধান শ্রেণিবিভাগ (Types of SQL Commands)

SQL-কে গভীরভাবে বুঝতে হলে এর কমান্ডগুলোর ক্যাটাগরি জানা প্রয়োজন। মূল কাজগুলোকে ৫টি ভাগে ভাগ করা যায়:

  1. DQL (Data Query Language): ডেটাবেজ থেকে ডেটা পড়ার জন্য। (যেমন: SELECT)

  2. DML (Data Manipulation Language): ডেটাবেজের টেবিলে থাকা ডেটা পরিবর্তন করার জন্য। (যেমন: INSERT, UPDATE, DELETE)

  3. DDL (Data Definition Language): ডেটাবেজ বা টেবিলের স্ট্রাকচার তৈরি বা মুছার জন্য। (যেমন: CREATE, ALTER, DROP)

  4. DCL (Data Control Language): ডেটার নিরাপত্তা এবং পারমিশন নিয়ন্ত্রণের জন্য। (যেমন: GRANT, REVOKE)

  5. TCL (Transaction Control Language): ডেটাবেজ ট্রানজেকশন হ্যান্ডেল করার জন্য। (যেমন: COMMIT, ROLLBACK)

Python দিয়ে ডেটাবেজে SQL এর ব্যবহার (Code Example)

সফটওয়্যার ডেভেলপমেন্টে SQL কুয়েরিগুলো সরাসরি কোনো প্রোগ্রামিং ভাষার (যেমন Python বা Java) ভেতর থেকে এক্সিকিউট করা হয়। নিচে পাইথনের sqlite3 ব্যবহার করে ডেটাবেজ কানেকশন, টেবিল তৈরি এবং SQL কুয়েরি চালানোর একটি বাস্তব উদাহরণ দেওয়া হলো:

import sqlite3

def setup_database() -> None:
    # 1. Establish connection to a local SQLite database
    connection = sqlite3.connect("company.db")
    cursor = connection.cursor()

    # 2. DDL: Create a new table
    create_table_query = """
    CREATE TABLE IF NOT EXISTS employees (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        department TEXT NOT NULL,
        salary REAL NOT NULL
    )
    """
    cursor.execute(create_table_query)

    # 3. DML: Insert data into the table
    insert_query = """
    INSERT INTO employees (name, department, salary) 
    VALUES (?, ?, ?)
    """
    employee_data = [
        ("John Doe", "Engineering", 75000.00),
        ("Jane Smith", "Marketing", 60000.00),
        ("Alice Brown", "Engineering", 82000.00)
    ]
    cursor.executemany(insert_query, employee_data)
    
    # 4. TCL: Commit the transaction to save changes
    connection.commit()

    # 5. DQL: Retrieve specific data using SQL
    select_query = "SELECT name, salary FROM employees WHERE department = 'Engineering'"
    cursor.execute(select_query)
    
    # Fetch and print the results
    engineers = cursor.fetchall()
    print("--- Engineering Department ---")
    for engineer in engineers:
        print(f"Name: {engineer[0]}, Salary: ${engineer[1]}")

    # Close the database connection
    connection.close()


if __name__ == "__main__":
    setup_database()