[Bermain muzik] DOUG LLOYD: Dalam video kami mengenai topik-topik pembangunan web, kami telah menyebut tentang konsep pangkalan data beberapa kali, bukan? Jadi pangkalan data anda mungkin biasa dengan dari mengatakan menggunakan Microsoft Excel atau Hamparan Google. Ia benar-benar hanya satu yang dianjurkan set meja, baris dan lajur. Dan pangkalan data adalah di mana laman web kedai-kedai kami maklumat yang penting untuk laman web kami untuk berfungsi dengan baik. Sekali lagi, satu contoh yang benar-benar biasa di sini yang menyimpan nama pengguna dan kata laluan dalam pangkalan data, supaya apabila pengguna log ke dalam laman web kami, pangkalan data boleh disoal untuk melihat jika pengguna yang wujud dalam pangkalan data. Dan jika mereka, memeriksa bahawa kata laluan mereka adalah betul. Dan jika kata laluan mereka adalah betul, maka kita boleh memberi mereka apa sahaja halaman mereka meminta. Jadi anda mungkin, sekali lagi, biasa dengan idea ini dari Excel atau Google Spreadsheet. Kami mempunyai pangkalan data, meja, baris dan lajur. Dan itu benar-benar jenis set asas pecahan hierarki di sini. Jadi di sini adalah spreadsheet Excel. Dan jika anda pernah dibuka ini atau program lain yang serupa anda tahu bahawa di sini adalah rows-- 1, 2, 3, 4, 5, 6, 7. Ini adalah lajur. Mungkin turun di sini, walaupun anda boleh tidak menggunakan ciri-ciri ini sangat much-- Saya akan zum dalam- kita ada idea ini sheet. Jadi mungkin helaian ini, jika Saya ganti belakang dan sebagainya, adalah jadual yang berbeza yang wujud di dalam pangkalan data saya. Dan jika kita terus contoh di semua cara, nama pangkalan data ini adalah Book 1. Mungkin saya mempunyai Book 2 dan Buku 3. Jadi setiap fail Excel ialah pangkalan data, setiap lembaran adalah meja, dan di dalam setiap jadual Saya mempunyai idea ini baris dan lajur. Jadi bagaimana saya bekerja dengan pangkalan data ini? Bagaimana saya boleh mendapatkan maklumat daripada itu? Nah ada bahasa yang dipanggil SQL-- yang saya biasanya hanya memanggil Sequel-- dan ia bermaksud Bahasa Pertanyaan Berstruktur. Dan ia adalah satu bahasa pengaturcaraan, tetapi ia adalah program yang agak terhad bahasa. Ia tidak cukup seperti yang lain yang kita telah bekerja dengan. Tetapi maksud ini bahasa pengaturcaraan adalah untuk query pangkalan data, untuk meminta maklumat daripada pangkalan data, mencari maklumat dalam pangkalan data, dan sebagainya. Kami juga, dalam CS50-- dan ia adalah sangat platform yang sama, ia dipanggil MySQL. Itulah yang kita gunakan dalam kursus ini. Ia merupakan satu sumber terbuka platform yang menetapkan apa yang dipanggil database-- hubungan pangkalan data, berkesan. Kita tidak perlu untuk mendapatkan ke detail terlalu banyak kepada apa pangkalan data hubungan adalah. Tetapi bahasa SQL adalah sangat mahir bekerja dengan MySQL dan lain-lain yang serupa gaya pangkalan data hubungan. Dan banyak pemasangan MySQL datang dengan sesuatu dipanggil phpMyAdmin, yang adalah pengguna grafik interface-- GUI-- yang menjadikan ia lebih sedikit mesra untuk melaksanakan pengguna pertanyaan pangkalan data, kerana pangkalan data yang tidak hanya digunakan oleh pengaturcara maju, bukan? Kadang-kadang ada perniagaan kecil ini, dan mereka tidak mampu untuk mengupah satu pasukan pengaturcara, tetapi mereka masih perlu menyimpan maklumat di dalam sistem database. Sesuatu seperti phpMyAdmin menjadikan ia sangat mudah untuk seseorang yang tidak pernah diprogramkan sebelum ke mengambil dan menjadi biasa dengan bagaimana untuk bekerja dengan database. Masalahnya ialah, phpMyAdmin, manakala ia adalah alat yang hebat untuk pembelajaran mengenai pangkalan data, adalah manual. Anda akan perlu untuk log masuk ke dan melaksanakan arahan dan jenis perkara-perkara dalam manual. Dan seperti yang kita tahu daripada kami contoh pada PHP pengaturcaraan web, yang mempunyai kaitan secara manual perkara di laman web kami, jika kita mahu yang dinamik, responsif aktif laman web, mungkin tidak pendekatan yang terbaik. Kami ingin mencari jalan untuk mungkin mengautomasikan ini entah bagaimana. Dan SQL akan membolehkan kami untuk melakukan ini. Oleh itu, apabila kita akan mula bekerja dengan SQL, kita perlu mempunyai pangkalan data untuk bekerja dengan. Mewujudkan pangkalan data yang sesuatu yang anda mungkin akan lakukan di phpMyAdmin, kerana anda hanya perlu melakukannya sekali, dan sintaks untuk berbuat demikian adalah lebih mudah. Ia adalah lebih mudah untuk melakukannya dalam antara muka pengguna grafik daripada menaip sebagai perintah. Arahan ini boleh mendapatkan rumit sedikit. Begitu juga, mewujudkan jadual boleh mendapatkan cukup agak rumit juga. Dan supaya perkara seperti mewujudkan pangkalan data dan mewujudkan carta, yang anda berada mungkin hanya akan melakukan once-- sekali dalam jadual, sekali setiap database-- ia OK untuk melakukannya dalam antara muka grafik. Dalam proses mewujudkan jadual, anda akan juga perlu menentukan semua ruangan yang akan berada di meja itu. Apakah jenis maklumat yang sering Anda ingin simpan dalam jadual? Mungkin nama dan tarikh lahir pengguna, kata laluan, nombor ID pengguna, dan mungkin bandar dan negeri, bukan? Dan bagi tiap-tiap kali kita mahu menambah pengguna kepada pangkalan data, kita mahu untuk mendapatkan semua enam orang-orang keping maklumat. Dan kami melakukannya dengan menambah baris ke meja. Oleh itu, kita mula-mula buat pangkalan data, maka kita mencipta jadual. Sebagai sebahagian daripada mewujudkan jadual, kita diminta untuk menentukan setiap kolum yang kami ingin dalam jadual ini. Dan kemudian seperti yang kita mula menambah maklumat kepada pangkalan data dan pertanyaan pangkalan data yang lebih generally-- bukan sahaja menambah, tetapi segala-galanya kita do-- kami akan berurusan dengan deretan meja, yang merupakan salah satu maklumat pengguna daripada keseluruhan set. Jadi setiap kolum SQL mampu memegang data jenis data tertentu. Oleh itu, kita semacam ini dihapuskan idea jenis data dalam PHP, tetapi ia kembali ke sini dalam SQL. Dan ada banyak jenis data. Di sini hanya 20 daripada mereka, tetapi ia tidak walaupun semua daripada mereka. Oleh itu, kita mempunyai idea-idea seperti INTs-- Integers-- kita mungkin tahu bahawa ruangan ini boleh memegang integer. Dan terdapat variasi thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Mungkin kita tidak sentiasa memerlukan empat gigitan. Mungkin kita memerlukan lapan bait, dan dengan itu kita boleh menggunakan variasi pada bilangan bulat untuk menjadi sedikit lebih banyak ruang cekap. Kita boleh melakukan nombor perpuluhan, kita boleh lakukan nombor titik terapung. Ini adalah agak sama. Terdapat beberapa perbezaan, dan jika anda lakukan suka melihat sehingga Jenis SQL panduan, anda boleh melihat apa yang sedikit perbezaan antara mereka. Mungkin kita mahu menyimpan maklumat mengenai tarikh dan masa. Mungkin kita mengesan apabila pengguna menyertai laman web kami, dan jadi mungkin kita mahu mempunyai ruangan itu masa tarikh atau tanda waktu yang menunjukkan apabila pengguna sebenarnya mendaftar. Kita boleh melakukan geometri dan linestrings. Ini sebenarnya agak sejuk. Kita boleh memetakan kawasan geografi menggunakan Koordinat GIS untuk merancang keluar kawasan. Jadi sebenarnya boleh menyimpan seperti itu maklumat dalam lajur SQL. TEKS hanyalah gumpalan gergasi teks, mungkin. ENUMs adalah jenis yang menarik. Mereka benar-benar wujud dalam C. Kami tidak bercakap tentang mereka kerana mereka tidak terlalu biasa digunakan, sekurang-kurangnya CS50. Tetapi ia adalah satu jenis data yang disebut satu persatu, yang mampu memegang nilai-nilai yang terhad. Satu contoh yang benar-benar baik di sini akan menjadi untuk mewujudkan enum di mana tujuh nilai yang mungkin adalah Ahad, Isnin, Selasa, Rabu, Khamis, Jumaat, Sabtu, bukan? Pada hari itu jenis data Minggu tidak wujud, tetapi kita dapat membuat jenis data yang disebut satu persatu seperti bahawa ruang yang hanya pernah boleh memegang salah satu tujuh nilai yang mungkin. Kami telah disebut satu persatu semua daripada nilai yang mungkin. Kemudian kita mempunyai CHAR dan VARCHAR, dan saya telah mewarnakan ini hijau kerana kami benar-benar akan mengambil kedua untuk bercakap tentang perbezaan antara kedua-dua perkara. Jadi CHAR, tidak seperti mana C CHAR adalah seorang watak yang tunggal, dalam SQL CHAR merujuk kepada rentetan panjang tetap. Dan apabila kita mewujudkan ini lajur, kita benar-benar boleh menentukan panjang tali. Jadi, dalam contoh ini, kita mungkin berkata CHAR (10). Ini bermakna bahawa setiap unsur lajur tersebut akan terdiri daripada 10 bait maklumat. Tidak lebih, tidak kurang. Jadi, jika kita cuba dan dimasukkan ke dalam 15 bit atau elemen 15 watak atau nilai ke dalam ruangan ini, kita hanya mendapatkan 10 pertama. Jika kita masukkan ke dalam kedua-dua Nilai watak panjang, kita akan mempunyai dua watak-watak, dan kemudian lapan gigitan null. Kami tidak akan menjadi lebih cekap daripada itu. A VARCHAR jenis seperti tanggapan kita rentetan yang kita sudah biasa dengan daripada C atau dari PHP. Ia rentetan panjang berubah-ubah. Dan apabila anda membuat ruangan ini, anda hanya menentukan panjang maksimum. Jadi mungkin 99, atau lebih 255. Itu akan menjadi panjang maksimum. Dan jadi jika kita menyimpan 15 rentetan aksara, kita akan menggunakan 15 bait, mungkin 16 bait untuk terminator nol. Jika kita telah menyimpan satu tiga rentetan aksara, kita akan menggunakan tiga atau empat bait. Tetapi kita tidak akan menggunakan sepenuhnya 99. Jadi mengapa kita perlu kedua-duanya? Nah, jika kita perlu memikirkan bagaimana sesuatu yang panjang adalah dengan VARCHAR yang, kita perlu jenis Itekadar merentasinya sama seperti yang kami lakukan pada C dan memikirkan di mana ia berhenti. Manakala jika kita tahu bahawa segala-galanya dalam ruangan ini adalah 10 bait, mungkin kita tahu maklumat itu, kita boleh melompat 10 bait, 10 bait, 10 bait, 10 bait, dan sentiasa mencari bermula tali. Oleh itu, kita mungkin mempunyai beberapa ruang dibazirkan dengan CHAR yang, tetapi mungkin ada perdagangan kira yang mempunyai kelajuan yang lebih baik dalam mengemudi pangkalan data. Tetapi mungkin kita mahu fleksibiliti yang VARCHAR bukannya having-- Jika CHAR kami adalah 255, tetapi kebanyakan pengguna kami hanya memasukkan tiga atau empat bait bernilai maklumat atau tiga atau empat Watak bernilai maklumat. Tetapi sesetengah pengguna telah menggunakan keseluruhan 255, mungkin VARCHAR lebih sesuai di sana. Ia semacam perdagangan luar, dan secara am bagi maksud CS50, anda tidak perlu bimbang terlalu banyak tentang sama ada anda menggunakan CHAR atau VARCHAR. Tetapi dalam dunia sebenar, perkara-perkara memang penting kerana semua ruangan ini mengambil ruang fizikal yang sebenar. Dan ruang fizikal, dalam dunia sebenar, datang pada premium. Jadi, satu balasan lain apabila anda membina jadual adalah untuk memilih satu lajur untuk menjadi apa yang dipanggil kunci utama. Dan kunci utama adalah lajur di mana setiap nilai tunggal adalah unik. Dan itu bererti bahawa anda boleh dengan mudah memilih satu baris hanya dengan melihat di kunci primer baris itu. Jadi, sebagai contoh, anda secara amnya, dengan pengguna, tidak mahu dua pengguna yang mempunyai nombor ID pengguna yang sama. Dan sebagainya mungkin anda mempunyai banyak maklumat, dan mungkin dua pengguna boleh mempunyai name-- yang sama anda mempunyai John Smith dan John Smith. Itu bukan semestinya masalah, kerana terdapat beberapa orang di dunia yang bernama John Smith. Tetapi kami hanya mempunyai nombor ID seorang pengguna 10, seorang pengguna ID nombor 11, 12, 13. Kami tidak mempunyai dua pengguna dengan nombor yang sama, dan jadi mungkin nombor ID pengguna akan menjadi kunci utama yang baik. Kami tidak mempunyai apa-apa pertindihan, dan kami kini boleh unik mengenal pasti setiap baris tunggal hanya dengan melihat lajur tersebut. Memilih kunci primer boleh sebenarnya membuat operasi meja berikutnya lebih mudah kerana anda boleh memanfaatkan hakikat bahawa baris tertentu akan menjadi unik, atau lajur tertentu daripada pangkalan data atau meja anda akan menjadi unik untuk mengambil baris tertentu keluar. Anda juga boleh mempunyai utama bersama utama, yang anda boleh mencari alasan untuk digunakan, yang hanya gabungan dua lajur yang dijamin unik. Jadi mungkin anda mempunyai satu ruangan itulah As dan B, satu lajur itulah satu, dua, dan tiga, tetapi anda akan hanya pernah mempunyai A1 tunggal, tunggal A2, dan sebagainya dan sebagainya. Tetapi anda mungkin mempunyai B2, satu C2, atau A1, A2, A3, A4. Jadi, anda mungkin mempunyai beberapa As, pelbagai B, orang-orang yang pelbagai, pelbagai berdua-dua, tetapi anda boleh hanya pernah mempunyai tunggal A1, B2, C3, dan sebagainya. Jadi seperti yang saya katakan, SQL ialah bahasa pengaturcaraan, tetapi ia mempunyai perbendaharaan kata yang agak terhad. Ia tidak cukup sebagai luas sebagai C dan PHP dan bahasa lain bahawa kita bercakap dalam kursus ini. Ia adalah lebih lantung bahasa daripada apa yang kita akan bercakap tentang dalam hal ini video, kerana dalam video ini kita akan bercakap tentang empat operasi yang kita boleh melakukan di atas meja. Terdapat lebih daripada ini. Kita boleh melakukan lebih daripada ini, tetapi untuk tujuan kita, kita biasanya akan menggunakan hanya empat memasukkan operations--, memilih, mengemaskini, dan memadam. Dan anda mungkin boleh meneka intuitif apa keempat-empat perkara-perkara ini dilakukan. Tetapi kita akan pergi ke dalam sedikit terperinci pada masing-masing. Jadi untuk tujuan ini video, mari kita andaikan kami telah berikut dua jadual dalam pangkalan data tunggal. Kami mempunyai jadual dipanggil Pengguna yang mempunyai empat columns-- nombor ID, nama pengguna, kata laluan, dan nama penuh. Dan kita mempunyai kedua jadual dalam pangkalan data yang sama dipanggil Moms yang hanya menyimpan maklumat kira-kira satu nama pengguna dan seorang ibu. Jadi untuk semua contoh-contoh dalam video ini, kita akan menggunakan pangkalan data ini dan kemas kini selepas itu. Jadi mari kita mengatakan bahawa kita mahu menambah maklumat ke meja. Itulah yang operasi memasukkan kepadamu. Dalam menjelaskan semua arahan ini, saya akan untuk memberikan anda rangka umum untuk digunakan. Kerana pada dasarnya, pertanyaan akan kelihatan agak serupa, kami hanya akan berubah keping sedikit maklumat yang berbeza melakukan perkara-perkara yang berbeza dengan meja. Jadi untuk INSERT, rangka kelihatan jenis seperti ini. Kami mahu masukkan ke dalam jadual tertentu. Kemudian kita mempunyai kurungan terbuka dan senarai ruangan yang kita mahu meletakkan nilai-nilai ke dalam. Tutup kurungan, yang nilai-nilai berikut, dan kemudian sekali lagi, kita senaraikan nilai-nilai kita mahu meletakkan dalam jadual. Jadi contoh ini akan menjadi yang berikut. Saya mahu memasukkan ke dalam jadual pengguna columns-- berikut nama pengguna, kata laluan dan nama penuh. Jadi baris baru di mana saya meletakkan dalam ketiga-tiga tiang dan kami akan dimasukkan ke dalam nilai-nilai Newman, USMAIL dan Newman. Jadi dalam kes ini, saya meletakkan newman yang kecil ke dalam ruang nama pengguna, kata laluan USMAIL, dan nama penuh modal N Newman ke dalam ruang nama penuh itu. Jadi, inilah yang pangkalan data kelihatan seperti sebelum ini. Berikut adalah apa yang jadual pengguna pada bahagian kelihatan seperti sebelum kita lakukan ini. Selepas kita melaksanakan ini Pertanyaan, kita akan mendapat ini. Kami telah menambah baris baru ke meja. Tetapi perhatikan dalam perkara yang berikut bahawa saya tidak menyatakan, tetapi entah bagaimana saya telah mendapat nilai yang untuk, yang ini 12 di sini. Saya tidak mengatakan saya mahu meletakkan nombor ID di sana. Saya mahu meletakkan nama pengguna, kata laluan, nama penuh. Dan saya berbuat demikian, itulah denda. Tetapi saya juga mendapat ini 12. Kenapa saya mendapat ini 12? Nah, ternyata bahawa apabila anda menentukan lajur yang akan menjadi anda kunci utama, yang biasanya, seperti yang saya katakan, nombor ID. Ia tidak selalunya semestinya akan menjadi satu nombor ID, tetapi ia biasanya idea yang baik untuk beberapa jenis nilai integer. Anda mempunyai pilihan dalam phpMyAdmin apabila anda mewujudkan pangkalan data anda atau meja anda untuk menetapkan bahawa ruangan sebagai menokok automatik. Yang merupakan satu idea yang benar-benar baik apabila anda bekerja dengan kunci utama, kerana anda mahu setiap nilai dalam ruang yang menjadi unik. Dan jika anda lupa untuk menentukan untuk lebih daripada satu orang, anda kini mempunyai situasi di mana ruangan yang tidak lagi unik. Anda mempunyai dua kosong, jadi anda boleh tidak lagi secara unik mengenal pasti yang column-- atau anda tidak lagi unik mengenalpasti berturut-turut berdasarkan lajur tersebut. Ia kehilangan semua itu nilai sebagai kunci utama. Dan sebagainya nampaknya apa yang saya lakukan di sini dikonfigurasi ID pengguna lajur untuk auto kenaikan supaya setiap kali saya menambah maklumat ke meja, ia secara automatik akan memberikan saya dalam ruangan kunci utama. Jadi saya tidak boleh lupa untuk melakukannya kerana pangkalan data akan melakukannya untuk saya. Jadi itu jenis yang bagus. Dan sebab itulah kita akan mendapat 12 di sana, kerana saya telah menetapkan bahawa ruang sehingga kenaikan automatik. Jika saya menambah orang lain ia akan menjadi 13, jika saya menambah orang lain ia akan menjadi 14, dan sebagainya. Jadi mari kita hanya melakukan satu iklan lagi. Kami akan memasukkan ke dalam jadual ibu-ibu, di Khususnya, nama pengguna dan ibu lajur, nilai-nilai kramer dan Babs Kramer. Dan dengan itu kita mempunyai ini sebelum ini. Selepas kita melaksanakan yang SQL, kita mempunyai ini. Kami telah menambah Kramer dan Babs Kramer ke meja ibu-ibu itu. Jadi yang yang memasukkan. SELECT adalah apa yang kita gunakan untuk mengeluarkan maklumat dari jadual. Jadi ini adalah bagaimana kita dapat maklumat daripada pangkalan data. Dan arahan supaya SELECT akan menjadi sangat kerap digunakan dalam pengaturcaraan. Umum framework-- yang rangka umum kelihatan seperti ini. Pilih satu set lajur daripada meja, dan kemudian secara pilihan anda boleh menentukan condition-- atau apa yang kita biasanya memanggil predikat, biasanya istilah yang kita gunakan dalam SQL. Tetapi ia adalah pada dasarnya apa baris tertentu yang anda mahu untuk mendapatkan. Jika anda mahu, bukannya mendapat segala-galanya, sempit ke bawah, ini adalah di mana anda akan berbuat demikian. Dan kemudian secara pilihan, anda juga boleh memerintahkan oleh lajur tertentu. Jadi mungkin anda ingin mempunyai perkara disusun mengikut abjad berdasarkan satu lajur atau mengikut abjad berdasarkan lain. Sekali lagi, di mana dan PERINTAH OLEH adalah pilihan. Tetapi mereka mungkin akan useful-- terutamanya MANA akan menjadi berguna kepada menyempitkan supaya anda tidak mendapatkan pangkalan data keseluruhan anda kembali dan perlu memproses, anda hanya mendapat keping bahawa anda hargai. Jadi, sebagai contoh, saya mungkin mahu untuk memilih Nombor ID dan nama penuh daripada pengguna. Jadi apa yang mungkin ini kelihatan seperti? Jadi di sini adalah jadual pengguna saya. Saya mahu untuk memilih idnum dan nama penuh daripada pengguna. Apa yang saya akan dapat? Saya akan mendapatkan ini. Saya tidak sempit ke bawah, jadi saya mendapat nombor ID untuk setiap baris dan saya mendapat penuh menamakan dari setiap baris. OKAY. Bagaimana jika saya mahu untuk memilih kata laluan daripada pengguna jika- jadi sekarang Saya menambah keadaan, yang predicate-- mana idnum adalah kurang daripada 12. Jadi di sini adalah pangkalan data saya sekali lagi, saya jadual pengguna atas. Apa yang saya akan mendapat jika saya mahu memilih maklumat itu, kata laluan, di mana ID pengguna atau idnum adalah kurang daripada 12? Saya akan mendapatkan ini maklumat kembali, kan? Ia berlaku bahawa idnum adalah 10 kurang, daripada 12, nombor ID 11 kurang daripada 12. Saya mendapat kata laluan untuk mereka yang baris. Itulah apa yang saya minta. Apa tentang perkara ini? Bagaimana jika saya mahu untuk memilih bintang dari ibu meja di mana nama pengguna sama Jerry? OK, pilih bintang ini khas banyak kad liar yang dipanggil yang kita gunakan untuk mendapatkan segala-galanya. Jadi mereka katakan pilih nama pengguna ibu koma, yang yang berlaku sebagai satu-satunya dua tiang jadual ini, Saya hanya boleh pilih bintang dan mendapatkan semua mana nama pengguna yang sama Jerry. Dan sebagainya itulah yang saya akan mendapat jika saya membuat pertanyaan yang tertentu. Sekarang, pangkalan data adalah besar kerana mereka membenarkan kita untuk menyusun maklumat mungkin sedikit lebih cekap daripada kita mungkin sebaliknya. Kita tidak semestinya untuk menyimpan setiap bahagian berkaitan maklumat mengenai pengguna dalam jadual yang sama. Kami mempunyai dua jadual di sana. Kami perlu menyimpan Nama ibunya semua orang itu, dan mungkin kita tidak mempunyai keselamatan sosial nombor, kita ada tarikh lahir mereka. Yang tidak selalu perlu berada dalam jadual yang sama. Selagi kita boleh menentukan hubungan antara tables-- yang dan di mana hubungan yang jangka pangkalan data jenis datang ke dalam play-- selagi kita boleh menentukan hubungan antara jadual, kita boleh menyusun compartmentalize atau perkara-perkara abstrak cara, di mana kita hanya mempunyai maklumat yang benar-benar penting kita mengambil berat tentang dalam jadual pengguna. Dan kemudian kita mempunyai maklumat sampingan atau maklumat tambahan dalam jadual lain yang kita boleh menyambung semula ke utama jadual pengguna dengan cara yang tertentu. Jadi di sini kita mempunyai dua jadual, tetapi ada hubungan di antara mereka, bukan? Ia seolah-olah seperti nama pengguna mungkin sesuatu yang wujud persamaan antara kedua-dua jadual yang berbeza. Jadi apa jika kita kini mempunyai keadaan di mana kita ingin mendapatkan nama penuh pengguna dari meja pengguna, dan ibu mereka menamakan dari meja ibu? Kami tidak mempunyai cara untuk mendapatkan yang seperti yang ada, bukan? Tidak ada jadual tunggal yang mengandungi nama penuh dan nama ibu. Kami tidak mempunyai pilihan itu dari apa yang kita lihat setakat ini. Dan dengan itu kita perlu memperkenalkan idea JOIN a. Dan menyertai mungkin complex-- paling ia benar-benar operasi paling kompleks kita akan bercakap tentang dalam video. Mereka sedikit rumit, tetapi sebaik sahaja anda biasa itu, mereka sebenarnya tidak terlalu buruk. Ia hanya satu kes khas yang SELECT. Kita akan memilih satu set lajur daripada jadual yang menyertai dalam jadual kedua pada beberapa predikat. Dalam kes ini, berfikir tentang hal itu suka this-- meja satu adalah satu bulatan di sini, membentangkan dua adalah satu lagi bulatan di sini. Dan bahawa sebahagian predikat di tengah-tengah, ia jenis seperti jika anda berfikir kira-kira seperti gambar rajah Venn, apa yang mereka mempunyai persamaan? Kami mahu untuk menghubungkan kedua-dua jadual berdasarkan apa yang mereka mempunyai persamaan dan buat jadual andaian ini iaitu penggabungan kedua-dua bersama-sama. Oleh itu, kita akan melihat ini dalam contoh dan mungkin itu akan membantu membersihkan ia sedikit. Jadi mungkin anda mahu untuk memilih user.fullname dan moms.mother daripada pengguna menyertai dalam ibu meja dalam setiap keadaan di mana ruang nama pengguna adalah sama di antara mereka. Dan ini adalah baru Sintaks sini, pengguna ini. dan ibu-ibu .. Jika saya lakukan berbilang jadual bersama-sama, saya boleh menentukan jadual. Saya dapat membezakan di ketika yang bahawa pada sekurang-bawah sana. Saya dapat membezakan nama pengguna lajur jadual pengguna yang dari ruangan nama pengguna daripada ibu meja, yang otherwise-- jika kita hanya berkata nama pengguna sama nama pengguna, yang tidak benar-benar bermakna apa-apa. Kami mahu melakukannya di mana mereka sepadan. Jadi saya boleh menentukan jadual dan nama lajur dalam hal keadaan yang di mana ia akan menjadi tidak jelas apa yang saya bercakap tentang. Jadi itu sahaja yang saya lakukan terdapat Saya mengatakan ruangan ini dari jadual ini, dan sangat jelas. Jadi sekali lagi, saya memilih nama penuh dan nama ibu dari meja pengguna yang dihubungkan bersama-sama dengan meja ibu-ibu di dalam setiap keadaan di mana mereka berkongsi column-- yang mereka berkongsi bahawa nama pengguna tanggapan. Jadi di sini adalah jadual kami sebelum ini. Ini adalah keadaan kami pangkalan data yang wujud sekarang. Maklumat yang kami mengekstrak adakah ini untuk memulakan dengan. Ini adalah jadual baru kita akan untuk mewujudkan menggabungkan ini bersama-sama. Dan perhatikan kita tidak menonjolkan Berturut-turut Newman dalam jadual pengguna, dan kami tidak menonjolkan Berturut-turut Kramer ini dalam jadual ibu-ibu yang kerana satu tidak wujud dalam kedua-dua sets-- dalam kedua-dua jadual. Satu-satunya maklumat yang bersama-sama antara mereka adalah Jerry di kedua-dua jadual dan gcostanza di kedua-dua jadual. Dan supaya apabila kita melakukan SQL JOIN, apa yang kita get-- dan kami lakukan benar-benar mendapatkan ini. Ia adalah jenis pembolehubah sementara. Ia seperti yang dibayangkan penggabungan kedua-dua jadual. Kami benar-benar mendapatkan sesuatu seperti ini, di mana kami telah digabungkan bersama-sama jadual di maklumat yang mereka mempunyai persamaan. Jadi notis users.username yang dan lajur moms.username, ia betul-betul sama. Itu adalah maklumat yang adalah konsisten daripada pengguna meja dan meja ibu-ibu itu. Dan supaya kita bergabung bersama-sama. Kami dibuang Kramer kerana dia tidak wujud dalam jadual pengguna itu, dan kami dibuang Newman, kerana dia tidak wujud dalam jadual ibu-ibu itu. Jadi ini adalah penggabungan yang dibayangkan menggunakan operasi JOIN daripada SELECT. Dan kemudian kita cari yang nama penuh pengguna dan ibu pengguna, dan sebagainya ini adalah maklumat yang kita akan mendapat daripada pertanyaan keseluruhan yang kami dibuat dengan SELECT. Oleh itu, kita menyertai jadual bersama-sama dan kami diekstrak kedua-dua tiang, dan sebagainya itulah yang kita akan dapat. Tetapi SQL SERTAI sejenis rumit. Anda mungkin tidak akan melakukannya terlalu banyak, tetapi hanya mempunyai beberapa idea tentang rangka yang anda boleh gunakan untuk menggabungkan dua jadual bersama-sama jika anda diperlukan untuk. Dua yang terakhir adalah sedikit lebih mudah saya janji. Jadi mengemas kini, kita boleh menggunakan UPDATE untuk menukar maklumat dalam jadual. Format umum adalah UPDATE beberapa meja, SET beberapa lajur untuk beberapa nilai MANA beberapa predikat berpuas hati. Jadi, sebagai contoh, kita mungkin mahu untuk mengemas kini jadual pengguna yang dan menetapkan kata laluan untuk yada yada, di mana nombor ID adalah 10. Jadi dalam kes ini, kami mengemas meja pengguna. Bilangan ID adalah 10 untuk bahawa barisan pertama di sana, dan kami mahu mengemas kini kata laluan untuk yada yada. Dan sebagainya itulah yang akan berlaku. Ia agak mudah, betul? Ia hanya satu yang sangat mudah pengubahsuaian ke meja. DELETE adalah operasi kita digunakan untuk mengeluarkan maklumat dari jadual. DELETE FROM meja MANA beberapa predikat berpuas hati. Kami mahu memadam daripada jadual pengguna sebagai contoh mana nama pengguna adalah Newman. Anda mungkin boleh meneka apa yang akan berlaku di sini selepas kami melaksanakan SQL yang Pertanyaan, Newman hilang dari meja. Jadi semua operasi ini, seperti yang saya katakan, sangat mudah untuk dilakukan di phpMyAdmin. Ia antara muka yang sangat mesra pengguna. Tetapi ia memerlukan usaha manual. Kita tidak mahu untuk mengambil usaha manual. Kami mahu program kami untuk melakukan ini untuk kita, bukan? Oleh itu, kita mungkin mahu lakukan ini pengaturcaraan. Kami mahu menggabungkan SQL dan mempunyai sesuatu yang lain untuk melakukannya untuk kita. Tetapi apa yang kita lihat yang membolehkan kita untuk pengaturcaraan melakukan sesuatu? Kami telah melihat PHP, bukan? Ia memperkenalkan beberapa dinamisme ke dalam program kami. Dan supaya nasib baik, SQL dan PHP bermain sangat baik bersama-sama. Ada fungsi dalam PHP dipanggil Pertanyaan, yang boleh digunakan. Dan anda boleh lulus sebagai parameter atau hujah untuk pertanyaan pertanyaan SQL yang anda mahu untuk melaksanakan. Dan PHP akan melakukannya bagi pihak anda. Jadi, selepas anda telah menyambungkan kepada pangkalan data anda dengan PHP, ada dua pendahuluan anda melakukan ini. Ada sesuatu yang dinamakan MySQLi dan sesuatu yang dinamakan PDO. Kami tidak akan pergi ke besar jumlah detail sana. Dalam CS50 kita menggunakan PDO. Selepas anda telah menyambungkan kepada pangkalan data anda, anda kemudian boleh membuat pertanyaan pangkalan data anda dengan melepaskan pertanyaan sebagai hujah dengan fungsi PHP. Apabila anda berbuat demikian, anda menyimpan set keputusan dalam pelbagai bersekutu. Dan kita tahu bagaimana untuk bekerja dengan array bersekutu dalam PHP. Jadi saya boleh berkata sesuatu seperti this-- $ results-- ini adalah dalam PHP-- sama dengan pertanyaan. Dan kemudian di dalam satu fungsi query bahawa hujah yang saya lulus untuk query yang kelihatan seperti SQL. Dan sebenarnya yang SQL. Itulah rentetan pertanyaan yang saya akan suka untuk melaksanakan pada pangkalan data saya. Dan sebagainya dalam merah, ini adalah PHP. Ini adalah SQL bahawa saya mengintegrasikan ke dalam PHP dengan membuat hujah untuk fungsi pertanyaan. Saya mahu untuk memilih nama penuh daripada pengguna di mana nombor ID sama dengan 10. Dan kemudian mungkin selepas saya telah melakukan itu, Saya mungkin berkata sesuatu seperti ini. Saya hendak mencetak mesej Terima kasih untuk log masuk. Dan saya mahu ia interpolate-- Saya hendak untuk membuat interpolasi $ keputusan nama penuh. Dan jadi itulah bagaimana saya bekerja dengan yang pelbagai bersekutu yang saya dapatkan kembali. $ nama penuh keputusan akan pada dasarnya berakhir mencetak, terima kasih untuk log masuk, Jerry Seinfeld. Itu adalah nama penuh mana idnum sama 10. Dan supaya semua yang saya lakukan adalah saya sekarang-- Saya disimpan pertanyaan saya, hasil pertanyaan saya dan keputusan dalam pelbagai bersekutu, dan nama penuh adalah nama ruangan yang saya mendapat untuk. Jadi itulah kekunci saya ke dalam keputusan pelbagai bersekutu yang saya mahu. Jadi Terima kasih kerana login, $ keputusan, nama penuh akan mencetak, akan melekat betul-betul di antara orang-orang kerinting kawat gigi, Jerry Seinfeld. Dan saya akan suka untuk mencetak mesej Terima kasih kerana pembalakan di Jerry Seinfeld. Sekarang, kita mungkin tidak mahu untuk keras perkara kod seperti itu dalam, bukan? Kita mungkin mahu melakukan sesuatu seperti cetak f, di mana kita boleh menggantikan dan mungkin mengumpul maklumat yang berbeza, atau mungkin mempunyai proses pertanyaan maklumat yang berbeza. Dan sebagainya Pertanyaan, fungsi pertanyaan mempunyai idea ini daripada jenis penggantian hampir sama dengan mencetak f peratus s dan peratus c, adalah tanda tanya. Dan kita boleh menggunakan soalan tanda sangat tamsilan untuk mencetak f kepada pembolehubah pengganti. Jadi mungkin pengguna anda log masuk sebelum ini, dan anda menyimpan nombor ID pengguna mereka dalam $ _session PHP super global dalam ID utama. Jadi mungkin selepas mereka log masuk, anda menetapkan $ _session ID sama dengan 10, menentuluar dari contoh di kita hanya melihat kedua yang lalu. Dan lagi apabila kita benar-benar melaksanakan ini mempersoalkan keputusan sekarang, ia akan pasangkan 10, atau apa sahaja yang $ _session nilai ID adalah. Dan sebagainya yang membolehkan kita untuk menjadi sedikit lebih dinamik. Kami tidak keras pengekodan perkara dalam lagi. Kami menyimpan maklumat di suatu tempat dan kemudian kita boleh menggunakan maklumat tersebut sekali lagi untuk jenis umum apa yang kita mahu lakukan, dan hanya plug-in dan perubahan tingkah laku halaman kami berdasarkan apa nombor ID pengguna sebenarnya selepas mereka log masuk. Ia juga mungkin, walaupun, bahawa keputusan anda ditetapkan mungkin terdiri daripada beberapa baris. Di mana, anda perlu pelbagai arrays-- pelbagai tatasusunan bersekutu. Dan anda hanya perlu untuk melelar melaluinya. Dan kita tahu bagaimana untuk melelar melalui pelbagai dalam PHP, bukan? Jadi di sini adalah mungkin yang paling perkara yang kompleks yang kita lihat setakat ini. Ia sebenarnya mengintegrasikan tiga bahasa bersama-sama. Di sini dalam merah, ini adalah beberapa HTML. Saya nampaknya starting-- ini coretan HTML yang saya ada. Saya memulakan perenggan baru yang kata ibu Seinfeld TV. Dan kemudian dengan segera selepas itu Saya mula meja. Dan kemudian selepas itu, saya mempunyai beberapa PHP, bukan? Saya mempunyai semua kod PHP ini di sana. Saya nampaknya akan membuat pertanyaan. Dan untuk membuat pertanyaan tersebut, saya akan akan menggunakan ibu SELECT FROM ibu. Jadi ini getting-- ini adalah SQL. Jadi biru adalah SQL. Merah yang kita lihat kedua lalu adalah HTML. Dan hijau di sini adalah PHP. Jadi, saya membuat pertanyaan kepada pangkalan data saya, saya memilih semua ibu-ibu dalam jadual ibu-ibu itu. Bukan hanya merapatkan ke bawah untuk tertentu berturut-turut, saya meminta untuk mereka semua. Kemudian saya memeriksa jika hasilnya adalah tidak sama sama palsu. Ini hanyalah cara saya memeriksa jenis daripada jika keputusan tidak sama dengan nol, bahawa kita akan melihat c sebagai contoh. Pada asasnya ini hanya memeriksa untuk memastikan bahawa ia benar-benar mendapat data kembali. Kerana saya tidak mahu memulakan percetakan daripada data jika saya tidak mendapat apa-apa data. Kemudian bagi setiap keputusan hasilnya foreach sintaks dari PHP, semua yang saya lakukan adalah mencetak ibu $ keputusan. Dan supaya saya akan mendapat satu set semua ibu-ibu each-- ia adalah pelbagai bersekutu arrays-- dan saya mencetak masing-masing sebagai barisan sendiri jadual. Dan itu benar-benar cantik banyak semua ada padanya. Saya tahu ada sedikit sedikit berlaku di sini dalam contoh ini lalu dengan tatasusunan arrays-- tatasusunan array bersekutu. Tetapi ia benar-benar hanya mendidih turun dalam SQL untuk membuat pertanyaan, biasanya memilih selepas kami telah pun meletakkan maklumat ke dalam jadual, dan kemudian hanya menariknya keluar. Dan ini adalah kita akan tarik di dalam kes ini. Kami akan mengeluarkan semua individu ibu-ibu dari meja ibu-ibu itu. Kami mendapat satu set keseluruhan mereka, dan kami mahu melelar melalui dan mencetak setiap satu. Jadi sekali lagi, ini mungkin contoh yang paling rumit yang kami telah lihat kerana kita mencampurkan tiga bahasa yang berbeza bersama-sama, bukan? Sekali lagi, kita mempunyai HTML di sini dengan warna merah, dicampur dengan beberapa SQL di sini di biru, dicampur dengan beberapa PHP dengan warna hijau. Tetapi semua ini bermain baik bersama-sama, ia hanya menunggu untuk membangunkan tabiat yang baik supaya anda boleh mendapatkan mereka untuk bekerja bersama-sama dengan cara yang anda mahu. Dan satu-satunya cara untuk benar-benar berbuat demikian adalah untuk amalan, amalan, amalan. Saya Doug Lloyd, ini adalah CS50.