عملگرها، عبارتها و پرسوجوهای پایه در SQL
فصل ۶ — عملگرهای SQL
عملگر در SQL چیست؟
عملگر یک واژهٔ رزروشده یا یک نویسه است که عمدتاً در عبارت WHERE یک دستور SQL برای انجام عملیاتی مانند مقایسه و محاسبات حسابی استفاده میشود.
عملگرها برای تعیین شرطها در یک دستور SQL و نیز برای پیوند چند شرط در یک دستور بهکار میروند.
- عملگرهای حسابی
- عملگرهای مقایسهای
- عملگرهای منطقی
- عملگرهای مورد استفاده برای نقیض کردن شرطها
عملگرهای حسابی SQL
فرض کنید متغیر a مقدار ۱۰ و متغیر b مقدار ۲۰ داشته باشد:
| عملگر | توضیح | مثال |
+ | جمع؛ مقادیر دو طرف عملگر را با هم جمع میکند. | a + b = 30 |
- | تفریق؛ عملوند سمت راست را از عملوند سمت چپ کم میکند. | a - b = -10 |
* | ضرب؛ مقادیر دو طرف عملگر را در هم ضرب میکند. | a * b = 200 |
/ | تقسیم؛ عملوند چپ را بر عملوند راست تقسیم میکند. | b / a = 2 |
% | باقیمانده؛ عملوند چپ را بر عملوند راست تقسیم کرده و باقیمانده را برمیگرداند. | b % a = 0 |
نمونههای سادهٔ استفاده از عملگرهای حسابی:
SQL> select 10+ 20;
+--------+
| 10+ 20 |
+--------+
| 30 |
+--------+
1 row in set (0.00 sec)
SQL> select 10 * 20;
+---------+
| 10 * 20 |
+---------+
| 200 |
+---------+
1 row in set (0.00 sec)
SQL> select 10 / 5;
+--------+
| 10 / 5 |
+--------+
| 2.0000 |
+--------+
1 row in set (0.03 sec)
SQL> select 12 % 5;
+---------+
| 12 % 5 |
+---------+
| 2 |
+---------+
1 row in set (0.00 sec)
عملگرهای مقایسهای SQL
با همان فرض a = 10 و b = 20:
| عملگر | توضیح | نتیجهٔ مثال |
= | برابر بودن دو عملوند را بررسی میکند. | (a = b) false |
!= | نابرابر بودن دو عملوند را بررسی میکند. | (a != b) true |
<> | صورت دیگری برای بررسی نابرابری است. | (a <> b) true |
> | بررسی میکند عملوند چپ از راست بزرگتر است یا خیر. | (a > b) false |
< | بررسی میکند عملوند چپ از راست کوچکتر است یا خیر. | (a < b) true |
>= | بزرگتر یا مساوی بودن عملوند چپ نسبت به راست را بررسی میکند. | (a >= b) false |
<= | کوچکتر یا مساوی بودن عملوند چپ نسبت به راست را بررسی میکند. | (a <= b) true |
!< | بررسی میکند عملوند چپ از عملوند راست کوچکتر نیست. | (a !< b) false |
!> | بررسی میکند عملوند چپ از عملوند راست بزرگتر نیست. | (a !> b) true |
جدول CUSTOMERS با هفت رکورد مثالهای این بخش مبناست. چند نمونهٔ عملگر مقایسهای:
SQL> SELECT * FROM CUSTOMERS WHERE SALARY > 5000;
-- Chaitali 6500.00 / Hardik 8500.00 / Muffy 10000.00
SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 2000;
-- Ramesh 2000.00 / kaushik 2000.00
SQL> SELECT * FROM CUSTOMERS WHERE SALARY != 2000;
-- Khilan, Chaitali, Hardik, Komal, Muffy
SQL> SELECT * FROM CUSTOMERS WHERE SALARY <> 2000;
-- همان پنج رکورد بالا
SQL> SELECT * FROM CUSTOMERS WHERE SALARY >= 6500;
-- Chaitali 6500.00 / Hardik 8500.00 / Muffy 10000.00
عملگرهای منطقی SQL
| عملگر | توضیح |
ALL | یک مقدار را با تمام مقادیر مجموعهٔ دیگری مقایسه میکند. |
AND | وجود چند شرط را در عبارت WHERE ممکن میکند. |
ANY | یک مقدار را، بر اساس شرط، با هر مقدار قابل اعمال در فهرست مقایسه میکند. |
BETWEEN | مقادیر واقعشده میان حداقل و حداکثر مشخص را جستوجو میکند. |
EXISTS | وجود سطری را در جدول مشخص که معیارهای تعیینشده را برآورده کند بررسی میکند. |
IN | یک مقدار را با فهرستی از مقادیر Literal مشخصشده مقایسه میکند. |
LIKE | یک مقدار را با مقادیر مشابه با استفاده از Wildcard (نویسهٔ عام) مقایسه میکند. |
NOT | معنای عملگر منطقی همراه خود را معکوس میکند؛ مانند NOT EXISTS، NOT BETWEEN و NOT IN. |
OR | چند شرط را در عبارت WHERE ترکیب میکند. |
IS NULL | یک مقدار را با NULL مقایسه میکند. |
UNIQUE | تمام سطرهای جدول مشخص را از نظر یکتایی و نبود تکرار بررسی میکند. |
نمونههایی از استفاده از عملگرهای منطقی روی جدول CUSTOMERS:
SQL> SELECT * FROM CUSTOMERS WHERE AGE >= 25 AND SALARY >= 6500;
-- Chaitali و Hardik
SQL> SELECT * FROM CUSTOMERS WHERE AGE >= 25 OR SALARY >= 6500;
-- Ramesh, Khilan, Chaitali, Hardik, Muffy
SQL> SELECT * FROM CUSTOMERS WHERE AGE IS NOT NULL;
-- هر 7 رکورد
SQL> SELECT * FROM CUSTOMERS WHERE NAME LIKE 'Ko%';
-- Komal
SQL> SELECT * FROM CUSTOMERS WHERE AGE IN (25, 27);
-- Khilan, Chaitali, Hardik
SQL> SELECT * FROM CUSTOMERS WHERE AGE BETWEEN 25 AND 27;
-- Khilan, Chaitali, Hardik
SQL> SELECT AGE FROM CUSTOMERS
WHERE EXISTS (SELECT AGE FROM CUSTOMERS WHERE SALARY > 6500);
-- 32,25,23,25,27,22,24
SQL> SELECT * FROM CUSTOMERS
WHERE AGE > ALL (SELECT AGE FROM CUSTOMERS WHERE SALARY > 6500);
-- Ramesh
SQL> SELECT * FROM CUSTOMERS
WHERE AGE > ANY (SELECT AGE FROM CUSTOMERS WHERE SALARY > 6500);
-- Ramesh, Khilan, Chaitali, Hardik
فصل ۷ — عبارتهای SQL
Expression (عبارت) ترکیبی از یک یا چند مقدار، عملگر و تابع SQL است که در نهایت به یک مقدار ارزیابی میشود.
عبارتهای SQL شبیه فرمولاند و با زبان پرسوجو نوشته میشوند. از آنها میتوان برای درخواست مجموعهای مشخص از دادهها از پایگاه داده استفاده کرد.
نحو
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION|EXPRESSION];
انواع عبارتهای معرفیشده در متن عبارتاند از عبارتهای بولی، عددی و تاریخ.
عبارتهای بولی SQL
عبارتهای بولی SQL داده را بر پایهٔ تطبیق یک مقدار منفرد بازیابی میکنند:
SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHTING EXPRESSION;
مثال روی جدول CUSTOMERS:
SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+-------+-----+---------+----------+
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)
عبارت عددی SQL
این نوع عبارت برای انجام عملیات ریاضی در یک پرسوجو بهکار میرود:
SELECT numerical_expression as OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;
numerical_expression میتواند یک عبارت ریاضی یا فرمول باشد:
SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
| 21 |
+----------+
1 row in set (0.00 sec)
توابع داخلی متعددی مانند avg()، sum() و count() برای محاسبات تجمیعی روی جدول یا ستون مشخص وجود دارند:
SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS;
+---------+
| RECORDS |
+---------+
| 7 |
+---------+
1 row in set (0.00 sec)
عبارتهای تاریخ SQL
عبارتهای تاریخ میتوانند مقدار تاریخ و زمان جاری سیستم را برگردانند:
SQL> SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)
SQL> SELECT GETDATE();;
+-------------------------+
| GETDATE |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)
ایجاد، حذف و انتخاب پایگاه داده و جدول
فصل ۸ — CREATE DATABASE
دستور CREATE DATABASE برای ایجاد یک پایگاه دادهٔ SQL جدید استفاده میشود.
نحو
CREATE DATABASE DatabaseName;
نام پایگاه داده باید در RDBMS یکتا باشد.
مثال: برای ایجاد پایگاه دادهٔ testDB:
SQL> CREATE DATABASE testDB;
پیش از ایجاد پایگاه داده مطمئن شوید دسترسی مدیریتی دارید. پس از ایجاد، میتوان فهرست پایگاههای داده را بررسی کرد:
SQL> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| AMROOD |
| TUTORIALSPOINT |
| mysql |
| orig |
| test |
| testDB |
+--------------------+
7 rows in set (0.00 sec)
فصل ۹ — حذف پایگاه داده با DROP DATABASE
دستور DROP DATABASE برای حذف یک پایگاه دادهٔ موجود از شِمای SQL استفاده میشود.
نحو
DROP DATABASE DatabaseName;
نام پایگاه داده باید در RDBMS یکتا باشد.
مثال:
SQL> DROP DATABASE testDB;
برای حذف پایگاه داده نیز باید دسترسی مدیریتی داشته باشید. پس از حذف میتوان با SHOW DATABASES فهرست را بررسی کرد؛ در خروجی منبع، testDB دیگر وجود ندارد و ۶ پایگاه داده باقی ماندهاند.
فصل ۱۰ — انتخاب پایگاه داده با USE
اگر در شِمای SQL چند پایگاه داده وجود داشته باشد، پیش از آغاز عملیات باید پایگاه دادهای را که عملیات روی آن انجام میشود انتخاب کنید.
دستور USE برای انتخاب یک پایگاه دادهٔ موجود استفاده میشود:
USE DatabaseName;
برای مثال پس از مشاهدهٔ پایگاههای موجود با SHOW DATABASES، برای کار با پایگاه دادهٔ AMROOD:
SQL> USE AMROOD;
فصل ۱۱ — CREATE TABLE
ایجاد یک جدول پایه شامل نامگذاری جدول و تعریف ستونها و نوع دادهٔ هر ستون است. دستور CREATE TABLE یک جدول جدید ایجاد میکند.
نحو
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);
CREATE TABLE به سامانهٔ پایگاه داده میگوید یک جدول جدید ایجاد شود. پس از آن نام یا شناسهٔ یکتای جدول قرار میگیرد و داخل پرانتز فهرست ستونها و نوع دادهٔ هرکدام تعریف میشود.
ایجاد جدول با استفاده از جدول دیگر
میتوان با ترکیب CREATE TABLE و SELECT از یک جدول موجود نسخهای ساخت. جدول جدید تعریف ستونهای متناظر را خواهد داشت و میتوان همه یا فقط ستونهای مشخص را انتخاب کرد. دادههای جدول جدید از مقادیر موجود در جدول قدیمی پر میشوند.
CREATE TABLE NEW_TABLE_NAME AS
SELECT [ column1, column2...columnN ]
FROM EXISTING_TABLE_NAME
[ WHERE ]
در این نحو، column1، column2 و دیگر ستونها فیلدهای جدول موجودند و برای ساخت فیلدهای جدول جدید استفاده میشوند.
مثال: ساخت جدول SALARY از جدول CUSTOMERS با فیلدهای شناسهٔ مشتری و حقوق:
SQL> CREATE TABLE SALARY AS
SELECT ID, SALARY
FROM CUSTOMERS;
+----+----------+
| ID | SALARY |
+----+----------+
| 1 | 2000.00 |
| 2 | 1500.00 |
| 3 | 2000.00 |
| 4 | 6500.00 |
| 5 | 8500.00 |
| 6 | 4500.00 |
| 7 | 10000.00 |
+----+----------+
مثال دیگری جدول CUSTOMERS را با ID بهعنوان کلید اصلی و چند ستون NOT NULL ایجاد میکند:
SQL> CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
برای بررسی ساخت موفق جدول میتوان پیام SQL Server را مشاهده کرد یا از DESC استفاده کرد:
SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID | int(11) | NO | PRI | | |
| NAME | varchar(20) | NO | | | |
| AGE | int(11) | NO | | | |
| ADDRESS | char(25) | YES | | NULL | |
| SALARY | decimal(18,2) | YES | | NULL | |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
اکنون جدول CUSTOMERS برای ذخیرهٔ اطلاعات موردنیاز مشتریان در پایگاه داده موجود است.
فصل ۱۲ — حذف جدول با DROP TABLE
دستور DROP TABLE تعریف یک جدول و تمام دادهها، ایندکسها، تریگرها، محدودیتها و مشخصات مجوزهای آن جدول را حذف میکند.
نحو
DROP TABLE table_name;
در مثال منبع ابتدا جدول CUSTOMERS با DESC CUSTOMERS بررسی میشود و سپس حذف میگردد:
SQL> DROP TABLE CUSTOMERS;
Query OK, 0 rows affected (0.01 sec)
SQL> DESC CUSTOMERS;
ERROR 1146 (42S02): Table 'TEST.CUSTOMERS' doesn't exist
در این مثال TEST نام پایگاه دادهٔ مورد استفاده است.
فصلهای ۱۳ و ۱۴ — INSERT و SELECT
پرسوجوی INSERT
دستور INSERT INTO برای افزودن سطرهای جدید داده به جدول استفاده میشود.
نحو
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
column1 تا columnN نام ستونهایی هستند که داده باید در آنها درج شود. اگر برای تمام ستونهای جدول مقدار درج میکنید، لازم نیست نام ستونها را بنویسید؛ اما ترتیب مقادیر باید دقیقاً با ترتیب ستونهای جدول یکسان باشد:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
دستورهای زیر شش رکورد نخست جدول CUSTOMERS را ایجاد میکنند:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
INSERT INTO CUSTOMERS
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );
در نتیجه جدول هفت رکوردی CUSTOMERS ایجاد میشود که در مثالهای بعدی استفاده شده است.
پرکردن یک جدول از جدول دیگر
اگر جدول دوم مجموعهٔ فیلدهای لازم را داشته باشد، میتوان با SELECT دادههای آن را وارد جدول نخست کرد:
INSERT INTO first_table_name [(column1, column2, ... columnN)]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];
پرسوجوی SELECT
دستور SELECT داده را از جدول پایگاه داده بازیابی میکند و نتیجه را به شکل جدول نتیجه برمیگرداند. این جدولها Result Set (مجموعهنتیجه) نام دارند.
نحو
SELECT column1, column2, columnN FROM table_name;
برای بازیابی همهٔ فیلدها:
SELECT * FROM table_name;
مثال برای بازیابی ID، NAME و SALARY:
SQL> SELECT ID, NAME, SALARY FROM CUSTOMERS;
+----+----------+----------+
| ID | NAME | SALARY |
+----+----------+----------+
| 1 | Ramesh | 2000.00 |
| 2 | Khilan | 1500.00 |
| 3 | kaushik | 2000.00 |
| 4 | Chaitali | 6500.00 |
| 5 | Hardik | 8500.00 |
| 6 | Komal | 4500.00 |
| 7 | Muffy | 10000.00 |
+----+----------+----------+
برای دریافت تمام فیلدهای جدول:
SQL> SELECT * FROM CUSTOMERS;
خروجی شامل همان هفت رکورد کامل با ستونهای ID، NAME، AGE، ADDRESS و SALARY است.
فصلهای ۱۵ تا ۱۸ — WHERE، AND/OR، UPDATE و DELETE
عبارت WHERE
WHERE برای مشخص کردن شرط هنگام بازیابی داده از یک جدول یا هنگام Join (پیوند) چند جدول استفاده میشود. فقط زمانی که شرط دادهشده برقرار باشد مقدار متناظر برگردانده میشود.
WHERE برای فیلترکردن رکوردها و بازیابی فقط رکوردهای لازم بهکار میرود و علاوه بر SELECT در دستورهایی مانند UPDATE و DELETE نیز استفاده میشود.
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
شرط میتواند از عملگرهای مقایسهای یا منطقی مانند >، <، =، LIKE و NOT استفاده کند.
بازیابی مشتریانی با حقوق بیش از ۲۰۰۰:
SQL> SELECT ID, NAME, SALARY
FROM CUSTOMERS
WHERE SALARY > 2000;
-- Chaitali 6500.00
-- Hardik 8500.00
-- Komal 4500.00
-- Muffy 10000.00
بازیابی مشتری با نام Hardik:
SQL> SELECT ID, NAME, SALARY
FROM CUSTOMERS
WHERE NAME = 'Hardik';
-- ID 5, SALARY 8500.00
متن منبع تأکید میکند که رشتهها باید داخل کوتیشن تکی قرار گیرند، در حالی که مقادیر عددی بدون کوتیشن نوشته میشوند.
عملگرهای AND و OR
AND و OR چند شرط را برای محدودتر کردن دادهها در یک دستور SQL ترکیب میکنند و به آنها عملگرهای پیوندی نیز گفته میشود.
عملگر AND
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];
میتوان هر تعداد شرط را با AND ترکیب کرد. برای انجام عمل، همهٔ شرطهای جداشده با AND باید درست باشند.
SQL> SELECT ID, NAME, SALARY
FROM CUSTOMERS
WHERE SALARY > 2000 AND age < 25;
-- Komal 4500.00
-- Muffy 10000.00
عملگر OR
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]
در ترکیب با OR کافی است یکی از شرطها درست باشد.
SQL> SELECT ID, NAME, SALARY
FROM CUSTOMERS
WHERE SALARY > 2000 OR age < 25;
-- kaushik 2000.00
-- Chaitali 6500.00
-- Hardik 8500.00
-- Komal 4500.00
-- Muffy 10000.00
پرسوجوی UPDATE
UPDATE برای تغییر رکوردهای موجود یک جدول استفاده میشود. با WHERE میتوان فقط سطرهای منتخب را بهروزرسانی کرد؛ بدون WHERE تمام سطرها تحت تأثیر قرار میگیرند.
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
میتوان شرطهای متعدد را با AND یا OR ترکیب کرد.
مثال تغییر نشانی مشتری با ID = 6:
SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune'
WHERE ID = 6;
پس از اجرا، نشانی رکورد Komal از MP به Pune تغییر میکند.
برای تغییر ADDRESS و SALARY همهٔ رکوردها، عبارت WHERE حذف میشود:
SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00;
در خروجی منبع، نشانی تمام هفت رکورد Pune و حقوق همه 1000.00 میشود.
پرسوجوی DELETE
DELETE رکوردهای موجود جدول را حذف میکند. با WHERE فقط سطرهای انتخابشده حذف میشوند؛ در غیر این صورت تمام رکوردها حذف خواهند شد.
DELETE FROM table_name
WHERE [condition];
مثال حذف مشتری با ID = 6:
SQL> DELETE FROM CUSTOMERS
WHERE ID = 6;
پس از اجرا، رکورد Komal حذف میشود و شش رکورد باقی میماند.
برای حذف تمام رکوردهای جدول به WHERE نیاز نیست:
SQL> DELETE FROM CUSTOMERS;
پس از این دستور، جدول CUSTOMERS هیچ رکوردی نخواهد داشت.
فصلهای ۱۹ تا ۲۴ — LIKE، TOP، ORDER BY، GROUP BY، DISTINCT و مرتبسازی
عبارت LIKE
LIKE یک مقدار را با مقادیر مشابه و با استفاده از Wildcard (نویسهٔ عام) مقایسه میکند. دو نویسهٔ عام معرفیشده عبارتاند از علامت درصد (%) و زیرخط (_).
% نمایندهٔ صفر، یک یا چند نویسه است و _ نمایندهٔ یک نویسه یا رقم منفرد است. این نمادها میتوانند با هم ترکیب شوند.
نحوهای پایه
SELECT FROM table_name WHERE column LIKE 'XXXX%'
SELECT FROM table_name WHERE column LIKE '%XXXX%'
SELECT FROM table_name WHERE column LIKE 'XXXX_'
SELECT FROM table_name WHERE column LIKE '_XXXX'
SELECT FROM table_name WHERE column LIKE '_XXXX_'
XXXX میتواند هر مقدار عددی یا رشتهای باشد و میتوان چند شرط را با AND یا OR ترکیب کرد.
| شرط | مفهوم |
WHERE SALARY LIKE '200%' | مقادیری که با ۲۰۰ شروع میشوند. |
WHERE SALARY LIKE '%200%' | مقادیری که ۲۰۰ در هر موقعیتی در آنها باشد. |
WHERE SALARY LIKE '_00%' | مقادیری که رقم دوم و سوم آنها ۰۰ است. |
WHERE SALARY LIKE '2_%_%' | مقادیری که با ۲ آغاز میشوند و دستکم سه نویسه طول دارند. |
WHERE SALARY LIKE '%2' | مقادیری که به ۲ ختم میشوند. |
WHERE SALARY LIKE '_2%3' | مقادیری که نویسهٔ دوم آنها ۲ است و با ۳ پایان مییابند. |
WHERE SALARY LIKE '2___3' | عددهای پنجرقمی که با ۲ آغاز و با ۳ پایان مییابند. |
مثال بازیابی رکوردهایی که SALARY آنها با ۲۰۰ شروع میشود:
SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';
-- Ramesh 2000.00
-- kaushik 2000.00
عبارت TOP
TOP برای دریافت تعداد N رکورد نخست یا X درصد از رکوردهای جدول استفاده میشود.
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]
سه نمونهٔ معادل برای دریافت سه رکورد نخست:
-- SQL Server
SQL> SELECT TOP 3 * FROM CUSTOMERS;
-- MySQL
SQL> SELECT * FROM CUSTOMERS
LIMIT 3;
-- Oracle
SQL> SELECT * FROM CUSTOMERS
WHERE ROWNUM <= 3;
در هر سه خروجی منبع، سه رکورد نخست Ramesh، Khilan و kaushik برگردانده میشوند.
عبارت ORDER BY
ORDER BY داده را بر اساس یک یا چند ستون بهصورت صعودی یا نزولی مرتب میکند. برخی پایگاههای داده بهطور پیشفرض نتایج پرسوجو را صعودی مرتب میکنند.
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
میتوان بیش از یک ستون را در ORDER BY استفاده کرد؛ ستون مورد استفاده برای مرتبسازی باید در فهرست ستونها قرار داشته باشد.
مرتبسازی صعودی بر اساس NAME و SALARY:
SQL> SELECT * FROM CUSTOMERS
ORDER BY NAME, SALARY;
ترتیب خروجی منبع: Chaitali، Hardik، kaushik، Khilan، Komal، Muffy، Ramesh.
مرتبسازی نزولی بر اساس NAME:
SQL> SELECT * FROM CUSTOMERS
ORDER BY NAME DESC;
ترتیب خروجی منبع: Ramesh، Muffy، Komal، Khilan، kaushik، Hardik، Chaitali.
GROUP BY
GROUP BY همراه SELECT برای قرار دادن دادههای یکسان در گروهها استفاده میشود. این عبارت پس از WHERE و پیش از ORDER BY قرار میگیرد.
SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2
برای محاسبهٔ مجموع حقوق هر مشتری:
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
GROUP BY NAME;
+----------+-------------+
| NAME | SUM(SALARY) |
+----------+-------------+
| Chaitali | 6500.00 |
| Hardik | 8500.00 |
| kaushik | 2000.00 |
| Khilan | 1500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 2000.00 |
+----------+-------------+
سپس منبع جدولی با نامهای تکراری Ramesh و kaushik در نظر میگیرد و همان پرسوجوی GROUP BY را اجرا میکند. نتیجهٔ تجمیع:
+---------+-------------+
| NAME | SUM(SALARY) |
+---------+-------------+
| Hardik | 8500.00 |
| kaushik | 8500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 3500.00 |
+---------+-------------+
کلیدواژهٔ DISTINCT
DISTINCT همراه SELECT برای حذف رکوردهای تکراری و بازیابی فقط مقادیر یکتا استفاده میشود.
اگر جدول چند رکورد تکراری داشته باشد، هنگام بازیابی معمولاً منطقیتر است فقط مقادیر یکتا دریافت شوند.
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]
ابتدا پرسوجوی زیر حقوقها را با مقدار تکراری 2000.00 برمیگرداند:
SQL> SELECT SALARY FROM CUSTOMERS
ORDER BY SALARY;
1500.00
2000.00
2000.00
4500.00
6500.00
8500.00
10000.00
با افزودن DISTINCT مقدار تکراری حذف میشود:
SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
ORDER BY SALARY;
1500.00
2000.00
4500.00
6500.00
8500.00
10000.00
مرتبسازی نتایج SQL
این بخش بار دیگر استفاده از ORDER BY برای مرتبسازی صعودی یا نزولی دادهها بر اساس یک یا چند ستون را توضیح میدهد:
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
مثال صعودی بر اساس NAME و SALARY و مثال نزولی بر اساس NAME همان نتایج بخش پیشین را تولید میکنند.
برای مرتبسازی سطرها با ترتیب ترجیحی سفارشی، منبع از CASE در ORDER BY استفاده میکند:
SQL> SELECT * FROM CUSTOMERS
ORDER BY (CASE ADDRESS
WHEN 'DELHI' THEN 1
WHEN 'BHOPAL' THEN 2
WHEN 'KOTA' THEN 3
WHEN 'AHMADABAD' THEN 4
WHEN 'MP' THEN 5
ELSE 100 END) ASC, ADDRESS DESC;
در خروجی منبع ترتیب رکوردها بر اساس نشانی چنین است: Delhi، Bhopal، Kota، MP، Mumbai، Indore و Ahmedabad. این روش ابتدا نشانیهای دارای اولویت صریح را مطابق ترتیب ترجیحی مرتب میکند و نشانیهای باقیمانده را با ترتیب الفبایی معکوس قرار میدهد.