ایجاد پرس و جو در سرور sql. پرس و جو در اکسس

کوئری ها در اکسس ابزار اصلی برای انتخاب، به روز رسانی و پردازش داده ها در جداول پایگاه داده هستند. Access، مطابق با مفهوم پایگاه های داده رابطه ای، از زبان پرس و جو ساختاریافته (SQL) برای اجرای پرس و جوها استفاده می کند. با کمک دستورات SQL، هر پرس و جو در Access پیاده سازی می شود.

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

چندین نوع پرس و جو را می توان در Access ایجاد کرد:

  • نمونه درخواست- داده ها را از یک جدول یا پرس و جو یا چندین جدول مرتبط و سایر پرس و جوها انتخاب می کند. نتیجه جدولی است که تا زمانی که پرس و جو بسته نشود وجود دارد. تشکیل رکوردهای جدول نتایج مطابق با شرایط انتخاب مشخص شده و هنگام استفاده از چندین جدول با ترکیب رکوردهای آنها انجام می شود.
  • پرس و جو برای ایجاد جدول- داده ها را از جداول مرتبط و سایر پرس و جوها انتخاب می کند، اما برخلاف یک پرس و جو انتخابی، نتیجه را در یک جدول دائمی جدید ذخیره می کند.
  • درخواست به روز رسانی، افزودن، حذف- درخواست های عملی هستند که در نتیجه داده های جداول تغییر می کنند.

پرس و جوها در Access در حالت طراحی حاوی یک طرح داده است که جداول استفاده شده را نمایش می دهد و یک فرم پرس و جو که در آن ساختار جدول پرس و جو و شرایط انتخاب رکوردها ساخته شده است (شکل 4.1).

با استفاده از یک پرس و جو، می توانید انواع زیر پردازش داده را انجام دهید:

  • شامل فیلدهای جدول انتخاب شده توسط کاربر در جدول پرس و جو.
  • انجام محاسبات در هر یک از سوابق دریافتی؛
  • انتخاب رکوردهایی که شرایط انتخاب را دارند.
  • تشکیل یک جدول مجازی جدید بر اساس اتحاد رکوردهای جداول مرتبط.
  • رکوردهای گروهی که مقادیر یکسانی در یک یا چند فیلد دارند، به طور همزمان توابع آماری را در سایر فیلدهای گروه انجام می دهند و برای هر گروه یک رکورد را در نتیجه می گنجانند.
  • ایجاد یک جدول پایگاه داده جدید با استفاده از داده های جداول موجود.
  • به روز رسانی فیلدها در زیر مجموعه انتخاب شده از رکوردها.
  • حذف زیرمجموعه رکوردهای انتخاب شده از جدول پایگاه داده.
  • زیر مجموعه رکوردهای انتخاب شده را به جدول دیگری اضافه کنید.

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

پرس و جوها بدون نقل قول فرار نوشته می شوند، زیرا MySQL, MS SQLو PostGreeآنها متفاوتند.

پرس و جوی SQL: دریافت فیلدهای مشخص شده (الزامی) از جدول

SELECT ID، country_title، count_people FROM table_name

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

SELECT * FROM table_name

* تمام فیلدها را نشان می دهد. یعنی نمایش هایی وجود خواهد داشت همه چيزفیلدهای داده

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

کشور_عنوان متمایز از نام جدول_نام را انتخاب کنید

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

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

SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000

ما لیستی از رکوردها را دریافت می کنیم: کشورهایی که تعداد افراد آنها بیش از 100،000،000 است.

پرس و جو SQL: نمایش رکوردها از یک جدول با سفارش

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

ما لیستی از رکوردها را دریافت می کنیم: شهرها به ترتیب حروف الفبا. A در ابتدا، Z در پایان.

شناسه، city_title از نام جدول را انتخاب کنید. ORDER BY city_title DESC

ما لیستی از رکوردها را دریافت می کنیم: شهرها برعکس ( DESC) خوبه. در ابتدا من، در پایان A.

پرس و جوی SQL: شمارش تعداد رکوردها

COUNT(*) را از جدول_نام انتخاب کنید

تعداد (تعداد) رکوردهای جدول را بدست می آوریم. در این مورد، هیچ لیستی از ورودی ها وجود ندارد.

SQL query: نمایش محدوده مورد نظر از رکوردها

SELECT * FROM table_name LIMIT 2, 3

ما 2 رکورد (دوم) و 3 (سوم) از جدول بدست می آوریم. پرس و جو هنگام ایجاد ناوبری در صفحات وب مفید است.

پرس و جوهای SQL با شرایط

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

پرس و جوی SQL: و ساخت (AND)

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

دریافت لیست رکوردها: شهرهای روسیه وبه نفت دسترسی داشته باشند. چه زمانی از اپراتور استفاده می شود؟ و، پس هر دو شرط باید مطابقت داشته باشند.

پرس و جوی SQL: ساخت یا ساز (OR)

SELECT ID, city_title FROM table_name WHERE country="Russia" OR country="USA"

لیستی از رکوردها را دریافت کنید: همه شهرها از روسیه یاایالات متحده آمریکا. چه زمانی از اپراتور استفاده می شود؟ یا، پس حداقل یک شرط باید مطابقت داشته باشد.

پرس و جوی SQL: AND NOT construct (AND NOT)

شناسه انتخاب کنید، user_login FROM table_name WHERE country="Russia" و NOT count_comments<7

دریافت لیستی از سوابق: همه کاربران از روسیه وساخته شده است نه کمتر 7 نظر.

پرس و جوی SQL: در ساختار (B)

SELECT ID، user_login FROM table_name WHERE country IN ("روسیه"، "بلغارستان"، "چین")

ما لیستی از سوابق دریافت می کنیم: همه کاربرانی که در ( که در) (روسیه یا بلغارستان یا چین)

پرس و جوی SQL: ساختار NOT IN (NOT IN)

شناسه انتخاب کنید، user_login FROM table_name WHERE country NOT IN ("روسیه"، "چین")

ما لیستی از سوابق دریافت می کنیم: همه کاربرانی که در ( نه در) (روسیه یا چین).

پرس و جوی SQL: ساختار NULL است (مقادیر خالی یا خالی نیست)

شناسه انتخاب کنید، user_login FROM table_name WHERE status IS NULL

ما لیستی از رکوردها را دریافت می کنیم: همه کاربرانی که وضعیت آنها تعریف نشده است. NULL یک موضوع جداگانه است و بنابراین به طور جداگانه بررسی می شود.

شناسه انتخاب کنید، user_login از نام جدول_جایی که حالت تهی نیست

ما لیستی از رکوردها را دریافت می کنیم: همه کاربرانی که وضعیت آنها تعریف شده است (نه صفر).

پرس و جوی SQL: ساختار LIKE

شناسه، user_login را از جدول_نام انتخاب کنید، جایی که نام خانوادگی مانند "جان%"

ما لیستی از رکوردها را دریافت می کنیم: کاربرانی که نام خانوادگی آنها با ترکیب "ایوان" شروع می شود. علامت % به معنای هر تعداد از هر کاراکتر است. برای پیدا کردن علامت %، باید از علامت فرار «Ivan\%» استفاده کنید.

پرس و جو SQL: BETWEEN construct

SELECT ID, user_login از جدول_نام WHERE حقوق بین 25000 و 50000

ما لیستی از سوابق دریافت می کنیم: کاربرانی که از 25000 تا 50000 حقوق دریافت می کنند.

عملگرهای منطقی بسیار زیادی وجود دارد، بنابراین مستندات سرور SQL را با جزئیات مطالعه کنید.

پرس و جوهای پیچیده SQL

پرس و جوی SQL: به پرس و جوهای متعدد بپیوندید

(شناسه SELECT، user_login FROM table_name1) UNION (شناسه SELECT، user_login FROM table_name2)

ما لیستی از ورودی ها را دریافت می کنیم: کاربرانی که در سیستم ثبت نام کرده اند و همچنین کاربرانی که به طور جداگانه در انجمن ثبت نام کرده اند. اپراتور UNION می تواند چندین پرس و جو را ترکیب کند. UNION مانند SELECT DISTINCT عمل می کند، یعنی مقادیر تکراری را کنار می گذارد. برای به دست آوردن کاملاً تمام رکوردها، باید از عملگر UNION ALL استفاده کنید.

پرسش SQL: محاسبه مقادیر فیلد MAX، MIN، SUM، AVG، COUNT

خروجی یک، حداکثر مقدار شمارنده در جدول:

SELECT MAX(counter) FROM table_name

خروجی یک، حداقل مقدار شمارنده در جدول:

MIN(counter) FROM table_name را انتخاب کنید

نمایش مجموع تمام مقادیر شمارنده در جدول:

SUM(counter) FROM table_name را انتخاب کنید

نمایش مقدار میانگین شمارنده در جدول:

AVG(counter) FROM table_name را انتخاب کنید

نمایش تعداد شمارنده ها در جدول:

COUNT(counter) FROM table_name را انتخاب کنید

نتیجه گیری تعداد کنتور در مغازه شماره 1 در جدول:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop #1"

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

پرس و جو SQL: سوابق گروه بندی

SELECT قاره، SUM(country_area) FROM کشور GROUP BY قاره

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

پرس و جو SQL: استفاده از چندین جدول از طریق نام مستعار (نام مستعار)

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, مشتری AS با WHERE o.custno=c.custno AND c.city="تیومن"

ما لیستی از سوابق دریافت می کنیم: سفارشات از خریدارانی که فقط در تیومن زندگی می کنند.

در واقع، با طراحی مناسب پایگاه داده از این نوع، پرس و جو بیشترین فراوانی را دارد، بنابراین MySQL یک عملگر ویژه را معرفی کرد که چندین برابر سریعتر از کد نوشته شده در بالا کار می کند.

o.order_no، o.amount_paid، z.company از سفارشات AS o LEFT JOIN مشتری AS z ON (z.custno=o.custno) را انتخاب کنید

سوالات فرعی تو در تو

SELECT * FROM table_name WHERE salary=(انتخاب حداکثر (حقوق) از کارمند)

ما یک رکورد دریافت می کنیم: اطلاعات در مورد کاربر با حداکثر حقوق.

توجه!سوالات فرعی تو در تو یکی از گلوگاه های سرورهای SQL هستند. آنها همراه با انعطاف پذیری و قدرت خود، بار روی سرور را نیز به میزان قابل توجهی افزایش می دهند. که منجر به کندی فاجعه بار برای سایر کاربران می شود. موارد بسیار مکرری از تماس های بازگشتی با پرس و جوهای تودرتو وجود دارد. بنابراین، من اکیداً توصیه می‌کنم از کوئری‌های تودرتو استفاده نکنید، بلکه آنها را به موارد کوچک‌تر تقسیم کنید. یا از ترکیب LEFT JOIN که در بالا توضیح داده شد استفاده کنید. علاوه بر این نوع درخواست ها، آنها کانون افزایش نقض امنیت هستند. اگر تصمیم به استفاده از زیرپرس و جوهای تو در تو دارید، باید آنها را با دقت طراحی کنید و اجراهای اولیه را روی کپی های پایگاه داده (پایگاه های داده آزمایشی) انجام دهید.

پرس و جوهای SQL داده ها را تغییر می دهد

پرس و جوی SQL: INSERT

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

گزینه شماره 1. دستورالعمل اغلب استفاده می شود:

INSERT INTO table_name (id، user_login) VALUES (1، "ivanov")، (2، "petrov")

در جدول " جدول_نام» 2 (دو) کاربر را همزمان وارد می کند.

گزینه شماره 2. استفاده از سبک راحت تر است:

INSERT table_name SET id=1, user_login="ivanov"; INSERT table_name SET id=2, user_login="petrov";

این مزایا و معایب خود را دارد.

معایب اصلی:

  • بسیاری از پرس و جوهای کوچک SQL کمی کندتر از یک پرس و جوی بزرگ SQL هستند، اما سایر پرس و جوها برای سرویس در صف قرار می گیرند. یعنی اگر یک پرس و جوی بزرگ SQL به مدت 30 دقیقه اجرا شود، در تمام این مدت بقیه پرس و جوها بامبو دود می کنند و منتظر نوبت خود می مانند.
  • درخواست نسبت به نسخه قبلی گسترده تر است.

مزایای اصلی:

  • در طول پرس و جوهای کوچک SQL، سایر پرس و جوهای SQL مسدود نمی شوند.
  • سهولت در خواندن.
  • انعطاف پذیری. در این گزینه نمی توانید ساختار را دنبال کنید، بلکه فقط داده های لازم را اضافه کنید.
  • هنگام ایجاد بایگانی به این روش، می توانید به راحتی یک خط را کپی کرده و آن را از طریق خط فرمان (کنسول) اجرا کنید، در نتیجه کل ARCHIVE را بازیابی نمی کنید.
  • سبک نوشتن مشابه عبارت UPDATE است که به خاطر سپردن آن آسان تر است.

پرس و جوی SQL: به روز رسانی

UPDATE table_name SET user_login="ivanov", user_surname="Ivanov" WHERE id=1

در جدول " جدول_نام» در رکورد با شماره id=1، مقادیر فیلدهای user_login و user_surname به مقادیر مشخص شده تغییر می کند.

پرس و جوی SQL: DELETE

DELETE FROM table_name WHERE id=3

رکورد با شناسه شماره 3 در جدول table_name حذف خواهد شد.

  1. همه نام فیلدها توصیه می شود که با حروف کوچک نوشته شوند و در صورت لزوم با یک فضای اجباری "_" برای سازگاری با زبان های برنامه نویسی مختلف مانند دلفی، پرل، پایتون و روبی از هم جدا شوند.
  2. دستورات SQL برای خوانایی با حروف بزرگ نوشته می شوند. همیشه به یاد داشته باشید که افراد دیگر می توانند کد را بعد از شما بخوانند، اما به احتمال زیاد شما خودتان پس از N زمان می توانند کد را بخوانند.
  3. فیلدها را ابتدا با یک اسم و سپس با یک عمل نامگذاری کنید. به عنوان مثال: city_status، user_login، user_name.
  4. سعی کنید از کلمات ذخیره شده در زبان های مختلف که می توانند باعث ایجاد مشکل در SQL، PHP یا Perl مانند (نام، تعداد، پیوند) شوند، خودداری کنید. به عنوان مثال: پیوند را می توان در MS SQL استفاده کرد، اما در MySQL رزرو شده است.

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

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

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

پایگاه داده - یک فایل یا مجموعه ای از فایل ها برای ذخیره سازی ساختارهای داده مرتب شده و روابط آنها. اغلب، یک پایگاه داده یک سیستم مدیریت نامیده می شود - این فقط یک مخزن اطلاعات در یک قالب خاص است و می تواند با DBMS های مختلف کار کند.

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

نوع داده - نوع اطلاعاتی که مجاز است در یک ستون یا ردیف خاص ذخیره شود. این می تواند اعداد یا متن با فرمت خاصی باشد.

ستون و ردیف- همه ما با صفحات گسترده ای کار کرده ایم که دارای ردیف و ستون هستند. هر پایگاه داده رابطه ای با جداول به همین صورت کار می کند. سطرها را گاهی رکورد می نامند.

کلید اصلی- هر ردیف جدول می تواند یک یا چند ستون برای شناسایی منحصر به فرد داشته باشد. بدون کلید اصلی، به روز رسانی، اصلاح و حذف ردیف های مورد نظر بسیار دشوار است.

SQL چیست؟

SQL(انگلیسی - زبان پرس و جو ساختاریافته) فقط برای کار با پایگاه های داده توسعه یافته است و در حال حاضر استاندارد تمام DBMS های محبوب است. نحو زبان از تعداد کمی عملگر تشکیل شده است و یادگیری آن آسان است. اما، با وجود سادگی خارجی، امکان ایجاد پرس و جوهای sql برای عملیات پیچیده با پایگاه داده با هر اندازه را فراهم می کند.

از سال 1992 یک استاندارد عمومی پذیرفته شده به نام ANSI SQL وجود دارد. این سینتکس و توابع اولیه اپراتورها را تعریف می کند و توسط تمام رهبران بازار DBMS مانند ORACLE پشتیبانی می شود. پوشش همه امکانات زبان در یک مقاله کوچک غیرممکن است، بنابراین ما به طور خلاصه فقط پرس و جوهای اولیه SQL را بررسی خواهیم کرد. مثال ها به وضوح سادگی و امکانات زبان را نشان می دهند:

  • ایجاد پایگاه داده و جداول؛
  • نمونه گیری داده ها؛
  • اضافه کردن سوابق؛
  • اصلاح و حذف اطلاعات

انواع داده های SQL

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

ایجاد جداول و پایگاه داده

دو راه برای ایجاد پایگاه داده ها، جداول و سایر پرس و جوهای جدید در SQL وجود دارد:

  • از طریق کنسول DBMS
  • با استفاده از ابزارهای مدیریت تعاملی همراه با سرور پایگاه داده.

یک پایگاه داده جدید توسط اپراتور ایجاد می شود ایجاد پایگاه داده<наименование базы данных>; . همانطور که می بینید، نحو ساده و مختصر است.

ما جداول را در داخل پایگاه داده با استفاده از دستور CREATE TABLE با پارامترهای زیر ایجاد می کنیم:

  • نام جدول
  • نام ستون ها و انواع داده ها

به عنوان مثال، بیایید یک جدول کالا با ستون های زیر ایجاد کنیم:

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

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

(commodity_id CHAR(15) NOT NULL،

vendor_id CHAR(15) NOT NULL،

commodity_name CHAR(254) NULL،

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

جدول دارای پنج ستون است. پس از نام، نوع داده، ستون ها با کاما از هم جدا می شوند. مقدار یک ستون می تواند خالی باشد (NULL) یا باید پر شود (NOT NULL)، و این زمانی که جدول ایجاد می شود مشخص می شود.

انتخاب داده از جدول

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

SELECT_commodity_name از کالا

بعد از دستور SELECT نام ستون را برای بدست آوردن اطلاعات مشخص می کنیم و FROM جدول را تعریف می کند.

نتیجه اجرای پرس و جو، تمام ردیف های جدول با مقادیر Commodity_name به ترتیبی که در پایگاه داده وارد شده اند، خواهد بود، یعنی. بدون هیچ گونه مرتب سازی یک بند اضافی ORDER BY برای سفارش نتیجه استفاده می شود.

برای پرس و جو در چندین فیلد، آنها را با کاما از هم جدا کنید، مانند مثال زیر:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

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

انتخاب * از کالا

  • علاوه بر این SELECT پشتیبانی می کند:
  • مرتب سازی داده ها (ORDER BY)
  • انتخاب با توجه به شرایط (WHERE)
  • اصطلاح گروه بندی (GROUP BY)

اضافه کردن یک خط

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

  • یک خط کامل جدید اضافه کنید.
  • بخشی از یک رشته؛
  • نتایج پرس و جو

برای اضافه کردن یک ردیف کامل، باید نام جدول و مقادیر ستون‌ها (فیلدها) ردیف جدید را مشخص کنید. در اینجا یک مثال است:

INSERT INTO Commodity VALUES("106"، "50"، "کوکاکولا"، "1.68"، "بدون الکل،)

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

اگر فقط بخشی از یک ردیف را اضافه کنید، باید به صراحت نام ستون ها را مشخص کنید، مانند مثال:

INSERT INTO Commodity (commodity_id، vendor_id، commodity_name)

VALUES("106"، "50"، "کوکاکولا"،)

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

افزودن نتایج پرس و جو

INSERT در درجه اول برای افزودن ردیف استفاده می شود، اما می تواند برای افزودن نتایج یک دستور SELECT نیز استفاده شود.

داده ها را تغییر دهید

برای تغییر اطلاعات در فیلدهای جدول پایگاه داده، باید از عبارت UPDATE استفاده کنید. اپراتور به دو صورت قابل استفاده است:

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

UPDATE از سه عنصر اصلی تشکیل شده است:

  • جدولی که در آن تغییرات لازم است؛
  • نام فیلدها و مقادیر جدید آنها؛
  • شرایط انتخاب سطرها برای تغییر

یک مثال را در نظر بگیرید. فرض کنید قیمت یک محصول با ID=106 تغییر کرده است، بنابراین این ردیف باید به روز شود. عملگر زیر را می نویسیم:

به روز رسانی مجموعه کالا commodity_price = "3.2" WHERE commodity_id = "106"

نام جدول را مشخص کردیم، در مورد ما Commodity، جایی که به روز رسانی انجام می شود، سپس بعد از SET - مقدار جدید ستون را مشخص کردیم و با تعیین مقدار ID مورد نظر در WHERE، رکورد مورد نظر را پیدا کردیم.

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

به روز رسانی مجموعه کالا commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

برای حذف اطلاعات در یک ستون، اگر ساختار جدول اجازه می دهد، می توانید آن را روی NULL تنظیم کنید. باید به خاطر داشت که NULL دقیقاً مقدار "بدون" است و به صورت متن یا عدد صفر نیست. حذف توضیحات محصول:

به روز رسانی مجموعه کالا commodity_desc = NULL WHERE commodity_id = "106"

حذف ردیف ها

پرس و جوهای SQL برای حذف ردیف ها در جدول با دستور DELETE اجرا می شوند. دو مورد استفاده وجود دارد:

  • ردیف های خاصی در جدول حذف می شوند.
  • تمام ردیف های جدول حذف می شوند.

مثالی از حذف یک ردیف از جدول:

DELETE FROM Commodity WHERE commodity_id = "106"

بعد از DELETE FROM نام جدولی را که سطرهای آن حذف می شود را مشخص می کنیم. عبارت WHERE شامل شرایطی است که با آن سطرها برای حذف انتخاب می شوند. در مثال، خط محصول با ID=106 را حذف می کنیم. مشخص کردن WHERE بسیار مهم است. حذف این عبارت تمام ردیف های جدول را حذف می کند. این در مورد تغییر مقدار فیلدها نیز صدق می کند.

دستور DELETE نام ستون یا متاکاراکترها را مشخص نمی کند. به طور کامل ردیف ها را حذف می کند، اما نمی تواند یک ستون را حذف کند.

استفاده از SQL در Microsoft Access

معمولاً به صورت تعاملی برای ایجاد جداول، پایگاه‌های داده، مدیریت، اصلاح، تجزیه و تحلیل داده‌ها در پایگاه داده و پیاده‌سازی پرس‌وجوهای SQL Access از طریق یک طراح پرس و جو تعاملی مناسب (Query Designer) استفاده می‌شود، که با استفاده از آن می‌توانید دستورات SQL با هر پیچیدگی را بسازید و بلافاصله اجرا کنید.

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

برنامه های افزودنی SQL

از آنجایی که پرس و جوهای SQL تمام ویژگی های زبان های برنامه نویسی رویه ای مانند حلقه ها، شاخه ها و غیره را ندارند، فروشندگان DBMS نسخه خود را از SQL با ویژگی های پیشرفته توسعه می دهند. اول از همه، این پشتیبانی از رویه های ذخیره شده و اپراتورهای استاندارد زبان های رویه ای است.

رایج ترین گویش های زبان:

  • پایگاه داده اوراکل - PL/SQL
  • Interbase، Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL به وب

MySQL DBMS تحت مجوز عمومی عمومی گنو توزیع شده است. مجوز تجاری با قابلیت توسعه ماژول های سفارشی وجود دارد. به عنوان بخشی جدایی ناپذیر، در محبوب ترین مجموعه های سرورهای اینترنتی مانند XAMPP، WAMP و LAMP گنجانده شده است و محبوب ترین DBMS برای توسعه برنامه های کاربردی در اینترنت است.

این توسط Sun Microsystems توسعه یافته و در حال حاضر توسط Oracle Corporation نگهداری می شود. پشتیبانی از پایگاه های داده تا 64 ترابایت، استاندارد نحوی SQL:2003، تکرار پایگاه های داده و خدمات ابری.

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

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

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

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

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

جدول مشتق شدهعبارت جدولی است که در عبارت 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 Airplane (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 در خط آخر مثال نتیجه زیر را نشان می دهد.

آخرین به روز رسانی: 1396/07/05

در مبحث آخر یک پایگاه داده ساده با یک جدول در SQL Management Studio ساخته شد. حالا بیایید اولین کوئری SQL را تعریف و اجرا کنیم. برای انجام این کار، SQL Management Studio را باز کنید، روی عنصر سطح بالای Object Explorer (نام سرور) کلیک راست کرده و New Query را از منوی زمینه ظاهر شده انتخاب کنید:

پس از آن، پنجره ای برای وارد کردن دستورات SQL در قسمت مرکزی برنامه باز می شود.

بیایید یک کوئری را روی جدولی که در مبحث قبلی ایجاد شده بود اجرا کنیم، به ویژه تمام داده ها را از آن دریافت خواهیم کرد. پایگاه داده ما دانشگاه نام دارد و جدول dbo.Students است، بنابراین برای دریافت داده از جدول، عبارت زیر را وارد می کنیم:

SELECT * FROM University.dbo.Students

دستور SELECT به شما امکان می دهد داده ها را انتخاب کنید. FROM منبعی را مشخص می کند که داده ها را از کجا دریافت کنید. در واقع با این پرس و جو می گوییم "انتخاب همه از جدول University.dbo.Students". شایان ذکر است که مسیر کامل جدول برای نام جدول استفاده می شود که نشان دهنده پایگاه داده و طرحواره است.

پس از وارد کردن درخواست، روی دکمه نوار ابزار Execute کلیک کنید یا می توانید کلید F5 را فشار دهید.

در نتیجه اجرای پرس و جو، یک جدول کوچک در پایین برنامه ظاهر می شود که نتایج پرس و جو را نمایش می دهد - یعنی تمام داده های جدول Students.

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

از انتخاب دانشگاه * از دانشجویان استفاده کنید

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

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