بسم الله الرحمن الرحیم
در این مطلب قصد دارم تمام دستورات SQLرا به صورت کلی و خلاصه پوشش بدهم و در کنار متن تا جایی که بشود ویدئو هم اپلود کنم.
برای تماشای ویدئو ها باید از فیلتر عبور کنید
پایگاه داده رابطه ایی یک نوع پایگاه داده است که دادهها را در قالب جداول ذخیره میکند. هر جدول شامل یکسری سطر و ستون است که هر سطر یک رکورد از دادهها را نشان میدهد و هر ستون یک ویژگی از دادهها را مشخص میکند. برای مثال، یک جدول میتواند اطلاعات مشتریان یک فروشگاه را نگهداری کند که شامل ستونهایی مانند نام، آدرس، شماره تلفن و ایمیل باشد.
برای دسترسی و کار با پایگاه داده رابطه ایی، از زبان پرس و جوی ساختاریافته یا SQL استفاده میشود. SQL یک زبان قدرتمند و استاندارد برای مدیریت دادهها و اجرای کوئری محسوب میشود و با یادگیری آن، میتوانید مواردی همچون حذف، درج، بهروزرسانی و استخراج دادهها از پایگاه داده را انجام دهید و ساختار جداول و رابطهها را تعریف کنید.
پایگاه داده رابطه ایی دارای برخی مزایا و معایب است. مزایای آن عبارتند از:
معایب آن عبارتند از:
دستور SQL SELECT برای بازیابی دادهها از یک یا چند جدول پایگاه داده استفاده میشود. این دستور میتواند تمام یا بخشی از ستونها و سطرهای جدول را انتخاب کند، با استفاده از شرطها، ترتیببندیها، گروهبندیها و توابع تجمیعی. برای نمونه، فرض کنید دو جدول داریم که اطلاعات دانشجویان و کلاسهای آنها را نگهداری میکنند:
اگر بخواهیم نام و نام خانوادگی دانشجویانی را بدست آوریم که در کلاس ریاضی شرکت میکنند، میتوانیم از دستور SELECT به شکل زیر استفاده کنیم:
SELECT fname, sname FROM students WHERE class_id = 1;
این دستور از جدول students فقط دو ستون fname و sname را انتخاب میکند و از بین سطرها، فقط آنهایی را که مقدار class_id آنها برابر با 1 است. خروجی این دستور به شکل زیر خواهد بود:
اگر بخواهیم نام و نام خانوادگی دانشجویان را به همراه نام کلاس و معلم آنها بدست آوریم، میتوانیم از دستور SELECT به همراه JOIN استفاده کنیم. JOIN یک عملیات است که دو یا چند جدول را بر اساس یک ستون مشترک به هم متصل میکند. برای مثال، دستور زیر از JOIN بین جدولهای students و classes بر اساس ستون class_id استفاده میکند:
SELECT fname, sname, class_name, teacher FROM students JOIN classes ON students.class_id = classes.class_id;
این دستور از هر دو جدول چهار ستون را انتخاب میکند و بر اساس شرطی که در بخش ON مشخص شده است، سطرهایی را که مقدار class_id آنها یکسان است، به هم میچسباند. خروجی این دستور به شکل زیر خواهد بود:
برای مطالعه بیشترblog.faradars.org
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50) );
دستور DROP برای حذف یک شیء موجود از پایگاه داده استفاده میشود. این شیء میتواند هر چیزی باشد که با دستور CREATE ساخته شده باشد. برای مثال، اگر بخواهیم جدول customers را از پایگاه داده حذف کنیم، میتوانیم از دستور زیر استفاده کنیم:
DROP TABLE customers;
توجه کنید که با اجرای دستور DROP، همه دادهها و ساختار شیء مورد نظر از بین میروند و برگشتپذیر نیستند. بنابراین، قبل از اجرای این دستور، باید از داشتن نسخه پشتیبان از پایگاه داده مطمئن شوید.
برای مطالعه بیشتر :
اعمالCONSTRAINT ها در SQL، قوانینی هستند که برای محدود کردن نوع و مقدار دادههایی که میتوان در یک جدول ذخیره کرد، اعمال میشوند. این قوانین به اطمینان از دقت و اعتبار دادهها کمک میکنند و هرگونه تغییری را که با آنها در تناقض باشد، ممنوع میکنند. برای مثال، اگر بخواهیم یک جدول برای ذخیره اطلاعات مشتریان یک فروشگاه بسازیم، میتوانیم از CONSTRAINT های زیر استفاده کنیم:
این CONSTRAINT اجازه نمیدهد که مقدار NULL در یک ستون وارد شود. برای مثال، میتوانیم بگوییم که ستونهای id، name و email نباید خالی باشند.
این CONSTRAINT اجازه نمیدهد که مقدار تکراری در یک ستون وجود داشته باشد. برای مثال، میتوانیم بگوییم که ستونهای id و email باید منحصر به فرد باشند.
این CONSTRAINT ترکیبی از NOT NULL و UNIQUE است و یک ستون را به عنوان شناسه اصلی یک جدول مشخص میکند. برای مثال، میتوانیم بگوییم که ستون id کلید اصلی جدول است.
این CONSTRAINT یک شرط را برای مقدار یک ستون تعیین میکند و اجازه نمیدهد که مقداری خارج از محدوده مشخص شده وارد شود. برای مثال، میتوانیم بگوییم که ستون age باید بزرگتر یا مساوی 18 باشد.
با استفاده از این CONSTRAINT ها، میتوانیم جدول مشتریان را به شکل زیر ایجاد کنیم:
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(50) UNIQUE NOT NULL, age INT CHECK (age >= 18) );
و جدول سفارشات را به شکل زیر ایجاد کنیم:
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT FOREIGN KEY REFERENCES customers(id), date DATE NOT NULL, amount DECIMAL(10,2) NOT NULL );
برای مطالعه بیشتر
دستور WHERE در SQL برای فیلتر کردن دادهها در جداول استفاده میشود. با استفاده از دستور WHERE، میتوانید فقط ردیفهایی را که شرایط مشخصی را برآورده میکنند را به عنوان خروجی دریافت کنید. دستور WHERE در SQL شامل یک عبارت منطقی است که شرایطی را برای فیلتر کردن دادهها مشخص میکند.
برای استفاده از دستور WHERE، باید آن را پس از دستور SELECT و تعیین ستونها از جدول مورد نظر به کار ببرید. ساختار یک دستور SQL که در آن از بند WHERE استفاده میشود به صورت زیر است:
SELECT * FROM table_name WHERE column_name = 'criteria';
این دستور دو بخش دارد. بخش نخست (* SELECT) مشخص میکند که چه ستونهایی را میخواهیم انتخاب کنیم. علامت ستاره به این معنی است که میخواهیم همه ستونهای جدول را انتخاب کنیم. بخش دوم (FROM table_name) به موتور پایگاه داده اعلام میکند که میخواهیم دادهها را از کجا دریافت کنیم. در استفادههای عملی باید بهجای کلمه «table»، نام جدولی را بنویسیم که قصد داریم دادهها را از آن دریافت کنیم. بخش سوم (WHERE column_name = ‘criteria’) شرطی را برای فیلتر کردن دادهها تعیین میکند. در این بخش، باید نام ستونی را که میخواهیم بر اساس آن فیلتر کنیم و مقداری را که میخواهیم با آن مقایسه کنیم را مشخص کنیم. میتوانیم از عملگرهای مختلفی مانند =، <، >، <>، BETWEEN، IN، LIKE و غیره برای مقایسه استفاده کنیم.
برای مثال، فرض کنید دو جدول داریم که اطلاعات دانشجویان و کلاسهای آنها را نگهداری میکنند:
اگر بخواهیم نام و نام خانوادگی دانشجویانی را بدست آوریم که در کلاس ریاضی شرکت میکنند، میتوانیم از دستور SELECT به همراه WHERE به شکل زیر استفاده کنیم:
SELECT fname, sname FROM students WHERE class_id = 1;
این دستور از جدول students فقط دو ستون fname و sname را انتخاب میکند و از بین سطرها، فقط آنهایی را که مقدار class_id آنها برابر با 1 است. خروجی این دستور به شکل زیر خواهد بود:
اگر بخواهیم نام و نام خانوادگی دانشجویان را به همراه نام کلاس و معلم آنها بدست آوریم، میتوانیم از دستور SELECT به همراه JOIN و WHERE استفاده کنیم. JOIN یک عملیات است که دو یا چند جدول را بر اساس یک ستون مشترک به هم متصل میکند. برای مثال، دستور زیر از JOIN بین جدولهای students و classes بر اساس ستون class_id استفاده میکند و فقط دانشجویانی را که در کلاس ریاضی هستند را نمایش میدهد:
SELECT fname, sname, class_name, teacher FROM students JOIN classes ON students.class_id = classes.class_id WHERE class_name = 'Math';
این دستور از هر دو جدول چهار ستون را انتخاب میکند و بر اساس شرطی که در بخش ON مشخص شده است، سطرهایی را که مقدار class_id آنها یکسان است، به هم میچسباند. سپس با استفاده از بخش WHERE، فقط سطرهایی را که مقدار class_name آنها برابر با ‘Math’ است را فیلتر میکند. خروجی این دستور به شکل زیر خواهد بود:
برای مطالعه بیشتر : دستور شرطی WHERE در sql
دستور `ORDER BY` در SQL برای مرتبسازی نتایج یک کوئری استفاده میشود. این دستور به شما این امکان را میدهد که نتایج را بر اساس یک یا چند ستون مشخص شده مرتب کنید. میتوانید از آن برای مرتبسازی به صورت صعودی (ASC) یا نزولی (DESC) استفاده کنید.
مثال:
فرض کنید که شما جدولی به نام `employees` با ستونهای `employee_id`، `first_name` و `last_name` دارید و میخواهید لیست کارمندان را بر اساس نام خانوادگی آنها مرتب کنید.
SELECT employee_id, first_name, last_name FROM employees ORDER BY last_name;
در این مثال، دستور `ORDER BY last_name` باعث مرتبسازی نتایج بر اساس ستون `last_name` میشود، و نتایج به صورت صعودی (از A به Z) نمایش داده میشوند. اگر میخواهید نتایج به صورت نزولی نمایش داده شوند، میتوانید از `ORDER BY last_name DESC` استفاده کنید.
SELECT employee_id, first_name, last_name FROM employees ORDER BY last_name DESC;
در این حالت، نتایج به صورت نزولی (از Z به A) نمایش داده میشوند.
دستورات `AND`، `OR` و `NOT` در SQL برای ایجاد شرایط پیچیده در جملات `WHERE` یا `HAVING` استفاده میشوند.
دستور`AND` برای افزودن یک شرط اضافی به جمله `WHERE` استفاده میشود و هر دو شرط باید درست باشند تا یک ردیف در نتیجه قرار گیرد.
مثال:
```sql
SELECT * FROM employees WHERE department = 'IT' AND salary > 50000
این کوئری تمام کارمندانی را که در بخش IT کار میکنند و حقوقشان بیشتر از 50000 دلار است را باز میگرداند.
دستور `OR` برای افزودن یک شرط جدید به جمله `WHERE` استفاده میشود و حداقل یکی از شرایط باید درست باشد تا یک ردیف در نتیجه قرار گیرد.
مثال:
```sql
SELECT * FROM employees WHERE department = 'HR' OR department = 'Finance';
این کوئری تمام کارمندانی را که در بخش HR یا Finance کار میکنند را باز میگرداند.
دستور `NOT` برای منفی کردن یک شرط استفاده میشود، یعنی ردیفهایی که شرط داخل `NOT` آن درست نیستند.
مثال:
SELECT * FROM employees WHERE NOT dep artment = 'IT';
این کوئری تمام کارمندانی را باز میگرداند که در بخش IT کار نمیکنند.
این دستورات را میتوانید با هم ترکیب کرده و از پرانتزها برای اولویت در اجرا استفاده کنید تا شرایط مورد نظر خود را ایجاد کنید.
دستور `INSERT INTO` در SQL برای افزودن ردیف جدید به یک جدول استفاده میشود. این دستور به شما این امکان را میدهد که دادههای جدید را به یک جدول اضافه کنید. فرمت کلی دستور به این صورت است:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
ا- `table_name`: نام جدول که میخواهید داده را به آن اضافه کنید.
ب- `column1, column2, column3, ...`: نام ستونهایی که میخواهید داده را در آنها قرار دهید.
د- `value1, value2, value3, ...`: مقادیر متناظر با ستونها که میخواهید اضافه کنید.
مثال:
فرض کنید یک جدول به نام `employees` با ستونهای `employee_id`، `first_name` و `last_name` دارید و میخواهید یک کارمند جدید به این جدول اضافه کنید.
```sql
INSERT INTO employees (employee_id, first_name, last_name) VALUES (101, 'John', 'Doe');
در این مثال، یک ردیف جدید با مقادیر مشخص شده به ستونهای `employee_id`، `first_name` و `last_name` اضافه شده است. میتوانید برای افزودن ردیفهای دیگر نیز از همین الگو استفاده کنید.
اگر مقادیر برای تمام ستونها مشخص نشوند، باید مطمئن شوید که مقادیری که برای ستونهای الزامی هستند (مانند کلید اصلی) وارد شده باشند یا مقدار پیشفرض برای آنها تعیین شده باشد.
دستور `UPDATE` در SQL برای بهروزرسانی دادههای موجود در یک جدول استفاده میشود. این دستور به شما این امکان را میدهد که مقادیر یک یا چند ستون در یک ردیف را تغییر دهید. فرمت کلی دستور به این صورت است:
```sql
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
```
- `table_name`: نام جدول که میخواهید دادهها را در آن بهروزرسانی کنید.
- `column1, column2, ...`: نام ستونهایی که میخواهید مقدار آنها را تغییر دهید.
- `value1, value2, ...`: مقادیر جدیدی که به جای مقادیر فعلی ستونها قرار گیرند.
- `WHERE condition`: شرطی که مشخص میکند که کدام ردیفها باید بهروزرسانی شوند. اگر این بخش حذف شود، تمام ردیفهای جدول بهروزرسانی میشوند.
مثال:
فرض کنید یک جدول به نام `employees` با ستونهای `employee_id`، `first_name` و `last_name` دارید و میخواهید نام یک کارمند را بهروزرسانی کنید.
```sql
UPDATE employees
SET first_name = 'Robert'
WHERE employee_id = 101;
```
در این مثال، نام کارمند با `employee_id` برابر با 101 به "Robert" تغییر میکند. حتماً از شرط `WHERE` استفاده کنید تا فقط ردیفهای مورد نظر بهروزرسانی شوند و تمام جدول تحت تأثیر قرار نگیرد.
دستور `DELETE` در SQL برای حذف ردیفهای داده از یک جدول استفاده میشود. این دستور به شما این امکان را میدهد که یک یا چند ردیف از یک جدول را حذف کنید. فرمت کلی دستور به این صورت است:
```sql
DELETE FROM table_name WHERE condition;
- `table_name`: نام جدول که میخواهید از آن ردیفها را حذف کنید.
- `WHERE condition`: شرطی که مشخص میکند که کدام ردیفها باید حذف شوند. اگر این بخش حذف شود، تمام ردیفهای جدول حذف میشوند.
مثال:
فرض کنید یک جدول به نام `employees` با ستونهای `employee_id`، `first_name` و `last_name` دارید و میخواهید یک کارمند خاص را حذف کنید.
```sql
DELETE FROM employees WHERE employee_id = 101;
در این مثال، ردیفی که `employee_id` برابر با 101 است، از جدول `employees` حذف میشود. همچنین میتوانید از شرایط مختلفی برای حذف ردیفها استفاده کنید، مانند حذف تمام ردیفهایی که حقوق آنها زیر 50000 دلار است و غیره. اطمینان حاصل کنید که از شرط `WHERE` استفاده کنید تا تنها ردیفهای مورد نظر حذف شوند و دادههای کل جدول از دست نروند.
دستور `SELECT TOP` در SQL برای بازیابی تعداد محدودی ردیف از نتایج یک کوئری استفاده میشود. این دستور معمولاً با پایگاههای داده مایکروسافت SQL Server و Access استفاده میشود.
فرمت کلی دستور `SELECT TOP` به این صورت است:
```sql
SELECT TOP (n) column1, column2, ... FROM table_name WHERE condition;
- `n`: تعداد ردیفهایی که میخواهید بازیابی کنید.
- `column1, column2, ...`: ستونهایی که میخواهید از آنها اطلاعات را بازیابی کنید.
- `table_name`: نام جدول که میخواهید اطلاعات از آن را بازیابی کنید.
- `WHERE condition`: شرطی که مشخص میکند کدام ردیفها باید در نتیجه قرار گیرند.
مثال
فرض کنید یک جدول به نام `employees` با ستونهای `employee_id`، `first_name` و `last_name` دارید و میخواهید سه نفر اول را بازیابی کنید.
```sql
SELECT TOP 3 employee_id, first_name, last_name FROM employees ORDER BY employee_id;
در این مثال، `TOP 3` به معنای بازیابی سه ردیف اول است و این ردیفها بر اساس مقدار `employee_id` مرتب شدهاند. میتوانید از هر ستون دیگری نیز برای مرتبسازی استفاده کنید.
توجه داشته باشید که استفاده از `TOP` به تنهایی برخی پایگاههای داده ممکن است پشتیبانی نکنند. در این صورت، معمولاً از `LIMIT` یا `FETCH FIRST` (برخی از پایگاههای داده مانند MySQL و PostgreSQL) استفاده میشود.
دستورهای `MIN` و `MAX` در SQL برای گرفتن مقدار کمترین و بیشترین مقدار یک ستون به ترتیب استفاده میشوند. این دستورات به شما این امکان را میدهند که مقادیر حداقل و حداکثر یک ستون را در یک جدول بازیابی کنید.
```sql
SELECT MIN(column_name) FROM table_name WHERE condition;
- `column_name`: نام ستونی که میخواهید مقدار کمترین آن را بررسی کنید.
- `table_name`: نام جدولی که در آن میخواهید جستجو کنید.
- `WHERE condition`: شرطی که مشخص میکند چه ردیفهایی در نظر گرفته شوند (اختیاری).
مثال `MIN`:
```sql
SELECT MIN(salary)
FROM employees
WHERE department = 'IT';
```
این کوئری کمترین حقوق کارمندان بخش IT را بازیابی میکند.
```sql
SELECT MAX(column_name) FROM table_name WHERE condition;
- `column_name`: نام ستونی که میخواهید مقدار بیشترین آن را بررسی کنید.
- `table_name`: نام جدولی که در آن میخواهید جستجو کنید.
- `WHERE condition`: شرطی که مشخص میکند چه ردیفهایی در نظر گرفته شوند (اختیاری).
مثال `MAX`:
```sql
SELECT MAX(salary) FROM employees WHERE department = 'HR';
این کوئری بیشترین حقوق کارمندان بخش HR را بازیابی میکند.
استفاده از `MIN` و `MAX` به شما این امکان را میدهد که به سرعت به مقدار حداقل یا حداکثر یک ستون دسترسی پیدا کنید و از این اطلاعات در کوئریهای خود استفاده کنید.
دستورات `COUNT`, `SUM`, و `AVG` در SQL برای انجام عملیات تجمیع بر روی دادههای یک ستون میباشند. این دستورات به شما این امکان را میدهند که تعداد ردیفها، جمع مقادیر یک ستون، و میانگین این مقادیر را به دست آورید.
```sql
SELECT COUNT(column_name) FROM table_name WHERE condition;
- `column_name`: نام ستون یا عبارتی که تعداد ردیفها بر اساس آن محاسبه میشود (میتواند `*` هم باشد که به تعداد کل ردیفها اشاره دارد).
- `table_name`: نام جدولی که در آن میخواهید تعداد ردیفها را حساب کنید.
- `WHERE condition`: شرطی که مشخص میکند چه ردیفهایی در نظر گرفته شوند (اختیاری).
مثال `COUNT`:
```sql
SELECT COUNT(employee_id) FROM employees WHERE department = 'Sales';
این کوئری تعداد کارمندانی را که در بخش فروش (`Sales`) مشغول به کار هستند را برمیگرداند.
```sql
SELECT SUM(column_name) FROM table_name WHERE condition;
- `column_name`: نام ستونی که میخواهید جمع مقادیر آن را بررسی کنید.
- `table_name`: نام جدولی که در آن میخواهید جمع مقادیر را حساب کنید.
- `WHERE condition`: شرطی که مشخص میکند چه ردیفهایی در نظر گرفته شوند (اختیاری).
مثال `SUM`:
```sql
SELECT SUM(salary) FROM employees WHERE department = 'Finance';
این کوئری جمع حقوق کارمندان بخش مالی (`Finance`) را برمیگرداند.
```sql
SELECT AVG(column_name) FROM table_name WHERE condition;
- `column_name`: نام ستونی که میخواهید میانگین مقادیر آن را بررسی کنید.
- `table_name`: نام جدولی که در آن میخواهید میانگین مقادیر را حساب کنید.
- `WHERE condition`: شرطی که مشخص میکند چه ردیفهایی در نظر گرفته شوند (اختیاری).
مثال `AVG`:
```sql
SELECT AVG(salary) FROM employees WHERE department = 'IT';
این کوئری میانگین حقوق کارمندان بخش IT را برمیگرداند.
استفاده از این دستورات به شما این امکان را میدهد که اطلاعات خلاصهای از دادههای جدول را به دست آورید و از آن در تحلیلها و گزارشهای خود استفاده کنید.
دستور `LIKE` در SQL برای جستجوی الگویی در مقدار یک ستون با استفاده از عبارات باقیمانده (wildcards) میباشد. این دستور به شما این امکان را میدهد که الگوهای مشخصی را در دادهها جستجو کنید.
فرمت کلی دستور `LIKE` به این صورت است:
```sql
SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern;
- `column1, column2, ...`: ستونهایی که میخواهید اطلاعات را دریافت کنید.
- `table_name`: نام جدولی که در آن میخواهید جستجو کنید.
- `column_name`: ستونی که در آن میخواهید الگو را جستجو کنید.
- `pattern`: الگویی که میخواهید در ستون مشخص شده جستجو کنید.
در الگوها، میتوان از دو عبارت باقیمانده استفاده کرد:
- `%`: باقیماندهای از هر تعداد کاراکتر.
- `_`: یک کاراکتر.
مثال:
فرض کنید یک جدول به نام `employees` با ستونهای `employee_id` و `first_name` دارید و میخواهید تمام کارمندانی را بازیابی کنید که نام آنها با حرف "J" شروع میشود.
```sql
SELECT employee_id, first_name FROM employees WHERE first_name LIKE 'J%';
```
این کوئری تمام کارمندانی را که نامشان با حرف "J" شروع میشود را بازمیگرداند.
مثال با `_`
اگر بخواهید کارمندانی با نام دقیقاً سه حرف داشته باشند، میتوانید از `_` استفاده کنید.
```sql
SELECT employee_id, first_name FROM employees WHERE first_name LIKE '___'; -- نام سه حرفی
در این مثال، کارمندانی با نام دقیقاً سه حرف را بازمیگرداند.
Wildcards یا باقیماندهها در SQL برای جستجوی مقادیر با الگوهای مشخص و انعطافپذیر استفاده میشوند. این باقیماندهها در دستورات `LIKE` و دستورات مشابه استفاده میشوند. برخی از اصطلاحات باقیماندهها عبارتند از:
- مثال: 'J%' (هر چیزی که با J شروع شود)
- مثال: `'_ohn'` (هر چیزی که با یک حرف شروع شده و سپس ohn داشته باشد)
- مثال: `'[JM]ohn'` (هر چیزی که با J یا M شروع شده و سپس ohn داشته باشد)
- مثال: '[^A-M]ohn' (هر چیزی که با یک حرف از A تا M شروع نشده و سپس ohn داشته باشد)
- مثال: `'[0-9]ohn'` (هر چیزی که با یک عدد شروع شده و سپس ohn داشته باشد)
مثال:
فرض کنید که یک جدول به نام `products` با ستون `product_name` دارید و میخواهید تمام محصولاتی را که با حرف "C" شروع شده و دقیقاً 3 کاراکتر دارند بازیابی کنید.
```sql
SELECT product_name FROM products WHERE product_name LIKE 'C__';
در این مثال، باقیمانده `__` به معنای دقیقاً دو کاراکتر برای جایگزینی است.
دستور `IN` در SQL برای جستجوی دادهها بر اساس مقادیر چندگانه یا یک زیرکوئری (subquery) میباشد. این دستور به شما این امکان را میدهد تا بتوانید ردیفهایی که مقدار یک ستون در میان یک مجموعه مقادیر مشخص شده است یا در نتیجه یک زیرکوئری قرار دارد را انتخاب کنید.
با استفاده از مقادیر چندگانه:
```sql
SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2, ...);
- `column1, column2, ...`: ستونهایی که میخواهید اطلاعات را دریافت کنید.
- `table_name`: نام جدولی که در آن میخواهید جستجو کنید.
- `column_name`: نام ستونی که مقدار آن با مقادیر مشخص شده مقایسه میشود.
- `(value1, value2, ...)`: یک مجموعه از مقادیر که میخواهید مقدار ستون مشخص شده با آنها مقایسه شود.
**مثال
```sql
SELECT product_name, price FROM products WHERE category IN ('Electronics', 'Clothing', 'Home');
این کوئری تمام محصولاتی را بازمیگرداند که دسته بندی آنها برابر با 'Electronics'، 'Clothing' یا 'Home' باشد.
با استفاده از زیرکوئری:
```sql
SELECT column1, column2, ... FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);
در این حالت، `IN` از نتایج یک زیرکوئری برای مقایسه با مقادیر ستون استفاده میشود.
مثال:
```sql
SELECT product_name, price FROM products WHERE category IN (SELECT category FROM categories WHERE is_popular = 1);
این کوئری تمام محصولاتی را بازمیگرداند که دسته بندی آنها در جدول `categories` با مقدار `is_popular` برابر با 1 است.
استفاده از `IN` مفید است زمانی که میخواهید از یک مجموعه مقادیر یا نتایج یک زیرکوئری برای فیلتر کردن نتایج یک کوئری استفاده کنید.
دستور `BETWEEN` در SQL برای جستجوی مقادیر در یک محدوده خاص از مقادیر نمایش داده شده است. این دستور به شما این امکان را میدهد تا مقادیر یک ستون را بین دو مقدار مشخص شده (حد پایین و حد بالا) در یک محدوده جستجو کنید.
فرمت کلی دستور `BETWEEN` به این صورت است:
```sql
SELECT column1, column2, ... FROM table_name WHERE column_name BETWEEN value1 AND value2;
- `column1, column2, ...`: ستونهایی که میخواهید اطلاعات را دریافت کنید.
- `table_name`: نام جدولی که در آن میخواهید جستجو کنید.
- `column_name`: نام ستونی که مقدار آن بین دو مقدار مشخص شده در `BETWEEN` جستجو میشود.
- `value1` و `value2`: مقدار حد پایین و حد بالای محدوده.
مثال:
فرض کنید یک جدول به نام `sales` با ستونهای `sale_date` و `amount` دارید و میخواهید تمام فروشهایی را بازیابی کنید که در تاریخ بین دو روز مشخص شده انجام شده است.
```sql
SELECT sale_date, amount FROM sales WHERE sale_date BETWEEN '2022-01-01' AND '2022-01-31';
در این مثال، تمام فروشهایی که در ماه ژانویه 2022 انجام شدهاند، بر اساس مقادیر `sale_date` بین '2022-01-01' و '2022-01-31' بازیابی میشوند.
دستور `BETWEEN` مفید است زمانی که میخواهید دادههایی را در یک بازه زمانی یا بازه مقداری مشخص کنید و در نتیجه فقط آنهایی که در این محدوده قرار دارند، نمایش داده شوند.
دستور `JOIN` در SQL برای ادغام دادهها از چندین جدول بر اساس شرایط مشخص استفاده میشود. این دستور به شما این امکان را میدهد که اطلاعات مرتبط از چند جدول را در یک نتیجه ترکیب کرده و از آن در یک کوئری استفاده کنید.
نوعهای مختلف `JOIN` عبارتند از:
این نوع `JOIN` تنها ردیفهایی را بازمیگرداند که مطابقت دارند.
```sql
SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
ا. LEFT JOIN (یا `LEFT OUTER JOIN`):این نوع `JOIN` تمام ردیفهای از جدول سمت چپ (table1) را با ردیفهای مطابق از جدول سمت راست (table2) نمایش میدهد. اگر مطابقت نداشته باشد، مقادیر از جدول سمت راست `NULL` خواهند بود.
```sql
SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
این نوع `JOIN` تمام ردیفهای از جدول سمت راست (table2) را با ردیفهای مطابق از جدول سمت چپ (table1) نمایش میدهد. اگر مطابقت نداشته باشد، مقادیر از جدول سمت چپ `NULL` خواهند بود.
```sql
SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
این نوع `JOIN` تمام ردیفهای هر دو جدول را با یکدیگر نمایش میدهد. اگر مطابقت نداشته باشد، مقادیر مربوطه `NULL` خواهند بود.
```sql
SELECT column1, column2, ... FROM table1 FULL JOIN table2 ON table1.column_name = table2.column_name;
```
این نوع `JOIN` همه ردیفهای یک جدول را با همه ردیفهای جدول دیگر ترکیب میکند، بدون در نظر گرفتن هیچ شرطی.
```sql
SELECT column1, column2, ... FROM table1 CROSS JOIN table2;
در هر یک از نوعهای `JOIN`، شرط اتصال (`ON`) مشخص کننده این است که کدام ستونها از جداول مختلف با یکدیگر مطابقت دارند. استفاده از `JOIN`ها به شما این امکان را میدهد که اطلاعات مرتبط از چندین جدول را به هم پیوند داده و نتایج پیچیدهتری را به دست آورید.
دستور `UNION` در SQL برای ادغام (ترکیب) نتایج دو یا چند کوئری با حذف تکرارها استفاده میشود. این دستور به شما این امکان را میدهد تا نتایج مشابه از چندین کوئری را در یک نتیجه ترکیب کنید.
فرمت کلی دستور `UNION` به این صورت است:
```sql
SELECT column1, column2, ... FROM table1 WHERE condition UNION SELECT column1, column2, ... FROM table2 WHERE condition;
- `column1, column2, ...`: ستونهایی که میخواهید اطلاعات را دریافت کنید.
- `table1`, `table2`, ...: نام جدول یا جدولهایی که از آنها اطلاعات را میخواهید.
- `condition`: شرایطی که مشخص میکنند که کدام ردیفها در نتیجه قرار گیرند (اختیاری).
**مثال:**
فرض کنید دو جدول به نام `customers1` و `customers2` دارید که اطلاعات مشابهی در آنها ذخیره شده است ولی در دو جدول جداگانه. میخواهید نتایج مشابه این دو جدول را با حذف تکرارها ترکیب کنید.
```sql
SELECT customer_id, first_name, last_name FROM customers1 UNION SELECT customer_id, first_name, last_name FROM customers2;
دستور `UNION` نتایج مشابه از هر دو کوئری را ترکیب کرده و تکرارها را حذف میکند. اگر میخواهید تمام ردیفها را با تکرارها نیز نمایش دهید، میتوانید از `UNION ALL` استفاده کنید.
```sql
SELECT customer_id, first_name, last_name FROM customers1 UNION ALL SELECT customer_id, first_name, last_name FROM customers2;
استفاده از `UNION` مفید است زمانی که میخواهید نتایج مشابه از چندین جدول یا کوئری را در یک نتیجه ترکیب کنید و تکرارها را حذف کنید.
دستور `GROUP BY` در SQL برای گروهبندی ردیفهای نتیجه کوئری بر اساس مقادیر خاص در یک یا چند ستون استفاده میشود. این دستور به شما این امکان را میدهد تا دادههای خود را بر اساس یک یا چند ویژگی گروهبندی کرده و سپس عملیات تجمیع مانند محاسبه مجموع، میانگین، تعداد و ... را بر روی هر گروه انجام دهید.
فرمت کلی دستور `GROUP BY` به این صورت است:
```sql
SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name WHERE condition GROUP BY column1, column2, ...;
- `column1, column2, ...`: ستونهایی که میخواهید نتایج را بر اساس آنها گروهبندی کنید.
- `aggregate_function(column_name)`: توابع تجمیعی (مانند SUM، AVG، COUNT و ...) که روی ستونهای گروهبندی شده اعمال میشوند.
- `table_name`: نام جدولی که از آن اطلاعات را میخواهید.
- `condition`: شرایطی که مشخص میکنند چه ردیفهایی در نتیجه گروهبندی شوند (اختیاری).
**مثال:**
فرض کنید یک جدول به نام `orders` با ستونهای `customer_id`, `order_date` و `total_amount` دارید و میخواهید مجموع مقدار هر سفارش بر اساس هر مشتری را بدست آورید.
```sql
SELECT customer_id, SUM(total_amount) AS total_order_amount FROM orders GROUP BY customer_id;
این کوئری مجموع مقدار هر سفارش بر اساس هر مشتری را بازمیگرداند. `SUM(total_amount)` به عنوان تابع تجمیعی بر روی ستون `total_amount` استفاده شده است.
دستور `GROUP BY` مفید است زمانی که میخواهید دادههای خود را بر اساس یک یا چند ویژگی مشترک گروهبندی کرده و سپس محاسبات تجمیعی بر روی هر گروه انجام دهید.
دستور `HAVING` در SQL به همراه `GROUP BY` برای فیلتر کردن نتایج گروهبندی شده بر اساس شرایط خاص استفاده میشود. این دستور به شما این امکان را میدهد که شرایط فیلتر را بر روی گروهها اعمال کنید.
فرمت کلی دستور `HAVING` به این صورت است:
SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name WHERE condition GROUP BY column1, column2, ... HAVING aggregate_function(column_name) condition;
- `column1, column2, ...`: ستونهایی که میخواهید نتایج را بر اساس آنها گروهبندی کنید.
- `aggregate_function(column_name)`: توابع تجمیعی (مانند SUM، AVG، COUNT و ...) که روی ستونهای گروهبندی شده اعمال میشوند.
- `table_name`: نام جدولی که از آن اطلاعات را میخواهید.
- `condition`: شرایطی که مشخص میکنند چه ردیفهایی در نتیجه گروهبندی شوند (اختیاری).
- `HAVING aggregate_function(column_name) condition`: شرایط فیلتر بر روی نتایج گروهبندی شده.
**مثال:**
فرض کنید یک جدول به نام `orders` با ستونهای `customer_id`, `order_date` و `total_amount` دارید و میخواهید مجموع مقدار هر سفارش بر اساس هر مشتری را بدست آورید، اما فقط آن گروههایی را نمایش دهید که مجموع مقادیرشان بیشتر از 1000 باشد.
```sql
SELECT customer_id, SUM(total_amount) AS total_order_amount FROM orders GROUP BY customer_id HAVING SUM(total_amount) > 1000;
دستور `HAVING` در اینجا بر روی نتایج گروهبندی شده اعمال شده و فقط گروههایی که مجموع مقادیرشان بیشتر از 1000 است نمایش داده میشود.
استفاده از `HAVING` مفید است زمانی که شما نیاز دارید تا شرایط فیلتر را بر روی گروههای گروهبندی شده اعمال کنید.
دستورهای `ANY` و `ALL` در SQL برای مقایسه مقدار یک ستون با یک زیرکوئری استفاده میشوند. این دستورها به شما این امکان را میدهند تا مقایسههای پیچیدهتری با دادهها انجام دهید.
- `ANY` باعث مقایسه مقدار یک ستون با تمام مقادیر مجموعهای از یک زیرکوئری میشود و اگر حداقل یک مقدار مطابقت داشته باشد، شرط صحیح میشود.
مثال:
فرض کنید که میخواهید بدانید آیا حداقل یک سفارش با مقدار بیشتر از 1000 وجود دارد یا نه.
```sql
SELECT * FROM orders WHERE total_amount > ANY (SELECT total_amount FROM orders WHERE order_date > '2022-01-01');
در این مثال، `ANY` باعث مقایسه مقدار ستون `total_amount` با تمام مقادیر بزرگتر از 1000 در زیرکوئری میشود و اگر حداقل یک مقدار مطابقت داشته باشد، شرط انتخاب میشود.
دستور- `ALL` باعث مقایسه مقدار یک ستون با تمام مقادیر مجموعهای از یک زیرکوئری میشود و اگر تمام مقادیر مطابقت داشته باشند، شرط صحیح میشود.
**مثال:**
فرض کنید که میخواهید بدانید آیا تمام سفارشها مقدار بیشتر از 1000 دارند یا نه.
```sql
SELECT * FROM orders WHERE total_amount > ALL (SELECT 1000 FROM orders);
در این مثال، `ALL` باعث مقایسه مقدار ستون `total_amount` با تمام مقادیر 1000 در زیرکوئری میشود و اگر تمام مقادیر مطابقت داشته باشند، شرط انتخاب میشود.
در واقع، `ANY` بررسی میکند که آیا حداقل یک مقدار مطابقت دارد، در حالی که `ALL` اطمینان حاصل میکند که تمام مقادیر مطابقت دارند. استفاده از این دستورها بستگی به نیازهای خاص کوئری شما دارد.
دستور `SELECT INTO` در SQL برای ایجاد یک جدول جدید با استفاده از نتایج یک کوئری `SELECT` استفاده میشود. این دستور به شما این امکان را میدهد که نتایج یک کوئری را به صورت خودکار در یک جدول جدید ذخیره کنید.
فرمت کلی دستور `SELECT INTO` به این صورت است:
```sql
SELECT column1, column2, ... INTO new_table FROM existing_table WHERE condition;
- `column1, column2, ...`: ستونهایی که میخواهید در جدول جدید باشند.
- `new_table`: نام جدول جدید که میخواهید ایجاد کنید.
- `existing_table`: نام جدولی که اطلاعات را از آن برداشته و در جدول جدید ذخیره کنید.
- `condition`: شرایطی که مشخص میکنند چه ردیفهایی از جدول مبدا به جدول جدید منتقل شوند (اختیاری).
**مثال:**
فرض کنید یک جدول به نام `employees` دارید و میخواهید تمام کارمندانی که حقوقشان بیشتر از 50000 دلار است را در یک جدول جدید به نام `high_salary_employees` ذخیره کنید.
```sql
SELECT employee_id, first_name, last_name, salary INTO high_salary_employees FROM employees WHERE salary > 50000;
این دستور `SELECT INTO` باعث ایجاد یک جدول به نام `high_salary_employees` میشود و تمام کارمندان با حقوق بیشتر از 50000 دلار را در این جدول ذخیره میکند.
توجه داشته باشید که `SELECT INTO` باید اجازه نوشتن در مکان مورد نظر را داشته باشد و به عنوان نتیجه، برخی پایگاههای داده ممکن است نیاز به اجازه کافی برای ایجاد جدول داشته باشند.
دستور `INSERT INTO SELECT` در SQL برای درج (وارد کردن) دادهها به یک جدول از نتایج یک کوئری `SELECT` استفاده میشود. این دستور به شما این امکان را میدهد که دادههایی را از یک یا چند جدول موجود به یک جدول جدید درج کنید.
فرمت کلی دستور `INSERT INTO SELECT` به این صورت است:
```sql
INSERT INTO destination_table (column1, column2, ...) SELECT source_column1, source_column2, ... FROM source_table WHERE condition;
- `destination_table`: نام جدولی که میخواهید دادهها در آن درج شوند.
- `(column1, column2, ...)`: لیست ستونهایی که میخواهید دادهها در آنها درج شوند (اختیاری).
- `source_column1, source_column2, ...`: ستونهایی که میخواهید اطلاعات از آنها در آنها درج شوند.
- `source_table`: نام جدول یا جدولهایی که اطلاعات از آنها در آنها درج شوند.
- `condition`: شرایطی که مشخص میکنند چه ردیفهایی از جدول مبدا در جدول مقصد درج شوند (اختیاری).
**مثال:**
فرض کنید که یک جدول به نام `employees` دارید و میخواهید تمام کارمندان با حقوق بیشتر از 50000 دلار را به یک جدول جدید به نام `high_salary_employees` درج کنید.
```sql
INSERT INTO high_salary_employees (employee_id, first_name, last_name, salary) SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary > 50000;
دستور `INSERT INTO SELECT` باعث درج تمام کارمندان با حقوق بیشتر از 50000 دلار از جدول `employees` به جدول `high_salary_employees` میشود. لازم به ذکر است که ستونهای مقصد باید با ستونهای مبدا هماهنگ باشند، اما اینکه از چه ستونهایی استفاده شود میتواند متفاوت باشد.
دستور `CASE` در SQL برای ایجاد شرایط چندگانه در یک کوئری استفاده میشود. این دستور به شما این امکان را میدهد که بر اساس مقدار یک ستون یا عبارت خاص، نتیجه مختلفی را دریافت کنید.
فرمت کلی دستور `CASE` به این صورت است:
```sql
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result_else END
- `condition1, condition2, ...`: شرایطی که بر اساس آنها تصمیم گیری میشود.
- `result1, result2, ...`: نتایج متناظر با هر شرط.
- `result_else`: نتیجه در صورتی که هیچ یک از شروط مطابقت نداشته باشد (اختیاری).
**مثال:**
فرض کنید که یک جدول به نام `employees` دارید که شامل ستونهای `employee_id`, `first_name`, `last_name`, و `salary` است و میخواهید بر اساس میزان حقوق، هر کارمند را به یکی از چند گروه تقسیم کنید.
```sql
SELECT employee_id, first_name, last_name, salary, CASE WHEN salary < 50000 THEN 'Low Salary' WHEN salary >= 50000 AND salary < 100000 THEN 'Medium Salary' ELSE 'High Salary' END AS salary_group FROM employees;
در این مثال، `CASE` بر اساس میزان حقوق (salary) هر کارمند، آنها را به یکی از سه گروه ('Low Salary', 'Medium Salary', 'High Salary') تقسیم میکند.
میتوانید دستور `CASE` را همچنین در جملات `UPDATE` و `INSERT INTO` نیز استفاده کنید.
```sql
UPDATE employees SET salary_group = CASE WHEN salary < 50000 THEN 'Low Salary' WHEN salary >= 50000 AND salary < 100000 THEN 'Medium Salary' ELSE 'High Salary' END;
در این مثال، `CASE` بر اساس میزان حقوق، مقدار ستون `salary_group` را برای تمام کارمندان بهروز میکند.
در SQL، Stored Procedure یک گروه از دستورات SQL است که به صورت گروهی درون یک نام ثابت تعریف شده و میتوان آن را به صورت مکرر فراخوانی کرد. Stored Procedureها میتوانند شامل تعدادی دستور SQL، شرایط منطقی، حلقهها، و دستورات تراکنشی باشند.
یک Stored Procedure به صورت زیر تعریف میشود:
```sql
CREATE PROCEDURE procedure_name @parameter1 datatype, @parameter2 datatype, ... AS BEGIN -- SQL statements END;
- `procedure_name`: نام Stored Procedure.
- `@parameter1, @parameter2, ...`: پارامترهای ورودی برای Stored Procedure (اختیاری).
- `datatype`: نوع داده هر پارامتر.
- `AS`: بخش شروع بلاک اجرای Stored Procedure.
- `BEGIN` و `END`: بلاک اجرایی که دستورات SQL داخل آن قرار میگیرند.
**مثال:**
فرض کنید یک Stored Procedure به نام `GetEmployeeBySalary` را تعریف کنیم که بر اساس حقوق، اطلاعات کارمندان را بازگرداند:
```sql
CREATE PROCEDURE GetEmployeeBySalary @min_salary INT, @max_salary INT AS BEGIN SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary BETWEEN @min_salary AND @max_salary; END;
حالا میتوانیم این Stored Procedure را با استفاده از دستور `EXEC` یا `EXECUTE` صدا بزنیم:
```sql
EXEC GetEmployeeBySalary @min_salary = 50000, @max_salary = 80000;
یا
```sql
EXECUTE GetEmployeeBySalary @min_salary = 50000, @max_salary = 80000;
دستور Stored Procedure میتواند پارامترهای ورودی و خروجی داشته باشد. همچنین میتواند دستورات شرطی، حلقهها، و سایر عناصر پیچیده را شامل شود. Stored Procedureها به ایجاد یک لایه مجزا از منطق کسب و کار در پایگاه داده کمک میکنند و امکان استفاده مکرر از یک قطعه کد را فراهم میکنند.
لینک ها :
کانال یوتیوب من : @BA_HOSSIEN
گیت هاب