أفضل دروس قواعد بيانات SQL

SQL لتقف على لغة الاستعلام الهيكلية. إنها الأداة الأكثر شيوعًا المستخدمة لمعالجة وإدارة البيانات في قاعدة بيانات علائقية (يشار إليها غالبًا باسم "قاعدة بيانات SQL").

يُنطق SQL بشكل شائع باسم "تكملة". أكثر متغيراتها شيوعًا هي MySQL و PostgreSQL و SQLite - وهي نسخة من SQL تُستخدم عادةً للنماذج الأولية. قدم مفهوم الوصول إلى العديد من السجلات بأمر واحد ، باستخدام استعلامات SQL.

نوصي بالبدء ببرنامج تعليمي لقاعدة بيانات SQL لمدة 4 ساعات في freeCodeCamp.

نوصي أيضًا بدورة Harvard CS50 حول قواعد البيانات و SQL.

وإذا كنت ترغب في ذلك ، فإليك برنامج تعليمي كامل مدته 9 ساعات حول تصميم قاعدة البيانات العلائقية حتى تتمكن من بناء نظام RDBMS الخاص بك باستخدام SQL.

بعض جمل واستفسارات SQL الشائعة

بيان تحديد SQL

حدد ومن الجمل

عادةً ما يكون جزء التحديد من الاستعلام لتحديد أعمدة البيانات التي سيتم عرضها في النتائج. هناك أيضًا خيارات يمكنك تطبيقها لإظهار البيانات التي ليست عمود جدول.

يوضح هذا المثال ثلاثة أعمدة محددة من جدول "الطالب" وعمود واحد محسوب. تخزن قاعدة البيانات معرف الطالب والاسم الأول واسم العائلة للطالب. يمكننا دمج عمودي الاسم الأول والأخير لإنشاء عمود الاسم الكامل المحسوب.

select studentID, FirstName, LastName, FirstName + ' ' + LastName as FullName from student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

يتم استخدام قيد CHECK لتحديد نطاق القيمة الذي يمكن وضعه في عمود.

إذا قمت بتعريف قيد CHECK على عمود واحد ، فإنه يسمح فقط بقيم معينة لهذا العمود.

إذا قمت بتعريف قيد CHECK في جدول ، فيمكنه تحديد القيم في أعمدة معينة بناءً على القيم الموجودة في أعمدة أخرى في الصف.

التحقق من SQL في إنشاء جدول

يقوم SQL التالي بإنشاء قيد CHECK في عمود "العمر" عند إنشاء جدول "الأشخاص". يضمن قيد CHECK أنه لا يمكن أن يكون لديك أي شخص أقل من 18 عامًا:

MySQL:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

خادم SQL / Oracle / MS Access:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int CHECK (Age>=18) );

للسماح بتسمية قيد CHECK ، ولتحديد قيد CHECK على أعمدة متعددة ، استخدم بناء جملة SQL التالي:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

فحص SQL على ALTER TABLE

لإنشاء قيد CHECK في عمود "العمر" عند إنشاء الجدول بالفعل ، استخدم SQL التالي:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons ADD CHECK (Age>=18);

للسماح بتسمية قيد CHECK ، ولتحديد قيد CHECK على أعمدة متعددة ، استخدم بناء جملة SQL التالي:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City="Sandnes");

قم بإسقاط قيد الاختيار

لإسقاط قيد CHECK ، استخدم SQL التالي:

خادم SQL / Oracle / MS Access:

ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE Persons DROP CHECK CHK_PersonAge; 

SQL أين شرط

WHEREبند (و / أو ، INو BETWEEN، و LIKE)

و WHEREيستخدم بند للحد من عدد الصفوف التي يتم إرجاعها.

في هذه الحالة ، سيتم استخدام كل هذه العناصر الخمسة هي عبارة سخيفة إلى حد ما WHERE.

فيما يلي قائمة الطلاب الكاملة الحالية للمقارنة WHEREبمجموعة نتائج الجملة:

select studentID, FullName, sat_score, rcd_updated from student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

سيتم عرض الصفوف التي…

  • WHERE معرفات الطلاب تتراوح بين 1 و 5 (ضمناً)
  • OR معرف الطالب = 8

إليك استعلام محدث ، حيث لن يتم تقديم أي سجل له درجة SAT في هذه القائمة (1000 ، 1400):

select studentID, FullName, sat_score, recordUpdated from student where (studentID between 1 and 5 or studentID = 8) and sat_score NOT in (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

* كما هو الحال مع كل عناصر SQL هذه ، هناك الكثير منها أكثر مما هو موجود في هذا الدليل التمهيدي.

آمل أن يمنحك هذا على الأقل ما يكفي للبدء.

يرجى الاطلاع على دليل مدير قاعدة البيانات الخاص بك والاستمتاع بتجربة خيارات مختلفة بنفسك.

بيان تحديث SQL

لتحديث سجل في جدول تستخدم UPDATEالعبارة.

Be careful. You can update all records of the table or just a few. Use the WHERE condition to specify which records you want to update. It is possible to update one or more columns at a time. The syntax is:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Here is an example updating the Name of the record with Id 4:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

You can also update columns in a table by using values from other tables. Use JOIN clause to get data from multiple tables. The syntax is:

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Here is an example updating Manager of all records:

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

What an Update query can do

An update query gives the DBA or SQL-using programmer the ability to update many records with one command.

Important Safety Tip! Always have a backup copy of what you are about to change BEFORE you change it!

This section will:

  • add a new field to the student table
  • test the logic to update that field with a school assigned email address
  • تحديث الحقل الجديد.

فيما يلي جدول الطلاب حيث نبدأ هذه العملية:

SELECT * FROM student;
+-----------+------------------------+-----------+------------------+---------------------+---------------------+ | studentID | FullName | sat_score | programOfStudy | rcd_Created | rcd_Updated | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ | 1 | Monique Davis | 400 | Literature | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ 9 rows in set (0.00 sec)

عدل الجدول وأضف حقلاً جديدًا

 ALTER TABLE `fcc_sql_guides_database`.`student` ADD COLUMN `schoolEmailAdr` VARCHAR(125) NULL AFTER `programOfStudy`;

جدول الطالب بعد تنفيذ التعديل.

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+----------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+----------------+ | Monique Davis | 400 | Literature | NULL | | Teri Gutierrez | 800 | Programming | NULL | | Spencer Pautier | 1000 | Programming | NULL | | Louis Ramsey | 1200 | Programming | NULL | | Alvin Greene | 1200 | Programming | NULL | | Sophie Freeman | 1200 | Programming | NULL | | Edgar Frank "Ted" Codd | 2400 | Computer Science | NULL | | Donald D. Chamberlin | 2400 | Computer Science | NULL | | Raymond F. Boyce | 2400 | Computer Science | NULL | +------------------------+-----------+------------------+----------------+ 9 rows in set (0.00 sec)

اختبار المنطق (خطوة مهمة جدًا!)

SELECT FullName, instr(FullName," ") AS firstSpacePosition, concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") AS schoolEmail FROM student;
+------------------------+--------------------+------------------------+ | FullName | firstSpacePosition | schoolEmail | +------------------------+--------------------+------------------------+ | Monique Davis | 8 | [email protected] | | Teri Gutierrez | 5 | [email protected] | | Spencer Pautier | 8 | [email protected] | | Louis Ramsey | 6 | [email protected] | | Alvin Greene | 6 | [email protected] | | Sophie Freeman | 7 | [email protected] | | Edgar Frank "Ted" Codd | 6 | [email protected] | | Donald D. Chamberlin | 7 | [email protected] | | Raymond F. Boyce | 8 | [email protected] | +------------------------+--------------------+------------------------+ 9 rows in set (0.00 sec)

ملاحظة حول concat (): في MySQL يُستخدم هذا الأمر لسلاسل مدمجة ، وليس كذلك في إصدارات SQL الأخرى (راجع الدليل). في هذا الاستخدام ، يعمل على النحو التالي: يتم دمج السلسلة الفرعية لحقل FullName حتى المساحة الأولى دون تضمينها مع "@ someSchool.edu". في العالم الحقيقي ، يجب أن يكون هذا أكثر تعقيدًا وستحتاج إلى التأكد من أن عنوان البريد الإلكتروني فريد.

القيام بالتحديث

سوف نتظاهر بأن هذا هو ما نريده ونقوم بتحديث الجدول بهذه المعلومات:

UPDATE student SET schoolEmailAdr = concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") WHERE schoolEmailAdr is NULL;

نجاح!

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+------------------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+------------------------+ | Monique Davis | 400 | Literature | [email protected] | | Teri Gutierrez | 800 | Programming | [email protected] | | Spencer Pautier | 1000 | Programming | [email protected] | | Louis Ramsey | 1200 | Programming | [email protected] | | Alvin Greene | 1200 | Programming | [email protected] | | Sophie Freeman | 1200 | Programming | [email protected] | | Edgar Frank "Ted" Codd | 2400 | Computer Science | [email protected] | | Donald D. Chamberlin | 2400 | Computer Science | [email protected] | | Raymond F. Boyce | 2400 | Computer Science | [email protected] | +------------------------+-----------+------------------+------------------------+ 9 rows in set (0.00 sec)