SQL
SQL يک زبان ساختيافته برای بازيابی و بهنگام سازی داده از يک پايگاه داده رابطه ای است. دستوراتی برای ايجاد، حذف و تغيير اشيای مختلف در پايگاه داده دارد. پرکاربردترين دستور آن برای اجرای پرس و جوهای مختلف روی پايگاه داده استفاده می شود.
(Structured Query Language) SQL يک زبان برنامه نويسی تعاملی استاندارد برای بازيابی و بهنگام سازی پايگاه داده رابطه ای است.
SQL اجازه می دهد ايجاد جدول، اضافه و حذف داده، اصلاح داده و اجرای پرس و جوی روی داده به شکل يک زبان فرمانی در آيند.
اولين نسخه SQL در دهه 1970 در IBM توسط Donald D. Chamberlin و Raymond F. Boyce پياده شد. اين نسخه که ابتدا (Structured English Query Language) SEQUEL ناميده شد برای کارکردن و بازيابی داده ذخيره شده درپايگاه داده رابطه ای System R بود.
SQL به عنوان يک استاندارد توسط ANSI در سال 1986 و توسط ISO در سال 1987 پذيرفته شد.
ANSI بيان کرد که تلفظ رسمی آن es queue el است. در حاليکه افراد حرفه ای انگليسی زبان پايگاه داده هنوز نام آنرا sequel تلفظ می کنند.
گونه هائی از SQL، به عنوان يک زبان پرس وجو و کار با داده، توسط عرضه کنندگان DBMS همراه با ضمايمی ايجاد شد. با بيرون آمدن استاندارد SQL:1999 بسياری از ضميمه ها به عنوان بخشی از زبان SQL پذيرفته شدند.
در اين بخش فرامينی از SQL که در اکثر گونه ها وجود دارد شرح داده خواهد شد.
فضاهای خالی در عبارات SQL نديده گرفته می شوند و برای خوانائی کدهای SQL استفاده می شوند. سميکولن ( به عنوان پايان دهنده عبارت است.
CREATE TABLE
عبارت Create يک فرمان DDL در SQL است که برای ايجاد يک شیء در پايگاه داده استفاده می شود. احتمالا معمول ترين فرمان Create فرمان CREATE TABLE است.
CREATE TABLE اجازه ايجاد شمای يک جدول را می دهد. فرم کلی آن به صورت زير است:
CREATE TABLE tablename (
colname datatype coloptions
,colname datatype coloptions
,colname datatype coloptions
,additionalinfo
);
هر سطر يک فيلد جدول را مشخص می کند. تعريف هر فيلد شامل نام، نوع داده و اطلاعات اضافی مربوطه می تواند باشد. سطرها با کاما (,) از هم جدا می شوند.
نوع های داده مختلفی در يک DBMS وجود دارد که مهمترين آنها عبارتند از:
• CHAR(n) . رشته کاراکتری ASCII با طول ثابت n کاراکتر
• VARCHAR(n) . رشته کاراکتری ASCII با طول متغير با حداکثر n کاراکتر
• NVARCHAR(n) . رشته کاراکتری Unicode با طول متغير با حداکثر n کاراکتر
• INT . عدد صحيح (زيرمجموعه متناهی از اعداد صحيح که وابسته به ماشين است)
• SMALLINT . عدد صحيح کوچک (زيرمجموعه وابسته به ماشين از نوع صحيح)
• DECIMAL(p,d) . عدد مميز ثابت، با دقت تعريف شده p رقم و با d رقم در سمت راست مميز
• REAL,DOUBLE precision . اعداد مميزشناور با دقت مضاعف (وابسته به ماشين)
• FLOAT(n) . عدد مميز شناور با دقت تعريف شده حداقل n رقم
• DATE . تاريخ با فرمت day/month/year
در انتهای هر ستون می توان اطلاعات اضافی داشت. معمول ترين آنها عبارتند از:
PRIMARY KEY يعنی اين فيلد کليد اصلی است
NOT NULL يعنی اين فيلد بايد مقداری داشته باشد و نمی تواند تهی باشد
REFERENCES othertable (primarykeyname) يعنی اين فيلد يک کليد خارجی است که در جدول ديگری کليد اصلی است
در انتهای تعريف می توان اطلاعات اضافی ديگری را داشت. برای نمونه:
PRIMARY KEY (column1,column2,...) اگر جدول کليد اصلی ترکيبی دارد بايد آنرا در انتهای تعريف مشخص کنيد.
FOREIGN KEY (column1,column2,...) REFERENCES othertable اگر جدول ارتباطی با جدول ديگر دارد که يک کليد ترکيبی دارد بنابراين ستون های اين جدول که کليد های خارجی هستند بايد به اين صورت ليست شوند.
مثال. فرمان ايجاد يک جدول به نامemployees با چند فيلد نمونه به صورت زير می تواند باشد:
CREATE TABLE employees (
id INTEGER PRIMARY KEY
,first_name CHAR(50)
,last_name CHAR(75) NOT NULL
,date_of_birth DATE
);
مثال. تعريف جداول Car و Driver می تواند به صورت زير باشد:
CREATE TABLE driver (
name varchar(30)
,dob DATE NOT NULL
,PRIMARY KEY (name)
);
CREATE TABLE car (
regno VARCHAR(8)
,make VARCHAR(20)
,colour VARCHAR(30)
,price DECIMAL(8,2)
,owner VARCHAR(30)
,PRIMARY KEY(regno)
,FOREIGN KEY(owner) REFERENCES driver
);
DROP TABLE
عبارت DROP برای از بين بردن يک شیء در پايگاه داده است. فرمان DROP TABLE زمانی بکار می رود که بخواهيد جدول را حذف کنيد. فرم کلی آن به صورت زير است:
DROP TABLE tablename;
مثال. فرمان زير جدول employees را حذف می کند.
DROP TABLE employees;
تنها نکته در حذف يک جدول اين است که اگر جدولی توسط کليد خارجی با اين جدول در ارتباط باشد نمی توانيد آنرا حذف کنيد.
مثال. چون جدول car توسط کليد خارجی با جدول driver در ارتباط است می توانيد ابتدا جدول Car و سپس Driver را حذف کنيد ولی عکس آن نمی شود.
DROP TABLE car;
DROP TABLE driver;
SELECT
معمولا بيشترين عملی که روی پايگاه های داده توسط SQL انجام می گيرد جستجو است، که توسط عبارت SELECT انجام می پذيرد.
دستور SELECT داده ها را از يک يا چند جدول مرتبط بازيابی می کند و اغلب تاثيری روی داده ذخيره شده در پايگاه داده ندارد.
SELECT پيچيده ترين عبارت SQL است. فرم کلی عبارت SELECT به صورت زير است:
SELECT DISTINCT columns AS columns
FROM table
WHERE rule
GROUP BY columns
HAVING rule
ORDER BY columns;
دستور SELECT دارای چند عبارت اختياری به شرح زير است:
• FROM جدول يا جداولی را که از آنها داده بازيابی می شود را مشخص می کند. برای الحاق جداول بر اساس ضابطه خاصی می تواند همراه با عبارت JOIN بيايد.
• WHERE همراه با يک گزاره شرطی برای محدود کردن سطرهای برگردانده شده استفاده می شود.
• GROUP BY اغلب همراه با توابع تجمعی(AVE، SUM، MAX، MIN و COUNT) برای ترکيب يا گروه بندی سطرها يا حذف سطرهای تکراری در مجموعه نتيجه استفاده می شود.
• HAVING همراه با يک گزاره شرطی روی نتيجه GROUP BY کار می کند. توابع تجمعی می توانند در گزاره شرطی HAVING هم استفاده شوند.
• ORDER BY برای تعيين ستون های که بر اساس آنها داده نتيجه مرتب می شود (صعودی و نزولی) .
FROM
در ساده ترين دستور SELECT کليه سطرهای يک جدول که بعد از عبارت FROM ذکر شده است را بازيابی می کند. ليستی از فيلدهای موردنظر در مقابل عبارت SELECT قرار می گيرد. نام فيلدها با کاما (,) از هم جدا می شوند.
علامت ستاره (*) برای بيان کليه فيلدهای يک جدول (يا چند جدول) می تواند استفاده شود.
مثال. اسامی کليه شعبه ها در loan را پيدا کن
SELECT branch_name
FROM loan;
مثال. مشخصات کليه مشتريان را پيدا کن.
SELECT *
FROM customer;
عبارات محاسباتی +، -، * و / روی يک فيلد در ليست فيلدها می توانند بکاربرده شوند.
مثال. دستور زير جدولی مشابه loan را بر می گرداند که مقدار صفت خاصه amount آن 10 برابر شده است.
SELECT loan_number, branch_name, amount * 100
FROM loan;
ممکن است لازم باشد داده های موردنياز را از دو يا چند يک جدول استخراج کنيم.
مثال. اسامی و مقدار وام کليه مشتريانی را که وامی از شعبه Perryridge گرفته اند را پيدا کن.
SELECT customer_name, borrower.loan_number, amount
FROM borrower, loan
WHERE borrower.loan_number = loan.loan_number AND
branch_name = 'Perryridge';
مثال. دقت کنيد که اگر شرطی ذکر نشود ضرب دکارتی دو جدول حاصل می شود.
SELECT *
FROM borrower, loan;
DISTINCT
SQL اجازه تکرار در نتيجه SELECT را می دهد. بنابراين جدول حاصل ممکن است دارای سطرهای مشابه باشد. اگر اين موضوع موردنظر نباشد عبارت DISTINCT را استفاده می کنيم. در اين صورت کليه سطرهای جدول حاصل منحصر بفرد خواهند بود. و سطرهای تکراری حذف می شوند.
مثال. اسامی کليه شعب بانک که از آنها وامی گرفته شده است را با حذف تکراری ها ليست کن.
SELECT DISTINCT branch_name
FROM loan;
عبارت all مشخص می کند که تکراری ها حذف نشوند.
SELECT ALL branch_name
FROM loan;
WHERE
عبارت WHERE برای انتخاب سطرهای برگردانده شده از دستور SELECT بر طبق شرط خاصی بکار می رود.
برای بيان شرط می توان عملگرهای مقايسه ای (=، !=، <>، >، <، >= و <=) را استفاده کرد.
نتايج مقايسه را می توان توسط عملگرهای منطقی (NOT، AND و OR ) و پرانتز با هم ترکيب کرد. اجرای عملگرهای منطقی به ترتيب الويت آنها است. NOT الويت بالاتر و OR الويت کمتر را دارد. پرانتز می تواند برای تعيين ترتيب انجام عمليات استفاده شود. عمل داخل پرانتز هميشه اول انجام می گيرد.
مثال. کليه شماره وام هائی که مقدار وام آنها از 1200 بيشتر است را پيدا کن.
SELECT loan_number
FROM loan
WHERE amount > 1200;
مثال. کليه شماره وام های شعبه Perryridge که مقدار وام آنها از 1200 بيشتر است را پيدا کن.
SELECT loan_number
FROM loan
WHERE amount > 1200 AND branch_name = 'Perryridge';
توجه کنيد که هنگام مقايسه با رشته بايد آنرا در کوتيشن (' ') قرار داد.
مثال.شماره وام هائی که مقدار وام آنها بين 90,000 و 100,000 می باشد را پيدا کن.
SELECT loan_number
FROM loan
WHERE amount BETWEEN 90000 AND 100000;
عملگر IN برای تعيين اينکه آيا مقدار مشخصی درون مجموعه ای از مقادير وجود دارد يا خير بکار می رود.
مثال. مقدار وامهايی که از شعب Perryridge، Downtown يا Redwood گرفته شده اند را پيدا کن.
SELECT amount
FROM loan
WHERE Branch_name IN (' Perryridge' , 'Downtown' , 'Redwood');
هنگام کارکردن با رشته ها وقتی خواهان مطابقت کامل رشته ها نيستيم بلکه بخشی از رشته يا الگوی خاصی از آن بيشتر موردنظر است، می توان از عبارت LIKE به جای علامت (=) استفاده کرد. دو کاراکتر '%' و '_' به ترتيب به معنی يک کاراکتر و بيشتر از يک کاراکتر را برای تطابق می توان بکار برد.
مثال. اسامی کليه مشتريانی که آدرس آنها شامل کلمه Main است را پيدا کن.
SELECT customer_name
FROM customer
WHERE customer_street LIKE '%Main%';
AS
SQL اجازه تغيير نام جدول را توسط عبارت AS می دهد.
مثال. تعداد وام و مقدار وام کليه وام ها را پيدا کرده، نام ستون loan_number به loan_id تغيير بده.
SELECT loan_number AS loan_id, amount
FROM loan;
مثال. نام و تعداد وام کليه مشتريانی که وامی در يک شعبه دارند را پيدا کن.
SELECT customer_name, T.loan_number, S.amount
FROM borrower AS T, loan AS S
WHERE T.loan_number = S.loan_numbe;
توابع تجمعی
توابع تجمعی (aggregation function) عملگرهايی هستند که محاسبه آماری روی گروهی از مقادير داده ای را انجام می دهند. اين توابع روی مقادير يک ستون از يک جدول عمل می کند و يک مقدار را به عنوان نتيجه بر می گردانند. اين توابع شامل AVG، SUM، MAX، MIN و COUNT هستند.
نتيجه تجمع نامی ندارد می تواند از AS برای نامگذاری آن استفاده کرد.
مثال. ميانگين موجودی حساب ها در شعبه Perryridge را پيدا کن.
SELECT AVG (balance)
FROM account
WHERE branch_name = 'Perryridge';
COUNT تعداد سطرهای موجود در جواب که حاوی NULL نيستند را می دهد. برای اينکه تعداد مستقل از NULL باشد COUNT(*) را استفاده کنيد.
مثال. تعداد مشتريان بانک را محاسبه کن.
SELECT COUNT (*)
FROM customer;
گاهی در جواب تعدادی سطرها مشابه می شوند، اگر می خواهيد تعداد سطرهای متمايز را بدست آوريد از COUNT DISTINCT استفاده کنيد.
مثال. تعداد افرادی که در بانک پول دارند را پيدا کن.
SELECT COUNT (DISTINCT customer_name)
FROM depositor;
مثال. تعداد افرادی که در هر شعبه بانک حساب دارند را پيدا کن.
SELECT branch_name, COUNT (DISTINCT customer_name)
FROM depositor, account
WHERE depositor.account_number = account.account_number
GROUP BY branch_name;
GROUP BY
در بسياری موارد تحليل آماری روی گروهی از داده ها موردنياز است. برای گروه بندی از عبارت GROUP BY استفاده کنيد.
مثال. اسامی کليه شعب و ميانگين موجودی حساب آنها را پيدا کن
SELECT branch_name,AVG (balance)
FROM account
GROUP BY branch_name;
HAVING
توابع تجمعی در عبارت WHERE کار نمی کنند. اگر می خواهيد با توجه به نتيجه توابع تجمعی شرطی داشته باشيد از عبارت HAVING استفاده کنيد. HAVING مانند عبارت WHERE کار می کند با اين تفاوت که روی آخرين داده حاصل کار می کند و اجازه استعمال توابع تجمعی را هم می دهد. البته هزينه اجرای آن بالاست بنابراين فقط در زمانی که واقعا نياز است استفاده کنيد.
مثال. اسامی کليه شعب را که ميانگين حساب آنها بيشتر از 1200 است را پيدا کن
SELECT branch_name,AVG (balance)
FROM account
GROUP BY branch_name
HAVING AVG (balance) > 1200;
ORDER BY
ترتيب رکوردها در نتيجه پرس و جو معمولا بدون نظم است. اگر می خواهيد جدول حاصل دارای نظم خاصی بر طبق يک يا چند فيلد باشد عبارت ORDER BY را به همراه فيلدهای موردنظر اضافه کنيد.
برای ترتيب نزولی از DESC و برای ترتيب صعودی از ASC روی هر صفت خاصه استفاده می شود. پيش فرض ترتيب صعودی است.
مثال. اسامی کليه مشتريانی که وامی در شعبه Perryridge دارند را به ترتيب حروف الفبا ليست کن.
SELECT DISTINCT customer_name
FROM borrower, loan
WHERE borrower loan_number = loan.loan_number AND
branch_name = 'Perryridge'
ORDER BY customer_nam;
NULL
ممکن است مقدار بعضی از صفات خاصه در رکوردها تهی باشد که توسط NULL مشخص می شود. وقتی فيلدی حاوی NULL است بيان کننده اين است که مقدار آن فيلد نامعلوم است يا مقداری در دنيای واقعی ندارد.
عملگرهای مقايسه ای اگر روی NULL عمل کنند مقدار Unknown را برمی گردانند. گزاره IS NULL می تواند برای بررسی مقادير NULL استفاده شود. عملگر متضاد آن IS NOT است که مقاديری که NULL نيستند را پيدا می کند.
نتيجه هر عبارت رياضی روی NULL برابر با NULL است. کليه توابع تجمعی به استثنای COUNT از مقدار NULL صرفنظر می کنند.
مثال. تعداد وام هائی که ميزان وام آنها معين نيست را پيدا کن.
SELECT loan_number
FROM loan
WHERE amount IS NULL;
پرس و جوهای تودرتو
در SQL مکانيسمی برای پرس و جوهای تودرتو فراهم شده است. به عبارت ديگر يک عبارت SELECT می تواند درون ديگری قرار بگيرد تا نتيجه اجرای آن در شرط WHERE عبارت SELECT ديگر استفاده شود. عبارت SELECT دوم را يک پرس و جوی فرعی می نامند و حتما بايد يک فيلد را برگرداند يعنی فقط يک صفت خاصه در دستور SELECT آن بايد باشد.
وقتی حاصل پرس و جوی فرعی بيشتر از يک سطر باشد از عملگرهای ALL، ANY، IN، NOT IN، EXISTS و NOT EXISTS برای گرفتن نتيجه مطلوب بايد استفاده کرد.
مثال. اسامی کليه مشتريانی که هم حساب وهم وام در بانک دارند را پيدا کن.
SELECT DISTINCT customer_name
FROM borrower
WHERE customer_name IN (SELECT customer_name FROM depositor );
مثال. اسامی کليه مشتريانی که از بانک وام گرفته اند ولی حساب ندارند را پيدا کن.
SELECT DISTINCT customer_name
FROM borrower
WHERE customer_name NOT IN (SELECT customer_name FROM depositor );
مثال. اسامی کليه مشتريانی که هم حساب وهم وام در شعبه Perryridge دارند را پيدا کن.
SELECT DISTINCT customer_name
FROM borrower, loan
WHERE borrower.loan_number = loan.loan_number AND branch_name = 'Perryridge' AND
branch_name, customer_name IN (SELECT branch_name, customer_name
FROM depositor, account WHERE depositor.account_number = account.account_number );
توجه. پرس و جوهای بالا ساده تر هم می تواند نوشته شود.
ترکيب پرس و جوها
گاهی می خواهيم نتيجه دو پرس و جو را با هم به نحوی ترکيب کنيم و يک جدول را بدست بياوريم. عملگرهای UNION، INTERSECT و EXCEPT برای ترکيب نتيجه دو پرس و جو می توانند استفاده شوند که به ترتيب مشابه عملگرهای اجتماع، اشتراک و تفاضل در جبر رابطه ای عمل می کنند.
مجموعه فيلدهای دو پرس و جوئی که با هم ترکب می شوند بايد از نظر تعداد و نوع مطابق هم باشند.
عملگر UNION جدولی شامل کليه سطرهای هردو پرس و جو را می دهد. سطرهای تکراری حذف می شوند مگر اينکه از عبارت UNION ALL استفاده شود.
عملگر INTERSECT سطرهای مشترک در نتيجه دو پرس و جو را بر می گرداند. سطرهای تکراری حذف می شوند مگر اينکه از عبارت INTERSECT ALL استفاده شود.
عملگر EXCEPT سطرهائی از نتيجه پرس و جوی اول که در نتيجه پرس و جوی دوم ظاهر نشده است را بر می گرداند. EXCEPT ALL سطرهای تکراری را حذف نمی کند.
مثال. اسامی کليه مشتريانی که هم حساب وهم وام در بانک دارند را پيدا کن.
SELECT customer_nameFROM borrower
UNION
SELECT customer_name FROM depositor;
JOIN
وقتی بخواهيم اطلاعاتی را از دو جدول بدست بياوريم می توانيم عمل الحاق را روی دو جدول انجام دهيم. عملگر JOIN رکوردهای گرفته شده از دو جدول را با هم ترکيب می کند و جدول ديگری را به عنوان نتيجه می دهد. شرط الحاق نحوه جفت کردن رکوردهای دو جدول را تعيين می کند.
الحاق دارای انواع مختلفی نظير الحاق طبيعی و الحاق خارجی است. نوع الحاق تعيين می کند چه رکوردهائی از هر جدول که جفتی در جدول ديگر ندارند در جدول نتيجه بايد اضافه شوند.
Natural Join
در الحاق طبيعی کليه سطرهائی که فيلدهای همنام آنها که در هردو جدول دارای يک مقدار هستند، درنظر گرفته می شود. جدول حاصل تنها شامل يک ستون از ستونهای هم نام خواهد بود.
مثال. اسامی وام گيرنده ها به همراه وام های گرفته شده از بانک را پيدا کنيد.
SELECT *
FROM borrower NATURAL JOIN loan;
Outer Join
در الحاق خارجی نيازی نيست رکوردهای دو جدول حتما رکورد مطابقی در جدول ديگر داشته باشند. الحاق خارجی، بسته به جدولی که همه سطرهایش نگهداشته می شود، به سه دسته الحاق چپ، راست و کامل تقسيم می شود.
LEFT OUTER JOIN کليه مقادير جدول سمت چپ خود را بعلاوه مقاديری از جدول سمت راست که مطابقت دارند می دهد. RIGHT OUTER JOIN کليه مقادير جدول سمت راست خود را می دهد بعلاوه مقاديری از جدول سمت چپ که رکوردهايش جور هستند. FULL OUTER JOIN نتيجه الحاق خارجی چپ و راست را با هم ترکيب می کند.
الحاق خارجی داده های مفقود را، برای سطرهائی که شرط الحاق در آنها برقرار نبوده، با NULL پر می کند.
مثال. اسامی کليه وام گيرنده ها به همراه ميزان وامی که گرفته اند را پيدا کنيد.
SELECT *
FROM borrower LEFT OUTER JOIN loan
ON borrower.loan_no = loan.loan_no;
مثال. مقدار کليه وام های گرفته شده از شعبه Perryridge را به همراه نام وام گيرنده ها پيدا کنيد.
SELECT *
FROM borrower RIGHT OUTER JOIN loan
ON borrower.loan_no = loan.loan_no
WHERE loan.branch_name = 'Perryridge';
DELETE
فرمان DELETE اجازه حذف سطرهائی از يک جدول را می دهد. فرم کلی دستور به شکل زير است:
DELETE FROM table_name WHERE condition;
کليه رکوردهائی که شرط WHERE در آنها برقرار است از جدول حذف می شوند. اگر شرطی بيان نشود کليه رکوردهای جدول حذف خواهند شد.
دستور DELETE هيچ رکوردی را به عنوان خروجی بر نمی گرداند.
مثال. کليه رکوردهای وام گيرندگان را حذف کن.
DELETE FROM borrower;
مثال. کليه رکوردهایی که حسابی در شعبه Perryridge دارند را حذف کن.
DELETE FROM account
WHERE branch_name = 'Perryridge';
INSERT
دستور INSERT اجازه اضافه کردن رکوردی به يک جدول را می دهد. فرم کلی آن به صورت زير است:
INSERT INTO table_name
(column_list)
VALUES (value_list);
Column_list ليست فيلدهائی است که مقادير به آنها نسبت داده خواهد شد و اگر برای همه فيلدها مقداری درنظرگرفته شود می تواند حذف شود. value_list مجموعه ای از مقادير است که برای هر فيلد در ليست column_list يا فيلدهای جدول که در دستور CREATE TABLE تعريف شده اند مقداری دارد.
تعداد ستون ها و مقادير آنها بايد يکسان باشد. اگر فيلدی ذکر نشود مقدار پيش فرض آن درنظر گرفته می شود.
به فيلدهائی که در دستور CREATE TABLE به عنوان PRIMARY KEY يا با محدوديت NOT NULL تعريف شده اند بايد مقداری نسبت داده شود.
مثال. حساب جديدی را با شماره A-9732 و با موجودی 1200 در شعبه Perryridge اضافه کن.
INSERT INTO account
VALUES ('A-9732', 'Perryridge',1200);
يا
INSERT INTO account
(branch_name, balance, account_number)
VALUES ('A-9732', 'Perryridge',1200);
مثال: اضافه کردن رکورد جديدی در جدول account با مقدار موجودی null به صورت زير انجام می شود.
INSERT INTO account
VALUES ('A-777','Perryridge', null );
UPDATE
دستور UPDATE اجازه تغيير داده های درون يک جدول را می دهد. اين دستور هيچ رکوردی را اضافه يا حذف نمی کند. شکل کلی آن به صورت زير است:
UPDATE table_name
SET column_name = value, column_name=value, ...
WHERE condition;
در کليه رکوردهائی که شرط در آنها برقرار بوده است مقدار فيلدی که نامش در عبارت SET تعيين برابر با مقدار جديد می شود. دستور UPADTE ممکن است روی يک يا چند رکورد در يک جدول تاثير بگذارد.
مثال. حساب هائی که موجودی آنها بيشتر از 10000 است را به ميزان 6% افزايش بده.
UPDATE account
SET balance = balance * 1.06
WHERE balance > 10000;
ايرادهای SQL
به چند نمونه از انتقادهائی که درباره استفاده کاربردی از SQL وجود دارد اشاره می شود:
• پياده سازی های مختلفی از SQL توسط سازندگان DBMS وجود دارد که گاهی با هم متناقض و نا موافق است. خصوصا مواردی نظير فرمت زمان و تاريخ، الحاق رشته ها، مقادير تهی و حساسيت به متن در مقايسه از يک سازنده به ديگری ممکن است متفاوت باشد.
• نوشتن شرط اشتباه در الحاق جداول به راحتی ضرب دکارتی دو جدول را نتيجه می دهد که به ندرت ممکن است در عمل سودمند باشد.
• ممکن است عبارت شرط در بهنگام سازی و حذف اشتباهی ساخته شود و روی کليه سطرهای جدول ناخواسته تاثير بگذارد.
• SQL و مدل رابطه ای راهی برای حمايت ساختارهای درختی و ارجاع بازگشتی به سطرهای ديگر يک جدول ندارند.