Menu

SQLite SELECT: שליפת שורות, עמודות וביטויים

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

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

SELECT קורא שורות מטבלה

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

השאילתה הפשוטה ביותר האפשרית:

SELECT * פירושו "כל העמודות". FROM products מציין את הטבלה. התוצאה היא שורה אחת לכל רשומה, עם כל ארבע העמודות. הנקודה-פסיק מסיימת את הפקודה.

זו כל הצורה: SELECT <columns> FROM <table>;.

בחירת עמודות מסוימות

* נוח כשחוקרים. בקוד אמיתי כמעט תמיד רוצים לקרוא בשם לעמודות שבאמת חשובות לכם:

מקבלים בחזרה שתי עמודות, בסדר שביקשתם. הסדר ברשימת ה-SELECT קובע את הסדר בתוצאה: הוא לא חייב להתאים לסדר העמודות בטבלה.

למה להעדיף את זה על פני SELECT *? שתי סיבות. ראשית, פחות נתונים עוברים ברשת (או יוצאים מהקובץ), וזה חשוב כשהטבלאות מתרחבות. שנית, השאילתה שלכם נשארת יציבה כשמישהו מוסיף עמודה לטבלה בחודש הבא. SELECT * מתחיל בשקט להחזיר יותר, מה שיכול לשבור קוד אפליקציה שמפרק שורות לפי מיקום.

SELECT יכול לחשב, לא רק לשלוף

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

העמודה הרביעית לא קיימת בטבלה: SQLite חישבה אותה שורה אחר שורה. אפשר לעשות אותו דבר עם פונקציות מחרוזת, תאריכים, ביטויים מותנים, כל דבר. רשימת SELECT היא מקום לעצב נתונים, לא רק לשלוף אותם.

אפשר אפילו לכתוב SELECT בלי פסוקית FROM, ולהשתמש ב-SQLite כמחשבון:

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

כינויים לעמודות עם AS

כשמחשבים עמודה, SQLite בוחרת לה שם ברירת מחדל, לעתים קרובות הביטוי עצמו, כמו price * stock. זה מכוער ולא יציב. תנו לעמודה שם אמיתי עם AS:

הכינוי הוא שם העמודה בקבוצת התוצאות. זה חשוב לקריאות כשקוראים פלט, וחשוב מאוד לקוד אפליקציה ששולף ערכים לפי שם עמודה (row["inventory_value"] במקום row[1]).

מילת המפתח AS אופציונלית, price * stock inventory_value עובד אותו דבר, אבל כתבו אותה במפורש. הכוונה ברורה יותר, וזה מונע בלבול אצל קוראים שעלולים לחשוב שפסיק חסר הוא כינוי.

כינוי גם לטבלה

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

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

ערכים מילוליים וקבועים בתוצאה

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

כל שורה מקבלת את אותם 'USD' ו-1. הדפוס הזה מופיע כשמשלבים תוצאות מכמה שאילתות עם UNION וצריך עמודת סימון כדי להבחין בין המקורות.

מילה על NULL

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

הסתכלו על השורה השנייה. price הוא NULL, וגם price * 2 הוא NULL: כל חישוב שמעורב בו NULL מחזיר NULL. זה אחד המקורות הנפוצים ביותר לתוצאות SQL מבלבלות, ויש לו עמוד משלו בהמשך. בינתיים, רק שימו לב ש-NULL מדבק דרך ביטויים.

מה לקחת מכאן

  • SELECT <columns> FROM <table>; היא הצורה של כל שאילתה.
  • רשמו עמודות במפורש בקוד אמיתי, ושמרו את SELECT * לחקירה.
  • רשימת SELECT יכולה להכיל כל ביטוי, לא רק שמות עמודות.
  • השתמשו ב-AS כדי לתת שמות נכונים לעמודות מחושבות ולטבלאות עם כינוי.
  • NULL מתפשט דרך חישובים: זכרו את זה כשהתוצאות נראות מוזרות.

הבא: סינון עם WHERE

עד עכשיו כל שאילתה החזירה את כל השורות בטבלה. פסוקית WHERE היא הדרך לצמצם את זה: לבחור שורות לפי מחיר, לפי שם, לפי תאריך, לפי כל ביטוי שמוערך כאמת או שקר. זה העמוד הבא.

שאלות נפוצות

מה התחביר הבסיסי של SELECT ב-SQLite?

SELECT <columns> FROM <table>;. העמודות יכולות להיות רשימה מופרדת בפסיקים (SELECT name, email FROM users), * לכל העמודות, או כל ביטוי כמו price * quantity. פסוקית ה-FROM מציינת את הטבלה שממנה קוראים, והנקודה-פסיק מסיימת את הפקודה.

האם כדאי להשתמש ב-SELECT * ב-SQLite?

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

איך משנים שם של עמודה בתוצאות של SELECT?

השתמשו ב-AS כדי לתת לעמודה או לביטוי כינוי: SELECT price * quantity AS total FROM orders. הכינוי הופך לשם העמודה בקבוצת התוצאות, וזה חשוב לקריאות ולקוד שקורא תוצאות לפי שם עמודה. מילת המפתח AS אופציונלית, אבל כדאי להשאיר אותה לבהירות.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל