نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • ایمنی
  • دسترسی به SQL مفاهیم اساسی، واژگان و نحو

دسترسی به SQL مفاهیم اساسی، واژگان و نحو

هر توسعه دهنده وب برای نوشتن پرس و جوهای پایگاه داده باید SQL را بداند. و اگرچه phpMyAdmin لغو نشده است، اما اغلب برای نوشتن SQL سطح پایین لازم است که دستان خود را کثیف کنید.

به همین دلیل است که ما یک تور کوتاه از اصول اولیه SQL آماده کرده ایم. بیا شروع کنیم!

1. یک جدول ایجاد کنید

دستور CREATE TABLE برای ایجاد جداول استفاده می شود. آرگومان ها باید نام ستون ها و همچنین انواع داده های آنها باشد.

بیایید یک جدول ساده به نام ایجاد کنیم ماه. از 3 ستون تشکیل شده است:

  • شناسه- تعداد ماه در سال تقویمی (عدد صحیح).
  • نام– نام ماه (رشته، حداکثر 10 کاراکتر).
  • روزها– تعداد روزهای این ماه (عدد صحیح).

در اینجا پرس و جوی SQL مربوطه به نظر می رسد:

CREATE TABLE month (id int، name varchar(10)، days int)؛

همچنین، هنگام ایجاد جداول، توصیه می شود یک کلید اصلی برای یکی از ستون ها اضافه کنید. این سوابق را منحصر به فرد نگه می‌دارد و جستجوهای انتخابی را سرعت می‌بخشد. بگذارید در مورد ما نام ماه منحصر به فرد باشد (ستون نام)

ایجاد ماه های جدول (id int، نام varchar(10)، روز int، PRIMARY KEY (نام)).

تاریخ و زمان
نوع دادهشرح
تاریخمقادیر تاریخ
وقت قرارمقادیر تاریخ و زمان با دقت دقیقه
زمانارزش های زمانی

2. ردیف ها را درج کنید

حالا بیایید جدول خود را پر کنیم ماه هااطلاعات مفید. افزودن رکوردها به جدول از طریق عبارت INSERT انجام می شود. دو راه برای نوشتن این دستورالعمل وجود دارد.

راه اول این است که نام ستون هایی که داده ها در آن درج می شوند را مشخص نکنید، بلکه فقط مقادیر را مشخص کنید.

این نماد ساده، اما ناامن است، زیرا هیچ تضمینی وجود ندارد که با گسترش پروژه و ویرایش جدول، ستون‌ها به همان ترتیب قبلی باشند. یک روش امن تر (و در عین حال دست و پا گیرتر) برای نوشتن یک دستور INSERT مستلزم تعیین مقادیر و ترتیب ستون ها است:

در اینجا اولین مقدار در لیست است ارزش هایبا اولین نام ستون مشخص شده مطابقت دارد و غیره.

3. استخراج داده ها از جداول

وقتی می خواهیم داده ها را از پایگاه داده بازیابی کنیم، دستور SELECT بهترین دوست ماست. اغلب استفاده می شود، بنابراین لطفاً این بخش را با دقت بخوانید.

ساده ترین استفاده از دستور SELECT، عبارتی است که تمام ستون ها و سطرها را از یک جدول برمی گرداند (به عنوان مثال، جدولی به نام شخصیت ها):

انتخاب * از "شخصیت ها"

کاراکتر ستاره (*) به این معنی است که ما می خواهیم از تمام ستون ها داده بگیریم. از آنجایی که پایگاه داده های SQL معمولاً از بیش از یک جدول تشکیل شده است، کلمه کلیدی FROM و به دنبال آن یک فاصله و نام جدول مورد نیاز است.

گاهی اوقات ما نمی خواهیم داده هایی را از همه ستون های یک جدول دریافت کنیم. برای این کار به جای ستاره (*) باید نام ستون های مورد نظر را که با کاما از هم جدا شده اند بنویسیم.

SELECT ID، نام از ماه

همچنین در بسیاری از موارد می خواهیم نتایج به ترتیب خاصی مرتب شوند. در SQL، این کار را با ORDER BY انجام می دهیم. می‌تواند از یک اصلاح‌کننده اختیاری استفاده کند - ASC (پیش‌فرض) برای مرتب‌سازی به ترتیب صعودی یا DESC برای مرتب‌سازی به ترتیب نزولی:

شناسه انتخاب کنید، نام از ماه ترتیب بر اساس نام DESC

هنگام استفاده از ORDER BY، مطمئن شوید که آخرین آن در عبارت SELECT باشد. در غیر این صورت پیغام خطا صادر خواهد شد.

4. فیلتر کردن داده ها

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

در این کوئری فقط آن ماه ها را از جدول انتخاب می کنیم ماهکه بیشتر از 30 روز با استفاده از عملگر بزرگتر از (>) هستند.

SELECT ID، نام از ماه WHERE روز > 30

5. فیلتر پیشرفته داده ها. عملگرهای AND و OR

قبلاً داده ها را با استفاده از یک معیار فیلتر می کردیم. برای فیلتر کردن داده های پیچیده تر، می توانید از عملگرهای AND و OR و عملگرهای مقایسه (=<,>,<=,>=,<>).

در اینجا جدولی داریم که شامل چهار آلبوم پرفروش تمام دوران است. بیایید آنهایی را انتخاب کنیم که به عنوان راک طبقه بندی می شوند و کمتر از 50 میلیون نسخه فروخته شده اند. با قرار دادن عملگر AND بین این دو شرط به راحتی می توان این کار را انجام داد.


انتخاب * از آلبوم ها ژانر WHERE = "راک" و فروش در میلیون ها<= 50 ORDER BY released

6. In/Between/Like

WHERE همچنین از چندین دستور خاص پشتیبانی می کند و به شما امکان می دهد تا به سرعت رایج ترین پرس و جوها را بررسی کنید. اینجا اند:

  • IN - برای تعیین طیف وسیعی از شرایط استفاده می شود که هر یک از آنها را می توان برآورده کرد
  • BETWEEN - بررسی می کند که آیا مقدار در محدوده مشخص شده است
  • LIKE - الگوهای خاصی را جستجو می کند

مثلاً اگر بخواهیم آلبوم هایی را با ترکیدنو روحموسیقی، ما می توانیم از IN ("value1"، "value2") استفاده کنیم.

انتخاب * از آلبوم های سبک WHERE IN ("پاپ"، "روح").

اگر بخواهیم تمام آلبوم های منتشر شده بین سال های 1975 تا 1985 را دریافت کنیم، می نویسیم:

انتخاب * از آلبوم های WHERE که بین سال های 1975 و 1985 منتشر شد.

7. توابع

SQL پر از توابع است که انواع کارهای مفید را انجام می دهد. در اینجا برخی از متداول ترین آنها آورده شده است:

  • COUNT() - تعداد ردیف ها را برمی گرداند
  • SUM() - مجموع کل یک ستون عددی را برمی گرداند
  • AVG() - مقدار متوسط ​​را از مجموعه ای از مقادیر برمی گرداند
  • MIN() / MAX() - مقدار حداقل / حداکثر را از یک ستون دریافت می کند

برای دریافت آخرین سال در جدول خود، باید پرس و جوی SQL زیر را بنویسیم:

SELECT MAX (انتشار شده) از آلبوم ها.

8. سوالات فرعی

در پاراگراف قبل، نحوه انجام محاسبات ساده با داده ها را یاد گرفتیم. اگر بخواهیم از نتیجه این محاسبات استفاده کنیم، نمی توانیم بدون کوئری های تودرتو انجام دهیم. فرض کنید می خواهیم خروجی بگیریم هنرمند, آلبومو سال انتشاربرای قدیمی ترین آلبوم جدول

ما می دانیم که چگونه این ستون های خاص را بدست آوریم:

SELECT هنرمند، آلبوم، منتشر شده از آلبوم های FROM;

ما همچنین می دانیم که چگونه اولین سال را بدست آوریم:

SELECT MIN (انتشار شده) از آلبوم FROM.

اکنون تنها کاری که لازم است این است که دو پرس و جو را با WHERE ترکیب کنیم:

SELECT هنرمند، آلبوم، منتشر شده از آلبوم های WHERE منتشر شده = (SELECT MIN(released) FROM albums);

9. ادغام جداول

در پایگاه داده های پیچیده تر، چندین جدول وجود دارد که به یکدیگر مرتبط هستند. به عنوان مثال، در زیر دو جدول در مورد بازی های ویدیویی ( بازی های_ویدیویی) و توسعه دهندگان بازی های ویدیویی ( game_developers).


جدول بازی های_ویدیویییک ستون توسعه دهنده وجود دارد ( developer_id، اما شامل یک عدد صحیح است، نه نام توسعه دهنده. این شماره یک شناسه ( شناسه) از توسعه دهنده مربوطه از جدول توسعه دهندگان بازی ( game_developers) پیوند منطقی دو لیست، به ما امکان می دهد از اطلاعات ذخیره شده در هر دو به طور همزمان استفاده کنیم.

اگر بخواهیم پرس و جوی ایجاد کنیم که همه چیزهایی را که باید در مورد بازی ها بدانیم برمی گرداند، می توانیم از یک JOIN داخلی برای پیوند دادن ستون های هر دو جدول استفاده کنیم.

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

این ساده ترین و رایج ترین نوع JOIN است. چندین گزینه دیگر وجود دارد، اما آنها برای موارد کمتر مورد استفاده قرار می گیرند.

10. نام مستعار

اگر به مثال قبلی نگاه کنید، متوجه خواهید شد که دو ستون به نام وجود دارد نام. این گیج کننده است، بنابراین بیایید یک نام مستعار برای یکی از ستون های تکراری قرار دهیم، برای مثال، ناماز جدول game_developersفراخوانی خواهد شد توسعه دهنده.

همچنین می‌توانیم پرس و جو را با نام مستعار جدول کوتاه کنیم: بازی های_ویدیوییبیا زنگ بزنیم بازی ها, game_developers - توسعه دهندگان:

SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. به روز رسانی داده ها

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

  • جدول حاوی مقدار جایگزینی؛
  • نام ستون ها و مقادیر جدید آنها؛
  • ردیف‌هایی که با WHERE انتخاب شده‌اند و می‌خواهیم به‌روزرسانی شوند. اگر این کار انجام نشود، تمام ردیف‌های جدول تغییر می‌کنند.

در زیر جدول آمده است سریال تلویزیونیبا سریال هایی با امتیاز آنها. با این حال، یک خطای کوچک در جدول رخ داد: اگرچه سری بازی تاج و تختو به عنوان یک کمدی توصیف می شود، واقعا اینطور نیست. بیایید این را درست کنیم!

داده های جدول tv_series به روز رسانی tv_series SET ژانر = "درام" WHERE id = 2;

12. حذف داده ها

حذف یک ردیف جدول با SQL یک فرآیند بسیار ساده است. تنها کاری که باید انجام دهید این است که جدول و ردیفی را که می خواهید حذف کنید انتخاب کنید. بیایید آخرین ردیف جدول را از مثال قبلی حذف کنیم سریال تلویزیونی. این کار با استفاده از عبارت >DELETE انجام می شود.

DELETE FROM tv_series WHERE id = 4

هنگام نوشتن عبارت DELETE مراقب باشید و از وجود عبارت WHERE مطمئن شوید، در غیر این صورت تمام ردیف های جدول حذف می شوند!

13. حذف جدول

اگر می‌خواهیم تمام ردیف‌ها را حذف کنیم، اما خود جدول را ترک کنیم، از دستور TRUNCATE استفاده می‌کنیم:

TRUNCATE TABLE table_name;

در موردی که واقعاً می خواهیم هم داده ها و هم خود جدول را حذف کنیم، دستور DROP مفید خواهد بود:

DROP TABLE جدول_نام;

بسیار مراقب این دستورات باشید. آنها را نمی توان لغو کرد!/p>

این پایان آموزش SQL ما است! ما چیز زیادی را پوشش نداده‌ایم، اما آنچه از قبل می‌دانید باید به اندازه‌ای باشد که چند مهارت عملی در حرفه وب به شما بدهد.

چگونه می توانم از تعداد مدل های رایانه شخصی تولید شده توسط یک فروشنده خاص مطلع شوم؟ چگونه می توان میانگین قیمت کامپیوترهایی با مشخصات فنی مشابه را تعیین کرد؟ این و بسیاری از سوالات دیگر مربوط به برخی از اطلاعات آماری را می توان با کمک توابع خلاصه (جمع). استاندارد توابع کلی زیر را ارائه می دهد:

همه این توابع یک مقدار واحد را برمی‌گردانند. در عین حال، توابع COUNT، MINو حداکثردر حالی که برای هر نوع داده ای اعمال می شود جمعو AVGفقط برای فیلدهای عددی استفاده می شود. تفاوت بین عملکرد شمردن(*)و شمردن(<имя поля>) این است که دومی در هنگام محاسبه مقادیر NULL را در نظر نمی گیرد.

مثال. حداقل و حداکثر قیمت را برای رایانه های شخصی بیابید:

مثال. تعداد رایانه های موجود تولید شده توسط سازنده A را بیابید:

مثال. اگر ما به تعداد مدل های مختلف تولید شده توسط سازنده A علاقه مند هستیم، می توان پرس و جو را به صورت زیر فرموله کرد (با استفاده از این واقعیت که هر مدل یک بار در جدول Product ثبت شده است):

مثال. تعداد مدل های مختلف موجود تولید شده توسط سازنده A را بیابید. پرس و جو مشابه مورد قبلی است که در آن باید تعداد کل مدل های تولید شده توسط سازنده A مشخص شود. در اینجا باید تعداد مدل های مختلف را پیدا کنید. در جدول PC (یعنی موجود برای فروش).

به منظور حصول اطمینان از اینکه در هنگام بدست آوردن شاخص های آماری فقط از مقادیر منحصر به فرد استفاده می شود آرگومان تابع مجموعمی تواند به کار رود پارامتر DISTINCT. یکی دیگر پارامتر ALLپیش فرض است و انتظار دارد تمام مقادیر بازگشتی را در ستون شمارش کند. اپراتور،

اگر باید تعداد مدل های PC تولید شده توسط هر یکسازنده، شما باید استفاده کنید GROUP BY پیشنهاد، به صورت نحوی به دنبال بعد از بندهای WHERE.

GROUP BY پیشنهاد

GROUP BY پیشنهادبرای تعریف گروه هایی از خطوط خروجی که می توان روی آنها اعمال کرد استفاده می شود توابع انبوه (COUNT، MIN، MAX، AVG و SUM). اگر این بند وجود ندارد و از توابع جمع استفاده می شود، تمام ستون ها با نام های ذکر شده در انتخاب کنید، باید در آن گنجانده شود توابع کل، و این توابع برای کل مجموعه سطرهایی که گزاره پرس و جو را برآورده می کنند اعمال خواهند شد. در غیر این صورت، تمام ستون های لیست SELECT، شامل نمی شوددر توابع جمع، باید مشخص شود در بند GROUP BY. در نتیجه، تمام سطرهای خروجی پرس و جو به گروه هایی تقسیم می شوند که با ترکیب مقادیر مشابه در این ستون ها مشخص می شوند. پس از آن، توابع جمعی برای هر گروه اعمال می شود. توجه داشته باشید که برای GROUP BY، تمام مقادیر NULL برابر هستند، یعنی. هنگام گروه بندی توسط یک فیلد حاوی مقادیر NULL، همه این ردیف ها در یک گروه قرار می گیرند.
اگر اگر بند GROUP BY وجود داشته باشد، در بند SELECT بدون توابع مجموع، سپس پرس و جو به سادگی یک ردیف از هر گروه را برمی گرداند. این ویژگی به همراه کلمه کلیدی DISTINCT می تواند برای حذف ردیف های تکراری در یک مجموعه نتیجه استفاده شود.
یک مثال ساده را در نظر بگیرید:
مدل SELECT، COUNT(model) AS Qty_model، AVG(price) AS Avg_price
از کامپیوتر
GROUP BY مدل;

در این کوئری برای هر مدل رایانه شخصی تعداد و میانگین هزینه آنها مشخص می شود. همه سطرها با یک مدل (شماره مدل) یک گروه را تشکیل می دهند و خروجی SELECT تعداد مقادیر و میانگین قیمت ها را برای هر گروه محاسبه می کند. نتیجه پرس و جو جدول زیر خواهد بود:
مدل Qty_model میانگین_قیمت
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

اگر ستونی با تاریخ در SELECT وجود داشت، می توان این شاخص ها را برای هر تاریخ خاص محاسبه کرد. برای انجام این کار، باید تاریخ را به عنوان یک ستون گروه بندی اضافه کنید، و سپس توابع جمع برای هر ترکیبی از مقادیر (مدل-تاریخ) محاسبه می شود.

چندین خاص وجود دارد قوانین برای اجرای توابع جمع:

  • اگر در نتیجه درخواست هیچ ردیفی دریافت نشد(یا بیش از یک ردیف برای این گروه)، پس هیچ داده اولیه برای محاسبه هیچ یک از توابع جمع وجود ندارد. در این صورت نتیجه اجرای COUNT توابع صفر و نتیجه سایر توابع NULL خواهد بود.
  • بحث و جدلتابع کل خود نمی تواند شامل توابع جمع باشد(تابع از تابع). آن ها مثلاً در یک درخواست، دریافت حداکثر مقادیر متوسط ​​غیرممکن است.
  • نتیجه اجرای تابع COUNT می باشد عدد صحیح(INTEGER). سایر توابع انبوه، انواع داده های مقادیر پردازش شده را به ارث می برند.
  • اگر هنگام اجرای تابع SUM، نتیجه ای به دست آمد که از حداکثر مقدار نوع داده مورد استفاده فراتر رفت، خطا.

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

داشتن پیشنهاد

اگر بند WHEREسپس یک گزاره برای فیلتر رشته تعریف می کند بند داشتنکاربردی پس از گروه بندیبرای تعریف گروه های فیلتر گزاره مشابه با مقادیر توابع کل. این بند برای اعتبار سنجی مقادیری که با آنها به دست می آیند مورد نیاز است تابع کلنه از ردیف های جداگانه منبع رکورد تعریف شده در بند FROM، و از گروه هایی از این قبیل خطوط. بنابراین، چنین چکی را نمی توان در آن گنجاند بند WHERE.

نحو:

* جایی که فیلدها 1- فیلدهای انتخابی که با کاما جدا شده اند، همچنین می توانید تمام فیلدها را با * مشخص کنید. جدول- نام جدولی که داده ها را از آن بیرون می آوریم. شرایط- شرایط نمونه برداری؛ فیلدها 2- فیلد یا فیلدهایی که با کاما از هم جدا شده اند و بر اساس آنها مرتب می شود. شمردن- تعداد ردیف هایی که باید دانلود شوند.
* پرس و جو در پرانتز برای واکشی داده اختیاری است.

موارد استفاده ساده برای انتخاب

1. نمونه گیری داده های عادی:

> انتخاب * از کاربران

2. انتخاب داده با پیوستن به دو جدول (JOIN):

SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id

* در این مثال، داده ها با پیوستن به جداول انتخاب می شوند کاربرانو کاربران_حقوق. آنها بر اساس فیلدها گروه بندی می شوند. شناسه کاربر(در جدول users_rights) و شناسه(کاربران). فیلد نام از جدول اول و تمام فیلدها از جدول دوم بازیابی شده است.

3. نمونه برداری با فاصله زمانی و/یا تاریخ

الف) نقطه شروع و یک بازه زمانی مشخص مشخص است:

* داده های ساعت گذشته انتخاب خواهد شد (فیلد تاریخ).

ب) تاریخ شروع و پایان مشخص است:

25.10.2017 و 25.11.2017 .

ج) تاریخ شروع و پایان + زمان مشخص است:

* داده ها را انتخاب کنید 2018/03/25 0 ساعت 15 دقیقهو 2018/04/25 15 ساعت و 33 دقیقه و 9 ثانیه.

د) داده ها را برای یک ماه و سال خاص بیرون بکشید:

* استخراج داده ها در جایی که در این زمینه است تاریخمقادیری برای وجود دارد آوریل 2018از سال.

4. نمونه برداری از مقدار حداکثر، حداقل و میانگین:

> حداکثر (منطقه)، حداقل (منطقه)، میانگین (منطقه) از کشور را انتخاب کنید

* حداکثر- حداکثر مقدار؛ دقیقه- کمترین؛ میانگین- میانگین.

5. استفاده از طول رشته:

* این پرس و جو باید همه کاربرانی را که نام آنها از 5 کاراکتر تشکیل شده است را نشان دهد.

نمونه هایی از پرس و جوهای پیچیده تر یا به ندرت استفاده می شود

1. ادغام با گروه بندی داده های انتخاب شده در یک خط (GROUP_CONCAT):

* از جدول کاربرانواکشی داده ها بر اساس فیلد شناسه، همه آنها در یک خط قرار می گیرند، مقادیر از هم جدا می شوند کاما.

2. گروه بندی داده ها بر اساس دو یا چند فیلد:

> انتخاب * از کاربران گروه بر اساس CONCAT (عنوان، "::"، تولد)

* مجموع، در این مثال، داده ها را از جدول کاربران بارگیری می کنیم و آنها را بر اساس فیلدها گروه بندی می کنیم عنوانو تولد. قبل از گروه بندی، فیلدها را با جداکننده در یک خط ادغام می کنیم :: .

3. ترکیب نتایج از دو جدول (UNION):

> (انتخاب شناسه، فیو، آدرس، «کاربران» به عنوان کاربران از نوع FROM)
اتحاد. اتصال
(شناسه، فیو، آدرس، «مشتریان» را به عنوان مشتریان از نوع FROM انتخاب کنید)

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

4. نمونه ای از میانگین های گروه بندی شده برای هر ساعت:

میانگین (دما)، DATE_FORMAT (به‌روزرسانی تاریخ، «%Y-%m-%d %H») به‌عنوان ساعت_تاریخ از بایگانی GROUP BY DATE_FORMAT (به‌روزرسانی ساعت، «%Y-%m-%d %H»)

* در اینجا مقدار میانگین فیلد را استخراج می کنیم درجه حرارتاز جدول بایگانیو گروه به رشته به روز رسانی تاریخ(با تقسیم زمانی برای هر ساعت).

درج (INSERT)

نحو 1:

> INSERT INTO

() ارزش های ( )

نحو 2:

> INSERT INTO

ارزش های ( )

* جایی که جدول- نام جدولی که داده ها را در آن وارد می کنیم. زمینه های- شمارش فیلدهایی که با کاما از هم جدا شده اند.ارزش های- شمارش مقادیر جدا شده با کاما.
* گزینه اول به شما امکان می دهد فقط فیلدهای لیست شده را درج کنید - بقیه مقادیر پیش فرض را دریافت خواهند کرد. گزینه دوم برای همه فیلدها نیاز به درج دارد.

درج نمونه ها

1. چندین ردیف را با یک پرس و جو وارد کنید:

> درج در شهرها ("نام"، "کشور") VALUES ("مسکو"، "روسیه")، ("پاریس"، "فرانسه")، ("Funafuti"، "Tuvalu")؛

* در این مثال، 3 رکورد را با یک کوئری SQL اضافه می کنیم.

2. از جدول دیگری درج کنید (کپی ردیف ها، INSERT + SELECT):

* تمام رکوردها را از جدول استخراج کنید شهرها، که نام آنها با "M" شروع می شود و در جدول وارد می شود شهرها - جدید.

به روز رسانی (UPDATE)

نحو:

* جایی که جدول- نام جدول؛ رشته- فیلدی که مقدار آن را تغییر می دهیم. مقدار- ارزش جدید؛ شرایط- یک شرط (انجام به روز رسانی بدون آن خطرناک است - می توانید تمام داده ها را در کل جدول جایگزین کنید).

به روز رسانی با استفاده از جایگزینی (REPLACE):

به روز رسانی

تنظیم = جایگزین ( , "<что меняем>", "<на что>");

به روز رسانی شهرها SET name = REPLACE (نام، "Maskva"، "Moscow")؛

اگر بخواهیم ایمن بازی کنیم، ابتدا می‌توان نتیجه تعویض را با SELECT بررسی کرد:

حذف (DELETE)

نحو:

* جایی که جدول- نام جدول؛ شرایط- یک شرط (همانطور که در مورد به روز رسانی، استفاده از DELETE بدون شرط خطرناک است - DBMS تأیید نمی خواهد، بلکه به سادگی تمام داده ها را حذف می کند).

یک جدول ایجاد کنید

نحو:

> ایجاد جدول

( , )

> در صورت عدم وجود «حقوق_کاربر»، جدول ایجاد کنید (
«id» int(10) بدون امضا NOT NULL،
«user_id» int(10) بدون امضا NOT NULL،
"حقوق" int(10) بدون امضا NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

* جایی که جدول- نام جدول (در مثال کاربران_حقوق); فیلد1، فیلد2- نام فیلدها (در مثال، 3 فیلد ایجاد شده است - شناسه، شناسه کاربر، حقوق); گزینه 1، گزینه 2- پارامترهای میدان (در مثال int(10) بدون علامت NOT NULL); گزینه های جدول- پارامترهای کلی جدول (در مثال ENGINE=InnoDB DEFAULT CHARSET=utf8).

استفاده از Requests در PHP

اتصال به پایگاه داده:

mysql_connect("localhost"، "login"، "password") or die("خطای اتصال MySQL");
mysql_select_db("db_name");
mysql_query("SET NAMES "utf8"");

* جایی که اتصال به پایگاه داده در سرور محلی ( میزبان محلی) اعتبار اتصال - وارد شدنو کلمه عبور(به ترتیب، ورود و رمز عبور)؛ به عنوان پایه استفاده می شود db_name; رمزگذاری استفاده شده UTF-8.

همچنین می توانید یک اتصال دائمی ایجاد کنید:

mysql_pconnect("localhost"، "login"، "password") یا die("خطای اتصال MySQL");

*اما دسترسی به حداکثر مجاز میزبانی امکان پذیر است. این روش باید در سرورهای خودمان استفاده شود، جایی که خودمان می توانیم وضعیت را کنترل کنیم.

پایان اتصال:

* به طور خودکار در PHP انجام می شود، به جز اتصالات دائمی (mysql_pconnect).

پرس و جو برای MySQL (Mariadb) در PHP توسط تابع mysql_query() انجام می شود و واکشی داده ها از یک query توسط mysql_fetch_array():

$result = mysql_query("SELECT * FROM users");
در حالی که ($mass = mysql_fetch_array($result)) (
پژواک $ جرم . "
";
}

* در این مثال، یک پرس و جو روی جدول انجام شد کاربران. نتیجه پرس و جو در یک متغیر قرار می گیرد $نتیجه. چرخه زیر استفاده می شود در حالی که، که هر تکرار آن آرایه ای از داده ها را استخراج کرده و در یک متغیر قرار می دهد جرم دلار- در هر تکرار، ما با یک ردیف از پایگاه داده کار می کنیم.

تابع mysql_fetch_array() استفاده شده یک آرایه انجمنی را برمی‌گرداند که کار با آن راحت است، اما جایگزین دیگری وجود دارد - mysql_fetch_row()، که یک آرایه شماره‌دار منظم را برمی‌گرداند.

محافظ

اگر نیاز دارید که یک کاراکتر خاص را در رشته پرس و جو اضافه کنید، به عنوان مثال، %، باید از escaping با کاراکتر بک اسلش استفاده کنید - \

مثلا:

* اگر چنین پرس و جوی بدون فرار اجرا شود، علامت % به هر تعداد کاراکتر بعد از 100 تعبیر می شود.

همین. اگر برای درخواست کمک نیاز دارید، لطفاً به من ایمیل بزنید.

عبارات جدولپرس و جوی فرعی نامیده می شود که در جایی که جدول مورد انتظار است استفاده می شود. دو نوع عبارات جدول وجود دارد:

    جداول مشتق شده;

    عبارات جدول تعمیم یافته

این دو شکل از عبارات جدول در زیر بخش های زیر مورد بحث قرار می گیرند.

جداول مشتق شده

جدول مشتق شدهعبارت جدولی است که در عبارت FROM یک پرس و جو گنجانده شده است. جداول مشتق شده را می توان در زمانی استفاده کرد که استفاده از نام مستعار ستونی امکان پذیر نباشد زیرا مترجم SQL دستور دیگری را قبل از شناخته شدن نام مستعار پردازش می کند. مثال زیر تلاشی برای استفاده از نام مستعار ستونی را در شرایطی نشان می‌دهد که قبل از شناخته شدن نام مستعار، عبارت دیگری در حال پردازش است:

از SampleDb استفاده کنید. MONTH(EnterDate) را به عنوان enter_month از Works_on GROUP BY enter_month انتخاب کنید.

تلاش برای اجرای این کوئری پیغام خطای زیر را برمی‌گرداند:

پیام 207، سطح 16، وضعیت 1، خط 5 نام ستون نامعتبر "enter_month". (پیام 207: سطح 16، وضعیت 1، خط 5 نام ستون نامعتبر enter_month)

دلیل خطا این است که عبارت GROUP BY قبل از پردازش لیست مربوطه دستور SELECT پردازش می شود و نام مستعار ستون enter_month هنگام پردازش گروه مشخص نیست.

این مشکل را می توان با استفاده از نمایی که شامل پرس و جوی قبلی است (بدون عبارت GROUP BY) حل کرد، زیرا عبارت FROM قبل از عبارت GROUP BY اجرا می شود:

از SampleDb استفاده کنید. SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

نتیجه این پرس و جو به این صورت خواهد بود:

به طور معمول، یک عبارت جدول را می توان در هر جایی از عبارت SELECT قرار داد که نام جدول ممکن است ظاهر شود. (نتیجه یک عبارت جدول همیشه یک جدول یا در موارد خاص یک عبارت است.) مثال زیر استفاده از عبارت جدول را در لیست انتخاب دستور SELECT نشان می دهد:

نتیجه این پرس و جو این است:

عبارات جدول عمومی

بیان جدول مشترک (OTB) (به اختصار CTE)یک عبارت جدول نامگذاری شده است که توسط زبان Transact-SQL پشتیبانی می شود. عبارات جدول رایج در دو نوع پرس و جو استفاده می شود:

    غیر بازگشتی؛

    بازگشتی

این دو نوع درخواست در بخش های بعدی مورد بحث قرار می گیرند.

OTB و پرس و جوهای غیر بازگشتی

شکل غیر بازگشتی OTB می تواند به عنوان جایگزینی برای جداول و نماهای مشتق شده استفاده شود. معمولا OTB توسط با بندهاییو یک پرس و جو اضافی که به نام استفاده شده در عبارت WITH اشاره دارد. در Transact-SQL، معنای کلمه کلیدی WITH مبهم است. برای جلوگیری از ابهام، دستور قبل از عبارت WITH باید با نقطه ویرگول خاتمه یابد.

از AdventureWorks2012 استفاده کنید. SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue)Heder00RHE)FROM ")/2.5;

پرس و جو در این مثال سفارش هایی را انتخاب می کند که کل مالیات آنها (TotalDue) بیشتر از میانگین همه مالیات ها و حمل و نقل آنها بیشتر از 40٪ از میانگین مالیات است. ویژگی اصلی این کوئری حجیم بودن آن است، زیرا کوئری تودرتو باید دو بار نوشته شود. یکی از راه های ممکن برای کاهش دامنه ساختار پرس و جو ایجاد نمایه ای است که حاوی یک پرسش فرعی باشد. اما این راه حل تا حدودی مشکل است زیرا نیاز به ایجاد نمای و سپس حذف پس از اتمام پرس و جو دارد. بهترین رویکرد ایجاد یک OTB خواهد بود. مثال زیر استفاده از OTB غیر بازگشتی را نشان می دهد که تعریف پرس و جو در بالا را کوتاه می کند:

از AdventureWorks2012 استفاده کنید. WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHEREOrderHeader WHEREFree2_calDue>Free2_calMal year /2.5;

نحو عبارت WITH در پرس و جوهای غیر بازگشتی به شرح زیر است:

پارامتر cte_name نام OTB است که جدول به دست آمده را تعریف می کند و پارامتر column_list لیستی از ستون ها در عبارت جدول است. (در مثال بالا، OTB قیمت_calc نام دارد و دارای یک ستون، year_2005 است.) پارامتر inner_query یک عبارت SELECT را نشان می دهد که مجموعه نتایج عبارت جدول مربوطه را مشخص می کند. سپس عبارت جدول تعریف شده را می توان در outer_query استفاده کرد. (کوئری بیرونی در مثال بالا از OTB price_calc و ستون year_2005 آن برای ساده کردن پرس و جوی تو در تو استفاده می کند.)

OTB و پرس و جوهای بازگشتی

در این بخش مطالبی با پیچیدگی افزایش یافته ارائه می شود. بنابراین توصیه می‌شود وقتی برای اولین بار آن را می‌خوانید از آن صرفنظر کنید و بعداً به آن بازگردید. OTB ها می توانند بازگشتی باشند زیرا OTB ها می توانند ارجاعاتی به خودشان داشته باشند. نحو اصلی OTB برای یک پرس و جو بازگشتی به این صورت است:

پارامترهای cte_name و column_list همان معنایی را دارند که در OTB برای جستارهای غیر بازگشتی وجود دارد. بدنه بند WITH شامل دو عبارت است که توسط عبارت به هم می پیوندند اتحاد همه. اولین کوئری فقط یک بار فراخوانی می شود و شروع به جمع آوری نتیجه بازگشت می کند. عملوند اول عملگر UNION ALL به یک OTB اشاره نمی کند. به این پرس و جو کوئری یا منبع مرجع می گویند.

کوئری دوم حاوی پیوندی به OTB است و بخش بازگشتی آن را نشان می دهد. به همین دلیل به آن عضو بازگشتی می گویند. در اولین فراخوانی بخش بازگشتی، مرجع OTB نتیجه پرس و جوی مرجع را نشان می دهد. عضو بازگشتی از نتیجه اولین تماس با پرس و جو استفاده می کند. پس از آن، سیستم دوباره قسمت بازگشتی را فراخوانی می کند. تماس با یک عضو بازگشتی زمانی پایان می‌یابد که تماس قبلی با آن یک مجموعه نتیجه خالی را برمی‌گرداند.

عملگر UNION ALL به ردیف‌هایی که تا کنون انباشته شده‌اند و همچنین ردیف‌های اضافی اضافه شده توسط تماس فعلی به عضو بازگشتی می‌پیوندد. (وجود عملگر UNION ALL به این معنی است که ردیف های تکراری از نتیجه حذف نمی شوند.)

در نهایت، پارامتر outer_query کوئری بیرونی را تعریف می‌کند که OTB برای دریافت همه تماس‌ها به اتحادیه هر دو عضو استفاده می‌کند.

برای نشان دادن شکل بازگشتی OTB، از یک جدول Airplane استفاده می کنیم که با کد نشان داده شده در مثال زیر پر شده است:

از SampleDb استفاده کنید. CREATE TABLE هواپیما (ContainingAssembly VARCHAR(10)، ContainedAssembly VARCHAR(10)، QuantityContained INT، UnitCost DECIMAL(6،2)); INSERT INTO Airplane VALUES ("Airplane"، "Fuselage"، 1، 10); درج در مقادیر هواپیما ("Airplane"، "Wings"، 1، 11); INSERT INTO Airplane VALUES ("Airplane"، "Tail"، 1، 12); INSERT INTO VALUES هواپیما ("بدنه"، "سالن"، 1، 13)؛ INSERT INTO VALUES هواپیما ("بدنه"، "کاکپیت"، 1، 14)؛ INSERT INTO VALUES هواپیما ("بدنه"، "دماغه"، 1، 15)؛ INSERT INTO Airplane VALUES ("Salon", NULL, 1,13); INSERT INTO Airplane VALUES("Cabin", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nose", NULL, 1, 15); INSERT INTO VALUES هواپیما ("بال"، NULL، 2، 11); INSERT INTO Airplane VALUES("Tail", NULL, 1, 12);

جدول هواپیما چهار ستون دارد. ستون ContainingAssembly مجموعه را تعریف می کند و ستون ContainedAssembly قطعاتی را (یک به یک) که مجموعه مربوطه را تشکیل می دهند، تعریف می کند. شکل زیر یک تصویر گرافیکی از نوع احتمالی هواپیما و قطعات تشکیل دهنده آن را نشان می دهد:

جدول هواپیما از 11 ردیف زیر تشکیل شده است:

مثال زیر از عبارت WITH برای تعریف پرس و جوی استفاده می کند که هزینه کل هر ساخت را محاسبه می کند:

از SampleDb استفاده کنید. WITH list_of_parts (assembly1, quantity, cost) AS (انتخاب حاوی مونتاژ، مقدار موجود، UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly، a.Quantity*ContainedContained,A.Quantity*2Contained,AL) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part"، مقدار "Quantity"، هزینه "Price" FROM list_of_parts;

بند WITH یک لیست OTB به نام list_of_parts تعریف می کند که از سه ستون تشکیل شده است: assembly1، مقدار و هزینه. اولین دستور SELECT در مثال فقط یک بار برای ذخیره نتایج مرحله اول فرآیند بازگشت فراخوانی می شود. دستور SELECT در خط آخر مثال نتیجه زیر را نشان می دهد.

SQL برای بازیابی داده ها از پایگاه داده استفاده می شود. SQL یک زبان برنامه نویسی است که شباهت زیادی به زبان انگلیسی دارد اما برای برنامه های مدیریت پایگاه داده در نظر گرفته شده است. SQL در هر پرس و جو در Access استفاده می شود.

درک نحوه عملکرد SQL به شما کمک می کند تا پرس و جوهای دقیق تری ایجاد کنید و رفع پرس و جوهایی را که نتایج نادرست برمی گردند آسان تر می کند.

این مقاله بخشی از سری مقالات SQL for Access است. اصول استفاده از SQL برای بازیابی داده ها را شرح می دهد و نمونه هایی از نحو SQL را ارائه می دهد.

در این مقاله

SQL چیست؟

SQL یک زبان برنامه نویسی است که برای کار با مجموعه ای از حقایق و روابط بین آنها طراحی شده است. برنامه های پایگاه داده رابطه ای مانند Microsoft Office Access از SQL برای دستکاری داده ها استفاده می کنند. برخلاف بسیاری از زبان های برنامه نویسی، SQL حتی برای مبتدیان به راحتی قابل خواندن و درک است. مانند بسیاری از زبان های برنامه نویسی، SQL یک استاندارد بین المللی است که توسط کمیته های استاندارد مانند ISO و ANSI به رسمیت شناخته شده است.

مجموعه داده ها در SQL برای کمک به پاسخگویی به سوالات توضیح داده شده است. هنگام استفاده از SQL، باید از نحو صحیح استفاده شود. نحو مجموعه ای از قوانین است که اجازه می دهد عناصر یک زبان به درستی ترکیب شوند. نحو SQL بر اساس نحو انگلیسی است و بسیاری از عناصر را با نحو زبان Visual Basic for Applications (VBA) به اشتراک می گذارد.

به عنوان مثال، یک عبارت ساده SQL که لیستی از نام خانوادگی مخاطبین به نام مری را بازیابی می کند، ممکن است به شکل زیر باشد:

نام خانوادگی را انتخاب کنید
از مخاطبین
WHERE First_Name = "مریم";

توجه داشته باشید:زبان SQL نه تنها برای انجام عملیات روی داده ها، بلکه برای ایجاد و اصلاح ساختار اشیاء پایگاه داده مانند جداول نیز استفاده می شود. بخشی از SQL که برای ایجاد و تغییر اشیاء پایگاه داده استفاده می شود DDL نامیده می شود. DDL در این مقاله پوشش داده نشده است. برای اطلاعات بیشتر، به ایجاد و اصلاح جداول یا نمایه‌ها با استفاده از پرس و جوی تعریف داده مراجعه کنید.

عبارات را انتخاب کنید

دستور SELECT برای توصیف مجموعه ای از داده ها در SQL استفاده می شود. این شامل توضیحات کاملی از مجموعه داده هایی است که باید از پایگاه داده بازیابی شوند، از جمله موارد زیر:

    جداول حاوی داده ها؛

    پیوند بین داده ها از منابع مختلف؛

    فیلدها یا محاسباتی که بر اساس آن داده ها انتخاب می شوند.

    شرایط انتخابی که باید توسط داده های موجود در نتیجه پرس و جو برآورده شود.

    نیاز و روش مرتب سازی

عبارات SQL

یک دستور SQL از چندین بخش به نام clause تشکیل شده است. هر عبارت در دستور SQL یک هدف دارد. برخی از پیشنهادات اجباری است. جدول زیر متداول ترین عبارات SQL مورد استفاده را فهرست می کند.

بند SQL

شرح

اجباری

فیلدهایی را که حاوی داده های مورد نظر هستند تعریف می کند.

جداول حاوی فیلدهای مشخص شده در عبارت SELECT را تعریف می کند.

معیارهای انتخاب رشته را مشخص می کند که همه رکوردهای موجود در نتایج باید رعایت کنند.

ترتیب مرتب سازی نتایج را مشخص می کند.

در یک دستور SQL که حاوی توابع جمع است، فیلدهایی را مشخص می کند که هیچ مقدار خلاصه ای برای آنها در عبارت SELECT محاسبه نمی شود.

فقط در صورت وجود چنین زمینه هایی

در یک دستور SQL که حاوی توابع جمع است، شرایط اعمال شده برای فیلدهایی را که مقدار خلاصه برای آنها در عبارت SELECT محاسبه می شود، تعریف می کند.

شرایط SQL

هر جمله SQL از اصطلاحاتی تشکیل شده است که می توان آنها را با بخش هایی از گفتار مقایسه کرد. جدول زیر انواع اصطلاحات SQL را فهرست می کند.

اصطلاح SQL

بخش قابل مقایسه از گفتار

تعریف

مثال

مشخص کننده

اسم

نامی که برای شناسایی یک شی پایگاه داده استفاده می شود، مانند نام فیلد.

مشتریان.[PhoneNumber]

اپراتور

فعل یا قید

کلمه کلیدی که یک عمل را نشان می دهد یا آن را تغییر می دهد.

مقدار ثابت

اسم

مقداری که تغییر نمی کند، مانند عدد یا NULL.

اصطلاح

صفت

ترکیبی از شناسه ها، عملگرها، ثابت ها و توابع که به یک مقدار واحد ارزیابی می شود.

>= کالاها.[قیمت]

بندهای اصلی SQL: SELECT، FROM و WHERE

فرمت کلی دستورات SQL به صورت زیر است:

فیلد_1 را انتخاب کنید
از جدول_1
معیار WHERE_1
;

یادداشت:

    Access به شکست خط در دستور SQL احترام نمی گذارد. با وجود این، توصیه می شود که هر جمله را در یک خط جدید شروع کنید تا دستور SQL هم برای شخصی که آن را نوشته و هم برای بقیه قابل خواندن باشد.

    هر دستور SELECT با یک نقطه ویرگول (;) به پایان می رسد. نقطه ویرگول می تواند در انتهای جمله آخر یا در یک خط جداگانه در انتهای دستور SQL باشد.

مثال در Access

مثال زیر نشان می دهد که یک عبارت SQL در Access برای یک پرس و جو انتخاب ساده چگونه می تواند باشد.

1. بند SELECT

2. بند FROM

3. بند WHERE

بیایید مثال را با جملات تقسیم کنیم تا بفهمیم نحو SQL چگونه کار می کند.

بند SELECT

انتخاب، شرکت

این یک بند SELECT است. این شامل یک عبارت (SELECT) و به دنبال آن دو شناسه ("[Email address]" و "Company") است.

اگر شناسه دارای فاصله یا کاراکترهای خاص باشد (مثلاً «آدرس ایمیل»)، باید در پرانتز قرار گیرد.

در بند SELECT، نیازی به تعیین جداول حاوی فیلدها نیست و نمی‌توانید شرایط انتخابی را که داده‌ها باید داشته باشند تا در نتایج لحاظ شود، تعیین کنید.

در دستور SELECT، عبارت SELECT همیشه قبل از عبارت FROM قرار می گیرد.

بند FROM

از مخاطبین

این بند FROM است. این شامل یک عبارت (FROM) و به دنبال آن یک شناسه (Contacts) است.

عبارت FROM فیلدهایی را برای انتخاب مشخص نمی کند.

بند WHERE

WHERE City = سیاتل

این بند WHERE است. این شامل یک عملگر (WHERE) به دنبال یک عبارت (City="Rostov") است.

شما می توانید بسیاری از کارها را با بندهای SELECT، FROM و WHERE انجام دهید. برای اطلاعات بیشتر در مورد نحوه استفاده از این پیشنهادات، به مقالات زیر مراجعه کنید:

مرتب سازی نتایج: ORDER BY

مانند مایکروسافت اکسل، اکسس به شما اجازه می دهد تا نتایج یک پرس و جو را در یک جدول مرتب کنید. با استفاده از عبارت ORDER BY، می‌توانید نحوه مرتب‌سازی نتایج را هنگام اجرای پرس و جو نیز مشخص کنید. اگر از عبارت ORDER BY استفاده می شود، باید در انتهای دستور SQL باشد.

عبارت ORDER BY حاوی لیستی از فیلدها برای مرتب سازی است، به همان ترتیبی که مرتب سازی اعمال خواهد شد.

به عنوان مثال، فرض کنید می خواهید نتایج را ابتدا بر اساس فیلد Company به ترتیب نزولی مرتب کنید و سپس اگر رکوردهایی با همان مقدار فیلد Company وجود دارد، آنها را بر اساس فیلد آدرس ایمیل به ترتیب صعودی مرتب کنید. بند ORDER BY به شکل زیر است:

سفارش توسط DESC شرکت،

توجه داشته باشید:به طور پیش فرض، Access مقادیر را به ترتیب صعودی (A تا Z، کوچکترین به بزرگ) مرتب می کند. برای مرتب کردن مقادیر به ترتیب نزولی، باید کلمه کلیدی DESC را مشخص کنید.

برای اطلاعات بیشتر در مورد ORDER BY clause، ORDER BY clause را ببینید.

کار با داده های خلاصه: GROUP BY و HAVING clauses

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

توانایی استفاده از یک تابع تجمعی خاص به نوع داده در فیلد و عبارت مورد نظر بستگی دارد. برای اطلاعات بیشتر در مورد توابع انبوه موجود، به مقاله SQL Aggregate Functions مراجعه کنید.

تعیین فیلدهایی که در یک تابع جمع استفاده نمی شوند: عبارت GROUP BY

هنگام استفاده از توابع جمع، معمولاً باید یک بند GROUP BY ایجاد کنید. عبارت GROUP BY تمام فیلدهایی را که تابع تجمیع در آنها اعمال نمی شود مشخص می کند. اگر توابع انبوه برای همه فیلدهای یک پرس و جو اعمال می شود، نیازی به ایجاد بند GROUP BY ندارید.

اگر بند WHERE وجود نداشته باشد، بند GROUP BY باید بلافاصله از بند WHERE یا FROM پیروی کند. در بند GROUP BY، فیلدها به همان ترتیبی که در عبارت SELECT مشخص شده است.

بیایید مثال قبلی را ادامه دهیم. اگر عبارت SELECT فقط تابع مجموع را در فیلد [آدرس ایمیل] اعمال کند، بند GROUP BY به شکل زیر خواهد بود:

گروه بر اساس شرکت

برای اطلاعات بیشتر در مورد بند GROUP BY، به بند GROUP BY مراجعه کنید.

محدود کردن مقادیر تجمعی با شرایط گروه بندی: عبارت HAVING

اگر می‌خواهید شرایطی را برای محدود کردن نتایج مشخص کنید، اما فیلدی که می‌خواهید آن‌ها را اعمال کنید در یک تابع جمع استفاده می‌شود، نمی‌توانید از عبارت WHERE استفاده کنید. به جای آن باید از عبارت HAVING استفاده شود. عبارت HAVING مانند عبارت WHERE کار می کند اما برای داده های انبوه استفاده می شود.

برای مثال، فرض کنید که تابع AVG (که مقدار میانگین را محاسبه می‌کند) به اولین فیلد در عبارت SELECT اعمال می‌شود:

SELECT COUNT()، شرکت

اگر می خواهید نتایج پرس و جو را بر اساس مقدار تابع COUNT محدود کنید، نمی توانید یک شرط فیلتر را برای این قسمت در عبارت WHERE اعمال کنید. در عوض، شرط باید در یک بند HAVING قرار گیرد. برای مثال، اگر می‌خواهید پرس و جو فقط در صورتی که شرکت دارای چندین آدرس ایمیل باشد، ردیف‌ها را برگرداند، می‌توانید از عبارت HAVING زیر استفاده کنید:

داشتن COUNT()>1

توجه داشته باشید:یک پرس و جو می تواند شامل یک بند WHERE و یک عبارت HAVING باشد، با معیارهای فیلدهایی که در توابع انبوه مشخص شده در عبارت WHERE استفاده نمی شوند، و شرایط برای فیلدهایی که در توابع انبوه استفاده می شوند در عبارت HAVING مشخص شده اند. .

برای اطلاعات بیشتر در مورد بند HAVING، به بند HAVING مراجعه کنید.

ترکیب نتایج پرس و جو: اپراتور UNION

عملگر UNION برای مشاهده همزمان تمام داده های بازگردانده شده توسط چندین پرس و جو انتخابی مشابه به عنوان یک مجموعه ترکیبی استفاده می شود.

عملگر UNION به شما امکان می دهد دو عبارت SELECT را در یک عبارت ترکیب کنید. دستورات ترکیبی SELECT باید دارای تعداد و ترتیب فیلدهای خروجی با انواع داده های یکسان یا سازگار باشند. هنگامی که یک پرس و جو اجرا می شود، داده های هر مجموعه از فیلدهای منطبق در یک فیلد خروجی واحد ترکیب می شود، بنابراین خروجی پرس و جو به تعداد هر عبارت SELECT به صورت جداگانه دارای فیلدهایی است.

توجه داشته باشید:در کوئری های اتحادیه، انواع داده های عددی و متنی با هم سازگار هستند.

با استفاده از عملگر UNION، می توانید تعیین کنید که آیا ردیف های تکراری، در صورت وجود، باید در نتایج پرس و جو گنجانده شوند یا خیر. برای این کار از کلمه کلیدی ALL استفاده کنید.

یک پرس و جو برای پیوستن به دو عبارت SELECT دارای نحو اصلی زیر است:

فیلد_1 را انتخاب کنید
از جدول_1
اتحاد. اتصال
فیلد_a را انتخاب کنید
از جدول_a
;

مثلاً فرض کنید دو جدول به نام‌های «محصولات» و «خدمات» وجود دارد. هر دو جدول شامل فیلدهایی با نام محصول یا خدمات، قیمت و اطلاعات گارانتی و همچنین فیلدی است که انحصاری بودن محصول یا خدمات ارائه شده را نشان می دهد. اگرچه جداول محصولات و خدمات دارای انواع مختلفی از ضمانت‌ها هستند، اما اطلاعات اولیه یکسان است (اینکه آیا ضمانت کیفیت برای محصولات یا خدمات جداگانه ارائه شده است). برای پیوستن چهار فیلد از دو جدول، می توانید از جوین کوئری زیر استفاده کنید:

نام، قیمت، گارانتی_موجود، پیشنهاد_انحصاری را انتخاب کنید
از محصولات
اتحاد همه
نام، قیمت، تضمین_موجود، پیشنهاد_انحصاری را انتخاب کنید
از خدمات
;

برای اطلاعات بیشتر در مورد ترکیب دستورات SELECT با استفاده از عملگر UNION، به مقاله مراجعه کنید

برترین مقالات مرتبط