[عزف الموسيقى] DOUG لويد: في أشرطة الفيديو لدينا على موضوعات التنمية على شبكة الإنترنت، لقد ذكر مفهوم قاعدة بيانات عدة مرات، أليس كذلك؟ لذلك كنت قاعدة بيانات ربما دراية من أقول باستخدام Microsoft Excel أو جداول البيانات جوجل. انها حقا مجرد تنظيم مجموعة من الجداول والصفوف والأعمدة. وقاعدة البيانات حيث محلاتنا الموقع المعلومات المهمة لموقعنا على شبكة الإنترنت للعمل بشكل صحيح. مرة أخرى، مثال شائع حقا هنا تم تخزين أسماء المستخدمين وكلمات المرور في قاعدة بيانات، بحيث عندما تسجيل دخول المستخدم إلى موقعنا على شبكة الإنترنت، قاعدة بيانات يمكن الاستعلام لمعرفة في حالة وجود المستخدم في قاعدة البيانات. وحتى إذا ما تم التأكد من أن كلمة المرور الخاصة بهم هو الصحيح. وإذا كلمة المرور الخاصة بهم هو الصحيح، ثم يمكننا ان نقدم لهم كل ما الصفحة انهم الطالبة. لذلك ربما كنت، مرة أخرى، على دراية مع هذه الفكرة من إكسل أو جوجل جداول البيانات. لدينا قواعد البيانات، الجداول والصفوف والأعمدة. وهذا في الحقيقة نوع من مجموعة أساسية انهيار الهرمي هنا. حتى هنا جداول البيانات إكسل. وإذا كنت قد فتحت من أي وقت مضى هذا أو برنامج آخر مماثل كنت أعرف أن هذه هي هنا rows-- 1، 2، 3، 4، 5، 6، 7. هذه هي الأعمدة. ربما إلى هنا، على الرغم من أنك قد لا تستخدم هذه الميزة بشكل رهيب much-- أنا تكبير in-- لدينا هذه الفكرة من ورقة. لذلك ربما هذه الأوراق، إذا أقلب ذهابا وإيابا، هي الجداول المختلفة التي موجودة في قاعدة البيانات. وإذا واصلنا على سبيل المثال جميع وبالمناسبة، اسم قاعدة البيانات هذه هو كتاب (1). ربما لدي كتاب (2) وكتاب 3. لذلك كل ملف إكسل هو قاعدة البيانات، كل ورقة هي الطاولة، وداخل كل جدول لدي هذه الفكرة من الصفوف والأعمدة. فكيف يمكنني التعامل مع قاعدة البيانات هذه؟ كيف يمكنني الحصول على معلومات منه؟ كذلك هناك لغة تسمى SQL-- وأنا عادة مجرد دعوة Sequel-- وأنها تقف على لغة الاستعلام الهيكلية. وذلك هو لغة البرمجة، لكنه البرمجة محدودة إلى حد ما لغة. انها ليست تماما مثل الآخرين أننا عملنا مع. ولكن الغرض من هذا لغة البرمجة هو الاستعلام عن قاعدة بيانات ل نسأل المعلومات من قاعدة بيانات، العثور على معلومات في قاعدة بيانات، وهلم جرا. نحن أيضا، في CS50-- وانها جدا منصة مشتركة، انه دعا الخلية. هذا ما نستخدمها في الدورة. انها مفتوحة المصدر منصة التي تؤسس ما يسمى database-- العلائقية قاعدة بيانات، على نحو فعال. نحن لسنا بحاجة للحصول على في الكثير من التفاصيل على ما قاعدة بيانات علائقية هي. لكن لغة SQL هي بارعون جدا في العمل مع الخلية وأخرى مماثلة أنماط من قواعد البيانات العلائقية. والعديد من المنشآت من الخلية تأتي مع شيء دعا بريس، التي هو المستخدم الرسومية interface-- على أن GUI-- يجعله أكثر قليلا سهل الاستعمال لتنفيذ استعلامات قاعدة البيانات، لأن قواعد البيانات لا تستخدم فقط قبل المبرمجين المتقدمة، أليس كذلك؟ أحيانا هناك هذه الشركات الصغيرة، وأنهم لا يستطيعون توظيف فريق من المبرمجين، لكنها لا تزال تحتاج إلى تخزين المعلومات في قاعدة بيانات. شيء من هذا القبيل بريس يجعل من السهل جدا لشخص من الذي لم يسبق له مثيل لالمبرمجة التقاط وتصبح مألوفة مع كيفية للعمل مع قاعدة البيانات. المشكلة هي، بريس، في حين انها وسيلة رائعة للتعلم حول قواعد البيانات، فمن اليدوي. وأنت تسير لدينا لتسجيل الدخول إلى انها وتنفيذ الأوامر ونوع الأشياء في يدويا. وكما نعلم من وجهة نظرنا مثال على PHP برمجة الويب، الحاجة إلى القيام يدويا الأشياء على موقعنا على الانترنت، إذا كنا نريد ديناميكية، تنشط استجابة الموقع، ربما لا يكون أفضل نهج. نود أن نجد طريقة ل ربما أتمتة هذه بطريقة أو بأخرى. وسوف SQL تمكننا من القيام بذلك. حتى عندما كنا في طريقنا لل بدء العمل مع SQL، نحتاج أولا لدينا قاعدة بيانات للعمل مع. إنشاء قاعدة بيانات و شيء وربما كنت ستفعل في بريس، ل عليك إلا أن تفعل ذلك مرة واحدة، وبناء الجملة من أجل القيام بذلك هو الكثير أكثر وضوحا. انها أسهل كثيرا للقيام بذلك في واجهة المستخدم الرسومية من كتابة بها كأمر. الأمر يمكن الحصول على القليل مرهقة. وبالمثل، يمكن إنشاء جدول الحصول على قدرا كبيرا مرهقة أيضا. وحتى أشياء مثل خلق قاعدة بيانات وإنشاء جدول، التي كنت ربما لن يؤدي الا الى القيام once-- مرة واحدة في الجدول، مرة واحدة في database-- لا بأس من القيام بذلك في واجهة رسومية. في عملية إنشاء جدول، عليك لدينا أيضا لتحديد كل من الأعمدة التي ستكون في هذا الجدول. أي نوع من المعلومات تفعل تريد تخزين في الجدول؟ ربما اسم المستخدم وتاريخ الميلاد، كلمة السر، رقم هوية المستخدم، وربما المدينة والدولة، أليس كذلك؟ وفي كل مرة كنا نريد لإضافة مستخدم إلى قاعدة البيانات، ونحن نريد للحصول على كل ستة من هذه القطع من المعلومات. ونحن نفعل ذلك بإضافة الصفوف إلى الجدول. لذلك علينا أولا إنشاء قاعدة بيانات، ثم نقوم بإنشاء الجدول. كجزء من خلق جدول، يطلب منا لتحديد كل عمود نود في هذا الجدول. وبعد ذلك نبدأ في إضافة المعلومات إلى قاعدة البيانات والاستعلام عن قاعدة بيانات أكثر generally-- ليس فقط مضيفا، ولكن كل شيء ونحن شيء آخر do-- سنكون التعامل مع صفوف الجدول، التي تعد واحدة معلومات المستخدم من المجموعة بالكامل. لذلك كل عمود SQL قادر على عقد بيانات من نوع بيانات معينة. لذلك نحن نوع من القضاء على هذا فكرة من أنواع البيانات في PHP، ولكنهم هنا مرة أخرى في SQL. وهناك الكثير من أنواع البيانات. وهنا فقط 20 منهم، ولكن انها ليست حتى كل منهم. لذلك لدينا أفكار مثل INTs-- Integers-- نحن ربما نعرف هذا العمود يمكن أن تعقد صحيحة. وهناك اختلافات thereon-- SMALLINT، TINYINT، MEDIUMINT، BIGINT. ربما لا نحتاج أربع لدغات دائما. ربما نحتاج ثمانية بايت، ولذا فإننا يمكن استخدام هذه الاختلافات على الأعداد الصحيحة أن تكون أكثر قليلا الفضاء كفاءة. يمكننا أن نفعل الأرقام العشرية، ونحن يمكن القيام به أرقام الفاصلة العائمة. هذه هي مشابهة جدا. هناك بعض الاختلافات، ولو تفضلتم أحب للبحث عن نوع SQL من دليل، كنت يمكن أن نرى ما هي طفيف الاختلافات بينهما. ربما نحن نريد لتخزين معلومات حول التاريخ والوقت. ربما نحن تتبع عندما انضم للمستخدم موقعنا على الانترنت، وربما لذلك نحن نريد لديك عمود هذا وقت التاريخ أو الطابع الزمني الذي يشير عندما يقوم المستخدم الواقع وقعت. يمكننا أن نفعل هندستها وخطوط سلاسل. هذا هو في الواقع بارد جدا. نحن يمكن أن ترسم ل المنطقة الجغرافية باستخدام إحداثيات GIS لمؤامرة من المنطقة. بحيث يمكن تخزين في الواقع هذا النوع المعلومات في عمود SQL. TEXT هو مجرد النقط العملاقة من النص، ربما. تتضمن التعدادات هي نوع من اهتمام. وجدت فعلا في C. نحن لا الحديث عنهم لأنهم لا رهيب يشيع استخدامها، على الأقل CS50. ولكن من نوع بيانات سردي، التي غير قادرة على اجراء القيم محدودة. وهناك مثال جيد حقا هنا سيكون لإنشاء التعداد حيث السبعة القيم الممكنة هي الأحد، الاثنين، الثلاثاء، الاربعاء، الخميس، الجمعة، السبت، أليس كذلك؟ هذا النوع من البيانات يوم لا توجد الأسبوع، ولكن يمكننا أن خلق نوع البيانات المذكورة مثل أن هذا العمود يمكن أن تعقد في أي وقت فقط واحدة من تلك القيم السبع الممكنة. لقد عددت جميع من القيم الممكنة. ثم لدينا CHAR وVARCHAR، ولقد قمت لون هذه الأخضر لأننا في الواقع ذاهب الى اتخاذ ثانية للحديث عن الفرق بين هذين الأمرين. حتى CHAR، على عكس C حيث كان CHAR حرف واحد، في SQL على CHAR يشير إلى سلسلة طول ثابت. وعندما نخلق هذا العمود، ونحن في الواقع يمكن تحديد طول السلسلة. حتى في هذا المثال، يمكننا القول CHAR (10). وهذا يعني أن كل عنصر من عناصر هذا العمود سوف تتكون من 10 بايت من المعلومات. لا اكثر ولا اقل. حتى لو كنا في محاولة وضعها في 15 بت أو 15 عنصرا شخصية أو قيمة في هذا العمود، نحن فقط الحصول على أول 10. إذا وضعنا في اثنين حرف قيمة طويلة، ونحن في طريقنا لديها اثنين حرفا، ثم ثمانية دغات فارغة. ونحن لن تكون أكثر كفاءة من ذلك. A VARCHAR هو نوع من مثل لدينا فكرة وجود سلسلة التي نعرفها مع من C أو من PHP. انها سلسلة طول متغير. وعند إنشاء هذا العمود، أنت فقط تحديد الحد الأقصى للأطوال ممكنة. لذلك ربما 99 أو عادة 255. من شأنه أن يكون الحد الأقصى للطول. وحتى لو كنا تخزين 15 سلسلة أحرف، سوف نستخدم 15 بايت، ربما 16 بايت للفاصل فارغة. إذا كنا تخزين ثلاثة سلسلة أحرف، سوف نستخدم ثلاثة أو أربعة بايت. لكننا لن تستخدم الكامل 99. فلماذا لدينا على حد سواء؟ حسنا، إذا نحن بحاجة لمعرفة كيف شيء الطويل مع VARCHAR، علينا أن نوع من أعاد عبرها ترغب فقط فعلنا في C ومعرفة من أين يتوقف. في حين إذا علمنا أن كل شيء في هذا العمود هو 10 بايت، ربما ونحن نعلم أن المعلومات، ونحن يمكن القفز 10 بايت، 10 بايت، 10 بايت، 10 بايت، ودائما العثور على بداية السلسلة. ولذا فإننا قد يكون لها بعض مساحة مهدرة مع CHAR، ولكن ربما هناك تجارة الخروج من وجود سرعة أفضل في التنقل في قاعدة البيانات. ولكن ربما نحن نريد مرونة VARCHAR بدلا من having-- إذا CHAR لدينا كان 255، ولكن معظم المستخدمين تم إدخال سوى ثلاثة أو أربعة بايت قيمة المعلومات أو ثلاثة أو أربعة الأحرف بقيمة المعلومات. ولكن بعض المستخدمين يستخدمون كامل 255، ربما VARCHAR سوف يكون من الأنسب هناك. انها نوع من المفاضلة، و عموما لأغراض CS50، كنت لا داعي للقلق كثيرا حول سواء كنت تستخدم CHAR أو VARCHAR. ولكن في العالم الحقيقي، وهذه الأمور لا يهم لأن كل من هذه الأعمدة تأخذ مساحة المادي الفعلي. والحيز المادي، في العالم الحقيقي، ويأتي في قسط التأمين. هكذا نظر الآخر عندما كنت بناء الجدول هو اختيار عمود واحد ليكون ما يسمى مفتاح أساسي. والمفتاح الأساسي هو العمود حيث كل قيمة واحدة هي فريدة من نوعها. وهذا يعني أنه يمكنك بسهولة اقتطاف صف واحد فقط من خلال النظر في المفتاح الأساسي من هذا الصف. هكذا على سبيل المثال، كنت عموما، مع المستخدمين، لا أريد اثنين من المستخدمين الذين لها نفس رقم المستخدم. وذلك ربما لديك الكثير من المعلومات، وربما يمكن اثنين من المستخدمين لها نفس name-- لديك جون سميث وجون سميث. هذا ليس بالضرورة مشكلة، لأن هناك العديد من الأشخاص في العالم يدعى جون سميث. ولكن ليس لدينا سوى رقم مستخدم واحد 10، مستخدم واحد رقم 11، 12، 13 ID. ليس لدينا اثنين من المستخدمين مع نفس العدد، وذلك ربما أرقام هوية المستخدم سيكون المفتاح الأساسي الجيد. ليس لدينا أي ازدواجية، ويمكننا الآن فريد تحديد كل صف واحد فقط من خلال النظر في هذا العمود. اختيار المفاتيح الأساسية يمكن في الواقع جعل عمليات الجدول اللاحقة أسهل كثيرا لأنه يمكنك الاستفادة حقيقة أن بعض الصفوف سوف تكون فريدة من نوعها، أو عمود معين من قاعدة البيانات الخاصة بك أو الجدول سوف تكون فريدة من نوعها لاختيار صفوف معينة خارج. هل يمكن أن يكون أيضا الابتدائية المشتركة مفتاح، والتي قد تجد المناسبة الاستخدام، الذي هو مجرد مزيج من اثنين من الأعمدة التي ومن يضمن أن تكون فريدة من نوعها. ولذلك ربما يكون لديك واحدة العمود الذي هو كما وفنادق صغيرة، عمود واحد وهذا واحد، اثنين، وثلاثة، ولكن عليك من أي وقت مضى فقط يملك A1 واحد، واحد A2، وهلم جرا وهلم جرا. ولكن قد يكون لديك B2، وهو C2، أو A1، A2، A3، A4. لذلك قد يكون ومتعددة، متعددة فنادق صغيرة، متعددة منها، ثنائي متعددة، ولكن يمكنك فقط أن يكون من أي وقت مضى واحد A1، B2، C3، وهلم جرا. لذلك كما قلت، SQL هو لغة البرمجة، لكنه لا يملك مفردات محدودة إلى حد ما. انها ليست تماما توسعية مثل C و PHP وغيرها من اللغات أن نتحدث في هذه الدورة. ومن أكثر مطول ل اللغة مما نحن سنتحدث عن هذا في فيديو، لأنه في هذا الفيديو ونحن في طريقنا للحديث عن أربع عمليات أننا يمكن أن تؤدي على الطاولة. هناك أكثر من هذا. يمكننا أن نفعل أكثر من هذا، ولكن لأغراضنا، ونحن في طريقنا عموما إلى استخدام فقط أربعة إدراج operations--، تحديد وتحديث وحذف. وربما يمكنك تخمين حدسي ما كل أربعة من هذه الأمور. ولكننا سوف ندخل قليلا التفاصيل على كل واحد. حتى لأغراض هذا فيديو، دعونا نفترض لقد التاليين الجداول في قاعدة بيانات واحدة. لدينا جدول يسمى المستخدمين لديها أربعة columns-- رقم الهوية، واسم المستخدم، كلمة السر، والاسم الكامل. ونحن لدينا الثانية الجدول في نفس قاعدة البيانات ودعا الأمهات الذي يقوم بتخزين المعلومات فقط حول اسم مستخدم والأم. لذلك لجميع من الأمثلة في هذا الفيديو، وسوف نقوم يتم استخدام قاعدة البيانات هذه و التحديثات اللاحقة له. لذلك دعونا نقول أننا نريد أن إضافة معلومات إلى جدول. هذا ما تفعله عملية إدراج. في شرح كل من هذه الأوامر، وانا ذاهب لإعطائك هيكل عظمي العام للاستخدام. لأنه في الاساس، الاستعلامات سوف تبدو مشابهة جدا، نحن ذاهبون لمجرد أن تغيير قطع مختلفة قليلا من المعلومات أن تفعل أشياء مختلفة مع الجدول. وذلك لINSERT، وهيكل عظمي يبدو نوع من هذا القبيل. نريد أن تضاف إلى جدول معين. ثم لدينا قوس مفتوح وقائمة الأعمدة أننا نريد أن نضع القيم في. وثيقة قوسين، و التالي القيم، ومن ثم مرة أخرى، ونحن خارج قائمة القيم نحن نريد ان نضع في الجدول. ذلك مثال على ذلك سوف تكون على النحو التالي. أريد أن أدخل في الجدول المستخدمين columns-- التالية اسم المستخدم، كلمة السر، وFULLNAME. حتى صف جديد حيث أضع في هذه الأعمدة الثلاثة، ونحن الذهاب لوضعها في القيم نيومان، USMAIL، ونيومان. حتى في هذه الحالة، وأنا وضع نيومان صغيرة في العمود اسم المستخدم، وكلمة السر USMAIL، واسم كامل رأس المال N نيومان في العمود FULLNAME. حتى هنا ما قاعدة البيانات بدا مثل قبل. وإليك ما الجدول المستخدمين على بدا أعلى مثل قبل فعلنا هذا. بعد أن تنفيذ هذا الاستعلام، نحصل على هذا. واضاف لدينا صف جديد إلى الجدول. ولكن لاحظ هذا الشيء واحد أنني لم تحدد، ولكن ما أنا عندي قيمة ل، وهو هذا 12 هنا. أنا لا أقول أنني أردت أن وضع رقم في هناك. أردت أن أضع اسم المستخدم، كلمة السر، FULLNAME. وفعلت ذلك، فلا بأس. ولكن كما أنني حصلت على هذا 12. لماذا لم أحصل على هذا 12؟ حسنا، اتضح أن عندما تقوم بتعريف عمود سيكون الخاص بك المفتاح الأساسي، التي عادة ما تكون، كما قلت، وهو رقم. انها ليست دائما بالضرورة الذهاب ليكون رقم الهوية، إلا أنها عادة ما تكون فكرة جيدة ل يكون نوعا من قيمة عدد صحيح. لديك الخيار في بريس عندما كنت بصدد إنشاء قاعدة البيانات الخاصة بك أو الجدول الخاص بك لتحديد ذلك العمود كما تزايد السيارات. وهي فكرة جيدة حقا عندما كنت تعمل مع مفتاح أساسي، لأنك تريد كل قيمة في هذا العمود لتكون فريدة من نوعها. وإذا كنت قد نسيت لتحديد ذلك لأكثر من شخص واحد، لديك الآن الحالة التي يكون فيها هذا العمود لم تعد فريدة من نوعها. لديك اثنين من الفراغات، حتى تتمكن من لا يعد تحديد فريد column-- أو يمكنك لم يعد فريد تحديد صف واحد على أساس هذا العمود. انها فقدت جميع ما لديه قيمة كمفتاح أساسي. وذلك على ما يبدو ما قمت به هنا يتم تكوين هوية المستخدم عامود لزيادة السيارات بحيث كل الوقت يمكنني إضافة معلومات إلى طاولة المفاوضات، وسوف تعطيني تلقائيا قيمة المفتاح الأساسي. لذلك أنا لا يمكن أبدا أن ننسى أن تفعل ذلك ل وقاعدة البيانات تفعل ذلك بالنسبة لي. ولهذا النوع من لطيف. وولهذا السبب نحصل 12 هناك، لأنني تعيين هذا العمود إلى زيادة السيارات. إذا أضفت شخص آخر انها تريد ان تكون 13، إذا أضفت شخص آخر انها تريد ان تكون 14، وهلم جرا. لذلك دعونا لا مجرد واحد أكثر الإدراج. ونحن سوف تضاف الى الجدول الامهات، في معين، واسم المستخدم والأم العمود، والقيم كرامر وبابس كرامر. وهكذا كان لدينا هذا من قبل. بعد أن تنفيذ تلك استعلام SQL، لدينا هذا. واضاف لدينا كرامر وبابس كرامر إلى طاولة الامهات. ذلك أن إدراج. SELECT هو ما نستخدمه لاستخراج المعلومات من الجدول. لذلك هذا هو كيف نحصل المعلومات من قاعدة البيانات. وأوامر SELECT ذلك ستكون كثيرا جدا المستخدمة في البرمجة. framework-- الجنرال ل هيكل عظمي العام يبدو مثل هذا. اختيار مجموعة من الأعمدة من جدول، ثم اختياريا يمكنك تحديد condition-- أو ما نسميه عادة المسند، عادة ما يكون المصطلح الذي نستخدمه في SQL. ولكنه في الاساس ما صفوف معينة ترغب في الحصول عليها. إذا كنت تريد، بدلا من الحصول على كل شيء، وتضييق عليه، هذا هو المكان الذي سوف تفعل ذلك. ثم اختياريا، يمكنك أيضا الترتيب حسب عمود معين. لذلك ربما كنت تريد أن يكون الأشياء مرتبة استنادا أبجديا على عمود واحد أو بناء على أبجديا آخر. مرة أخرى، حيث وORDER BY اختيارية. ولكنها سوف تكون على الأرجح useful-- بشكل خاص حيث سيكون من المفيد تضييق حتى لا الحصول على قاعدة البيانات الخاصة بك بأكملها ذهابا و لدينا لمعالجة ذلك، كنت مجرد الحصول على قطعة من أن الذي يهمك. هكذا على سبيل المثال، وأنا قد تحتاج إلى تحديد رقم الهوية وFULLNAME من المستخدمين. فما قد يبدو هذا مثل؟ حتى هنا بلدي المستخدمين الطاولة. أريد لتحديد idnum وFULLNAME من المستخدمين. ما أنا ذاهب للحصول على؟ انا ذاهب للحصول على هذا. لم أكن تضييق عليه، لذلك أنا الحصول على رقم لكل صف وأنا الحصول على كامل تسمية من كل صف. حسنا. ماذا لو كنت تريد تحديد كلمة المرور من المستخدمين WHERE-- حتى الآن أنا مضيفا شرط، وهو predicate-- حيث idnum أقل من 12. حتى هنا قاعدة البيانات الخاصة بي مرة أخرى، بلدي المستخدمين طاولة القمة. ما أنا ذاهب الى الحصول عليها إذا أريد ل حدد تلك المعلومات، وكلمة السر، حيث هوية المستخدم أو idnum أقل من 12؟ انا ذاهب للحصول على هذا المعلومات مرة أخرى، أليس كذلك؟ يحدث أن idnum هو 10، أي أقل من 12، ID رقم 11 أقل من 12. أنا الحصول على كلمة المرور لتلك الصفوف. هذا ما سألت عنه. ماذا عن هذا؟ ماذا لو كنت تريد تحديد نجم من الجدول الامهات حيث يساوي اسم المستخدم جيري؟ OK، حدد النجم هو خاص نوع من بطاقة البرية يسمى التي نستخدمها للحصول على كل شيء. حتى انهم يقولون حدد اسم المستخدم الأم الفاصلة، التي حدث أن يكون فقط عمودين من هذا الجدول، يمكنني فقط اختيار نجمة والحصول على كل شيء حيث يساوي اسم المستخدم جيري. وهذا ما أود أن أحصل على إذا أدليت به هذا الاستعلام معين. الآن، قواعد البيانات كبيرة لأنها تسمح لل لنا لتنظيم المعلومات ربما قليلا أكثر كفاءة من نحن قد خلاف ذلك. نحن لا بالضرورة لتخزين كل قطعة ذات الصلة المعلومات حول مستخدم في نفس الجدول. كان لدينا جدولين هناك. نحن بحاجة إلى تخزين اسم أمه الجميع، و وربما ليس لدينا الضمان الاجتماعي عدد، لدينا تاريخ ميلادهم. التي لا تحتاج دائما أن تكون في نفس الجدول. طالما أننا يمكن أن تحدد العلاقات بين tables-- وذلك حيث أن العلائقية مصطلح قاعدة بيانات نوع من يأتي في play-- طالما أننا يمكن أن تحدد العلاقات بين الجداول، يمكننا أن نوعا من تجزئة أو أشياء مجردة وسيلة، حيث لدينا فقط معلومات هامة حقا نحن نهتم في الجدول الخاص بالمستخدم. ثم لدينا معلومات المساعدة أو معلومات إضافية في جداول أخرى نتمكن من ربط العودة إلى الرئيسية المستخدمين الجدول بطريقة معينة. حتى هنا لدينا هذين الجدولين، ولكن هناك علاقة بينهما، الصحيح؟ يبدو مثل اسم المستخدم قد يكون شيئا ما هو موجود من القواسم المشتركة بين هذه جدولين مختلفة. ذلك ما اذا كان لدينا الآن موقف يمكننا فيه ترغب في الحصول على الاسم الكامل للمستخدم من الجدول المستخدم، وأمهم اسم من الجدول الأم؟ ليس لدينا وسيلة للحصول هذا كما هو عليه، أليس كذلك؟ ليس هناك جدول واحد يحتوي على كل من الاسم الكامل واسم الأم. ليس لدينا هذا الخيار من ما رأيناه حتى الآن. ولذا يتعين علينا أن نقدم فكرة الانضمام. وينضم على الأرجح الأكثر complex-- انها حقا معظم عملية معقدة نحن بصدد الحديث عنها في الفيديو. انهم معقدة بعض الشيء، ولكن بمجرد الحصول على تعليق منه، انهم في الواقع ليست سيئة للغاية. انها مجرد حالة خاصة من SELECT. ونحن في طريقنا لتحديد مجموعة من أعمدة من جدول الانضمام في الجدول الثاني على بعض المسند. في هذه الحالة، تفكر في ذلك مثل this-- جدول واحد هو دائرة واحدة أكثر من هنا، الجدول الثاني هو دائرة أخرى أكثر من هنا. وهذا الجزء المسند في الوسط، انها نوع من مثل إذا كنت تعتقد كما حول رسم تخطيطي فين، ما لديهم من القواسم المشتركة؟ نحن نريد لربط هذين الجدولين بناء على ما لديهم من القواسم المشتركة وخلق هذا الجدول الافتراضي هذا هو اندماج اثنين معا. لذلك سنرى هذا في سبيل المثال وربما هذا سوف يساعد مسحها حتى قليلا. لذلك ربما كنت تريد تحديد USER.FULLNAME وmoms.mother من المستخدمين الانضمام في الامهات الجدول في كل حالة حيث العمود اسم المستخدم هو نفسه بينهما. وهذا هو جديد بناء جملة هنا، هذا المستخدم. والامهات .. إذا أفعله جداول متعددة معا، ويمكن تحديد الجدول. أنا يمكن أن نميز في يوم معين أن في قاع جدا هناك. أنا يمكن أن تميز اسم المستخدم عمود من الجدول المستخدمين من العمود اسم المستخدم لل الجدول الامهات، والتي هي otherwise-- إذا قلنا فقط يساوي اسم المستخدم اسم المستخدم، وهذا لا حقا يعني أي شيء. نحن نريد أن نفعل ذلك حيث أنها تطابق. حتى أتمكن من تحديد الجدول و اسم العمود في حالة الوضع حيث أنه سيكون غير واضح ما أتحدث عنه. ذلك أن كل ما أفعله هناك أنا أقول هذا العمود من هذا الجدول، ويجري صريحة جدا. ذلك مرة أخرى، وأنا اختيار الاسم الكامل واسم الأم من الجدول المستخدمين المرتبطين معا مع الجدول الامهات في كل حالة حيث أنهما يشتركان أن column-- إلا أنهما يشتركان هذا المفهوم المستخدم. حتى هنا الجداول كان لدينا من قبل. هذا هو حال لدينا قاعدة البيانات كما هو قائم الآن. المعلومات نحن استخراج هذا هو لتبدأ. هذا هو الجدول الجديد ونحن في طريقنا لخلق الجمع بين هذه معا. ولاحظ أننا لا يبرز الصف نيومان في الجدول الخاص بالمستخدم، ونحن لا يبرز صف كريمر في الجدول الامهات لأن لا أحد موجود في كلا sets-- في كلا الجدولين. المعلومات الوحيدة التي هي مشتركة بينهما جيري في كلا الجدولين وgcostanza في كلا الجدولين. وحتى عندما نفعل SQL JOIN، ما كنا get-- ونفعل في الواقع الحصول على هذا. انها نوع من متغير مؤقت. انها مثل افتراضية اندماج الجدولين. ونحن في الواقع الحصول على شيء مثل هذا، حيث لقد اندمجت معا الجداول على المعلومات التي لديهم من القواسم المشتركة. لذلك تلاحظ أن users.username والعمود moms.username، انها بالضبط نفس الشيء. وكان أن المعلومات التي ما يتسق من المستخدمين الجدول والجدول الامهات. ولذا فإننا اندمجت معا. نحن تجاهل كريمر لأنه لم تكن موجودة في الجدول المستخدمين، ونحن تجاهل نيومان، ل وقال انه لم يكن موجودا في الجدول الامهات. لذلك هذا هو الاندماج افتراضية باستخدام عملية الربط من SELECT. ثم كنا نبحث عن ل الاسم الكامل المستخدم والدة المستخدم، ولذا فإن هذه المعلومات التي سوف نحصل من الاستعلام العام التي قطعناها على أنفسنا مع SELECT. لذلك نحن انضمت إلى الجداول معا واستخرجنا هذه الأعمدة اثنين، وهذا ما كنا عليه. ولكن SQL ينضم إلى نوع من التعقيد. ربما لن تفعل لهم كثيرا، ولكن مجرد فكرة عن هيكل عظمي التي يمكن استخدامها لدمج اثنين الجداول معا إذا كنت في حاجة إليها. الأخيرين هي أبسط قليلا أعدك. حتى تحديث، يمكننا استخدام UPDATE لتغيير المعلومات في جدول. الشكل العام هو استكمال بعض الجدول، تعيين بعض الأعمدة لبعض القيمة حيث أن بعض المسند راض. هكذا على سبيل المثال، قد نرغب لتحديث جدول المستخدمين وتعيين كلمة المرور ليادا يادا، حيث بلغ عدد الرقم هو 10. حتى في هذه الحالة، نحن تحديث جدول المستخدمين. رقم معرف 10 ل الصف الأول هناك، ونحن نريد لتحديث كلمة السر ليادا يادا. وهذا ما سيحدث. انها واضحة جدا، أليس كذلك؟ انها مجرد بسيطة جدا تعديل على الجدول. حذفه العملية كنا إزالة المعلومات من الجدول. حذف من الجدول حيث بعض المسند راض. نريد حذفه من المستخدمين الجدول على سبيل المثال حيث كان اسم المستخدم نيومان. ربما يمكنك تخمين ما يحدث ل يحدث هنا بعد أن تنفيذ هذا SQL الاستعلام، هو ذهب نيومان من الجدول. لذلك كل هذه العمليات، كما قلت، من السهل جدا القيام به في بريس. انها واجهة المستخدم ودية للغاية. ولكنه يتطلب الجهد اليدوي. نحن لا نريد لتوظيف الجهد اليدوي. نريد برامجنا ل القيام بذلك بالنسبة لنا، أليس كذلك؟ ولذا فإننا قد ترغب في القيام هذا برمجيا. نحن نريد لدمج SQL ويكون شيء آخر للقيام بذلك بالنسبة لنا. ولكن ما رأينا أن يسمح لنا أن نفعل شيئا برمجيا؟ لقد رأينا PHP، أليس كذلك؟ انه يقدم بعض ديناميكية في برامجنا. وذلك لحسن الحظ، وSQL PHP لعب بشكل جيد جدا معا. هناك وظيفة في PHP دعا الاستعلام، والتي يمكن استخدامها. ويمكنك تمرير مثل المعلمة أو وسيطة للاستعلام استعلام SQL التي كنت ترغب في تنفيذه. وسوف PHP القيام بذلك نيابة عنك. بعد ذلك قمت بتوصيل إلى قاعدة البيانات الخاصة بك مع PHP، هناك اثنين من الانتخابات التمهيدية القيام بذلك. هناك شيء يسمى MySQLi وشيء يسمى شركة تنمية نفط عمان. نحن لن ندخل ضخمة كمية التفاصيل هناك. في CS50 نستخدم شركة تنمية نفط عمان. بعد أن كنت قد متصل إلى قاعدة البيانات الخاصة بك، وأنت ثم يمكن أن تجعل الاستفسارات قاعدة البيانات الخاصة بك عن طريق تمرير الاستعلامات كوسائط إلى وظائف PHP. وعندما تفعل ذلك، يمكنك تخزين مجموعة النتائج في مجموعة النقابي. ونحن نعرف كيفية العمل مع صفائف النقابي في PHP. لذلك أنا قد أقول شيئا مثل this-- $ results-- هذا هو في PHP-- يساوي الاستعلام. ثم داخل وظيفة الاستعلام هذه الحجة أنني يمر الاستعلام يشبه SQL. في واقع الأمر أن SQL. هذا هو سلسلة الاستعلام التي أود ترغب في تنفيذها على قاعدة البيانات الخاصة بي. وذلك باللون الأحمر، وهذا هو PHP. هذا هو SQL أنني الاندماج PHP بجعل انها حجة لوظيفة الاستعلام. أريد لتحديد FULLNAME من المستخدمين حيث يساوي رقم 10. وربما بعد ذلك بعد أن فعلت ذلك، قد أقول شيئا من هذا القبيل. أريد لطباعة رسالة شكرا لتسجيل الدخول. وأريد أن interpolate-- أريد أن أقحم النتائج $ FULLNAME. وهكذا هذه هي الطريقة التي أعمل مع أن مجموعة النقابي أنني حصلت على العودة. $ نتائج FULLNAME شأنه إنهاء الاساس طبع، شكرا لتسجيل الدخول، جيري ساينفيلد. وكان هذا هو الاسم الكامل حيث idnum يساوي 10. وهكذا كل ما أفعله وأنا now-- I المخزنة بلدي الاستعلام نتائج الاستعلام بلدي والنتائج في مجموعة النقابي، وFULLNAME هو اسم العمود الأول هو الحصول على ل. لذلك هذا هو مفتاح بلدي في النتائج مجموعة النقابي الذي أريد. لذلك شكرا لتسجيل الدخول، $ النتائج، FULLNAME سوف طباعة، ستلتزم حق في ما بين تلك مجعد الأقواس، جيري ساينفيلد. وسوف ترغب في طباعة الرسالة شكرا لتسجيل الدخول جيري ساينفيلد. الآن، ونحن ربما لا تريد الصعب أشياء قانون من هذا القبيل في، أليس كذلك؟ ونحن قد تريد أن تفعل شيئا مثل الطباعة و حيث أننا يمكن أن تكون بديلا وربما جمع المعلومات المختلفة، أو ربما يكون عملية استعلام معلومات مختلفة. وهكذا الاستعلام، وظيفة الاستعلام لديها هذا مفهوم النوع من التبديلات تشبه الى حد بعيد طباعة و في المئة الصورة وج في المئة، وعلامات استفهام. ويمكننا استخدام السؤال علامات بالقياس جدا لطباعة و للمتغيرات بديلة. ولذلك ربما يكون المستخدم تسجيل في وقت سابق، وقمت بحفظ رقم المستخدم الخاص بهم في $ _SESSION من PHP السوبر العالمية في ID الرئيسي. لذلك ربما بعد أن تقوم بتسجيل الدخول، تعيين $ _SESSION ID يساوي 10، استقراء من المثال نحن فقط رأيت قبل الثانية. وذلك عندما نقوم بتنفيذ الواقع هذا الاستعلام عن النتائج الآن، سيكون سد العجز في 10، أو أيا كان قيمة ID $ _SESSION هي. وبحيث يتيح لنا يكون قليلا أكثر ديناميكية. نحن ليس من الصعب ترميز الأشياء في بعد الآن. نحن توفير المعلومات في مكان ما ثم يمكننا استخدام هذه المعلومات مرة أخرى ل نوع من التعميم ما نريد القيام به، ومجرد سد في والتغيير سلوك صفحتنا بناء على ما رقم المستخدم في الواقع هو بعد أن قمت بتسجيل الدخول. ومن الممكن أيضا، على الرغم من أن نتائجك مجموعة قد تتكون من عدة صفوف. في هذه الحالة، لديك مجموعة من arrays-- مجموعة من المصفوفات الترابطية. وتحتاج فقط للتنقل من خلال ذلك. ونحن نعرف كيفية تكرار من خلال صفيف في PHP، أليس كذلك؟ حتى هنا هو على الارجح الاكثر شيء معقد رأيناه حتى الآن. أنه يدمج الواقع ثلاث لغات معا. هنا باللون الأحمر، وهذا هو بعض HTML. على ما يبدو أنا starting-- هذا هو مقتطف من بعض HTML التي لدي. أنا بدأت فقرة جديدة يقول الامهات سينفيلد التلفزيون. ثم بعد ذلك على الفور أنا بدأت في الجدول. ثم بعد ذلك، وأنا لدينا بعض PHP، أليس كذلك؟ لدي كل من هذا الرمز PHP هناك. أنا على ما يبدو سوف تجعل استعلام. وجعل الاستعلام، وانا ذاهب ل تكون باستخدام أمهات اختر من الامهات. لذلك هذا هو getting-- هذا هو SQL. وبالتالي فإن اللون الأزرق هو SQL. وكان الأحمر رأينا قبل الثانية HTML. والأخضر هنا هو PHP. لذلك أنا جعل استعلام إلى قاعدة البيانات الخاصة بي، وأنا اختيار كل من أمهات في الجدول الامهات. ليس فقط تضييق عليه لخاص صف واحد، أنا أسأل لجميع من لهم. بعد ذلك معرفة ما اذا كان النتيجة لا يساوي يساوي كاذبة. هذا هو مجرد طريقي للتحقق من نوع من إذا كانت النتائج لا تساوي قيمة خالية، أننا سوف نرى ج على سبيل المثال. أساسا هذا هو مجرد التحقق للتأكد تأكد من أنه في الواقع حصلت البيانات مرة أخرى. لأنني لا أريد لبدء الطباعة من البيانات إذا لم أحصل على أية بيانات. ثم لكل النتائج نتيجة لذلك foreach جملة من PHP، كل ما أفعله وطبع أمهات $ نتيجة. وحتى وأنا ذاهب للحصول على مجموعة جميع أمهات each-- انها مجموعة من النقابي arrays-- وأنا طبع كل واحد كما الصف الخاص به من الجدول. وهذا هو حقا جميلة كثيرا كل ما في الامر. أنا أعرف هناك قليلا الشيء يجري هنا في هذا المثال الأخير مع صفائف arrays-- صفائف صفائف النقابي. ولكن هل حقا لا تغلي فقط إلى أسفل في SQL في جعل استعلام، عادة اختيار بعد أن قمت بالفعل وضع المعلومات في الجدول، وبعد ذلك فقط إخراجه. وهذا هو أننا سوف تسحبه في هذه الحالة بالذات. فإننا استخراج كافة الفرد الأمهات من الجدول الامهات. حصلنا على مجموعة كاملة منها، ونحن تريد تكرار خلال وطباعة كل واحد. ذلك مرة أخرى، وهذا هو الأرجح المثال الأكثر تعقيدا رأيناه لأننا خلط ثلاثة لغات مختلفة معا، أليس كذلك؟ مرة أخرى، لدينا HTML هنا باللون الأحمر، مختلطة مع بعض SQL هنا باللون الأزرق، مختلطة مع بعض PHP باللون الأخضر. ولكن كل هذه اللعب لطيف معا، انها مجرد مسألة تطوير عادات جيدة بحيث يمكنك الحصول على لهم للعمل معا بالطريقة التي تريدها. والطريقة الوحيدة للقيام حقا أن هو الممارسة، الممارسة، والممارسة. أنا دوغ ويد، وهذا هو CS50.