جدول، SELECT و FROM
ساختار یک جدول را بشناسی و با SELECT و FROM ستونهای دلخواه را از یک جدول بخوانی.
12 دقیقه مطالعه · 5 سؤال تمرینی · SQL از صفر: پرسوجو برای تحلیل داده
پایگاه دادهی رابطهای و SQL
دادههای بیشتر برنامهها (فروشگاه، بانک، دانشگاه) در پایگاه دادهی رابطهای نگهداری میشود: مجموعهای از جدولها. هر جدول از ستونها (نوع اطلاعات، مثل name) و ردیفها (هر رکورد، مثل یک مشتری) ساخته شده است.
SQL (Structured Query Language) زبان استاندارد پرسیدن از این جدولهاست. SQL توصیفی است: شما میگویید چه چیزی میخواهید، نه چطور پیدا شود؛ انتخاب راه سریع با خود پایگاه داده است.
در همهی درسهای این دوره با یک فروشگاه کوچک کار میکنیم. چهار جدول داریم (قیمتها به هزار تومان):
customers (مشتریها)
| id | name | city | joined_at | |---|---|---|---| | 1 | Sara | Tehran | 2025-01-10 | | 2 | Ali | Tehran | 2025-02-03 | | 3 | Maryam | Shiraz | 2025-02-20 | | 4 | Reza | Isfahan | 2025-03-05 | | 5 | Negar | Tehran | 2025-03-18 | | 6 | Pouya | NULL | 2025-04-01 |
products (کالاها)
| id | name | category | price | |---|---|---|---| | 1 | Notebook | stationery | 40 | | 2 | Pen | stationery | 10 | | 3 | Backpack | bags | 300 | | 4 | Lamp | home | 150 | | 5 | Headphones | electronics | 500 | | 6 | Mouse | electronics | 200 |
orders (سفارشها)
| id | customer_id | order_date | status | |---|---|---|---| | 101 | 1 | 2025-04-02 | paid | | 102 | 1 | 2025-04-20 | paid | | 103 | 2 | 2025-04-05 | paid | | 104 | 3 | 2025-04-11 | cancelled | | 105 | 3 | 2025-05-01 | paid | | 106 | 5 | 2025-05-03 | paid | | 107 | 1 | 2025-05-10 | paid | | 108 | 2 | 2025-05-12 | cancelled |
order_items (اقلام هر سفارش)
| order_id | product_id | quantity | |---|---|---| | 101 | 1 | 2 | | 101 | 2 | 5 | | 102 | 5 | 1 | | 103 | 3 | 1 | | 103 | 2 | 3 | | 104 | 4 | 2 | | 105 | 6 | 1 | | 105 | 1 | 1 | | 106 | 3 | 2 | | 107 | 4 | 1 | | 107 | 6 | 2 | | 108 | 5 | 1 |
شهر مشتری شمارهی ۶ را نمیدانیم، پس در ستون city مقدار NULL (یعنی «نامعلوم») دارد. این NULL در چند درس بعد مهم میشود.
SELECT و FROM
سادهترین پرسوجو دو بخش دارد: کدام ستونها (SELECT) از کدام جدول (FROM):
SELECT name, city
FROM customers;
نتیجه خودش یک جدول است: همان دو ستون برای هر شش مشتری. چند نکتهی پایه:
SELECT *یعنی «همهی ستونها». برای نگاه سریع خوب است، ولی در کد واقعی بهتر است ستونها را اسم ببرید (سریعتر است و با تغییر جدول خراب نمیشود).- با
ASمیتوان به ستون نتیجه نام مستعار داد:SELECT name AS customer_name ... - در
SELECTمیتوان محاسبه هم کرد:SELECT name, price * 1.1 AS price_with_tax FROM products; SELECT DISTINCTردیفهای تکراری را حذف میکند.- کلمههای کلیدی (
SELECT،FROM) به بزرگی و کوچکی حروف حساس نیستند و هر دستور با;تمام میشود.