زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم

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

SELECT COLUMN_NAME (1..N) از TABLE_NAME UNION SELECT COLUMN_NAME (1..N) از TABLE_NAME

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

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

کل ارزش ها و مقادیر فردی در یک جدول با استفاده از دستور SQL UNION

با یک پرس و جو می توانید مقادیر ستون های فردی را از جدول جدا کنید ، به عنوان مثال تعداد سال های کار شده توسط کارکنان شرکت ، حقوق آنها و سایر موارد. درخواست دیگر استفاده است توابع کل - به عنوان مثال می توانید میزان حقوق دریافت شده توسط کارمندان ادارات یا مشاغل خاص را بدست آورید ، یا میانگین تعداد سالها تجربه کار را دریافت کنید (در چنین سؤالاتی ، گروه بندی با استفاده از اپراتور GROUP BY استفاده می شود).

اگر بخواهیم در یک جدول خلاصه ای از تمام ارزش های فردی و کل مقادیر را داشته باشیم چه می کنیم؟ اینجاست که بیانیه SQL UNION برای نجات می آید ، که ترکیبی از دو سؤال است. سفارش باید برای نتیجه پیوستن با استفاده از بند ORDER BY اعمال شود. آنچه در این مورد است بهتر است از مثالها فهمیده شود.

مثال 1 بانک اطلاعاتی شرکت دارای جدول Staff می باشد که شامل اطلاعات مربوط به کارمندان شرکت می باشد. این ستون ها دارای حقوق (حقوق) ، شغل (موقعیت) و سال (مدت خدمت) است. اولین سؤال ، دستمزدهای فردی را بر اساس عنوان شغلی برمی گرداند:

SELECT نام ، شغل ، حقوق و دستمزد از دستور کار توسط شغل

نامکارحقوق
ساندرزگروه18357.5
مارنگیگروه17506.8
پرنالحراجی18171.2
دکترحراجی12322.4
عاملحراجی16228.7

پرس و جو دوم باعث می شود کل حقوق و دستمزد بر اساس موقعیت بازگردد. ما در حال حاضر این پرس و جو را برای پیوستن به مورد اول آماده می کنیم ، بنابراین به یاد خواهیم آورد که شرط پیوستن تعداد برابر ستون ها ، همزمانی نام آنها ، ترتیب و نوع داده ها است. بنابراین ، ما همچنین ستون Name را با مقدار دلخواه "Z-TOTAL" در جدول با جمع بندی ها شامل می کنیم:

"Z-TOTAL" را انتخاب کنید به عنوان نام ، شغل ، SUM (حقوق) به عنوان حقوق از گروه Staf توسط شغل

پرس و جو در جدول زیر نتیجه می گیرد:

نامکارحقوق
Z-TOTALگروه35864.3
Z-TOTALحراجی46722.3

اکنون بیایید با استفاده از اپراتور UNION و ORDER BY نتیجه اتحادیه نمایش داده شد. گروه بندی باید توسط دو ستون انجام شود: کار و نام ، به گونه ای که سطرهایی با کل (کل) مقادیر که در آن مقدار نام "Z-TOTAL" است در زیر ردیف ها با مقادیر فردی قرار دارند. جمع آوری نتایج پرس و جو به شرح زیر است:

(نام و نام خانوادگی ، شغل ، حقوق و دستمزد از محل کار) اتحادیه (انتخاب "Z-TOTAL" به عنوان نام ، شغل ، جمع (حقوق) به عنوان حقوق از گروه کارمندان توسط شغل) به سفارش کار ، نام

نتیجه اجرای یک استعلام با اپراتور UNION جدول زیر خواهد بود که در آن هر خط اول در هر گروه از سمت ها شامل کل حقوق کارمندان شاغل در این موقعیت می شود:

نامکارحقوق
مارنگیگروه17506.8
ساندرزگروه18357.5
Z-TOTALگروه35864.3
دکترحراجی12322.4
عاملحراجی16228.7
پرنالحراجی18171.2
Z-TOTALحراجی46722.3

سؤالات خود را با استفاده از UNION بنویسید و راه حل را ببینید

مثال 2 داده ها همانند مثال 1 است ، اما کار کمی پیچیده تر است. لازم است در یک جدول نمایش داده شود نه تنها دستمزدهای فردی طبقه بندی شده بر اساس عنوان شغل و کل حقوق با عنوان شغل ، بلکه کل حقوق همه کارمندان.

مثال 3 بانک اطلاعاتی شرکت دارای جدول Staff می باشد که شامل اطلاعات مربوط به کارمندان شرکت می باشد. این ستون ها شامل نام (نام خانوادگی) ، بخش (شماره واحد) و سال (طول خدمت) است.

نامگروهسال ها
ساندرز20 7
پرنال20 8
مارنگی38 5
دکتر20 5
عامل38 8

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

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

مثال 4 بانک اطلاعاتی شرکت دارای جدول Staff می باشد که شامل اطلاعات مربوط به کارمندان شرکت می باشد. این ستون ها حقوق (حقوق و دستمزد) ، شغل (موقعیت) و سال ها (مدت خدمت) دارد. اولین درخواست برای به دست آوردن اطلاعات در مورد کارمندان مورد نیاز است ، حق الزحمه که از این تعداد بیش از 21000:

پرس و جو در جدول زیر نتیجه می گیرد:

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

نتیجه اجرای پرس و جو با اپراتور UNION جدول زیر خواهد بود:

شناسهنام
10 ساندرز
30 مارنگی
100 پلاتز
140 فرای
160 مولینار
240 دانیلز
260 جونز

پرس و جو با اپراتور UNION می تواند تعداد ستون های بیشتری را برگرداند ، این مهم است که تکرار کنیم که در نمایش داده های ترکیبی تعداد ستون ها ، ترتیب و نوع داده های آنها یکسان است.

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

پرس و جو در جدول زیر نتیجه می گیرد:

پرس و جو در جدول زیر نتیجه می گیرد:

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

پرس و جو در جدول زیر نتیجه می گیرد:

ترکیب نتایج پرس و جو در دو جدول با استفاده از اپراتور SQL UNION

تا کنون ، ما به سؤالات UNION که نتایج حاصل از همان جدول را با هم ترکیب می کند ، نگاه کردیم. حالا نتایج دو جدول را با هم ترکیب می کنیم.

مثال 6 بانک اطلاعاتی انبار مصالح ساختمانی وجود دارد. دارای جداول حاوی داده های تصویر زمینه است. جدول وینیل حاوی داده هایی برای تصاویر پس زمینه وینیل و جدول کاغذ دیواری برای کاغذ دیواری است. لازم است داده های مربوط به قیمت تصویر زمینه را از جدول و جدول دیگری پیدا کنید.

برای استخراج داده های غیر تکراری قیمت برای تصویر زمینه وینیل ، بیایید یک عبارت را با کلمه DISTINCT تهیه کنیم:

انتخاب قیمت از وینیل

پرس و جو در جدول زیر نتیجه می گیرد:

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

قیمت جداگانه انتخاب از میان وینیل اتحادیه انتخاب قیمت از روی کاغذ

از آنجا که ما از کلمه ALL استفاده نمی کنیم ، مقادیر کپی شده 400 ، 500 و 530 نمایش داده نمی شود. پرس و جو در جدول زیر نتیجه می گیرد:

قیمت
300
320
360
400
430
500
530
610
720
800
850

مثال 7 بانک اطلاعاتی و جداول همانند مثال قبلی است.

شما می خواهید تمام داده های قیمت ، از جمله نسخه های تکراری را دریافت کنید. یک پرس و جو برای ترکیب نتایج با استفاده از اپراتور UNION مانند نمونه قبلی با پرس و جو مشابه خواهد بود ، اما به جای UNION فقط ، ما UNION ALL را می نویسیم:

قیمت جداگانه انتخاب از یونیون وینیل همه قیمت جداکننده انتخاب از کاغذ

پرس و جو در جدول زیر نتیجه می گیرد:

قیمت
300
320
360
400
400
430
500
500
530
530
610
720
800
850

با استفاده از عملگر SQL UNION ، می توانید هر دو query ساده و نمایش داده شد حاوی subqueries (subqueries) ... بیایید یک نمونه را در نظر بگیریم.

مثال 8 بانک اطلاعاتی "تئاتر" وجود دارد. جدول پخش آن شامل اطلاعات مربوط به تولیدات (عناوین - در ستون Name) ، در جدول Director - داده های مربوط به کارگردانان (در ستون Fname - نام اول ، در ستون Lname - نام خانوادگی) است. کلید اصلی جدول مدیر dir_id است - شماره شناسایی کارگردان. Dir_id همچنین یک کلید خارجی جدول Play است ، که به کلید اصلی جدول Director اشاره دارد. شما می خواهید به تهیه کنندگی کارگردانان جان بارتون و ترور نون برسید.

تصمیم گیری بیایید نتایج دو نمایش داده شده را ترکیب کنیم - یکی اجراهای بازگشت توسط کارگردان جان بارتون ، و دیگری توسط کارگردان Trevor Nunn. و هر یک از این پرس و جوهای ترکیبی به جدول بازی با یک زیر نویس در جدول Director انجام می شود که با نام و نام خانوادگی کارگردان ، dir_id برمی گردد. هر درخواست خارجی مقدار کلید dir_id را از درخواست تو در تو در می گیرد و نام محصولات (نام) را برمی گرداند:

بانکهای اطلاعاتی رابطه ای و زبان SQL

این درس موضوع استفاده از عملیات اتحادیه ، تقاطع و اختلاف سؤالات را شامل می شود. نمونه هایی از نحوه استفاده از آن SQL query Union ، موجود ، و همچنین با استفاده از کلمات کلیدی برخی ، ANY و همه. توابع رشته در نظر گرفته شده است


در یک مجموعه می توانید عملیات اتحادیه ، تفاوت و محصول دکارتی را انجام دهید. همان عملیات را می توان در استفاده کرد نمایش داده شد sql (عملیات را با نمایش داده شد)

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

< запрос 1 > اتحادیه [ALL]< запрос 2 >

<запрос 1> اتحاد. اتصال<запрос 2>

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

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

می توانید هر تعداد سؤال را با هم ترکیب کنید.

استفاده از اپراتور UNION نیاز به تحقق چندین شرط دارد:

  1. تعداد ستونهای خروجی هر یک از پرس و جوها باید یکسان باشد؛
  2. ستونهای خروجی هر یک از پرس و جوها باید از نظر انواع داده (به ترتیب اولویت) قابل مقایسه باشند.
  3. مجموعه نتیجه از نام ستون های مشخص شده در اولین پرسشی استفاده می کند.
  4. سفارش فقط در انتهای یک پرس و جو مرکب قابل استفاده است ، زیرا در مورد نتیجه پیوست اعمال می شود.

مثال: نمایش قیمت رایانه ها و لپ تاپ ها و همچنین تعداد آنها (یعنی بارگیری از دو جدول متفاوت در یک پرس و جو)


olution راه حل:
1 2 3 4 5 6 انتخاب "شماره" ، "قيمت" از pc UNION SELECT "شماره" ، "قيمت" از دفترچه سفارش به سفارش "قيمت"

انتخاب "شماره" ، "قيمت" از pc UNION SELECT "شماره" ، "قيمت" از دفترچه سفارش به سفارش "قيمت"

نتیجه:

بیایید نگاهی به یک مثال پیچیده داخلی بپردازیم:

مثال: نوع محصول ، تعداد و قیمت رایانه ها و لپ تاپ ها را پیدا کنید


olution راه حل:
1 2 3 4 5 6 7 8 محصول را انتخاب کنید. `نوع ، قطعه `شماره` ،` قیمت` از رایانه: محصول مشترک در کامپیوتر. `شماره` \u003d محصول. محصول شماره "UNION SELECT". `نوع ، نوت بوک `شماره» ، `قیمت` از نوت بوک INNER JOIN محصول روی نوت بوک. `شماره` \u003d محصول. `اتاق` سفارش` قیمت

SELECT product.` Type`، pc.`Number`، `Price` از pc کامپیوتر INNER JOIN محصول در pc.`Number` \u003d product.`Number` UNION SELECT product.` Type`، notebook.`Number`،` Price` از نوت بوک INNER عضو محصول در نوت بوک شوید. "شماره" \u003d محصول. "شماره" سفارش با "قیمت"

نتیجه:

SQL Union 1. تولید کننده ، تعداد و قیمت تمام لپ تاپ ها و چاپگرها را پیدا کنید

SQL Union 2. تعداد و قیمت تمام محصولات تولید شده توسط سازنده روسیه را بیابید

موجودیت SQL وجود EXISTS

که در زبان SQL وسایلی برای انجام عملیات تقاطع و اختلاف سؤالات وجود دارد - بند INTERSECT (تقاطع) و بند EXCEPT (تفاوت). این بندها به همان شکلی که UNION کار می کند کار می کنند: فقط آن ردیف هایی که در هر دو نمایش داده می شوند - INTERSECT یا فقط آن ردیف های اولین سؤال که در دوم وجود ندارد - EXCEPT ، در مجموعه نتایج گنجانده شده اند. مشکل اینجاست که بسیاری از DBMS ها از این پیشنهادات پشتیبانی نمی کنند. اما راهی وجود دارد - استفاده از گزاره EXISTS.

گزاره EXISTS در صورت بازگشت هر تعداد ردیف ، به حقیقت ارزیابی می کند ، در غیر این صورت EXISTS به FALSE ارزیابی می کند. همچنین گزاره NOT EXISTS وجود دارد که به روش مخالف عمل می کند.

به طور معمول EXISTS در زیرمجموعه های وابسته (به عنوان مثال IN) استفاده می شود.

EXISTS (خرده فروشی های جداول)

مثال: آن دسته از سازندگان رایانه را پیدا کنید که لپ تاپ هایی نیز تهیه کنند


olution راه حل:

SELECT DISTINCT تولید کننده از محصول AS pc_product WHERE Type \u003d "Computer" AND EXISTS (SELECT سازنده محصول از محصول WHERE Type \u003d "لپ تاپ" و تولید کننده \u003d pc_product.Man Manufacturer)

نتیجه:

آن دسته از سازندگان رایانه را که چاپگر نمی کنند پیدا کنید

SQL برخی از کلمات کلیدی | همه و همه

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

نحو:

< выражение>< оператор сравнения> برخی از | هر (< подзапрос> )

<выражение><оператор сравнения>برخی از | هر (<подзапрос>)

اگر نتیجه عملیات "" حقیقی را برای هر مقدار X بدست آمده از خرده فروشی برگرداند ، سپس گزاره ANY نیز TRUE است.

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


olution راه حل:

داده های اولیه جداول:

نتیجه:

به عنوان مثال ، محمول شماره \u003d ANY (SELECT FROM از تعداد رایانه) هنگامی که شماره از پرس و جو اصلی در لیست شماره های جدول pc (برگردانده شده توسط Subquery) یافت می شود TRUE برمی گردد. همچنین ، NOT استفاده می شود. مجموعه نتیجه یک ستون خواهد داشت - سازنده. برای جلوگیری از نمایش چندین بار تولید کننده ، کلمه سرویس DISTINCT معرفی شده است.
اکنون ، استفاده از کلمه کلیدی ALL را در نظر بگیرید:

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


olution راه حل:

مهم: لازم به ذکر است که ، به طور کلی ، یک پرس و جو با هر مقادیر بسیاری از ارزش ها را برمی گرداند. بنابراین ، استفاده از یک فرعی در یک بند WHERE بدون وجود EXISTS ، IN ، ALL و ANY ، که یک مقدار boolean (Boolean) می دهد ، ممکن است منجر به خطای زمان پرس و جو شود


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


olution راه حل:


این پرس و جو صحیح است زیرا عبارت مقیاس Price با یک خرده مقیاس مقایسه می شود که یک مقدار واحد را برمی گرداند

توابع رشته SQL

تابع LEFT از سمت چپ رشته تعداد کاراکترهای مشخص شده با آرگومان دوم را نوار می کند:

ترک کرد (<строка>,<число>)

تابع RIGHT تعداد مشخصه های کاراکتر را به سمت راست یک عبارت رشته برمی گرداند:

درست (<строка>,<число>)

مثال: حروف اول را از نام همه تولید کنندگان استخراج کنید


olution راه حل:

SELECT DISTINCT LEFT ('سازنده' ، 1) از محصول '

نتیجه:

مثال: نامهای تولید کننده را چاپ کنید که با همان حرف شروع و پایان می یابند


olution راه حل:

عملکرد SQL را جایگزین کنید

نحو:

را انتخاب کنید "name" ، جایگزین ("name" ، "a" ، "aa") از "معلمان"

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

بیایید آن را با شما فهمید جستجوی SQL با استفاده از UNION:

انتخاب "ورود به سیستم" ، "مقدار" از "کارفرمایان" UNION SELECT "ورود به سیستم" ، "مقدار" از کارمندان "؛

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

از جمله قطعات اتحادیه شاید خیلی زیاد باشد ، اما از همه مهمتر پس از آخرین اتحادیه ، حتماً یک جمع بندی را قرار دهید.

یکی دیگر از ویژگی های خوب اتحاد. اتصال عدم تکرار است به عنوان مثال ، اگر همان شخص در بین کارمندان و کارفرمایان پیدا شود ، البته با همان مبلغ در حساب ، در نمونه او قرار می گیرد. نه 2 بار بلکه فقط 1که ، به عنوان یک قاعده ، مورد نیاز است. و اگر باز هم تکرارها لازم باشد ، پس وجود دارد اتحادیه ALL:

انتخاب "ورود به سیستم" ، "مقدار" از "کارفرمایان" UNION ALL SELECT "ورود به سیستم" ، "مقدار" از کارمندان "؛

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

زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم