/ / SQL נפרדים: תיאור, דוגמאות, מאפיינים

SQL נבדל: תיאור, דוגמאות, מאפיינים

לעתים קרובות בעת שימוש ב- SQL עבור אחזורמידע מהטבלאות, המשתמש מקבל נתונים מיותרים, המורכב בנוכחות שורות כפולות זהות זהים. כדי לבטל מצב זה, השתמש בארגומנט SQL הנבחר בסעיף בחר. מאמר זה ידון בדוגמאות לשימוש בטענה זו, וכן במצבים בהם יש לנטוש את השימוש בטענה.

לפני שנתחיל לחשוב על דוגמאות קונקרטיות, ניצור כמה טבלאות חיוניות במסד הנתונים.

sq

הכנת טבלאות

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

בואו נמלא את הטבלאות בנתונים. הוסף 9 ערכים לטבלת הטפטים:

אבובי

תְעוּדַת זֶהוּת

סוּג

צֶבַע

struct

מחיר

1

עיתון

סַסגוֹנִיוּת

מובלט

56,9

2

נייר דו שכבתי

בז '

חלקלק

114,8

3

ויניל

תפוז

מובלט

504

4

לא ארוג

בז '

מובלט

1020,9

5

נייר דו שכבתי

בז '

חלקלק

150,6

6

עיתון

סַסגוֹנִיוּת

חלקלק

95,4

7

ויניל

חום

חלקלק

372

8

לא ארוג

לבן

מובלט

980,1

9

בד

ורוד

חלקלק

1166,5

יש גם תשעה רשומות בטבלה עם שאריות:

אוסטאטקי

id_oboi

לספור

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

נתחיל לתאר עד כמה נעשה שימוש מובחן ב- SQL.

מקומות שונים בסעיף בחר

יש להניח את הייחודי מיד לאחר מכןבחר מילת מפתח בשאילתות. הוא מוחל מיד על כל העמודות שצוינו בסעיף Select, מכיוון שהוא לא יכלול שורות זהות לחלוטין מתוצאת השאילתה הסופית. לפיכך, מספיק לציין "בחר נבדל" פעם אחת בעת כתיבת שאילתת SQL. יוצא מן הכלל הוא השימוש בפונקציות מצטברות נפרדות בתוך פנים, אותם נשקול מעט מאוחר יותר.

בחר SQL נבדל

יש לזכור שרוב DBMS אינם מזהים את שאילתתך כך:

בחר Ostatki. ספירה מובחנת, אובוי מובחן. *

מאובוי

הצטרף פנימי ל- Ostatki ON Oboi.id = Ostatki.id_oboi

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

שימוש מובחן בשאילתות סטנדרטיות

ברור שעם בנייה מוכשרת של המבנהטבלאות ומילוי שלהם, בתוך טבלה אחת מצבים אינם נכללים כאשר נתקלים בשורות זהות לחלוטין. לכן, ביצוע השאילתה "בחר מובחן *" עם בחירה מטבלה אחת אינו מעשי כמעט.

נבדל ב- sql

תארו לעצמכם מצב שנצטרך לברר איזה סוג טפט יש לנו, למען הנוחות, נמיין מיד לפי סוג:

בחר Oboi.type

מסדר אבובי לפי סוג

ואנחנו מקבלים את התוצאה:

סוּג

עיתון

עיתון

נייר דו שכבתי

נייר דו שכבתי

ויניל

ויניל

בד

לא ארוג

לא ארוג

כפי שאתה יכול לראות, יש שורות כפולות בטבלה. אם נוסיף לסעיף בחר מובחן:

בחר Oboi.type מובהק

מסדר אבובי לפי סוג

אנו מקבלים את התוצאה ללא חזרות:

סוּג

עיתון

נייר דו שכבתי

ויניל

בד

לא ארוג

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

שימוש בפונקציות מצטברות נפרדות

ניתן להשתמש בארגומנט המובהק של SQL עם כל אחד מהםפונקציה מצטברת. אך עבור Min ו- Max זה לא ישפיע, וכשמחושבים את הסכום או הממוצע, לעתים נדירות אתה יכול לדמיין מצב בו לא יהיה צורך לקחת בחשבון את החזרות.

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

סכום בחר (Ostatki.count)

מאוסטסטקי

הבקשה תחזיר את התשובה 143. אם נשנה ל:

סכום בחירה (Ostatki.count מובהק)

מאוסטסטקי

אנו מקבלים רק 119, מכיוון שטפטים תחת מאמרים 3 ו -7 נמצאים באותו מחסן. עם זאת, ברור שתשובה זו אינה נכונה.

משמש לרוב ב- SQL שונה מהפונקציה Count. לכן, ללא קושי, אנו יכולים לגלות כמה סוגים ייחודיים של טפטים יש לנו בדרך כלל:

ספירת SELECT (Oboi.type מובחנת)

מאובוי

וקבל תוצאה 5 - נייר רגיל ודו שכבתי, ויניל, בד ולא ארוג. אין ספק שכולם ראו פרסומת כמו: "רק לנו יש יותר מ -20 סוגים של טפטים שונים!", כלומר בחנות זו אין כמה עשרות גלילים מכל דבר, אלא טפטים ממגוון רחב של סוגים מודרניים.

מעניין שבבקשה אחת תוכלו לצייןפונקציות ספירה מרובות עם ובלי מובחנות. כלומר, זהו המצב היחיד שבו מובחנים ב- Select יכולים להופיע מספר פעמים.

מתי להפיל את הוויכוח

יש להשליך את השימוש בארגומנט המובהק של SQL באחד משני המקרים:

  1. אתה מביא משולחנות ובטוחייחוד הערכים בכל אחד מהם. במקרה זה, השימוש בטיעון אינו הולם, מכיוון שמדובר בעומס נוסף על השרת או הלקוח (תלוי בסוג ה- DBMS).
  2. אתה חושש לאבד את הנתונים שאתה צריך. הבה נסביר.

נניח שהבוס שלך מבקש ממך לרשום את הטפטים שיש לך עם שתי עמודות בלבד - סוג וצבע. מתוך הרגל, אתה מספק את הטיעון המובהק:

בחר Oboi.type מובחן, Oboi.color

מאובוי

סדר לפי Oboi.type

וגם - אתה מאבד חלק מהנתונים:

סוּג

צֶבַע

עיתון

סַסגוֹנִיוּת

נייר דו שכבתי

בז '

ויניל

חום

ויניל

תפוז

בד

ורוד

לא ארוג

בז '

לא ארוג

לבן

נראה כי יש לנו רק סוג אחד של טפט נייר (רגיל ושתי שכבות), אם כי למעשה, אפילו בטבלה הקטנה שלנו ישנם שני מאמרים כל אחד (התוצאה היא ללא הבדל):

סוּג

צֶבַע

עיתון

סַסגוֹנִיוּת

עיתון

סַסגוֹנִיוּת

נייר דו שכבתי

בז '

נייר דו שכבתי

בז '

ויניל

חום

ויניל

תפוז

בד

ורוד

לא ארוג

לבן

לא ארוג

בז '

לכן, כמו בכתיבת כל שאילתה, עם הטיעון המובהק, עליכם להיות זהירים ולפתור את הבעיה בצורה מיומנת ביישומה, בהתאם למשימה העומדת על הפרק.

אלטרנטיבה מובחנת

ההפך מלהבדיל הוא טיעוןאת כל. קווים כפולים נשמרים בעת החלתם. אך מכיוון שברירת המחדל ה- DBMS חושב שיש להציג את כל הערכים, הארגומנט All הוא יותר מסייג מאשר ארגומנט פונקציונלי אמיתי.

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

אהבתי:
0
הודעות פופולריות
התפתחות רוחנית
מזון
כן