تنفيذ استعلامات SQL المعقدة. عامل تشغيل مجموعات البيانات باستثناء القواعد العامة مثال لمنشئ كتلة البيانات

27.06.2020
عندما تصادف في كثير من الأحيان أي تقنية أو لغة برمجة أو معيار، يتم تشكيل صورة معينة لقدراتها والحدود التي يتم استخدامها ضمنها. ويمكن أن يستمر هذا لفترة طويلة حتى تلمح العين أمثلة توسع آفاق المعرفة المتصلبة. اليوم، أود أن أتحدث عن مثل هذه الأمثلة وأشرحها للغة SQL. تصاميم مثيرة ونادرة، تعابير منسية، تقنيات غريبة تنتظرك في هذا المقال. أي شخص مهتم، مرحبا بكم في القط.

الفروق الدقيقة

كثيرا ما أسأل لمن هذه المقالة؟ لكن صدقوني، ليس من السهل دائمًا تقديم إجابة: من ناحية، هناك مطورو النينجا الذين يصعب مفاجأةهم بأي شيء، ومن ناحية أخرى، هناك شباب باداويون. ولكن يمكنني أن أقول شيئًا واحدًا مؤكدًا - للقارئ المهتم بـ SQL، والذي يمكنه استكمال صورته الغنية بتفاصيل صغيرة ولكنها مثيرة للاهتمام للغاية. لن تحتوي هذه المقالة على صفحات بطول كيلومتر واحد من استعلامات SQL، وبحد أقصى سطر أو سطرين، وفقط ما هو نادر في رأيي. ولكن بما أنني أريد أن أكون صريحًا تمامًا، إذا لم تكن غريبًا على SQL، فستبدو المقالة مملة بعض الشيء. جميع الأمثلة في المقالة، باستثناء الأول والرابع، يمكن أن تعزى إلى معيار SQL-92.

بيانات

ولتسهيل حياتنا قمت بوضع لوحة بيانات بسيطة سيتم اختبار نقاط معينة عليها ومن باب الاختصار سأعرض نتيجة التجربة عليها. أتحقق من جميع الاستفسارات على PostgreSql.

البرامج النصية وجدول البيانات

إنشاء سلع الجدول (رقم التعريف غير فارغ، تغيير أحرف الاسم (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")، خطأ)؛

الطلبات

1. اقتباسات مزدوجة

وأول شيء عندي سؤال بسيط: هل يمكن أن تعطي مثالاً لاستعلام SQL باستخدام مزدوجيقتبس؟نعم، ليس مع الفردي، الزوجي؟

مثال مع علامات الاقتباس المزدوجة

اختر اسم "اسم المنتج" من البضائع


لقد فوجئت جدًا عندما رأيت هذا لأول مرة. إذا حاولت تغيير علامات الاقتباس المزدوجة إلى علامات اقتباس مفردة، فستكون النتيجة كاملة آخر!

قد لا يبدو هذا مثالاً مفيدًا جدًا للتنمية الحقيقية. بالنسبة لي هذا ليس هو الحال. الآن أستخدمه بنشاط في جميع قوالب SQL الخاصة بي. النقطة بسيطة: عندما تعود بعد نصف عام إلى استعلام SQL مكون من 40 عمودًا، كيف ينقذك اسمهم "نحن". على الرغم من أنني لم أذكر SQL-92، في الإصدار الأخير هناك ذكر لعلامات الاقتباس المزدوجة.

2. الجدول الزائف. SQL-92

إنه غير دقيق بعض الشيء من وجهة نظر المصطلحات، ولكن الجوهر بسيط - الجدول الناتج عن استعلام فرعي في القسم "من". ولعل الحقيقة الأكثر شهرة في هذا المقال

الجدول الزائف

حدد mock.nickname "Nickname"، (في حالة استخدام mock.huff ثم "Yes" أو "No" النهاية) ""هل شعرت بالإهانة؟"" من (اختر الاسم كنية، والتوافر كما هو من البضائع) وهمية

في مثالنا، النموذج عبارة عن جدول زائف (يُسمى أحيانًا جدولًا افتراضيًا). وبطبيعة الحال، ليس المقصود منها على الإطلاق تشويه المعنى الحقيقي. مثال على ذلك.

3. منشئ كتلة البيانات. SQL-92

يبدو الأمر مخيفًا، وذلك ببساطة لأنني لم أجد ترجمة أو تفسيرًا جيدًا. وكما هو الحال دائمًا، من الأسهل الشرح بمثال:

مثال على منشئ كتلة البيانات

اختر الاسم "اسم المنتج"، السعر "السعر" من (القيم ("شبشب"، 100.00)، ("وسادة"، 200.00)) كما هي البضاعة (الاسم، السعر)

اسم المنتج سعر
النعال 100.00
وسادة 200.00

في قسم منالكلمة الرئيسية المستخدمة قيم، متبوعة بالبيانات بين قوسين، سطرًا تلو الآخر. النقطة المهمة هي أننا لا نختار البيانات من أي جدول على الإطلاق، ولكن ببساطة نقوم بإنشائها بسرعة، و"استدعاءها" جدولًا، وتسمية الأعمدة ثم استخدامها وفقًا لتقديرنا. تبين أن هذا الشيء مفيد للغاية عند اختبار حالات استعلام SQL مختلفة، عندما لا تكون هناك بيانات لبعض الجداول (في قاعدة البيانات المحلية الخاصة بك)، وتكون كتابة الإدراج كسولًا جدًا أو صعبة للغاية في بعض الأحيان، بسبب ارتباط الجداول والقيود .

4. الوقت والتاريخ والوقت والتاريخ

ربما واجه الجميع في الطلبات الحاجة إلى تحديد الوقت أو التاريخ أو التاريخ والوقت. تدعم العديد من أنظمة إدارة قواعد البيانات الأحرف t وd وts، على التوالي، للعمل مع هذه الأنواع. ولكن من الأسهل شرح ذلك بمثال: بالنسبة للحرفين d وt، كل شيء متشابه.
أعتذر للقارئ عن تضليلي، لكن كل ما يقال في الفقرة 4 لا يتعلق بلغة SQL، بل يتعلق بقدرات المعالجة المسبقة للاستعلامات في JDBC.

5. الإنكار. SQL-92

نحن جميعا نعرف عن المشغل لا، ولكن في كثير من الأحيان ينسون أنه يمكن تطبيقه على مجموعة من المسندات وعلى عمود واحد:

6. مقارنة كتل البيانات. SQL-92

مرة أخرى أعتذر عن المصطلحات. هذا هو واحد من الأمثلة المفضلة لدي

مثال لمقارنة كتل البيانات

اختر * من السلع حيث (الاسم، السعر، التوفر) = ("غطاء الوسادة"، 400.00، خطأ) - أو ما يعادله اختر * من السلع حيث الاسم = "غطاء الوسادة" والسعر = 400.00 والتوفر = خطأ

كما يتبين من المثال، فإن مقارنة كتل البيانات تشبه مقارنة عنصر بعنصر معنى_ 1 _block_1 = القيمة_ 1 _block_2، القيمة_ 2 _block_1 = القيمة_ 2 _block_2، القيمة_ 3 _block_1 = القيمة_ 3 _block_2استخدام وبينهم.

7. عوامل المقارنة مع المعدلات أي أو بعض أو الكل. SQL-92

وهنا يلزم بعض التوضيح. ولكن كما هو الحال دائما، أولا مثال ماذا يعني ذلك الجميعفي هذه الحالة؟ وهذا يعني أن شرط الاختيار يتم استيفاءه فقط من خلال تلك الصفوف التي تكون معرفاتها (في حالتنا 4 و5) أكبر أيمن القيم الموجودة في الاستعلام الفرعي (1 و 2 و 3). 4 أكبر من 1 ومن 2 ومن 3. 5 هو نفسه. ماذا يحدث لو استبدلنا الجميععلى أي?
ماذا يعني ذلك أيفي هذه الحالة؟ وهذا يعني أن شرط الاختيار يتم استيفاءه فقط من خلال تلك الصفوف التي تكون معرفاتها (في حالتنا هي 2 و3 و4 و5) أكبر مرة على الأقلمن القيم الموجودة في الاستعلام الفرعي (1 و 2 و 3). لنفسي المرتبطة بها الجميعمع و، أ أيمع أو. بعضو أينظائرها لبعضها البعض.

8. مشغلي العمل مع/تحت الطلبات. SQL-92

من المعروف أنه يمكنك دمج استعلامين مع بعضهما البعض باستخدام عوامل التشغيل اتحادأو الاتحاد الكل. يستخدم هذا في كثير من الأحيان. ولكن هناك 2 مشغلين آخرين يستثنيو تتقاطع.

مثال مع باستثناء

في الواقع، يتم استبعاد البيانات من المجموعة الثانية من مجموعة القيم الأولى.
في الواقع، يحدث تقاطع المجموعة الأولى من القيم والمجموعة الثانية.
هذا كل شيء، أشكركم على اهتمامكم.

افتتاحية

ن1. شكرا لstreetflush على النقد البناء. ساهم بمقالة تحتوي على معلومات حول ما هو معيار اللغة وما هو ليس كذلك.
ن2. تم تصحيح النقطة 4 لتوضيح أن ts/d/t ليس جزءًا من لغة SQL. شكرا لاهتمامكم ملكيج.

في هذا البرنامج التعليمي سوف تتعلم كيفية استخدام باستثناء عامل التشغيل في 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.
أين الشروط - اختياري. الشروط التي يجب استيفاؤها للسجلات المحددة.

ملحوظة

  • يجب أن يكون لكلا عبارات SELECT نفس عدد التعبيرات.
  • يجب أن تحتوي الأعمدة المقابلة في كل عبارة SELECT على أنواع بيانات متشابهة.
  • تقوم عبارة EXCEPT بإرجاع كافة السجلات من عبارة SELECT الأولى غير الموجودة في عبارة SELECT الثانية.
  • عامل التشغيل EXCEPT في SQL Server يعادل عامل التشغيل MINUS في Oracle.

مثال تعبير واحد

دعونا نلقي نظرة على مثال لعبارة 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. لا يمكن استخدام ORDER BY إلا في نهاية الاستعلام المركب لأنه ينطبق على نتيجة الصلة.

مثال:عرض أسعار أجهزة الكمبيوتر واللاب توب وأرقامها (أي التفريغ من جدولين مختلفين في استعلام واحد)


✍ الحل:
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 موجود

تحتوي SQL على تسهيلات لتنفيذ عمليات التقاطع والاختلاف في الاستعلامات - عبارة INTERSECT (التقاطع) وعبارة EXCEPT (الفرق). تعمل هذه الجمل بشكل مشابه لكيفية عمل UNION: تتضمن مجموعة النتائج فقط تلك الصفوف الموجودة في كلا الاستعلامين - INTERSECT، أو فقط تلك الصفوف من الاستعلام الأول المفقودة في الاستعلام الثاني - باستثناء. لكن المشكلة هي أن العديد من أنظمة إدارة قواعد البيانات لا تدعم هذه المقترحات. ولكن هناك طريقة للخروج - باستخدام المسند الموجود.

يتم تقييم دالة تقييم EXISTS إلى TRUE إذا قام الاستعلام الفرعي بإرجاع بعض الصفوف على الأقل؛ وإلا فسيتم تقييم EXISTS إلى FALSE. هناك أيضًا مسند غير موجود، وهو ما يفعل العكس.

عادةً ما يتم استخدام EXISTS في الاستعلامات الفرعية التابعة (على سبيل المثال، IN).

موجود (استعلام فرعي للجدول)

مثال:ابحث عن الشركات المصنعة لأجهزة الكمبيوتر التي تنتج أيضًا أجهزة كمبيوتر محمولة


✍ الحل:

حدد الشركة المصنعة المميزة من المنتج كـ pc_product حيث النوع = "كمبيوتر" والموجود (اختر الشركة المصنعة من المنتج حيث النوع = "كمبيوتر محمول" والشركة المصنعة = pc_product.Manufacturer)

نتيجة:

ابحث عن الشركات المصنعة لأجهزة الكمبيوتر التي لا تصنع الطابعات

SQL بعض الكلمات الرئيسية | أي وجميع

الكلمتان الأساسيتان SOME وANY مترادفتان، لذا يمكنك استخدام أي منهما في الاستعلام الخاص بك. ستكون نتيجة هذا الاستعلام عمودًا واحدًا من القيم.

بناء الجملة:

< выражение>< оператор сравнения>بعض | أي (< подзапрос> )

<выражение><оператор сравнения>بعض | أي (<подзапрос>)

إذا تم إرجاع أي قيمة X من استعلام فرعي، فإن نتيجة العملية " " ترجع TRUE ، فسيتم تقييم المسند ANY أيضًا إلى TRUE .

مثال:ابحث عن موردي أجهزة الكمبيوتر الذين ليست أرقامهم معروضة للبيع (أي غير موجودة في جدول أجهزة الكمبيوتر)


✍ الحل:

بيانات مصدر الجدول:

نتيجة:

في المثال، الرقم المسند = ANY(SELECT Number FROM pc) سيرجع القيمة TRUE عندما يتم العثور على الرقم من الاستعلام الرئيسي في قائمة أرقام أجهزة الكمبيوتر المكتبية (التي يتم إرجاعها بواسطة الاستعلام الفرعي). بالإضافة إلى ذلك، يتم استخدام NOT. ستتكون مجموعة النتائج من عمود واحد - الشركة المصنعة. لمنع عرض مصنع واحد عدة مرات، تم تقديم كلمة الخدمة DISTINCT.
الآن دعونا نلقي نظرة على استخدام الكلمة الأساسية ALL:

مثال:تعرف على أرقام وأسعار أجهزة الكمبيوتر المحمولة التي تكلف أكثر من أي جهاز كمبيوتر


✍ الحل:

مهم:تجدر الإشارة إلى أنه بشكل عام، يؤدي الاستعلام باستخدام ANY إلى إرجاع مجموعة من القيم. ولذلك، فإن استخدام استعلام فرعي في عبارة WHERE بدون عوامل التشغيل EXISTS و IN و ALL و ANY، والتي تنتج قيمة منطقية، قد يؤدي إلى حدوث خطأ في وقت تشغيل الاستعلام


مثال:تعرف على أرقام وأسعار أجهزة الكمبيوتر التي تتجاوز تكلفتها الحد الأدنى لتكلفة أجهزة الكمبيوتر المحمولة


✍ الحل:


هذا الاستعلام صحيح لأنه تتم مقارنة التعبير العددي "السعر" باستعلام فرعي يُرجع قيمة واحدة

وظائف للعمل مع السلاسل في SQL

تقوم الدالة LEFT بقص عدد الأحرف المحددة بواسطة الوسيطة الثانية من يسار السلسلة:

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

تقوم الدالة RIGHT بإرجاع العدد المحدد من الأحرف إلى اليمين من تعبير سلسلة:

يمين(<строка>,<число>)

مثال:طباعة الحروف الأولى من أسماء جميع الشركات المصنعة


✍ الحل:

اختر اليسار المميز("الشركة المصنعة"، 1) من "المنتج"

نتيجة:

مثال:طباعة أسماء الشركات المصنعة التي تبدأ وتنتهي بنفس الحرف


✍ الحل:

وظيفة استبدال SQL

بناء الجملة:

حدد `اسم`، واستبدل(`اسم`، "a"، "aa") من `المعلمين`