דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. האנטומיה של שאילתת SQL- תגובות

האנטומיה של שאילתת SQL- תגובות

מתוזמן נעוץ נעול הועבר תכנות
27 פוסטים 4 כותבים 311 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN מנותק
    nigunN מנותק
    nigun
    השיב לyossiz ב נערך לאחרונה על ידי nigun
    #3

    @yossiz
    ולמה זה משנה?
    עריכה: מצאתי כאן תשובה

    מייל: nigun@duck.com

    yossizY תגובה 1 תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לnigun ב נערך לאחרונה על ידי
      #4

      @nigun אה, עכשיו אני מבין במה אתה מתקשה.
      התשובה היא שלפני הקיבוץ אי אפשר לסנן לפי תוצאה של פונקציה שמסכמת את כל השורות המקובצות.

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      nigunN תגובה 1 תגובה אחרונה
      1
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב לyossiz ב נערך לאחרונה על ידי
        #5

        @yossiz
        בתיעוד של מיקרוסופט לSQL כתוב
        HAVING Specifies a search condition for a group or an aggregate

        משמע שזה משמש גם בשביל GROUP BY וגם בשביל שאר הערכים שמתקבלים מתוך פונקציה.
        האם זה אומר שיש אופציה שישתמשו בHAVING בלי GROUP BY?

        מייל: nigun@duck.com

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לnigun ב נערך לאחרונה על ידי yossiz
          #6

          אני צריך לתקן קצת במאמר שלי. כתבתי שאחרי קיבוץ אי אפשר להזכיר ערך של שורה ספציפית רק ערך של פונקציה שמסכמת באיזשהו צורה את כל השורות המקופלות בשורה זו. זה לא לגמרי נכון, כי אפשר להזכיר את הערך של העמודה שלפיה עשית את הקיבוץ מכיון שהערך שווה לכל השורות המקובצות. (בחלק מהמנועים אפשר להזכיר ערכים של עמודות אחרות אבל אין לזה משמעות ברורה).
          אני לא יודע אם הדבר הזה בלבל אותך

          משמע שזה משמש גם בשביל GROUP BY וגם בשביל שאר הערכים שמתקבלים מתוך פונקציה.

          אני לא בטוח שאני מבין לאיזה שני דברים אתה מתכוון.

          האם זה אומר שיש אופציה שישתמשו בHAVING בלי GROUP BY?

          אפשר, אבל זה עושה קיפול מובן (implicit) של כל השורות לשורה אחת

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          nigunN dovidD 2 תגובות תגובה אחרונה
          0
          • nigunN מנותק
            nigunN מנותק
            nigun
            השיב לyossiz ב נערך לאחרונה על ידי
            #7

            @yossiz אמר בהאנטומיה של שאילתת SQL- תגובות:

            אני לא בטוח שאני מבין לאיזה שני דברים אתה מתכוון.

            group or aggregate

            האם זה אומר שיש אופציה שישתמשו בHAVING בלי GROUP BY?

            אפשר, אבל זה עושה קיפול מובן (implicit) של כל השורות לשורה אחת

            לא הבנתי
            נראה לי שאני צריך לנסות על טבלה אמיתית וזהו.

            מייל: nigun@duck.com

            תגובה 1 תגובה אחרונה
            0
            • nigunN מנותק
              nigunN מנותק
              nigun
              כתב ב נערך לאחרונה על ידי
              #8

              עכשיו נראה לי שעכשיו אני מבין
              פשוט לא שייך לעשות aggregate אם אין group (אולי אפשר אבל אין לזה משמעות)

              וחוץ מזה השאילתא

              SELECT * FROM info GROUP BY user WHERE id > 10000;
              

              לא תעבוד, כי אי אפשר לעשות WHERE אחרי הGROUP.

              אבל השאילתא

              SELECT * FROM info GROUP BY user HAVING id > 10000;
              

              תעבוד.
              וכנ"ל

              SELECT * FROM info  HAVING id > 10000;
              

              אז השאלה שלי עכשיו, למה לא להשתמש תמיד בHAVING ?

              מייל: nigun@duck.com

              yossizY OdedDvirO 2 תגובות תגובה אחרונה
              0
              • yossizY מנותק
                yossizY מנותק
                yossiz
                השיב לnigun ב נערך לאחרונה על ידי yossiz
                #9

                @nigun אמר בהאנטומיה של שאילתת SQL- תגובות:

                אבל השאילתא
                SELECT * FROM info GROUP BY user HAVING id > 10000;
                תעבוד.

                ב-postgres זה לא יעבוד. גם במנועים אחרים אם זה יעבוד (ואני לא בטוח שזה חוקי בשום מנוע) לא יהיה לזה שום משמעות כי ה-id לא מוגדר אם לא עשית קיבוץ לפי id.

                וכנ"ל
                SELECT * FROM info HAVING id > 10000;

                אז השאלה שלי עכשיו, למה לא להשתמש תמיד בHAVING ?

                כנ"ל. HAVING בלי GROUP BY עושה קיבוץ אוטומטי של כל השורות לשורה אחת. אם כן ל-id אין משמעות

                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                nigunN תגובה 1 תגובה אחרונה
                1
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  השיב לyossiz ב נערך לאחרונה על ידי
                  #10

                  @yossiz אמר בהאנטומיה של שאילתת SQL- תגובות:

                  קיפול מובן (implicit)

                  מתרגמים את זה בד"כ "קמפול משתמע" או "קמפול מרומז".

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  2
                  • nigunN מנותק
                    nigunN מנותק
                    nigun
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #11

                    @yossiz
                    שתי השאליתות עבדו לי יופי בMYSQL

                    מייל: nigun@duck.com

                    yossizY תגובה 1 תגובה אחרונה
                    1
                    • yossizY מנותק
                      yossizY מנותק
                      yossiz
                      השיב לnigun ב נערך לאחרונה על ידי
                      #12

                      @nigun נראה שאתה צודק.
                      http://sqlfiddle.com/#!9/5ccdef/6/0
                      זו התנהגות לא סטנדרטית של mysql ועדיף לא להשתמש בה.

                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                      nigunN תגובה 1 תגובה אחרונה
                      0
                      • nigunN מנותק
                        nigunN מנותק
                        nigun
                        השיב לyossiz ב נערך לאחרונה על ידי
                        #13

                        @yossiz
                        למה לא סטנדרתית
                        בתיעוד של SQL שהבאתי למעלה כתוב
                        When GROUP BY is not used, HAVING behaves like a WHERE clause

                        מייל: nigun@duck.com

                        yossizY תגובה 1 תגובה אחרונה
                        0
                        • OdedDvirO מנותק
                          OdedDvirO מנותק
                          OdedDvir
                          השיב לnigun ב נערך לאחרונה על ידי
                          #14

                          @nigun אמר בהאנטומיה של שאילתת SQL- תגובות:

                          אז השאלה שלי עכשיו, למה לא להשתמש תמיד בHAVING ?

                          מבחינת יעילות, לענ"ד אין להשתמש ב HAVING אם אפשר להשתמש ב- WHERE, מפני שה-WHERE הוא מסנן מוקדם ברמת השורה, ומתבצע לפני הקיבוץ, וכך הקיבוץ מתבצע על קבוצה קטנה יותר (תוצאת ה-WHERE) לעומת זאת ה-HAVING הוא מסנן מאוחר ברמת קבוצה, ויתבצע על כל הרשומות.

                          nigunN תגובה 1 תגובה אחרונה
                          3
                          • nigunN מנותק
                            nigunN מנותק
                            nigun
                            השיב לOdedDvir ב נערך לאחרונה על ידי
                            #15

                            @OdedDvir
                            אני שואל על מקרה שאין בו קיבוץ.

                            מייל: nigun@duck.com

                            תגובה 1 תגובה אחרונה
                            0
                            • yossizY מנותק
                              yossizY מנותק
                              yossiz
                              השיב לnigun ב נערך לאחרונה על ידי
                              #16

                              @nigun זה היה נכון ב-SQL Server 2005, בתיעוד של הגירסה העדכנית כתוב כמו שאני כתבתי:

                              When GROUP BY is not used, there is an implicit single, aggregated group.

                              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                              nigunN תגובה 1 תגובה אחרונה
                              1
                              • nigunN מנותק
                                nigunN מנותק
                                nigun
                                השיב לyossiz ב נערך לאחרונה על ידי nigun
                                #17

                                @yossiz
                                אז איך יראה התוצאה בSQL Server 2019
                                (לא הבנתי מה זה implicit).

                                אני מנחש שהם שינו את זה בגלל שזה גורם לחוסר אחידות בשימוש של HAVING
                                וכך גם שאר המנועים, אבל MYSQL החליטו להשאיר את זה משום מה.

                                מייל: nigun@duck.com

                                OdedDvirO yossizY 2 תגובות תגובה אחרונה
                                0
                                • OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  השיב לnigun ב נערך לאחרונה על ידי OdedDvir
                                  #18

                                  @nigun אמר בהאנטומיה של שאילתת SQL- תגובות:

                                  (לא הבנתי מה זה implicit).

                                  התרגום הוא "בלתי מפורש", דהיינו שנוצר קיבוץ בלתי מפורש עם קבוצה אחת
                                  (כאילו השתמשנו בפירוש ב GROUP BY)

                                  תגובה 1 תגובה אחרונה
                                  1
                                  • yossizY מנותק
                                    yossizY מנותק
                                    yossiz
                                    השיב לnigun ב נערך לאחרונה על ידי
                                    #19

                                    @nigun אמר בהאנטומיה של שאילתת SQL- תגובות:

                                    אז איך יראה התוצאה בSQL Server 2019

                                    לא תראה תוצאה כי השאילתה לא חוקית כי אסור להזכיר עמודה שהוא לא חלק מה-group by אם לא על ידי פונקצית aggregation.
                                    דוד תרגם את המילה implicit כ"משתמע" או "מרומז"

                                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                    OdedDvirO nigunN 2 תגובות תגובה אחרונה
                                    2
                                    • OdedDvirO מנותק
                                      OdedDvirO מנותק
                                      OdedDvir
                                      השיב לyossiz ב נערך לאחרונה על ידי
                                      #20

                                      @yossiz אמר בהאנטומיה של שאילתת SQL- תגובות:

                                      דוד תרגם את המילה implicit כ"משתמע" או "מרומז"

                                      לא שמתי לב...

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • nigunN מנותק
                                        nigunN מנותק
                                        nigun
                                        השיב לyossiz ב נערך לאחרונה על ידי
                                        #21

                                        @yossiz
                                        יצאתי מבולבל

                                        @yossiz אמר בהאנטומיה של שאילתת SQL- תגובות:

                                        לא תראה תוצאה כי השאילתה לא חוקית כי אסור להזכיר עמודה שהוא לא חלק מה-group by אם לא על ידי פונקצית aggregation.

                                        @yossiz אמר בהאנטומיה של שאילתת SQL- תגובות:

                                        אפשר, אבל זה עושה קיפול מובן (implicit) של כל השורות לשורה אחת

                                        יש תוצאה או לא?
                                        ואיך נכנס לכאן implicit?

                                        מייל: nigun@duck.com

                                        yossizY תגובה 1 תגובה אחרונה
                                        1
                                        • yossizY מנותק
                                          yossizY מנותק
                                          yossiz
                                          השיב לnigun ב נערך לאחרונה על ידי
                                          #22

                                          @nigun אתה צודק, סתרתי את עצמי. כי לא בדקתי את ההתנהגות של כל המנועים וניסיתי לנחש מה יהיה ההתנהגות של mysql, הניחוש לא יצא כל כך מוצלח 🙂

                                          יש תוצאה או לא?

                                          אין.

                                          ואיך נכנס לכאן implicit?

                                          כי לא עשית קיבוץ בפירוש על ידי GROUP BY אז הקיבוץ הוא "לא מפורש" או "מרומז" או "משתמע" או איך שתקרא לזה... מזה שעשית סינון על התוצאה של הקיבוץ על ידי HAVING.

                                          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                          nigunN תגובה 1 תגובה אחרונה
                                          1

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום