סדרת SQL בסיסי - פוסט 14 - ערכים ריקים
הערך המיוחד NULL מייצג ב SQL מצב בו אנחנו לא יודעים מה הערך בעמודה או שערך בעמודה לא קיים. בשיעור זה אראה מספר דגשים לעבודה איתו.
1. הכנסת ערכים ריקים
פקודת INSERT שלא מציינת עמודה אחת או יותר תגרום להכנסת הערך NULL לאותה עמודה שלא הופיעה בפקודה, אלא אם כן לאותה עמודה הוגדר ערך ברירת מחדל. לדוגמה:
create table demo(id integer primary key,
a integer default 0,
b integer,
c varchar(20),
d varchar(50) default 'Unknown');
insert into demo(c) values('hello');
select * from demo;
מחזירה לי טבלה עם השורה הבודדת:
id a b c d
1 0 hello Unknown
העמודה c קיבלה את הערך hello מפקודת ההכנסה, העמודה d קיבלה את הערך Unknown כי זה היה ערך ברירת המחדל שלה, העמודה id קיבלה את הערך 1 שזה id שנוצר אוטומטית והעמודה a קיבלה את הערך 0 כי זה היה ערך ברירת המחדל שלה. העמודה b לעומת זאת נשארה ריקה, כלומר מכילה את הערך המיוחד NULL.
אפשר גם להכניס NULL כשאנחנו מבצעים הכנסה של מספר שורות, או אם יש כבר הגדרת ערך ברירת מחדל לעמודה לדוגמה הפקודה הבאה שומרת את הערך NULL בעמודה a, למרות שלעמודה מוגדר ערך ברירת מחדל:
insert into demo(a) values(null);
והפקודה הבאה מוסיפה מספר שורות בשלוש מהן יש ערך לעמודה b ובאחת העמודה תישאר ריקה, כלומר עם הערך NULL:
insert into demo(b) values (5), (8), (null), (9);
בשביל להוסיף שורה שמורכבת רק מערכי ברירת המחדל לטבלה אני יכול להפעיל:
insert into demo default values;
2. חיפוש ערכים ריקים (או לא ריקים)
כל ערכי ה NULL שונים זה מזה ולכן אי אפשר לחפש באיזה שורות ערך של עמודה מסוימת שווה ל NULL. השאילתה הבאה תחזיר תוצאה ריקה:
SELECT * FROM demo WHERE b = NULL;
במקום זה אנחנו צריכים להשתמש בפונקציה IS_NULL
. הדרך הנכונה להציג את כל השורות עבורן יש ערך ריק בעמודה b היא:
SELECT * FROM demo WHERE b IS NULL;
אפשר גם לחפש את כל השורות בהן הערך של b אינו NULL עם הפקודה:
SELECT * FROM demo WHERE b IS NOT NULL;
3. הפונקציה COALESCE
בעבודה עם NULL יהיו שאילתות בהן כן נרצה לראות איזשהו ערך ברירת מחדל במקום הערך הריק בעמודה. במצבים כאלה נוכל להשתמש ב COALESCE. פונקציה זו מקבלת מספר ערכים ומחזירה את הראשון ביניהם שאינו NULL.
בשביל להשתמש בה נעביר כפרמטר ראשון לפונקציה עמודה שאולי יש בה ערך NULL וכפרמטר שני ערך ברירת מחדל שיוצג אם הערך הראשון הוא NULL. לדוגמה אם במקום ערכים ריקים מהטבלה אני רוצה שיוצג המספר 0 אני כותב:
SELECT id, a, coalesce(b, 0), c, d FROM demo;
והתוצאה:
id a coalesce(b, 0) c d
1 0 0 hello Unknown
2 0 Unknown
3 0 5 Unknown
4 0 8 Unknown
5 0 0 Unknown
6 0 9 Unknown
7 0 0 Unknown
4. עכשיו אתם
נסו להכניס NULL לכל אחת מהעמודות בטבלה (כולל id). מה קורה?
מחקו את כל השורות עבורן הערך של b הוא NULL.
מחקו את כל השורות עבורן הערך של d אינו NULL.
צרו מחדש כמה שורות עם הערך NULL בעמודה b ואז עדכנו את כל השורות בהן הערך של b הוא NULL להחזיק את הערך 5.