البرامج النصية وجدول البيانات
إنشاء سلع الجدول (رقم التعريف غير فارغ، تغيير أحرف الاسم (127) ليس فارغًا، تغيير أحرف الوصف (255) ليس فارغًا، السعر الرقمي (16،2) ليس فارغًا، تغيير الأحرف المفصلية (20) ليس فارغًا، الطابع الزمني لـ act_time ليس فارغًا ، توفر منطقي غير فارغ، CONSTRAINT pk_goods PRIMARY KEY (id))؛ أدخل في البضائع (المعرف، الاسم، الوصف، السعر، المادة، وقت العمل، التوفر) القيم (1، "Slippers"، "Soft"، 100.00، "TR-75"، (TS "2017-01-01 01:01: 01.01")، صحيح)؛ أدخل في البضائع (المعرف، الاسم، الوصف، السعر، المادة، وقت العمل، التوفر) القيم (2، "Pillow"، "White"، 200.00، "PR-75"، (TS "2017-01-02 02:02: 02.02")، صحيح)؛ أدخل في البضائع (المعرف، الاسم، الوصف، السعر، المادة، وقت العمل، التوفر) القيم (3، "Blanket"، "Down"، 300.00، "ZR-75"، (TS "2017-01-03 03:03: 03.03")، صحيح)؛ أدخل في البضائع (المعرف، الاسم، الوصف، السعر، المادة، وقت العمل، التوفر) القيم (4، "Pillowcase"، "Grey"، 400.00، "AR-75"، (TS "2017-01-04 04:04: 04.04")، خطأ)؛ أدخل في البضائع (المعرف، الاسم، الوصف، السعر، المادة، وقت العمل، التوفر) القيم (5، "ورقة"، "حرير"، 500.00، "BR-75"، (TS "2017-01-05 05:05: 05.05")، خطأ)؛
مثال مع علامات الاقتباس المزدوجة
اختر اسم "اسم المنتج" من البضائع
الجدول الزائف
حدد mock.nickname "Nickname"، (في حالة استخدام mock.huff ثم "Yes" أو "No" النهاية) ""هل شعرت بالإهانة؟"" من (اختر الاسم كنية، والتوافر كما هو من البضائع) وهمية
في مثالنا، النموذج عبارة عن جدول زائف (يُسمى أحيانًا جدولًا افتراضيًا). وبطبيعة الحال، ليس المقصود منها على الإطلاق تشويه المعنى الحقيقي. مثال على ذلك.
مثال على منشئ كتلة البيانات
اختر الاسم "اسم المنتج"، السعر "السعر" من (القيم ("شبشب"، 100.00)، ("وسادة"، 200.00)) كما هي البضاعة (الاسم، السعر)
اسم المنتج | سعر |
النعال | 100.00 |
وسادة | 200.00 |
في قسم منالكلمة الرئيسية المستخدمة قيم، متبوعة بالبيانات بين قوسين، سطرًا تلو الآخر. النقطة المهمة هي أننا لا نختار البيانات من أي جدول على الإطلاق، ولكن ببساطة نقوم بإنشائها بسرعة، و"استدعاءها" جدولًا، وتسمية الأعمدة ثم استخدامها وفقًا لتقديرنا. تبين أن هذا الشيء مفيد للغاية عند اختبار حالات استعلام SQL مختلفة، عندما لا تكون هناك بيانات لبعض الجداول (في قاعدة البيانات المحلية الخاصة بك)، وتكون كتابة الإدراج كسولًا جدًا أو صعبة للغاية في بعض الأحيان، بسبب ارتباط الجداول والقيود .
مثال لمقارنة كتل البيانات
اختر * من السلع حيث (الاسم، السعر، التوفر) = ("غطاء الوسادة"، 400.00، خطأ) - أو ما يعادله اختر * من السلع حيث الاسم = "غطاء الوسادة" والسعر = 400.00 والتوفر = خطأ
كما يتبين من المثال، فإن مقارنة كتل البيانات تشبه مقارنة عنصر بعنصر معنى_ 1 _block_1 = القيمة_ 1 _block_2، القيمة_ 2 _block_1 = القيمة_ 2 _block_2، القيمة_ 3 _block_1 = القيمة_ 3 _block_2استخدام وبينهم.
مثال مع باستثناء
في الواقع، يتم استبعاد البيانات من المجموعة الثانية من مجموعة القيم الأولى.
في الواقع، يحدث تقاطع المجموعة الأولى من القيم والمجموعة الثانية.
هذا كل شيء، أشكركم على اهتمامكم.
في هذا البرنامج التعليمي سوف تتعلم كيفية استخدام باستثناء عامل التشغيل في SQL Server(Transact-SQL) مع بناء الجملة والأمثلة.
SQL Server باستثناء العبارةيتم استخدام (Transact-SQL) لإرجاع كافة الصفوف في عبارة SELECT الأولى التي لم يتم إرجاعها بواسطة عبارة SELECT الثانية. ستحدد كل عبارة SELECT مجموعة بيانات. سيقوم عامل التشغيل EXCEPT باسترداد كافة السجلات من مجموعة البيانات الأولى ثم إزالة جميع السجلات من مجموعة البيانات الثانية من النتائج.
توضيح: سيؤدي استعلام EXCEPT إلى إرجاع السجلات في المنطقة المظللة باللون الرمادي. هذه هي السجلات الموجودة في SELECT 1 وليس في SELECT 2.
يجب أن تحتوي كل عبارة SELECT في استعلام EXCEPT على نفس عدد الحقول في مجموعات النتائج التي تحتوي على أنواع بيانات مماثلة.
باستثناء بناء جملة العبارة في SQL Server (Transact-SQL):
التعبيرات هي الأعمدة أو الحسابات التي تريد مقارنتها بين عبارات SELECT. ليس من الضروري أن تكون نفس الحقول في كل عبارة SELECT، ولكن يجب أن تكون الأعمدة المقابلة من أنواع بيانات متشابهة.
الجداول - الجداول التي تريد الحصول على السجلات منها. يجب أن يكون هناك جدول واحد على الأقل مدرج في عبارة FROM.
أين الشروط - اختياري. الشروط التي يجب استيفاؤها للسجلات المحددة.
دعونا نلقي نظرة على مثال لعبارة EXCEPT في SQL Server (Transact-SQL) التي تُرجع حقلاً واحدًا بنفس نوع البيانات.
على سبيل المثال:
المعاملات SQL
حدد Product_id من المنتجات باستثناء SELECT Product_id من المخزون؛
حدد منتج_id من المنتجات حدد منتج_id من المخزون ; |
يُرجع مثال عبارة EXCEPT جميع قيم Product_id الموجودة في جدول المنتجات وليس في جدول المخزون. وهذا يعني أنه إذا كانت قيمة Product_id موجودة في جدول المنتجات وكانت موجودة أيضًا في جدول المخزون، فلن تظهر قيمة Product_id في نتائج استعلام EXCEPT.
بعد ذلك، دعونا نلقي نظرة على مثال لاستعلام EXCEPT في SQL Server (Transact-SQL) الذي يُرجع أكثر من عمود واحد.
على سبيل المثال:
المعاملات SQL
في هذا المثال، يقوم الاستعلام EXCEPT بإرجاع السجلات الموجودة في جدول جهات الاتصال بالاسم contact_id، وlast_name، وfirst_name، والتي لا تتطابق مع قيمة معرف_الموظف، واسم_العائلة، واسم_الاسم الأول في جدول الموظفين.
هناك قاعدة واحدة فقط مهمة يجب تذكرها عند استخدام عبارة EXCEPT.
يجب أن يكون ترتيب الأعمدة وعددها وأنواع البيانات هو نفسه في كافة الاستعلامات.
وفقًا لمعيار ANSI، فإن عوامل تشغيل المجموعة UNION وEXCEPT لها نفس الأسبقية، ولكن يتم تنفيذ عامل التشغيل INTERSECT قبل عوامل المجموعة الأخرى. نوصي بالتحكم بشكل صريح في أسبقية عامل التشغيل باستخدام الأقواس. هذه ممارسة جيدة جدًا بشكل عام.
طبقاً لمعيار ANSI، يمكنك استخدام عبارة ORDER BY واحدة فقط في الاستعلام. أدخله في نهاية عبارة SELECT الأخيرة. لتجنب الغموض في تسمية الأعمدة والجداول، تأكد من تعيين نفس الاسم المستعار لجميع أعمدة الجدول المطابقة. على سبيل المثال:
حدد au_lname AS "lastname"، au_fname AS "firstname" من المؤلفين باستثناء SELECT emp_lname AS "lastname"، emp_fname AS "firstname" من الموظفين، قم بالترتيب حسب اسم العائلة،؛
بالإضافة إلى ذلك، نظرًا لأن كل قائمة أعمدة يمكنها تحديد أعمدة ذات أنواع بيانات متوافقة بشكل مطابق، فقد يكون لدى منصات RDBMS المختلفة خيارات مختلفة للتعامل مع أعمدة ذات أطوال مختلفة. على سبيل المثال، إذا كان عمود au_lname من الاستعلام الأول في المثال السابق أطول بكثير من عمود emp_lname من الاستعلام الثاني، فقد يكون لدى الأنظمة الأساسية المختلفة قواعد مختلفة لتحديد طول النتيجة النهائية. لكن بشكل عام، ستختار المنصات حجمًا أطول (وأقل تقييدًا) للنتيجة.
قد يكون لكل RDBMS قواعده الخاصة لاستخدام اسم العمود إذا كانت الأسماء الموجودة في قوائم الأعمدة مختلفة. وبشكل عام، يتم استخدام أسماء أعمدة الاستعلام الأول.
ليس من الضروري أن تكون أنواع البيانات متطابقة، ولكن يجب أن تكون متوافقة. على سبيل المثال، النوعان CHAR وVARCHAR متوافقان. افتراضيًا، ستكون مجموعة النتائج في كل عمود بالحجم المطابق لأكبر نوع في كل موضع معين. على سبيل المثال، الاستعلام الذي يسترد البيانات من الأعمدة التي تحتوي على قيم من النوع VARCHAR(IO) وVARCHAR(15) سيستخدم النوع والحجم VARCHAR(15).
لا يدعم أي من النظامين جملة CORRESPONDING )) باستثناء جملة
(SELECTstatemenr.2 | VALUES (expressionl, Expression2 [, ...])) باستثناء
يسمح لك بتحديد واحد أو أكثر من الأعمدة المحددة يدويًا والمضمنة في مجموعة النتائج النهائية. (وهذا ما يسمى منشئ الصف.) يجب أن تحدد جملة VALUES عددًا من الأعمدة تمامًا مثل استعلامات عبارة EXCEPT. على الرغم من أن العبارة EXCEPT DISTINCT غير مدعومة، إلا أن المعادل الوظيفي لها هو EXCEPT. جملة CORRESPONDING غير مدعومة. بالإضافة إلى ذلك، لا يتم استخدام أنواع البيانات LONG VARCHAR، وLONG VARGRAPHIC، وBLOB، وCLOB، وDBCLOB، وDATALINK، وأنواع البنية في جملة EXCEPT، ولكن يمكن استخدامها في جملة EXCEPT ALL.
إذا كانت مجموعة النتائج تحتوي على عمود له نفس الاسم في كافة عبارات SELECT، فسيتم استخدام هذا الاسم كاسم نهائي للعمود الذي تم إرجاعه بواسطة العبارة. إذا تمت تسمية عمود معين بشكل مختلف في عبارات SELECT مختلفة، فيجب عليك إعادة تسمية العمود في جميع الاستعلامات باستخدام نفس عبارة الاسم المستعار AS في جميعها.
إذا كان استعلام واحد يستخدم عوامل تشغيل متعددة للعمل مع مجموعات البيانات، فسيتم تنفيذ العامل الموجود بين قوسين أولاً. وبعد ذلك سيكون ترتيب التنفيذ من اليسار إلى اليمين. ومع ذلك، يتم تنفيذ كافة عبارات INTERSECT قبل عبارات UNION وEXCEPT. على سبيل المثال:
حدد empno من الموظف حيث Workdept LIKE "E%" باستثناء SELECT empno FROM emp_act WHERE projno IN (TF1000"، TF2000"، -AD3110")) قيم الاتحاد ("AA0001")، ("AB0002")، ("AC0003") ;
في المثال أعلاه، يتم استرجاع معرفات جميع الموظفين العاملين في القسم الذي يبدأ بالحرف "E" من جدول الموظفين، ثم تتم إزالة معرفات العاملين في المشاريع IF1000 وIF200 وAD3110 من جدول حسابات الموظفين (emp_act وأخيرًا، تمت إضافة ثلاثة معرفات إضافية - AA0001 وAB0002 وAC0003 باستخدام مشغل مجموعة UNION.
لا يدعم MySQL عامل التشغيل EXCEPT. وبدلاً من ذلك، يمكنك استخدام عوامل التشغيل NOT IN أو NOT EXISTS.
سيغطي الدرس موضوع استخدام عمليات الاستعلامات الاتحاد والتقاطع والاختلاف. أمثلة على كيفية استخدامه اتحاد استعلام SQL وموجود واستخدام الكلمات الرئيسية SOME وANY وجميع الكلمات الرئيسية. تمت تغطية وظائف السلسلة
يمكنك إجراء عمليات الاتحاد والفرق والضرب الديكارتي على مجموعة. يمكن استخدام نفس العمليات في استعلامات SQL (تنفيذ العمليات باستخدام الاستعلامات).
يتم استخدام كلمة خاصة للجمع بين عدة استعلامات اتحاد.
بناء الجملة:
< запрос 1 >الاتحاد[الكل]< запрос 2 > <запрос 1>اتحاد<запрос 2>
يتم استخدام استعلام Union SQL لدمج صفوف الإخراج لكل استعلام في مجموعة نتائج واحدة.
إذا ما استخدمت المعلمة الكل، ثم يتم حفظ كافة خطوط الإخراج المكررة. إذا كانت المعلمة مفقودة، فستبقى الصفوف الفريدة فقط في مجموعة النتائج.
يمكنك دمج أي عدد من الاستعلامات معًا.
يتطلب استخدام مشغل UNION استيفاء عدة شروط:
مثال:عرض أسعار أجهزة الكمبيوتر واللاب توب وأرقامها (أي التفريغ من جدولين مختلفين في استعلام واحد)
1 2 3 4 5 6 | حدد "الرقم" ، "السعر" من جهاز الكمبيوتر UNION حدد "الرقم" ، "السعر" من دفتر الملاحظات ORDER BY "السعر" |
حدد "الرقم" ، "السعر" من جهاز الكمبيوتر UNION حدد "الرقم" ، "السعر" من دفتر الملاحظات ORDER BY "السعر"
نتيجة:
دعونا نلقي نظرة على مثال أكثر تعقيدًا مع صلة داخلية:
مثال:ابحث عن نوع المنتج وعدد وسعر أجهزة الكمبيوتر وأجهزة الكمبيوتر المحمولة
1 2 3 4 5 6 7 8 | حدد المنتج. `النوع`، جهاز كمبيوتر. "الرقم" ، "السعر" من جهاز الكمبيوتر INNER JOIN المنتج على جهاز الكمبيوتر. `الرقم` = المنتج. `الرقم` منتج UNION SELECT. `النوع`، دفتر ملاحظات. `الرقم'، `السعر` من الكمبيوتر المحمول، انضم إلى المنتج الداخلي على الكمبيوتر المحمول. `الرقم` = المنتج. "الرقم" اطلب حسب "السعر". |
حدد المنتج.`النوع`، الكمبيوتر.`الرقم`، `السعر` من جهاز الكمبيوتر INNER JOIN المنتج على جهاز الكمبيوتر.`الرقم` = المنتج.`الرقم` الاتحاد حدد المنتج.`النوع`، دفتر الملاحظات.`الرقم`، `السعر` من دفتر الملاحظات الداخلي، انضم إلى المنتج على دفتر الملاحظات. `الرقم` = المنتج.`الرقم` ترتيب حسب `السعر`
نتيجة:
اتحاد SQL 1.ابحث عن الشركة المصنعة ورقم القطعة وسعر جميع أجهزة الكمبيوتر المحمولة والطابعات
SQL الاتحاد 2.احصل على أرقام وأسعار جميع المنتجات التي تنتجها الشركة المصنعة روسيا
تحتوي SQL على تسهيلات لتنفيذ عمليات التقاطع والاختلاف في الاستعلامات - عبارة INTERSECT (التقاطع) وعبارة EXCEPT (الفرق). تعمل هذه الجمل بشكل مشابه لكيفية عمل UNION: تتضمن مجموعة النتائج فقط تلك الصفوف الموجودة في كلا الاستعلامين - INTERSECT، أو فقط تلك الصفوف من الاستعلام الأول المفقودة في الاستعلام الثاني - باستثناء. لكن المشكلة هي أن العديد من أنظمة إدارة قواعد البيانات لا تدعم هذه المقترحات. ولكن هناك طريقة للخروج - باستخدام المسند الموجود.
يتم تقييم دالة تقييم EXISTS إلى TRUE إذا قام الاستعلام الفرعي بإرجاع بعض الصفوف على الأقل؛ وإلا فسيتم تقييم EXISTS إلى FALSE. هناك أيضًا مسند غير موجود، وهو ما يفعل العكس.
عادةً ما يتم استخدام EXISTS في الاستعلامات الفرعية التابعة (على سبيل المثال، IN).
موجود (استعلام فرعي للجدول)
مثال:ابحث عن الشركات المصنعة لأجهزة الكمبيوتر التي تنتج أيضًا أجهزة كمبيوتر محمولة
حدد الشركة المصنعة المميزة من المنتج كـ pc_product حيث النوع = "كمبيوتر" والموجود (اختر الشركة المصنعة من المنتج حيث النوع = "كمبيوتر محمول" والشركة المصنعة = pc_product.Manufacturer)
نتيجة:
ابحث عن الشركات المصنعة لأجهزة الكمبيوتر التي لا تصنع الطابعات
الكلمتان الأساسيتان SOME وANY مترادفتان، لذا يمكنك استخدام أي منهما في الاستعلام الخاص بك. ستكون نتيجة هذا الاستعلام عمودًا واحدًا من القيم.
بناء الجملة:
< выражение>< оператор сравнения>بعض | أي (< подзапрос> ) <выражение><оператор сравнения>بعض | أي (<подзапрос>)
إذا تم إرجاع أي قيمة X من استعلام فرعي، فإن نتيجة العملية " " ترجع TRUE ، فسيتم تقييم المسند ANY أيضًا إلى TRUE .
مثال:ابحث عن موردي أجهزة الكمبيوتر الذين ليست أرقامهم معروضة للبيع (أي غير موجودة في جدول أجهزة الكمبيوتر)
بيانات مصدر الجدول:
نتيجة:
في المثال، الرقم المسند = ANY(SELECT Number FROM pc) سيرجع القيمة TRUE عندما يتم العثور على الرقم من الاستعلام الرئيسي في قائمة أرقام أجهزة الكمبيوتر المكتبية (التي يتم إرجاعها بواسطة الاستعلام الفرعي). بالإضافة إلى ذلك، يتم استخدام NOT. ستتكون مجموعة النتائج من عمود واحد - الشركة المصنعة. لمنع عرض مصنع واحد عدة مرات، تم تقديم كلمة الخدمة DISTINCT.
الآن دعونا نلقي نظرة على استخدام الكلمة الأساسية ALL:
مثال:تعرف على أرقام وأسعار أجهزة الكمبيوتر المحمولة التي تكلف أكثر من أي جهاز كمبيوتر
مهم:تجدر الإشارة إلى أنه بشكل عام، يؤدي الاستعلام باستخدام ANY إلى إرجاع مجموعة من القيم. ولذلك، فإن استخدام استعلام فرعي في عبارة WHERE بدون عوامل التشغيل EXISTS و IN و ALL و ANY، والتي تنتج قيمة منطقية، قد يؤدي إلى حدوث خطأ في وقت تشغيل الاستعلام
مثال:تعرف على أرقام وأسعار أجهزة الكمبيوتر التي تتجاوز تكلفتها الحد الأدنى لتكلفة أجهزة الكمبيوتر المحمولة
هذا الاستعلام صحيح لأنه تتم مقارنة التعبير العددي "السعر" باستعلام فرعي يُرجع قيمة واحدة
تقوم الدالة LEFT بقص عدد الأحرف المحددة بواسطة الوسيطة الثانية من يسار السلسلة:
غادر (<строка>,<число>)
تقوم الدالة RIGHT بإرجاع العدد المحدد من الأحرف إلى اليمين من تعبير سلسلة:
يمين(<строка>,<число>)
مثال:طباعة الحروف الأولى من أسماء جميع الشركات المصنعة
اختر اليسار المميز("الشركة المصنعة"، 1) من "المنتج"
نتيجة:
مثال:طباعة أسماء الشركات المصنعة التي تبدأ وتنتهي بنفس الحرف
بناء الجملة:
حدد `اسم`، واستبدل(`اسم`، "a"، "aa") من `المعلمين`