في MySQL ، ما الفرق بين عبارات "وجود" و "أين"؟ متى يكون من المناسب استخدام كل منها؟


الاجابه 1:

حيث يتم استخدام جملة لتقييد السجلات. أو لجلب السجلات المطابقة فقط.

وجود هو نفسه كما هو الحال في بند لتقييد السجلات. ولكن استخدامها فقط عندما يكون لديك GroupBy جملة. يتم استخدام التجميع حسب الجملة عندما يكون لديك سجلات مكررة وتريد التوحيد في سجل واحد بمساعدة المجموع ، العد ، المتوسط ​​، الحد الأقصى ، الحد الأدنى ، إلخ.

على سبيل المثال ، حيث: أدناه SQL هو العثور على عدد من الطلبات من قبل العملاء: SELECT * FROM orders حيث customer_id = 25.

على سبيل المثال ، للحصول على: يوجد أدناه SQL عدد طلبات العملاء: SELECT customer_id ، COUNT (order_id) من FROM orders GROUP BY customer_id


الاجابه 2:

التفسير الأساسي هو أنه من أين سيتم التصفية أولاً ، بعد التصفية سيتم التصفية. هذا هو السبب في استخدام HAVING للوظائف المجمعة - يتم تجميع السجلات بعد الشرط WHERE.

مثال SQL: جميع المستخدمين المسمى Mike إذا كان أكثر من 3 لديهم نفس العمر

SELECT COUNT (*) رقم ، العمر ، الاسم من المستخدمين WHERE name = "Mike" GROUP حسب العمر الذي لديه رقم> 3

كيف يعمل: 1. سوف MySql أولا تحديد جميع المستخدمين الذين لديهم اسم Mike2. سيتم تجميع جميع المستخدمين حسب العمر - دعنا نقول أن هناك 4 مستخدمين بعمر 34 عامًا ، سيعرض MySql سجلًا / مستخدمًا واحدًا فقط لنفس العمر (أنشئ مجموعة حسب العمر 34) .3. الآن فقط سيحسب MySql المستخدمين المجمعين ، وسوف يكون قادرًا على التحقق من عدد المستخدمين في مجموعة واحدة محددة.

كما ترون ، يجب أن تكون تلك العمليات في هذا الترتيب المحدد.

الآن ، من المهم أن تعرف أن كل ما تستخدمه في HAVING يجب أن يكون موجودًا في SELECT. مثال:

- هذا ليس رقم الحساب المحدد (*) ، الاسم ، العمر من المستخدمين WHERE name = "Mike" GROUP حسب العمر <عنوان "> العنوان غير محدد - لكن هذا الرقم هو VALID SELECT COUNT (*) ) رقم ، اسم ، عمر من المستخدمين WHERE name = "Mike" AND address <> "" تجميع حسب العمر الذي يبلغ من العمر 30 عامًا - يمكننا التصفية حسب أي شيء نختاره

الآن ، للسرعة ، من أجل أخذ الفهارس في الاعتبار ، سوف تحتاج إلى استخدام WHERE

في مثالنا ، دعنا نقول سن مؤشر ، SQL أعلاه سيكون أبطأ بكثير من التالي

SELECT COUNT (*) رقم والاسم والعمر من المستخدمين WHERE name = "Mike" و العنوان <> "" والعمر> 30 - نستخدم INDEX GROUP حسب العمر - لا نستخدم HAVING بعد الانتهاء من كل الأعمال الشاقة

يمكنك أيضًا العثور على إجابة جيدة هنا أين يوجد مقابل (الإجابة الثانية توضح جزء الأداء)


الاجابه 3:

التفسير الأساسي هو أنه من أين سيتم التصفية أولاً ، بعد التصفية سيتم التصفية. هذا هو السبب في استخدام HAVING للوظائف المجمعة - يتم تجميع السجلات بعد الشرط WHERE.

مثال SQL: جميع المستخدمين المسمى Mike إذا كان أكثر من 3 لديهم نفس العمر

SELECT COUNT (*) رقم ، العمر ، الاسم من المستخدمين WHERE name = "Mike" GROUP حسب العمر الذي لديه رقم> 3

كيف يعمل: 1. سوف MySql أولا تحديد جميع المستخدمين الذين لديهم اسم Mike2. سيتم تجميع جميع المستخدمين حسب العمر - دعنا نقول أن هناك 4 مستخدمين بعمر 34 عامًا ، سيعرض MySql سجلًا / مستخدمًا واحدًا فقط لنفس العمر (أنشئ مجموعة حسب العمر 34) .3. الآن فقط سيحسب MySql المستخدمين المجمعين ، وسوف يكون قادرًا على التحقق من عدد المستخدمين في مجموعة واحدة محددة.

كما ترون ، يجب أن تكون تلك العمليات في هذا الترتيب المحدد.

الآن ، من المهم أن تعرف أن كل ما تستخدمه في HAVING يجب أن يكون موجودًا في SELECT. مثال:

- هذا ليس رقم الحساب المحدد (*) ، الاسم ، العمر من المستخدمين WHERE name = "Mike" GROUP حسب العمر <عنوان "> العنوان غير محدد - لكن هذا الرقم هو VALID SELECT COUNT (*) ) رقم ، اسم ، عمر من المستخدمين WHERE name = "Mike" AND address <> "" تجميع حسب العمر الذي يبلغ من العمر 30 عامًا - يمكننا التصفية حسب أي شيء نختاره

الآن ، للسرعة ، من أجل أخذ الفهارس في الاعتبار ، سوف تحتاج إلى استخدام WHERE

في مثالنا ، دعنا نقول سن مؤشر ، SQL أعلاه سيكون أبطأ بكثير من التالي

SELECT COUNT (*) رقم والاسم والعمر من المستخدمين WHERE name = "Mike" و العنوان <> "" والعمر> 30 - نستخدم INDEX GROUP حسب العمر - لا نستخدم HAVING بعد الانتهاء من كل الأعمال الشاقة

يمكنك أيضًا العثور على إجابة جيدة هنا أين يوجد مقابل (الإجابة الثانية توضح جزء الأداء)


الاجابه 4:

التفسير الأساسي هو أنه من أين سيتم التصفية أولاً ، بعد التصفية سيتم التصفية. هذا هو السبب في استخدام HAVING للوظائف المجمعة - يتم تجميع السجلات بعد الشرط WHERE.

مثال SQL: جميع المستخدمين المسمى Mike إذا كان أكثر من 3 لديهم نفس العمر

SELECT COUNT (*) رقم ، العمر ، الاسم من المستخدمين WHERE name = "Mike" GROUP حسب العمر الذي لديه رقم> 3

كيف يعمل: 1. سوف MySql أولا تحديد جميع المستخدمين الذين لديهم اسم Mike2. سيتم تجميع جميع المستخدمين حسب العمر - دعنا نقول أن هناك 4 مستخدمين بعمر 34 عامًا ، سيعرض MySql سجلًا / مستخدمًا واحدًا فقط لنفس العمر (أنشئ مجموعة حسب العمر 34) .3. الآن فقط سيحسب MySql المستخدمين المجمعين ، وسوف يكون قادرًا على التحقق من عدد المستخدمين في مجموعة واحدة محددة.

كما ترون ، يجب أن تكون تلك العمليات في هذا الترتيب المحدد.

الآن ، من المهم أن تعرف أن كل ما تستخدمه في HAVING يجب أن يكون موجودًا في SELECT. مثال:

- هذا ليس رقم الحساب المحدد (*) ، الاسم ، العمر من المستخدمين WHERE name = "Mike" GROUP حسب العمر <عنوان "> العنوان غير محدد - لكن هذا الرقم هو VALID SELECT COUNT (*) ) رقم ، اسم ، عمر من المستخدمين WHERE name = "Mike" AND address <> "" تجميع حسب العمر الذي يبلغ من العمر 30 عامًا - يمكننا التصفية حسب أي شيء نختاره

الآن ، للسرعة ، من أجل أخذ الفهارس في الاعتبار ، سوف تحتاج إلى استخدام WHERE

في مثالنا ، دعنا نقول سن مؤشر ، SQL أعلاه سيكون أبطأ بكثير من التالي

SELECT COUNT (*) رقم والاسم والعمر من المستخدمين WHERE name = "Mike" و العنوان <> "" والعمر> 30 - نستخدم INDEX GROUP حسب العمر - لا نستخدم HAVING بعد الانتهاء من كل الأعمال الشاقة

يمكنك أيضًا العثور على إجابة جيدة هنا أين يوجد مقابل (الإجابة الثانية توضح جزء الأداء)