SQL কী?
SQL (Structured Query Language) হলো একটি বিশেষায়িত প্রোগ্রামিং ল্যাঙ্গুয়েজ যা সম্পর্কিক ডাটাবেস ম্যানেজ করার এবং ডেটার ওপর বিভিন্ন অপারেশন করার জন্য স্ট্যান্ডার্ডাইজড। SQL-এর বিভিন্ন ব্যবহার: ডাটাবেস টেবিল ও ইন্ডেক্স স্ট্রাকচার মডিফাই করা; ডেটার সারি যোগ, আপডেট, ডিলিট করা; এবং ট্রানজ্যাকশন প্রসেসিং ও এনালিটিক্স অ্যাপ্লিকেশনের জন্য ডাটাবেস থেকে তথ্য সাবসেট রিট্রিভ করা।специализированные কোয়েরি এবং অপারেশন কমান্ড আকারে কাজ করে যেগুলো SQL statements হিসেবে পরিচিত: select, add, insert, update, delete, create, alter, truncate।
SQL ১৯৭০-এর দশকের শেষে এবং ১৯৮০-এর দশকের শুরুতে সম্পর্কিক ডাটাবেসের উদ্ভবে তাদের জন্য স্ট্যান্ডার্ড প্রোগ্রামিং ল্যাঙ্গুয়েজ হয়ে ওঠে। সাধারণত SQL ডাটাবেস বলা হয়, সম্পর্কিক সিস্টেমে টেবিলের সেট থাকে যেখানে ডেটা সারি ও কলামে থাকে। প্রতিটি কলাম একটি ডেটা ক্যাটাগরির সাথে মিলে যায় (যেমন: কাস্টমার নাম বা ঠিকানা) এবং প্রতিটি সারি ইন্টারসেক্টিং কলামের জন্য একটি ডেটা ভ্যালু ধারণ করে।
SQL রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS)-এ धারিত ডেটা প্রোগ্রামিং ও ডিজাইন করার জন্য একটি ডোমেন-স্পেসিফিক ল্যাঙ্গুয়েজও। এটি স্ট্রাকচারড ডেটা হ্যান্ডল করার জন্য বিশেষভাবে উপযোগী যেখানে ডেটার বিভিন্ন এন্টিটি/ভেরিয়েবলর মধ্যে রিলেশনশিপ থাকে।
SQL 본래 রিলেশনাল অ্যালজেব্রা এবং টাপল রিলেশনাল ক্যালকুলাসের ওপর ভিত্তি করে তৈরি। SQL-এ অনেক ধরনের স্টেটমেন্ট থাকে, যেগুলো সাধারণত পরিচিত: Data Query Language (DQL), Data Definition Language (DDL), Data Control Language (DCL), Data Manipulation Language (DML)। SQL-এর স্কোপ: ডেটা কোয়েরি, ডেটা ম্যানিপুলেশন (insert, update, delete), ডেটা ডেফিনিশন (স্কিমা ক্রিয়েশন ও মডিফিকেশন), ডেটা অ্যাক্সেস কন্ট্রোল। এছাড়া SQL একটি ডিক্লেরেটিভ ল্যাঙ্গুয়েজ (4GL) কারণ এতে প্রোসিডিউরাল এলিমেন্টও থাকে।
SQL-এর অ্যাপ্লিকেশন
- ১. Data Integration Scripts: ডাটাবেস অ্যাডমিন এবং ডেভেলপার ডেটা ইন্টিগ্রেশন স্ক্রিপ্ট লিখতে SQL ব্যবহার করে।
- ২. Analytical Queries: ডেটা অ্যানালিস্ট নিয়মিত বেসিসে SQL দিয়ে অ্যানালিটিক্যাল কোয়েরি সেট আপ ও রান করে।
- ৩. Retrieve Information: ডাটাবেস থেকে অ্যানালিটিক্স অ্যাপ্লিকেশন ও ট্রানজ্যাকশন প্রসেসিং-এর জন্য ইনফরমেশন সাবসেট রিট্রিভ করা। সবচেয়ে সাধারণ SQL এলিমেন্ট: select, insert, update, add, delete, create, truncate, alter।
- ৪. অন্যান্য গুরুত্বপূর্ণ অ্যাপ্লিকেশন: ইন্ডেক্স স্ট্রাকচার এবং ডাটাবেস টেবিল মডিফাই করা। ইউজাররা এই ল্যাঙ্গুয়েজ দিয়ে ডেটার সারি যোগ, আপডেট, ডিলিট করতে পারে।
SQL স্ট্যান্ডার্ড এবং প্রপ্রায়েটারি এক্সটেনশন
আফিসিয়াল SQL স্ট্যান্ডার্ড ANSI (American National Standards Institute) ১৯৮৬ সালে গ্রহণ করে এবং ISO (International Organization for Standardization) ১৯৮৭ সালে গ্রহণ করে। ডাটাবেস অ্যাডমিন, ডেভেলপার, ডেটা অ্যানালিস্ট নিয়মিত SQL ব্যবহার করে।
প্রপ্রায়েটারি এবং ওপেন সোর্স উভয় রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম SQL-এর চারপাশে বিল্ট। উদাহরণ: Microsoft SQL Server, Oracle Database, IBM DB2, SAP HANA, SAP Adaptive Server, MySQL (এখন Oracle-এর মালিকানা), PostgreSQL।
তবে এই ডাটাবেস প্রোডাক্টের অনেক প্রপ্রায়েটারি এক্সটেনশন সাপোর্ট করে স্ট্যান্ডার্ড ল্যাঙ্গুয়েজের প্রসেসুয়ার প্রোগ্রামিং এবং অন্যান্য ফাংশনের জন্য। উদাহরণ: Microsoft Transact-SQL (T-SQL), Oracle PL/SQL। ফলস্বরূপ, ভেন্ডরদের দ্বারা অফার করা SQL ভেরিয়েন্ট একে অপরের সাথে ফুলি কম্প্যাটিবল নয়।
SQL কমান্ড এবং সিনট্যাক্স
SQL কমান্ড kilku টাইপে ভাগ: Data Manipulation Language (DML), Data Definition Language (DDL) স্টেটমেন্ট, ট্রানজ্যাকশন কন্ট্রোল, সিকিউরিটি মেজার।
- DML: ডেটা রিট্রিভ ও ম্যানিপুলেশনের জন্য।
- DDL: ডাটাবেস স্ট্রাকচার ডিফাইন ও মডিফাই করার জন্য।
- Transaction controls: ট্রানজ্যাকশন প্রসেসিং ম্যানেজ করতে, নিশ্চিত করতে যে ট্রানজ্যাকশন পুরো হয় বা এরর হলে রোল ব্যাক হয়।
- Security statements: ডাটাবেস অ্যাক্সেস কন্ট্রোল, ইউজার রোল ও পারমিশন তৈরি করতে।
SQL ল্যাঙ্গুয়েজ Plusieurs ভাষা এলিমেন্টে ভাগ:
- Clauses: স্টেটমেন্ট এবং কোয়েরির কনস্টিটুয়েন্ট কম্পোনেন্ট।
- Expressions: স্কেলার ভ্যালু বা কলাম ও সারির টেবিল থাকতে পারে।
- Predicates: কন্ডিশন স্পেসিফাই করতে যা SQL three-valued logic (true/false/unknown) বা বুলিয়ান ট্রুথ ভ্যালুতে ইভ্যালুয়েট হয়। স্টেটমেন্ট/কোয়েরির প্রভাব সীমাবদ্ধ বা প্রোগ্রাম ফ্লো পরিবর্তন করতে ব্যবহৃত।
- Queries: নির্দিষ্ট কriterion অনুযায়ী ডেটা রিট্রিভ করতে।
- Statements: স্কিমা ও ডেটার ওপর পায়রোমানেন্ট ইফেক্ট দেয় বা ট্রানজ্যাকশন, প্রোগ্রাম ফ্লো, কানেকশন, সেশন, ডায়াগনóstিক্স কন্ট্রোল করে।
- SQL স্টেটমেন্টে সেমিকোলন (;) টার্মিনেটর থাকে।
- SQL স্টেটমেন্ট ও কোয়েরিতে insignificant whitespace সাধারণত ইগনোর করা হয়, যা কোড ফরম্যাটিং সহজ করে।
ইন্টারঅপারেবিলিটি এবং স্ট্যান্ডার্ডাইজেশন
SQL ইমপ্লিমেন্টেশন ভেন্ডরের মধ্যে ইনকম্প্যাটিবল এবং সব স্ট্যান্ডার্ড ফলো করে না। বিশেষ করে ডেট/টাইম সিনট্যাক্স, স্ট্রিং কনক্যাটেনেশন, NULLs, এবং কম্পারিজন কেস সেনসিটিভিটি ভেন্ডর থেকে ভেন্ডরে ভিন্ন। ফলে SQL কোড র্যারের মতোই মডিফিকেশন ছাড়া ডাটাবেস সিস্টেমের মধ্যে পোর্ট করা যায়।
পোর্টেবিলিটি ইস্যুর কারণ:
- SQL স্ট্যান্ডার্ডের জটিলতা এবং আকার বড় হওয়ায় অধিকাংশ ইমপ্লিমেন্টার পুরো স্ট্যান্ডার্ড সাপোর্ট করে না।
- স্ট্যান্ডার্ড অনেক গুরুত্বপূর্ণ এরিয়ায় ডাটাবেস বিহেভিয়ার স্পেসিফাই করে না (ইন্ডেক্স, ফাইল স্টোরেজ...), ইমপ্লিমেন্টাররা নিজেদের মতো বিহেভ করতে দেয়।
- স্ট্যান্ডার্ড সিনট্যাক্স স্পেসিফাই করে কিন্তু সেমানটিক্স কম ভালো ডিফাইন করা থাকায় অস্পষ্টতা থাকে।
- ভেন্ডরদের বড় কাস্টমার বেস থাকায় নতুন স্ট্যান্ডার্ড পুরনো বিহেভিয়ারের সাথে কনফ্লিক্ট করলে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি ভাঙতে চায় না।
- ব্যবহারকারীদের ডাটাবেস সাপ্লায়ার পরিবর্তন করা সহজ করতে ভেন্ডরদের কমার্শিয়াল ইনসেন্টিভ কম (vendor lock-in)।
- ইউজাররা স্ট্যান্ডার্ড কনফরমেন্সের চেয়ে পারফরম্যান্সকে প্রাধান্য দেয়।
SQL-এর সুবিধা
- SQL কোয়েরি দিয়ে ডাটাবেস থেকে বড় পরিমাণ রেকর্ড দ্রুত ও দক্ষতার সাথে রিট্রিভ করা যায়।
- SQL ডেটা ভিউ করতে ব্যবহৃত হয় অবজেক্টে ডেটা স্টোর না করে।
- SQL দুটি বা অধিক টেবিল জয়েন করে এক অবজেক্ট হিসেবে দেখায়।
- SQL ডাটাবেস 오래স্থাপিত স্ট্যান্ডার্ড ব্যবহার করে যা ANSI & ISO আডপ্ট করেছে। Non-SQL ডাটাবেস কোনো স্পষ্ট স্ট্যান্ডার্ড মেনে চলে না।
- স্ট্যান্ডার্ড SQL দিয়ে ডাটাবেস সিস্টেম ম্যানেজ করা সহজ, substantial কোড লিখতে হয় না।
- SQL টেবিল অ্যাক্সেস সীমাবদ্ধ করে যাতে কেউ সারি ইনসার্ট না করতে পারে।
- পূর্বে SQL ডাটাবেস সম্পর্কিক ডাটাবেসের সমানার্থী ছিল। Object-Oriented DBMS এর উত্থানে অবজেক্ট স্টোরেজ ক্যাপাবিলিটি সম্পর্কিক ডাটাবেসে এক্সটেন্ড করা হয়েছে।
SQL-এর অসুবিধা
- SQL ডাটাবেস ইন্টারফেস করা কয়েক লাইন কোড যোগ করার চেয়ে জটিল।
- টেবিল ড্রপ হলে ভিউ inactive হয়ে যায়। টেবিল অবজেক্টের ওপর নির্ভরশীল।
- ANSI & ISO স্ট্যান্ডার্ড মেনে চলা সত্ত্বেও কিছু ডাটাবেস ভেন্ডর লক-ইন নিশ্চিত করতে প্রপ্রায়েটারি এক্সটেনশন ব্যবহার করে।
- এটি একটি অবজেক্ট তাই স্পেস দখল করে।