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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
27 פוסטים 4 כותבים 311 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
              • nigunN מנותק
                nigunN מנותק
                nigun
                השיב לyossiz ב נערך לאחרונה על ידי
                #23

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

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

                אז implicit זה סיבת השגיאה?

                מייל: nigun@duck.com

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

                  @nigun בא נעשה פה סדר,
                  יש שינוי התנהגות בין mysql ל-sql server ו-postgres במקרה של HAVING בלי קיבוץ
                  mysql מתייחס לזה כ-where
                  השניים האחרים מתייחסים לזה כרמז שאתה רוצה קיבוץ ולכן כל השורות מתקפלות לשורה אחת מקובץ. זה ברור? ב-mysql תקבל שורות מרובות (אם יש יותר משורה אחת שעונה על הקריטיריונים), בשניים האחרים אתה לא תקבל יותר משורה אחת!!!
                  זה הבדל ראשון
                  עכשיו במקרה של שורה מקובצת מכמה שורות, יש גם הבדלי התנהגות בין המנועים אם מותר להזכיר שם עמודה שהוא לא חלק מהקיבוץ (למרות שאין לו ערך מוגדר אחרי הקיבוץ).
                  mysql מתייחס לזה בצורה סלחנית ומתיר את זה. (איזה ערך מוחזר? הרי השורה מקובצת מכמה שורות? אני לא יודע...)
                  postgres ו-sql server זורקים שגיאה.
                  אלו היסודות ואידך פירושא זיל גמור.

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

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

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

                    mysql מתייחס לזה בצורה סלחנית ומתיר את זה. (איזה ערך מוחזר? הרי השורה מקובצת מכמה שורות? אני לא יודע...)
                    postgres ו-sql server זורקים שגיאה.

                    https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
                    אני מבין שהתוצאה עקבית (כל עוד אין שינוי שורות בטבלה) אך בלתי צפויה. זה בפועל חוסך גם ביצועים (אל תחפש לא MAX ולא MIN, תביא משהו וזהו) והמון תחביר מייגע... אבל השאילתה לא הכי קריאה והגיונית.

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

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

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

                      @dovid תודה. חיפשתי קצת בתיעוד ומשום מה לא הצלחתי למצוא את זה.

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

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

                      לא מצאתי רמז לזה שהתוצאה עקבית. וגם לא ברור לי מה היתרון בזה שזה עקבי אם היא בלתי צפויה.

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

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

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

                        לא מצאתי רמז לזה שהתוצאה עקבית. וגם לא ברור לי מה היתרון בזה שזה עקבי אם היא בלתי צפויה.

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

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

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

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

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

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

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