آموزش جامع SQL Server (جلسه چهار: فیلتر کردن داده‌ها – ۱)
1398/02/12 11:42 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه چهار: فیلتر کردن داده‌ها – ۱)

تا اینجای کار به صورت کامل مباحث نوشتن query، مرتب‌سازی نتایج و محدود کردن ردیف‌های نتایج را بررسی کردیم. در این جلسه قصد داریم وارد مبحث فیلتر کردن داده‌ها شویم که شامل ۷ دستور و یک تکنیک فیلتر کردن می‌شود و در دو جلسه آن‌ها را بررسی خواهیم کرد. موارد مورد بررسی عبارت‌اند از:

(جلسه اول)

  • دستور DISTINCT: مقادیر مجزا از یک یا چند ستون از یک جدول را انتخاب می‌کند.
  • دستور WHERE: ردیف‌ها را در خروجی یک query بر اساس یک یا چند شرط فیلتر می‌کند.
  • عملگر AND: دو عبارت boolean را ترکیب کرده و اگر همه عبارت‌ها true باشند، مقدار true را بازمی‌گرداند.
  • عملگر OR: دو عبارت boolean را ترکیب کرده و اگر حتی فقط یکی از شروط صدق کنند، مقدار true بازمی‌گرداند.

(جلسه دوم)

  • عملگر IN: بررسی می‌کند که آیا یک مقدار با هیچ‌کدام از مقادیر موجود در یک لیست یا زیر query تطابق دارد یا خیر.
  • عملگر BETWEEN: تست می‌کند که آیا یک مقدار بین بازه‌ای از مقادیر هست یا خیر.
  • عملگر LIKE: بررسی می‌کند که آیا یک رشته از کاراکترها با یک الگوی خاص تطابق دارند یا خیر.
  • تکنیک aliasهای ستون و جدول: نحوه استفاده از aliasهای ستون برای تغییر سر تیتر (هدینگ) خروجی query و استفاده از aliasهای جدول برای افزایش خوانایی و مرتب شدن کدهای query را نشان می‌دهد.

۱- نصب و آشنایی با SQL Server

۱۰-عملگرهای SET وCTEوPIVOT

۱۹-indexها بخش۱

۲۸-توابع تاریخ یا date بخش۲

۲-نوشتن query

۱۱-تغییر داده‌ها

۲۰-indexها بخش۲

۲۹-توابع رشته‌ای بخش۱

۳-محدود کردن ردیف‌ها

۱۲-تعریف داده‌ها بخش۱

۲۱-stored procedureها بخش۱

۳۰- توابع رشته‌ای بخش۲

۴-فیلتر کردن داده‌ها بخش ۱

۱۳-تعریف داده‌ها بخش۲

۲۲- stored procedureها بخش۲

۳۱- توابع رشته‌ای بخش۳

۵-فیلتر کردن داده‌ها بخش۲

۱۴-data typeهای بخش۱

۲۳- stored procedureها بخش۳

۳۲-توابع سیستمی بخش ۱

۶-اتصال جداول بخش۱

۱۵-data typeها بخش۲

۲۴-توابع تعریف شده توسط کاربر

۳۳-توابع سیستمی بخش۲

۷-اتصال جداول بخش۲

۱۶-ویژگی‌ها

۲۵-triggerها

۳۴-window functionها بخش۱

۸-گروه‌بندی داده‌ها

۱۷-expressionها

۲۶-توابع تجمعی

۳۵-window functionها بخش ۲

۹-subquery

۱۸-viewها

۲۷-توابع تاریخ یا date بخش۱

 

دستور SELECT DISTINCT در SQL Server

گاهی ممکن است فقط به مقادیر مجزا و پراکنده‌ای از یک ستون خاص از یک جدول نیاز داشته باشید. برای این منظور، می‌توانید همانند مثال زیر از دستور SELECT DISTINCT استفاده کنید:

SELECT DISTINCT
    column_name
FROM
    table_name;

این query فقط نتایج مجزا در یک ستون خاص را بازمی‌گرداند. به عبارت دیگر، مقادیر تکراری در یک ستون را از مجموعه نتایج حذف می‌کند.

اگر از چندین ستون به شکل زیر استفاده کنید:

SELECT DISTINCT
 column_name1,
 column_name2 ,
 ...
FROM
 table_name;

آنگاه query از ترکیب مقادیر در تمام ستون‌های مشخص شده در لیست SELECT برای ارزیابی و سنجش یکتایی مقادیر استفاده می‌کند.

اگر از دستور DISTINCT برای یک ستون که دارای مقدار NULL است استفاده کنید، آنگاه دستور DISTINCT فقط یک مقدار NULL نگه می‌دارد و بقیه مقادیر NULL را حذف می‌کند. به عبارت دیگر، دستور DISTINCT با تمام مقادیر NULL به عنوان یک مقدار مشابه رفتار می‌کند.

مثال‌هایی از دستور SELECT DISTINCT در SQL Server

برای ارائه مثال، از جدول customers موجود در پایگاه داده نمونه یعنی Bikestores استفاده می‌کنیم.

جدول customers

الف) مثال استفاده از دستور DISTINCT برای یک ستون

کد زیر تمام شهرهای همه مشتریان موجود در جدول customers را بازمی‌گرداند:

SELECT
    city
FROM
    sales.customers
ORDER BY
    city;

نتایج

همان‌طور که به وضوح در خروجی می‌بینید، شهرها دارای مقادیر تکراری هستند.

برای به دست آوردن شهرهای مجزا و یکتا، یک کلیدواژه DISTINCT همانند مثال زیر به کد اضافه می‌کنیم:

SELECT DISTINCT
    city
FROM
    sales.customers
ORDER BY
    city;

نتایج

حالا، query یک مقدار مجزا و یکتا برای هر گروه از اسامی تکراری بازمی‌گرداند. به عبارت دیگر، تمام شهرهای تکراری را از مجموعه نتایج حذف کرده است.

ب) مثال استفاده از دستور DISTINCT برای چندین ستون

کد زیر شهرها و ایالت‌های مجزا و یکتای تمام مشتریان را می‌یابد.

SELECT DISTINCT
    city,
    state
FROM
    sales.customers

نتایج

در این مثال، کد از ترکیب مقادیر در هر دو ستون‌های city و state برای ارزیابی یکتایی و یافتن مقادیر تکراری استفاده کرده است.

پ)مثال استفاده از دستور DISTINCT برای مقادیر null

مثال زیر شماره تلفن‌های مجزا و یکتای مشتریان را می‌یابد:

SELECT DISTINCT
    phone
FROM
    sales.customers
ORDER BY
    phone;

نتایج

در این مثال، دستور DISTINCT فقط یک مقدار NULL در ستون phone نگه داشته و بقیه NULLها را حذف کرده است.

به این صورت، انواع استفاده از دستور SELECT DISTINCT برای بازگرداندن مقادیر مجزا و یکتا در یک لیست مشخص شده از ستون‌ها را آموختید.

دستور WHERE در SQL Server

وقتی برای به دست آوردن داده از یک جدول، از دستور SELECT برای نوشتن query استفاده می‌کنید، تمام ردیف‌های جدول در نتایج نمایش داده می‌شوند، که چنین کاری ضروری نیست. چون برنامه هر دفعه فقط می‌تواند مجموعه محدودی از ردیف‌ها را پردازش کند.

برای بازگرداندن ردیف‌هایی از جدول که با یک یا چند شرط صدق می‌کنند، از دستور WHERE به شکل زیر استفاده می‌کنیم:

SELECT
    select_list
FROM
    table_name
WHERE
    search_condition;

در دستور WHERE، یک شرط جستجو برای فیلتر ردیف‌های بازگردانده شده توسط دستور FROM نوشته می‌شود. دستور WHERE فقط ردیف‌هایی را بازمی‌گرداند که باعث شوند نتیجه شرط جستجو حتماً true شود.

شرط جستجو یک عبارت منطقی یا ترکیبی از چند عبارت منطقی است. در SQL، یک عبارت منطقی گاهی با نام predicate (گزاره) شناخته می‌شود.

توجه کنید که SQL Server از منطق predicate سه مقداری استفاده می‌کند، یعنی وقتی یک عبارت منطقی ارزیابی می‌شود ممکن است مقادیر TRUE، FALSE یا UNKNOWN بگیرد.

مثال‌هایی از دستور WHERE در SQL Server

این دفعه برای نمایش مثال‌ها از جدول production.products از پایگاه‌ داده نمونه Bikestores استفاده می‌کنیم.

جدول production.products

الف) یافتن ردیف‌ها با استفاده از یک تساوی ساده

کد زیر تمام محصولات دارای id دسته شماره ۱ را بازمی‌گرداند:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    category_id = 1
ORDER BY
    list_price DESC;

نتایج

ب) یافتن ردیف‌هایی که با دو شرط تطابق دارند

مثال زیر محصولاتی را بازمی‌گرداند که با دو شرط تطابق داشته باشند: id دسته برابر با ۱ باشد و مدل آن‌ها ۲۰۱۸ باشد. این مثال برای ترکیب دو شرط از عملگر AND استفاده کرده است.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    category_id = 1 AND model_year = 2018
ORDER BY
    list_price DESC;

نتایج

پ)یافتن ردیف‌ها با استفاده از یک عملگر مقایسه‌گر

کد زیر محصولاتی را می‌یابد که قیمت آن‌ها بیشتر از ۳۰۰ و مدل آن‌ها ۲۰۱۸ باشد.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price > 300 AND model_year = 2018
ORDER BY
    list_price DESC;

نتایج

ت) یافتن ردیف‌هایی که با یکی از دو شرط تطابق دارند

Query زیر محصولاتی را می‌یابد که قیمت آن‌ها بیشتر از ۳۰۰۰ یا مدل آن‌ها ۲۰۱۸ باشد. هر محصولی که با یکی از این شرط تطابق داشته باشد در مجموعه نتایج نمایش داده می‌شود.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price > 3000 OR model_year = 2018
ORDER BY
    list_price DESC;

نتایج

توجه کنید که برای ترکیب predicateها از عملگر OR استفاده شد.

ث)یافتن ردیف‌های دارای مقداری بین دو مقدار دیگر

کد زیر محصولاتی را می‌یابد که قیمت‌ آن‌ها بین ۱۸۹۹ و ۱۹۹۹.۹۹ باشد:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price BETWEEN 1899.00 AND 1999.99
ORDER BY
    list_price DESC;

نتایج

ج) یافتن ردیف‌هایی که دارای یک مقدار در لیستی از مقادیر می‌باشند

مثال زیر از عملگر IN برای یافتن محصولاتی که قیمت آن‌ها ۲۹۹.۹۹ یا ۴۶۶.۹۹ یا ۴۸۹.۹۹ است، استفاده کرده است.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price IN (299.99, 369.99, 489.99)
ORDER BY
    list_price DESC;

نتایج

چ)یافتن ردیف‌هایی که مقادیر آن‌ها شامل یک رشته خاص باشد

مثال زیر از عملگر LIKE برای یافتن محصولاتی که نام آن‌ها شامل رشته Cruiser است، استفاده کرده است:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    product_name LIKE '%Cruiser%'
ORDER BY
    list_price;

نتایج

به این صورت، آموختید که برای فیلتر ردیف‌ها بر اساس یک یا چند شرط، به چه شکل‌هایی می‌توانید از دستور WHERE در SQL Server استفاده کنید.

عملگر AND در SQL Server

AND یک عملگر منطقی است که به شما امکان می‌دهد دو عبارت boolean را با هم ترکیب کنید. این عملگر فقط زمانی مقدار TRUE را بازمی‌گرداند که هر دو عبارت مورد ارزیابی (شروط) دارای مقدار TRUE باشند.

کد زیر syntax عملگر AND را نمایش می‌دهد:

boolean_expression AND boolean_expression   

Boolean_expression می‌تواند هر عبارت boolean قابل‌ قبولی باشد و می‌تواند یکی از نتایج TRUE، FLASE یا UNKNOWN را بگیرد.

جدول زیر نتایج ترکیب مقادیر TRUE، FALSE و UNKNOWN با استفاده از عملگر AND را نمایش می‌دهد:

جدول ترکیب عملگرهای AND

وقتی از بیش از یک عملگر منطقی در یک عبارت استفاده می‌کنید، SQL Server همیشه ابتدا عملگرهای AND را ارزیابی می‌کند. به هر حال، می‌توانید ترتیب ارزیابی را با استفاده از پرانتزها تغییر دهید.

مثال‌های از عملگر AND در SQL Server

برای مثال‌ها از جدول products در پایگاه داده نمونه bikestores استفاده می‌کنیم:

جدول products

الف) مثال استفاده از عملگر AND

مثال زیر محصولاتی را می‌یابد که شماره id دسته آن‌ها برابر با ۱ و قیمت آن‌ها بیشتر از ۴۰۰ باشد:

SELECT
    *
FROM
    production.products
WHERE
    category_id = 1
AND list_price > 400
ORDER BY
    list_price DESC;

نتایج به شرح زیر هستند:

نتایج

ب) مثال استفاده از چند عملگر AND

کد زیر محصولاتی را می‌یابد که با تمام شرایط زیر تطابق داشته باشند:

Id دسته شماره ۱، قیمت بیشتر از ۴۰۰ و id برند برابر با ۱:

SELECT
    *
FROM
    production.products
WHERE
    category_id = 1
AND list_price > 400
AND brand_id = 1
ORDER BY
    list_price DESC;

نتایج به شرح زیر هستند:

نتایج

پ)استفاده از عملگر AND همراه با دیگر عملگرهای منطقی

مثال query زیر را در نظر بگیرید:

SELECT
    *
FROM
    production.products
WHERE
    brand_id = 1
OR brand_id = 2
AND list_price > 1000
ORDER BY
    brand_id DESC;

 تصویر زیر نتایج آن را نمایش می‌دهد:

نتایج

در این مثال، از هر دو عملگرهای OR و AND در شرط استفاده کردیم. مثل همیشه، SQL Server ابتدا عملگر AND را ارزیابی کرده است. در نتیجه، query محصولاتی که id برند آن‌ها برابر با ۲ و قیمت آن‌ها بیشتر از ۱۰۰۰ یا محصولاتی که id برند آن‌ها برابر با ۱ است را بازگردانده است.

برای به دست آوردن محصولی که id برند آن برابر با ۱ یا ۲ و قیمت آن بیشتر از ۱۰۰۰باشد، همانند کد زیر از پرانتزها استفاده می‌کنید:

SELECT
    *
FROM
    production.products
WHERE
    (brand_id = 1 OR brand_id = 2)
AND list_price > 1000
ORDER BY
    brand_id;

Query نتیجه زیر را بازمی‌گرداند:

نتایج

 در نتیجه، به صورت کامل با کاربرد عملگر AND در SQL Server برای ترکیب دو عبارت boolean آشنا شدید.

عملگر OR در SQL Server

عملگر OR در SQL Server یک عملگر منطقی است که به شما امکان می‌دهد دو عبارت Boolean را با هم ترکیب کند. این عملگر زمانی مقدار TRUE بازمی‌گرداند که یکی از شروط مورد ارزیابی TRUE شوند.

کد زیر syntax عملگر OR را نمایش می‌دهد:

boolean_expression OR boolean_expression    

در این syntax، عبارت boolean expression می‌تواند هر نوع عبارت boolean قابل قبول که بتواند یکی از مقادیر TRUE، FALSE و UNKNOWN را بگیرد، می‌باشد.

جدول زیر نتایج عملگر OR در زمانی که مقادیر TRUE، FALSE و UNKNOWN با هم ترکیب می‌شوند را نشان می‌دهد:

جدول ترکیبات OR

وقتی از بیش از یک عملگر منطقی در یک کد استفاده کنید، SQL Server عملگرهای OR را بعد از عملگر AND ارزیابی می‌کند. به هر حال، می‌توانید از پرانتزها برای تغییر ترتیب ارزیابی استفاده کنید.

مثال‌هایی از عملگر OR در SQL Server

جدول production.products از پایگاه داده نمونه bikestores را در نظر بگیرید:

جدول production.products

الف) مثال استفاده از عملگر OR

مثال زیر محصولاتی را می‌یابد که قیمت آن‌ها کمتر از ۲۰۰ یا بیشتر از ۶۰۰۰ باشد:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price < 200
OR list_price > 6000
ORDER BY
    list_price;

نتایج

ب) مثال استفاده از چندین عملگر OR

کد زیر محصولاتی را می‌یابد که id برند آن‌ها ۱، ۲ یا ۴ باشد:

SELECT
    product_name,
    brand_id
FROM
    production.products
WHERE
    brand_id = 1
OR brand_id = 2
OR brand_id = 4
ORDER BY
    brand_id DESC;

نتایج

می‌توانید چندین عملگر OR را با یک عملگر IN جایگزین کنید. مثالی از این کار را در کد زیر مشاهده می‌کنید:

SELECT
    product_name,
    brand_id
FROM
    production.products
WHERE
    brand_id IN (1, 2, 3)
ORDER BY
    brand_id DESC;
پ)مثال استفاده از عملگر OR همراه با عملگر AND

مثال زیر را در نظر بگیرید:

SELECT
    product_name,
    brand_id,
    list_price
FROM
    production.products
WHERE
    brand_id = 3
OR brand_id = 4
AND list_price > 100
ORDER BY
    brand_id DESC;

نتایج

در این مثال، از هر دو عملگرهای OR و AND استفاده کردیم. مثل همیشه، SQL Server ابتدا عملگر AND را ارزیابی می‌کند. در نتیجه، query محصولاتی که id برند آن‌ها برابر با ۴ و قیمت آن‌ها بیشتر از ۱۰۰یا محصولاتی که id برند آن‌ها برابر با ۳ باشد را بازمی‌گرداند.

برای یافتن محصولاتی که id برند آن‌ها ۳ یا ۴ و قیمت آن‌ها بیشتر از ۱۰۰ باشد، می‌توانید همانند مثال زیر از پرانتزها استفاده کنید:

SELECT
    product_name,
    brand_id,
    list_price
FROM
    production.products
WHERE
    (brand_id = 3 OR brand_id = 4)
AND list_price > 100
ORDER BY
    brand_id;

نتایج

در نتیجه، به طور کامل آموختید که چگونه می‌توان از عملگر OR برای ترکیب دو عبارت boolean و تشکیل یک شرط استفاده کرد.

خلاصه

در این جلسه به بررسی مبحث فیلتر داده‌ها پرداختیم و فهمیدیم برای این منظور چه دستورها و عملگرها و تکنیک‌هایی دخیل هستند.

با نحوه عملکرد دستورات SELECT DISTINCT و WHERE و عملگر‌های AND و OR آشنا شدید و مثال مشاهده کردید.

در جلسه بعدی با پرداختن به عملگرها و تکنیک باقی‌مانده، این مبحث را تکمیل خواهیم کرد.

با MUG همراه باشید!

منبع: sqlservertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات