"אתה יודע לכתוב שאילתות מורכבות?"

forumist

New member
"אתה יודע לכתוב שאילתות מורכבות?"

שלום,
במסגרת העבודה שלי אני לפעמים כותב SQL בכדי להביא נתונים מdata base.
אני מחפש עבודה ומספר פעמים שואלים אותי מחברות השמה "אתה יודע לכתוב שאילתות מורכבות?"
מה זה אומר? אם אני כותב שאילתה בתוך שאילתה (לפעמים שאילתה בתוך שאילתה בתוך שאילתה בתוך שאילתה....), או שאני משתמש ב with ... As A.. בשביל לכתוב מספר שאילתות אחת אחרי השניה (זה בעצם כמו לכתוב שאילתה בתוך שאילתה-רק הרבה יותר נוח) , או שאני משתמש בפונקציות
(AVG,MAX,SUM...) זו שאילתה מורכבת? מה נחשבת לשאילתה מורכבת?
כמו כן שואלים "אם יש לי נסיון ב Oracle",אני יודע שמסד הנתונים אצלנו הוא בoracle ולכן הsql צריך להתאים מבחינת פורמט (למשל בהתעסקות עם תאריכים) זה אומר שיש לי נסיון?
תודה
 

user32

Well-known member
מנהל
שאילתות מורכבות

בשביל לפשט את עניין המורכבות (
) אפשר להציב כלל אצבע ולומר שרמת המורכבות היא ביחס ישיר למספר הjoins שיש בשאילתה. למי שרגיל לכתוב שאילתות של עשרות שורות זה אולי נשמע מוזר אבל יוצא לראיין הרבה פעמים מועמדים שהשתמשו בDB רלציוני בצורה כמעט שטוחה. אתה שואל אותו לחימום מה זה left join והוא עונה "אה, בjoins לא יצא לי להשתמש". ככל שיש יותר קשרים נכנס גם חזק עניין האופטימזציות, לדעת לנתח שאילתה ולהבין איך הDB יריץ אותה, וכו'. שאלה קלאסית לבחון את עצמך: המנעות משימוש בNot in (השאלה בגדול היא למה להמנע ומה התחליף?). מי שלא כתב "שאילתות מורכבות" לא מבין את הבעיה.

לגבי אורקל: כן, אתה יכול לומר שאתה מכיר. זו תמיד נשמעת לי שאלה דבילית לשאול מתכנת אז במקומך הייתי עונה שיש לך נסיון וידע בכל הDB העקריים (אורקל, SQL server, MYSQL) אלא אם כן אתה מתראיין לתפקיד DBA או משהו כזה. יש הרבה פיצ'רים ופונקציות ספציפיות לDB מסויים, את רובם המתכנתים לא מכירים וזה מקובל.
 

forumist

New member
הבנתי

תקן אותי אם אני טועה -
join רגיל - יחזיר את כל השדות גם מטבלה 1 וגם מטבלה 2 של השורות שמקיימות את מה שרשמת ב ON
left join - יחזיר רק את השדות מהטבלה ה 1 ("השמאלית") כמובן,גם רק את השורות שמקיימות את הjoin לפי ה ON

ד"א.. מה ההבדל בין לרשום JOIN,,,ON... או לבצע פשוט את ההתאמה של השדות המשותפים בתוך ה WHERE ? (האם יש הבדל?)

לגבי שאלתך על NOT IN אז שיערתי לעצמי שאתה מתכוון להשתמש בjoin במקום, ובאמת חיפוש קצר העלה את:
http://forums.devshed.com/database-management-46/sql-join-instead-123076.html

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

user32

Well-known member
מנהל
כן, יש לך הרבה מה להשלים

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

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

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

forumist

New member
סבבה ,תודה

אתה צודק קצת התבלבלתי.. הרי מה שמשפיע על השדות זה ה select
אני אעשה חזרה.
join left יחזיר רק את הרשומות שהופיעו בצד השמאלי בעצם שעונות על הjoin, וjoin right רק רשומות שבצד הימני ו וjoin רגיל בשתיהן ("צירוף טבעי"). (תקן אותי אם טועה)
 

itaystud

New member
תלמד לעשות joinים שונים מכמה טבלאות

group by
having
עוד כמה שאילתות חשבוניות (כמו avg למשל),
ונראה לי שאתה פחות או יותר מסודר.

אפשר ללמוד הכל כאן
 
פונקציות חלון יוסיפו

קריאות לשאילתות, ביצועים וגם קצת רושם על המראיין.
לטעמי אתה יכול לומר שיש לך ניסיון עם SQL ברמת משתמש ולא DBA אפליקטיבי.
אם הייתי צריך להגדיר מדד למורכבות של שאילתא הייתי מגדיר אותו בתור joins+subquerys. כמובן שאם אתה יכול לכתוב משהו בצורה פשוטה וסתם סיבכת אותו אז אנחנו לא סופרים את זה.
עוד כמה נושאים מתקדמים שתשאל את עצמך אם אתה מכיר cross apply, indexes, טרנזקציות, טריגרים, פרוצדורות, טבלאות זמניות, bulk insert. ככל שתפגין יותר ידע יהיה לך יותר קל להציג את עצמיך עם ידע מתקדם.
 
למעלה