تستعرض هذه المقالة كيفية تحديث قواعد البيانات، وكيفية إنشاء قواعد بيانات وجداول ودوال جديدة.
التحديث عبر UPDATE
تُستخدم الكلمة المفتاحية UPDATE
لتحديث بيانات الجداول.
تحديث جدول من بيانات جدول آخر
تملأ الأمثلة الموضحة أدناه الحقل PhoneNumber
لأي موظف يكون أيضًا عميلًا Customer
، وليس له حاليًا رقم هاتف في جدول الموظفين Employees
.
(تستخدم الأمثلة التالية جدولي الموظفين Employees والعملاء Customers)
- SQL القياسية
يحدّث المثال التالي قاعدة البيانات باستخدام استعلام فرعي مربوط (correlated subquery):
UPDATE Employees SET PhoneNumber = (SELECT c.PhoneNumber FROM Customers c WHERE c.FName = Employees.FName AND c.LName = Employees.LName) WHERE Employees.PhoneNumber IS NULL
- SQL:2003
تحديث باستخدام MERGE
:
MERGE INTO Employees e USING Customers c ON e.FName = c.Fname AND e.LName = c.LName AND e.PhoneNumber IS NULL WHEN MATCHED THEN UPDATE SET PhoneNumber = c.PhoneNumber
- SQL Server
تحديث باستخدام INNER JOIN
:
UPDATE Employees SET PhoneNumber = c.PhoneNumber FROM Employees e INNER JOIN Customers c ON e.FName = c.FName AND e.LName = c.LName WHERE PhoneNumber IS NULL
تعديل القيم الحالية
يستخدم هذا المثال "الجدول Car" من الفصل 1.
تتيح لك SQL إمكانية استخدام القيم القديمة في عمليات التحديث. في المثال التالي، تُزاد قيمة TotalCost
بمقدار 100 في الصفين ذوي المعرّفين 3 و4:
UPDATE Cars SET TotalCost = TotalCost + 100 WHERE Id = 3 or Id = 4
-
زِيدَت قيمة
TotalCost
الخاصّة بالسيارة 3 من 100 إلى 200. -
زيدت قيمة
TotalCost
الخاصّة بالسيارة 4 من 1254 إلى 1354.
يمكن اشتقاق القيمة الجديدة للعمود من قيمته السابقة، أو من قيمة أيّ عمود آخر في الجدول أو من الجدول المضموم (joined table) نفسه.
تحديث صفوف معيّنة
تعيّن الشيفرة أدناه قيمة حالة الصف ذي المُعرٍّف 4 إلى READY
.
UPDATE Cars SET Status = 'READY' WHERE Id = 4
تقيّم عبارة WHERE
شرطًا منطقيًا في كل صفّ. إذا استوفى الصف ذلك الشرط، فستُحدّث قيمته. خلاف ذلك، يظل الصف دون تغيير.
تحديث جميع الصفوف
يعيّن المثال التالي العمود "status" الخاص بجميع صفوف الجدول "Cars" إلى القيمة "READY"، التحديث يشمل جميع الصفوف بسبب غياب العبارة WHERE
(التي تصفّي الصفوف).
UPDATE Cars SET Status = 'READY'
التقاط السجلات المُحدّثة
قد ترغب في بعض الأحيان في التقاط السجلات التي حُدِّثت للتو. يمكنك ذلك عبر الصياغة التالية:
CREATE TABLE #TempUpdated(ID INT) Update TableName SET Col1 = 42 OUTPUT inserted.ID INTO #TempUpdated WHERE Id > 50
إنشاء قاعدة بيانات عبر CREATE
يمكن إنشاء قاعدة بيانات باستخدام أمر SQL التالي:
CREATE DATABASE myDatabase;
سينتج عن الشيفرة أعلاه قاعدة بيانات فارغة باسم myDatabase
، والتي يمكن أن تضيف جداول إليها باستخدام العبارة CREATE TABLE
.
إنشاء جدول عبر CREATE TABLE
تُستخدم العبارة CREATE TABLE
لإنشاء جدول جديد في قاعدة البيانات. يتألّف تعريف الجدول من قائمة من الأعمدة وأنواعها، إضافة إلى أيّ قيود تكاملية (integrity constraints).
المعامل | الشرح |
---|---|
tableName | اسم الجدول |
columns | تحتوي راقمة (enumeration) لجميع الأعمدة الموجودة في الجدول |
إنشاء جدول عبر Select
يمكنك إنشاء نسخة مكرّرة من جدول معيّن على النحو التالي:
CREATE TABLE ClonedEmployees AS SELECT * FROM Employees;
يمكنك استخدام أيّ من الميزات الأخرى لعبارة SELECT
لتعديل البيانات قبل نقلها إلى الجدول الجديد.
تُنشأ أعمدة الجدول الجديد تلقائيًا انطلاقًا من الصفوف المُختارة.
CREATE TABLE ModifiedEmployees AS SELECT Id, CONCAT(FName," ",LName) AS FullName FROM Employees WHERE Id > 10;
إنشاء جدول جديد
تنشئ الشيفرة التالية جدولًا بسيطًا باسم (Employees
)، يتألّف من معرّف، واسم الموظف الأول، واسم العائلة، إضافة إلى رقم الهاتف:
CREATE TABLE Employees( Id int identity(1,1) primary key not null, FName varchar(20) not null, LName varchar(20) not null, PhoneNumber varchar(10) not null );
هذا المثال خاص بالإصدار Transact-SQL،
تنشئ العبارة CREATE TABLE
جدولًا جديدًا وتضيفه إلى قاعدة البيانات، تُتبع هذه العبارة باسم الجدول (Employees). ثم تعقبه قائمة بأسماء الأعمدة وخصائصها، مثل المعرّف ID.
Id int identity(1,1) not null
شرح الشيفرة
القيمة | شرح |
---|---|
Id | اسم العمود |
int | نوع البيانات |
identity(1,1) | ينصّ على أنّ قيم العمود ستُنشأ تلقائيًا، بداية من 1، ثم تزداد بمقدار 1 في كل صف جديد |
primary key | تنص على أنّ قيم هذا العمود فريدة وغير مكرّرة |
not null | تنص على أنّ قيم العمود لا يمكن أن تكون معدومة |
إنشاء جدول باستخدام مفتاح خارجي FOREIGN KEY
ينشئ المثال أدناه جدولًا للموظفين Employees
يحتوي مرجعًا إلى جدول آخر، وهو جدول المدن Cities
.
CREATE TABLE Cities( CityID INT IDENTITY(1,1) NOT NULL, Name VARCHAR(20) NOT NULL, Zip VARCHAR(10) NOT NULL ); CREATE TABLE Employees( EmployeeID INT IDENTITY (1,1) NOT NULL, FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL, PhoneNumber VARCHAR(10) NOT NULL, CityID INT FOREIGN KEY REFERENCES Cities(CityID) );
يستعرض الرسم التالي مخططًا توضيحيًا للعلاقة بين قاعدتي البيانات.
لاحظ أنّه في السطر الأخير من الشيفرة، يشير العمود CityID
من الجدول Employees
إلى العمود CityID
في الجدول Cities
:
CityID INT FOREIGN KEY REFERENCES Cities(CityID)
شرح الشيفرة
القمة | شرح |
---|---|
CityID | اسم العمود |
int | نوع العمود |
FOREIGN KEY | إنشاء المفتاح الخارجي (اختياري) |
REFERENCES Cities(CityID) | إنشاء مرجع إلى العمود CityID من جدول المدن |
تنبيه: لا يجوز إنشاء مرجع إلى جدول غير موجود في قاعدة البيانات. عليك أن تنشئ الجدول Cities
أولا، ثم تنشئ الجدول Employees
عقب ذلك. إذا فعلت ذلك بترتيب معكوس، فسيُطرَح خطأ.
تكرار جدول Duplicate a table
يمكنك تكرار جدول معيّن عبر الصياغة التالية:
CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable;
إنشاء جدول مؤقت
يمكن إنشاء جدول مؤقت خاص بالجلسة (session) الحالية. لكنّ الصياغة تختلف بحسب إصدار SQL:
- PostgreSQL و SQLite
CREATE TEMP TABLE MyTable(...);
- SQL Server
CREATE TABLE #TempPhysical(...);
يمكن كذلك إنشاء جدول مؤقت مرئي للجميع، وليس حصرًا على الجلسة الحالية على النحو التالي:
CREATE TABLE ##TempPhysicalVisibleToEveryone(...);
ويمكن أيضًا إنشاء جدول في الذاكرة:
DECLARE @TempMemory TABLE(...);
إنشاء دالة عبر CREATE FUNCTION
تتيح SQL إنشاء دالة جديدة.
ينشئ المثال التالي دالة باسم FirstWord
، والتي تقبل معاملًا من النوع varchar
، وتُعيد قيمة من النوع نفسه.
CREATE FUNCTION FirstWord (@input varchar(1000)) RETURNS varchar(1000) AS BEGIN DECLARE @output varchar(1000) SET @output = SUBSTRING(@input, 0, CASE CHARINDEX(' ', @input) WHEN 0 THEN LEN(@input) + 1 ELSE CHARINDEX(' ', @input) END) RETURN @output END
شرح الشيفرة
الوسيط | شرح |
---|---|
function_name | اسم الدالة |
list_of_paramenters | معاملات الدالة |
return_data_type | نوع القيمة المُعادة |
function_body | متن الدالة |
scalar_expression | القيمة العددية المُعادة من الدالة |
ترجمة -وبتصرّف- للفصول من 19 إلى 22 من الكتاب SQL Notes for Professionals
اقرأ أيضًا:
- المقال التالي: معالجة الأخطاء والتعديل على قواعد البيانات في SQL
- المقال السابق: الدمج بين الجداول في SQL
- النسخة العربية الكاملة من كتاب ملاحظات للعاملين بلغة SQL 1.0.0
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.