SQL היא שפת מחשב הצהרתית, כלומר, היא מתארת רק מה לבצע ולא כיצד לבצע, ומתמקדת במהות ולא בטכניקה. מכיוון שכך, ניתן להשתמש באותו משפט SQL בבסיסי נתונים שונים, הפועלים בדרכים שונות לחלוטין. אי תלותה של SQL במבנה הנתונים, בנוסף על עוצמתה של השפה, המאפשרת לאחזר חתכים מורכבים בפשטות רבה, דבר המביא להגדלת הפריון של מתכנתי השפה, והתפשטותה למשתמשים שאינם מתכנתים, הפכו אותה לשפה המקובלת ביותר כיום בניהול בסיסי נתונים.
שפת SQL פותחה במקורה על ידי IBM, אך מאז הועתקה על ידי חברות רבות, ואף אומצה על ידי מכון התקנים האמריקאי (ANSI) ב-1986 ועל ידי ארגון התקינה הבין-לאומי (ISO) ב-1987. מערכות עיקריות לניהול בסיסי נתונים בשפה הן DB2, Firebird, HSQL, Informix, Interbase, MariaDB, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, PervasiveSQL, SQLite, Sybase ASE.
השפה מתאימה לעבודה בעיקר עם בסיסי נתונים יחסיים, אף על פי שגם חלק מיצרני בסיסי נתונים מסוגים אחרים התאימו את השפה לשימוש עם בסיסי הנתונים שלהם.
ניתן להשתמש במשפטי SQL בתוך קוד הכתוב בשפות תכנות אחרות. אופן עבודה נפוץ זה נקרא Embedded SQL ונתמך במרבית שפות התכנות הנפוצות. באופן עבודה זה משפטי ה-SQL מבצעים פעולות מול בסיס הנתונים, והפקודות בשפה האחרת מבצעות פעולות של לוגיקה עסקית וממשק משתמש.
השפה פופולרית מאוד כיום בכל בסיסי הנתונים הקיימים, דבר המאפשר ניידות מבסיס נתונים אחד לשני, שימור השקעה של ידע בנושא, קישוריות בין בסיסי נתונים שונים והתמדה בשיפורה של השפה.
חברות שפיתחו בסיסי נתונים וכלי תוכנה אחרים המשתמשים בשפת SQL הוסיפו תוספות קנייניות לתקן העשויות לשנות את תחביר השפה, כך שהסבת משפטי SQL מבסיס נתונים אחד לאחר מצריכה בדרך כלל עריכת שינויים משמעותיים.
אפיוני השפה.
השפה היא שפה הצהרתית מבוססת אלגברה טבלאית, שעיקרה עבודה עם נתונים במודל טבלאי רלציוני. על אף שמה, השפה איננה רק שפת שאילתות, אלא למעשה שפת הנתונים המקיפה ביותר, המאפשרת קשת רחבה של עבודה מול בסיס נתונים. החל מיצירת טבלאות סטטיות, אינדקסים, ויצירת טבלאות דינמיות מדומות (View). הגדרת אילוצים עסקיים (Assertions), ויצירת טריגרים (הדקים). דרך קריאת נתונים בדרכים מגוונות, הכוללות פעולות בין טבלאות (כמו צירוף נתוני טבלאות ופעילות של איחוד וחיתוך בין נתוני טבלאות). וכלה במניפולציה על נתונים כמו הוספת רשומות, עדכונן ומחיקתן, ואף אבטחת נתונים וניהול תנועות.
השפה איננה שפת תכנות מלאה, כיוון שחסרים בה פקודות לוגיות ומשפטי בקרה, ולכן יש בה קשיחות שלרוב צריכה להיפתר על ידי אירוחה בשפת תכנות עילית. בשפה קיימות מילים שמורות (שאין להשתמש בהן בשמות טבלאות / שדות / אינדקסים), טיפוסי קבועים, משתנים, אופרטורים ופונקציות מובנות. צורת הכתיבה גמישה מאוד. השפה איננה רגישה לגודל אות (Case Insensitivity). אף שמקובל לרשום את הפקודות באותיות גדולות, ונהוג לפצל פסוקיות באותה פקודה לשורות נפרדות, הדבר איננו הכרחי ומדובר בנורמה שנעשית לשם הקריאות. ניתן לכתוב פקודה בכל גודל אות, וניתן לכתוב פקודה בשורה אחת, או במספר שורות לפי רצון המשתמש, כל עוד נשמר הסדר של פסוקיות הפקודה. צורתן של פסוקיות השפה הן אחידות, דבר המקל על השימוש בה (למשל גם פקודת הקריאה וגם פקודת המחיקה של רשומות דומה מאוד).
כל משפט SQL מתחלק למספר פסוקיות וצריך להסתיים בנקודה פסיק ";". כל פסוקית מתחילה במילת מפתח, ולכל סוג של פסוקית מבנה מוגדר. לייצוג של טבלה ושדה וקבועים אלפא-נומריים בפסוקיות המתאימות קיימים כללים בשפה. כך למשל קבוע אלפא-נומרי צריך להופיע בין גרש (') משני צדדיו.
בניגוד לשפות תכנות עיליות, סדר הביצוע של משפט SQL איננו מתבצע לפי סדר הכתיבה. בדרך כלל פסוקית SELECT תתבצע לקראת הסוף, כאשר הפסוקית הראשונה שתתבצע תהיה פסוקית FROM. כל שלב בעיבוד מייצר טבלה וירטואלית זמנית אשר מהווה את הקלט לשלב הבא. בשאילתת SELECT מורכבת במיוחד (שיש בה צירוף בין טבלאות, תנאי סינון, הקבצה, מניעת כפילויות וצמצום מספר הרשומות למספר מסוים) מספר הטבלאות הווירטואליות עשוי להגיע אף לעשר.
שימושים.
מסדי נתונים יחסיים הם כיום הדרך המקובלת לאגירת מידע רב. שפת SQL היא הדרך המקובלת לגשת למסדי נתונים יחסיים. וגופים שונים כמו גופי ממשל, חברות מסחריות, וארגונים ללא כוונות רווח עושים בו שימוש רב, אם במסדי נתונים גדולים ואם במסדי נתונים מקומיים.
עם התפתחותה של רשת האינטרנט, אתרי אינטרנט דינמיים ומערכות ניהול תוכן, משתמשים במסדי נתונים בשביל לשמור את תוכן האתר עצמו, ומחוללים את הדפים באמצעות שליפה של תוכן מבסיס הנתונים. כך יוצא ששפות שעושות שימוש בטכנולוגיית צד שרת כמו PHP, ASP ו-JSP משתמשות שימוש רב בשאילתות, כדי ליצור דפי אינטרנט, כאשר התוכנה המפעילה אותן היא בעצם דפדפן אינטרנט כלשהו.
במקרים רבים השאילתות עצמן חבויות מאחורי ממשק משתמש ידידותי, אשר יוצר שאילתות כחלק מעבודתו. לדוגמה חלק ניכר מפעילותה של ויקיפדיה נעשה באמצעות שאילתות אלו. להוספת ערך, עדכונו או מחיקתו, לשליפת נתונים כמו "שינויים אחרונים" שנעשו או שליפת הערכים של "התרומות שלי". בכולן יש הפעלה ושימוש בשאילתות SQL מאחורי הקלעים, באופן שהמשתמש אינו צריך להיחשף למבנה הפנימי ולתחביר המדויק שלהן.
תחביר.
הוראות שפת SQL מתחלקות למספר תחומים עיקריים:
טיפוסים.
טיפוסי נתונים אשר מגדירים את סוג העמודות של בסיס הנתונים (אם כי לעיתים בבסיסי נתונים בסוגי טיפוסים מסוימים ישנן הגדרות קצת אחרות מהתקן)
שאילתה בחירה - שליפת נתונים.
הפעולה הנפוצה ביותר ב-SQL היא השאילתה, אשר מתבצעת עם משפט SELECT ההצהרתי. SELECT מאחזר נתונים מטבלה אחת או יותר, או ביטויים. למשפטי SELECT רגילים אין השפעות מתמשכות על מסד הנתונים. כמה יישומים לא תקניים של SELECT יכולים להיות השפעה מתמשכת, כגון SELECT INTO תחביר שקיים בחלק מבסיסי הנתונים.
שאילתות מאפשרות למשתמש לתאר את הנתונים הרצויים, כאשר מערכת ניהול מסדי נתונים (DBMS) אחראית על תכנון, ביצוע מיטוב וביצוע הפעולות הפיזיות הדרושות כדי לייצר את התוצאה הרצויה.
מכל משפטי השאילתה הפקודות SELECT ו-FROM הן הכרחיות. כל שאר המשפטים הן רשות, אבל אם הן מופיעות הן חייבות להופיע בסדר שהוצג. אף שנהוג לפצל משפטים באותה פקודה לשורות נפרדות מדובר בנורמה שנעשית לשם הקריאות, וניתן לכתוב פקודה בשורה אחת.
דוגמאות.
הדוגמה הבאה ממחישה את הפקודה החוקית הקצרה ביותר במשפט SELECT. פקודה זו תאחזר את כל טבלת Book. הכוכבית (*) ברשימה הנבחרת מצביעה על כך שכל העמודות של טבלת הספר צריכים להיות כלולות בנתוני התוצאות.
SELECT * FROM Book;
להלן דוגמה של שאילתת בחירה שמחזירה רשימה של ספרים יקרים. השאילתה מאחזרת את כל השורות מטבלת הספר (Book) שעמודת המחיר שלהן (שדה price) מכיל ערך הגדול מ-250.00. התוצאה מסודרת בסדר עולה לפי כותרת (שדה title).
SELECT *
FROM Book
WHERE price &gt; 250.00
ORDER BY title;
המשפט הבא מדגים כיצד אפשר לבצע שאילתא על טבלאות מרובות וקיבוץ נתונים, באמצעות החזרת רשימת ספרים ומספר המחברים שלהם משתי טבלאות Book ו-Authors כאשר שדה הקשר הוא isbn:
SELECT Book.title, count(*) AS Authors
FROM Book JOIN Book_author
ON Book.isbn = Book_author.isbn
GROUP BY Book.title;
התוצאה של השאילתא תהיה שדה של כותרים ושדה של מספר המחברים לכותר:
Title Authors
SQL Examples and Guide 4
The Joy of SQL 1
An Introduction to SQL 2
Pitfalls of SQL 1
תת-שאילתות.
שאילתות יכולות להיות מקוננות, כך שניתן להשתמש בתוצאות של שאילתה אחת בשאילתה שנייה. ניתן להשתמש בשאילתה אחרת באמצעות מפעיל יחסי או פונקציית צבירת שאילתות. השאילתה מקוננת ידועה גם בשם "שאילתת משנה". השימוש בתת-שאילתה מציג היררכיה בביצוע שיכול להיות שימושי או הכרחי.
בדוגמה הבאה, פונקציית צבירת AVG מקבלת כקלט את התוצאה של שאילתת משנה, כלומר יוצגו רק רשומות של ספרים שמחירם (שדה price) נמוך מהממוצע בטבלה:
SELECT isbn, title, price
FROM Book
WHERE price &lt; (SELECT AVG(price) FROM Book)
ORDER BY title;
מניפולציה על נתונים.
INSERT INTO example
(field1, field2, field3)
VALUES
('test', 'N', NULL);
UPDATE example
SET field1 = 'updated value'
WHERE field2 = 'N';
DELETE FROM example
WHERE field2 = 'N';
MERGE INTO table_name USING table_reference ON (condition)
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...
הגדרת נתונים.
CREATE TABLE example(
field1 INTEGER,
field2 VARCHAR(50),
field3 DATE NOT NULL,
PRIMARY KEY (field1, field2)
ALTER TABLE example ADD field4 NUMBER(3) NOT NULL;
DROP TABLE example;
CREATE VIEW vTableY AS
SELECT quantity, price, quantity*price AS amount
FROM tableX;
בקרת נתונים.
GRANT SELECT, UPDATE
ON example
TO some_user, another_user;
REVOKE SELECT, UPDATE
ON example
FROM some_user, another_user;
תקינה.
היסטוריה של התפתחות התקינה בשפה:
כלי כתיבה חזותיים.