SQL برای دریافت نمونهای از ردیفها
یادگیری نحوه استفاده از SELECT، FROM، LIMIT، ORDER BY و AS در SQL برای پرسوجو و مرتبسازی جداول.
پرسوجو از جداول با SQL
یادگیری نحوه استفاده از SELECT، FROM، LIMIT، ORDER BY و AS در SQL برای پرسوجو و مرتبسازی جداول.
آنچه پوشش میدهیم
- استفاده از
SELECTبرای مشخص کردن ستونهایی که میخواهید دریافت کنید › *همه ستونها را انتخاب میکند ›- استفاده از
FROMبرای مشخص کردن جدول یا زیرپرسوجویی که میخواهید پرسوجو کنید › - وقتی جداول خود را تجمیع نمیکنید، هنگام توسعه پرسوجوهایتان ردیفها را
LIMITکنید (تا پایگاه داده خود را منفجر نکنید) › - افزودن کامنت با
--؛ آنها نتایج را تحت تأثیر قرار نمیدهند، اما به مشتریان کمک میکنند کد شما را درک کنند › - پایان دادن به هر پرسوجو با
;› - تغییر نام ستونها با
AS› - مرتبسازی نتایج با
ORDER BY، یاASCبرای صعودی یاDESCبرای نزولی › - انتخاب ستونهای خاص با استفاده از فهرست جدا شده با کاما ›
- درک قراردادهای حروف بزرگ و کوچک SQL و زمانی که حروف بزرگ و کوچک مهم است ›
- نمونهگیری داده از جداول با استفاده از تابع
MOD›
نیاز به یادآوری سریع قبل از ورود دارید؟ برگه تقلب SQL ما را برای دستورات و نحو اصلی بررسی کنید. همچنین برای به اشتراک گذاشتن با همکارانی که تازه در تحلیل داده شروع کردهاند عالی است.
SQL برای دریافت همه ردیفها از یک جدول
اگر میخواهید کل جدول و همه ردیفهای آن را دریافت کنید، مثل این جدول products:
| id | ean | title | category | vendor | price | rating | created_at |
| --- | ------------- | ------------------------- | --------- | ---------------------------- | ----- | ------ | --------------------------- |
| 1 | 1018947080336 | Rustic Paper Wallet | Gizmo | Swaniawski, Casper and Hilll | 29.46 | 4.6 | July 19, 2017, 7:44 PM |
| 2 | 7663515285824 | Small Marble Shoes | Doohickey | Balistreri-Ankunding | 70.08 | 0 | April 11, 2019, 8:49 AM |
| 3 | 4966277046676 | Synergistic Granite Chair | Doohickey | Murray, Watsica and Wunsch | 35.39 | 4 | September 8, 2018, 10:03 PM |
ستونها را SELECT میکنید FROM جدول، مثل این:
SELECT
*
FROM
products;
SELECTیک کلمه رزرو شده SQL است که ستونهای برگشتی را مشخص میکند. کلمات رزرو شده کلمات کلیدی در SQL هستند که معانی خاصی برای موتورهای پایگاه داده که پرسوجوها را پردازش میکنند دارند.*عملگر جایگزین است که به پایگاه داده میگوید همه ستونها را از یک جدول برگرداند. به طور کلی، باید فقط ستونهای دقیقی که میخواهید در نتایج را شامل کنید. این را با جداول واقعاً بزرگ بدون محدود کردن نتایج امتحان نکنید، مگر اینکه بخواهید روز همه را بدتر کنید.FROMیک کلمه رزرو شده SQL است که به پایگاه داده میگوید کدام جدول (یا جداول) را برای ستونها جستجو کند. نام جدولها باید دقیق باشند (اما حروف بزرگ و کوچک مهم نیست).- توجه داشته باشید
;در انتهای پرسوجو. متابیس در مورد اینکه آیا نقطهویرگول را شامل میکنید یا نه بسیار بخشنده است، اما ویرایشگرها/پایگاههای داده دیگر ممکن است نباشند. آنها به دنبال نقطهویرگول میگردند تا بدانند پرسوجو کامل است.
ترتیب عملیات موتور پایگاه داده شما هنگام پردازش پرسوجوی شما با ترتیب عملیات هنگام خواندن کد یکسان نیست. به طور کلی، نیازی به فکر کردن به این ندارید، چون مشتریان ساعتهای باورنکردنی برای بهینهسازی این موتورهای پرسوجو صرف کردهاند.
SQL برای افزودن کامنت به کد شما
میتوانید (و باید) کامنت به یک پرسوجو با -- اضافه کنید. در اینجا همان پرسوجو، با کامنتهای توضیحی:
-- Our first query
SELECT
* -- The star means to get all columns
FROM
products; -- The table to query
پردازنده پرسوجوی پایگاه داده میداند که هر چیزی در یک خط بعد از -- را نادیده بگیرد. در واقع، میتوانید یک قایق بادبانی کامل در پرسوجوی خود قرار دهید و نتایج تغییر نمیکند:
SELECT
*
FROM
-- An entire sailboat
products;
SQL برای دریافت فقط برخی ردیفها از جدول
میتوانید نتایج را LIMIT کنید، مثل این:
SELECT
*
FROM
products
LIMIT -- SQL reserved word
3; -- Only get the first 3 rows
که همه ستونها (*) را برمیگرداند، اما فقط 3 ردیف. در صورت امکان، هنگام توسعه پرسوجوها ردیفها را محدود کنید تا زمان بارگذاری را سرعت بخشید. خوشبختانه، متابیس به طور خودکار نتایج را به 2000 ردیف اول محدود میکند تا مشتریان پایگاه داده خود را منفجر نکنند. اما هنوز یک روش خوب است.
Limit فقط تعداد ردیفهای برگشتی را تحت تأثیر قرار میدهد. اگر داده را تجمیع میکنید، مثل شمارش ردیفها و گروهبندی ردیفها (که بعداً پوشش خواهیم داد)، پایگاه داده همچنان همه ردیفها را میشمارد و گروهبندی میکند، اما فقط تعداد ردیفهای نتیجه تعیین شده توسط LIMIT را برمیگرداند.
SQL برای دریافت فقط برخی ستونها
برای برگرداندن ستونهای خاص، مثل فقط ستونهای title و category:
| title | category |
| ------------------------- | --------- |
| Rustic Paper Wallet | Gizmo |
| Small Marble Shoes | Doohickey |
| Synergistic Granite Chair | Doohickey |
هر ستون را SELECT کنید، به ترتیبی که میخواهید ستونها در نتایج نمایش داده شوند. ستونها را با کاما جدا کنید (اما کاما را در انتهای فهرست اضافه نکنید)، مثل این:
SELECT
title, -- Names of each column must be exact
category -- No comma at the end of list
FROM
products;
در واقع، آنقدر مشتریان با خطای کامای گمشده سوختهاند که برخی مشتریان SQL خود را مثل این فرمت میکنند فقط تا کاماها راحتتر دیده شوند (اما بیشتر برای اینکه ستونها راحتتر در صورت نیاز کامنت شوند):
SELECT
title
,category -- Comma precedes each column except the first column
,vendor -- No comma at the end of list
FROM
products;
SQL برای مرتبسازی نتایج
میتوانید ردیفهای نتایج را با ORDER BY مرتب کنید. به عنوان مثال، برای مرتبسازی محصولات بر اساس قیمت از کم به زیاد:
SELECT
title,
price
FROM
products
ORDER BY -- Sorts results
price ASC; -- By the price column in ascending order
که برمیگرداند:
| Title | Price |
| ------------------------ | ----- |
| Mediocre Paper Car | 15.69 |
| Rustic Paper Car | 19.87 |
| Heavy-Duty Copper Gloves | 20.41 |
| Enormous Marble Shoes | 21.42 |
کلمه کلیدی ASC گاهی اوقات اختیاری است (بسته به موتور پایگاه داده)، اما شامل کردن ASC در بند ORDER BY کد را خواناتر میکند و همیشه کار میکند.
برای مرتبسازی به ترتیب نزولی (زیاد به کم)، کلمه کلیدی DESC را اضافه کنید:
SELECT
title,
price
FROM
products
ORDER BY
price DESC; -- Sorts in descending order
برای مرتبسازی با چند ستون، به عنوان مثال، اول بر اساس category (الفبایی)، سپس بر اساس price درون هر دسته (زیاد به کم):
SELECT
title,
category,
price
FROM
products
ORDER BY
category ASC, -- Sorts categories alphabetically (note the comma)
price DESC; -- Then sorts prices highest to lowest within each category
ممکن است گاهی اوقات ببینید مشتریان با اعداد مرتب میکنند، مثل این:
SELECT
title,
category,
price
FROM
products
ORDER BY
2 ASC, -- Sorts categories alphabetically (note the comma)
3 DESC; -- Then sorts prices highest to lowest within each category
در اینجا اعداد با موقعیت ترتیبی ستون در عبارت SELECT مطابقت دارند. با برخی پایگاههای داده، مرتبسازی بر اساس موقعیت تنها راه مرتبسازی با ستونهای مستعار است. اما در صورت امکان، بهتر است نام ستونها یا نامهای مستعار را شامل کنید تا مشتریان مجبور نباشند هنگام خواندن کد بین بخشهای SELECT و ORDER BY رفت و برگشت کنند.
SQL برای تغییر نام ستونها
بگویید جدول شما نام ستونهایی مثل title و category دارد، اما میخواهید هر عنوان ستون با "Product" شروع شود، مثل این:
| Product title | Product category |
| ------------------------- | ---------------- |
| Rustic Paper Wallet | Gizmo |
| Small Marble Shoes | Doohickey |
| Synergistic Granite Chair | Doohickey |
برای تغییر نام یک ستون (در نتایج، نه خود جدول)، از AS برای ایجاد یک نام مستعار برای ستون استفاده کنید، مثل این:
SELECT
title AS "Product title", -- Note the double quotes, single quotes won't work
category AS "Product category"
FROM
products;
نامهای مستعار SQL نامهای موقت برای مقادیر در یک پرسوجو هستند. نامهای مستعار هیچ تأثیری روی پایگاه داده زیرین ندارند؛ نامهای مستعار فقط در خود پرسوجو وجود دارند. معمولاً از نامهای مستعار برای:
- بهبود خوانایی استفاده میکنید.
- نامگذاری عبارات ستون (مثلاً
CONCAT(first_name, ' ', last_name) AS "Full name"). - نامگذاری عبارات جدول مشترک (CTE را ببینید).
- خود join کردن جداول.
حروف بزرگ و کوچک SQL معمولاً مهم نیست، به جز نامهای مستعار
استفاده از حروف بزرگ برای کلمات رزرو شده SQL یک قرارداد است که قبل از برجستهسازی نحو وجود داشته، اما حروف بزرگ و کوچک برای کلمات رزرو شده یا نام ستونها مهم نیست. این پرسوجو هم کار میکند:
SeLeCt
*
FrOM
PROdUCTS;
اما، میدانید: نکنید. پرسوجوهایی بنویسید که مشتریان (از جمله خودتان شش ماه بعد) بتوانند بخوانند. پس، همه حروف بزرگ یا نه (SELECT یا select)، سازگار باشید.
حروف بزرگ و کوچک برای نامهای مستعار اعمال میشود، پس مطمئن شوید نامهای مستعار حرف به حرف مطابقت دارند (با نامهای مستعار، "Example" همان "example" نیست).
SQL برای دریافت نمونهای از ردیفها
این فقط کار میکند اگر جدول شما یک ردیف ID با توزیع تصادفی داشته باشد. میتوانید از تابع MOD (مخفف modulo) برای نمونهگیری داده بر اساس IDها استفاده کنید:
SELECT
id,
title,
category
FROM
products
WHERE
-- For this to work, the table's ids must be sequential integers
MOD(id, 10) = 3;
که برمیگرداند:
| id | title | category |
|-----|-------------------------------|------------|
| 3 | Synergistic Granite Chair | Doohickey |
| 13 | Synergistic Steel Chair | Gizmo |
| 23 | Fantastic Aluminum Bottle | Widget |
و ردیفهای بیشتر، با هر ردیف دهم که ID آن به 3 ختم میشود. این چگونه کار میکند: اگر ID 23 بود، مثلاً، MOD(23, 10) 3 را برمیگرداند، چون 23 تقسیم بر 10 باقیمانده 3 میدهد، پس ردیف 23 در نتایج شامل میشود. این فقط تقسیم نتایج بر 10 است، پس اگر جدول ردیفهای زیادی دارد، میخواهید بزرگی مقسومعلیه را افزایش دهید: 100، 1000 و غیره.
این نکته بیشتر از نوع چیزهایی است که اشتها را برای آنچه در SQL ممکن است تحریک میکند. بعداً توابع SQL (مثل MOD) را به عمق پوشش خواهیم داد.