כלום – זה הרבה או קצת ? על Nulls - ilDBA Portal

כלום – זה הרבה או קצת ? על Nulls

12/12/2011 | פורסם על ידי

כלום – זה הרבה או קצת ?

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

SQL> SELECT ename,job,sal,comm FROM emp WHERE deptno=30 ORDER BY comm ASC;
ENAME      JOB              SAL       COMM
---------- --------- ---------- ----------
TURNER     SALESMAN        1500          0
ALLEN      SALESMAN        1600        300
WARD       SALESMAN        1250        500
MARTIN     SALESMAN        1250       1400
JAMES      CLERK            950
BLAKE      MANAGER         2850

בתוצאות הנ"ל ניתן לראות כי ה- Nulls מופיעים בסוף הרשימה, משמע הם נחשבים כערך גבוה, למעשה הערך הגבוה ביותר שיש, ולכן הם אחרונים במיון כאשר ממיינים בסדר עולה (ASC).

SQL> SELECT ename,job,sal,comm FROM emp WHERE deptno=30 ORDER BY comm DESC;
ENAME      JOB              SAL       COMM
---------- --------- ---------- ----------
BLAKE      MANAGER         2850
JAMES      CLERK            950
MARTIN     SALESMAN        1250       1400
WARD       SALESMAN        1250        500
ALLEN      SALESMAN        1600        300
TURNER     SALESMAN        1500          0

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

איך ניתן לשלוט ולשנות את ההתנהגות הנ"ל ? אפשר כמובן להשתמש בפונקציות שונות כגון NVL, ואפשר כמובן גם להוסיף תנאי שלא יציג כלל את ה- Nulls. אבל יש גם דרך הרבה יותר פשוטה וקלה. להלן דוגמא:

SQL> SELECT ename,job,sal,comm FROM emp WHERE deptno=30 ORDER BY comm DESC NULLS LAST;
ENAME      JOB              SAL       COMM
---------- --------- ---------- ----------
MARTIN     SALESMAN        1250       1400
WARD       SALESMAN        1250        500
ALLEN      SALESMAN        1600        300
TURNER     SALESMAN        1500          0
JAMES      CLERK            950
BLAKE      MANAGER         2850

השינוי הינו פשוט וקל במיוחד. כל שעליכם לעשות הינו להוסיף את הפקודה NULLS LAST או לחילופין NULLS FIRST וזאת בכדי לשלוט במיקומם של ה- Nulls בתוצאות הממוינות ולציין האם הם יופיעו בהתחלה או בסוף.

נתראה ברשומה הבאה!

עמי אהרונוביץ

ניתן ליצור קשר עם עמי דרך עמוד האודות שלו: אודות

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

הפונקציה COALESCE

כולם מכירים את הפונקציה NVL, ומשתמשים בה לא מעט. לעומת זאת, הפונקציה COALESCE, השייכת לאותה משפחה של פונקציות, פחות מוכרת, למרות שהיא קיימת כבר מגרסה 9i ועולה ביכולותיה על NVL הישנה והטובה. מצד שני, אף [...]

טיפ: איך לזכור ב-SQLPLUS שאתה בסביבת היצור

כמה פעמים קרה לנו שעבדנו עם sqlplus  מול סביבת יצור ביחד עם עוד כמה חלונות פתוחים ועם קצת לחץ? בקיצור כרגיל… מכוון שהכול כל כך לחוץ, הרצנו איזה פקודה הרסנית, ומיד הצטערנו עליה מאוד: אוי! הרצתי [...]
עבודה

עבודה תחת סביבת FireWall

אורי לרנר בטיפ קצר ושימושי על עבודה בסביבת אורקל [...]
Indexes

Indexes in SQL Server 2

ערן שקד ממשיך בסדרת מאמרים על אינדקסים בSQL [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: