>> [MUSIC PLAYING]
Doug LLOYD: Dalam video kami pada topik pengembangan web,
kami telah menyebutkan konsep database beberapa kali, kan?
Jadi database Anda mungkin akrab dengan dari
mengatakan menggunakan Microsoft Excel atau Google Spreadsheets.
Ini benar-benar hanya sebuah terorganisir set meja, baris, dan kolom.
>> Dan database adalah di mana toko website kami
informasi yang penting untuk website kami untuk bekerja dengan baik.
Sekali lagi, contoh yang sangat umum di sini adalah menyimpan username dan password
dalam database, sehingga ketika pengguna log ke situs web kami,
database dapat dilihat untuk melihat jika pengguna yang ada dalam database.
Dan jika mereka, memeriksa bahwa password mereka benar.
Dan jika password mereka benar, maka kita dapat memberi mereka apa pun halaman
mereka meminta.
>> Jadi Anda mungkin, sekali lagi, akrab dengan ide ini dari Excel atau Google
Spreadsheet.
Kami memiliki database, tabel, baris, dan kolom.
Dan itu benar-benar semacam set mendasar
kerusakan hirarkis sini.
Jadi, inilah sebuah spreadsheet Excel.
Dan jika Anda pernah dibuka ini atau program lain yang serupa
Anda tahu bahwa ini di sini adalah rows-- 1, 2, 3, 4, 5, 6, 7.
Ini adalah kolom.
>> Mungkin di sini, meskipun Anda mungkin tidak menggunakan fitur ini sangat much--
Saya akan tampilannya in-- kita memiliki ide ini dari lembar.
Jadi mungkin lembaran ini, jika Aku bergantian bolak-balik,
adalah tabel yang berbeda yang ada di database saya.
Dan jika kita terus contoh semua cara, nama database ini
adalah Buku 1.
Mungkin aku harus Book 2 dan Buku 3.
Jadi setiap file Excel adalah Database, setiap lembar adalah meja,
dan di dalam masing-masing meja saya harus ide ini dari baris dan kolom.
>> Jadi bagaimana saya bekerja dengan database ini?
Bagaimana cara mendapatkan informasi dari itu?
Nah ada bahasa yang disebut SQL-- yang saya biasanya hanya memanggil Sequel--
dan berdiri untuk Structured Query Bahasa.
Dan itu adalah bahasa pemrograman, tapi itu pemrograman cukup terbatas
bahasa.
Ini tidak cukup seperti orang lain bahwa kita telah bekerja dengan.
Tetapi tujuan ini bahasa pemrograman
adalah untuk query database, untuk meminta informasi dari database,
menemukan informasi dalam database, dan sebagainya.
>> Kami juga, di CS50-- dan itu sangat platform umum, itu disebut MySQL.
Itulah yang kami gunakan dalam kursus.
Ini adalah open source platform yang menetapkan
yang disebut database-- relasional database, secara efektif.
Kita tidak perlu untuk mendapatkan terlalu banyak detail
pada apa database relasional.
Tetapi bahasa SQL adalah sangat mahir bekerja
dengan MySQL dan lainnya yang sejenis gaya database relasional.
>> Dan banyak instalasi dari MySQL datang dengan sesuatu yang
disebut phpMyAdmin, yang adalah pengguna grafis
interface-- GUI-- yang membuatnya sedikit lebih
user friendly untuk mengeksekusi query database,
karena database tidak hanya digunakan oleh programmer canggih, kan?
Kadang-kadang ada ini usaha kecil,
dan mereka tidak mampu untuk menyewa sebuah tim programmer,
tapi mereka masih perlu untuk menyimpan informasi dalam database.
>> Sesuatu seperti phpMyAdmin membuatnya sangat mudah bagi seseorang
siapa yang tidak pernah diprogram sebelumnya untuk mengambil dan menjadi akrab dengan cara
untuk bekerja dengan database.
Masalahnya adalah, phpMyAdmin, sementara itu adalah alat yang fantastis untuk belajar
tentang database, itu adalah manual.
Anda akan harus login ke dan menjalankan perintah dan jenis
hal di manual.
>> Dan seperti yang kita tahu dari kami Misalnya pada pemrograman web PHP,
harus melakukan secara manual hal di website kami,
jika kita ingin dinamis, aktif responsif website, mungkin bukan pendekatan yang terbaik.
Kami ingin menemukan cara untuk mungkin mengotomatisasi ini entah bagaimana.
Dan SQL akan memungkinkan kita untuk melakukan hal ini.
Jadi ketika kita akan mulai bekerja dengan SQL,
pertama kita harus memiliki database untuk bekerja dengan.
Membuat database adalah sesuatu yang Anda mungkin
akan dilakukan di phpMyAdmin, karena Anda hanya perlu melakukannya sekali,
dan sintaks untuk melakukannya jauh lebih mudah.
Ini jauh lebih mudah untuk melakukannya dalam antarmuka pengguna grafis
daripada mengetik itu sebagai perintah.
Perintah bisa mendapatkan sedikit rumit.
Demikian pula, membuat tabel dapat mendapatkan sedikit rumit juga.
Dan hal-hal seperti membuat database dan menciptakan meja, yang Anda
mungkin hanya akan melakukan once-- sekali per meja, sekali per database--
itu OK untuk melakukan itu di antarmuka grafis.
Dalam proses membuat tabel, Anda akan
juga harus menentukan semua kolom yang akan di meja itu.
Apa jenis informasi do Anda ingin menyimpan dalam tabel?
Mungkin nama pengguna dan tanggal lahir, password, nomor ID pengguna, dan mungkin
kota dan negara, kan?
>> Dan untuk setiap kali kita ingin menambahkan user ke database, kita ingin mendapatkan semua enam
dari potongan-potongan informasi.
Dan kami melakukannya dengan menambahkan baris ke meja.
Jadi pertama kita membuat database, maka kita membuat tabel.
Sebagai bagian dari menciptakan meja, kita diminta
untuk menentukan setiap kolom yang kami ingin dalam tabel ini.
Dan kemudian sebagai kita mulai menambahkan informasi ke database
dan query database lebih generally-- tidak hanya menambahkan,
tapi segalanya kami do-- kami akan berurusan
dengan deretan meja, yang merupakan salah satu informasi pengguna dari seluruh set.
>> Jadi setiap kolom SQL mampu memegang data dari tipe data tertentu.
Jadi kita semacam ini dihilangkan Ide tipe data di PHP,
tapi mereka kembali ke sini di SQL.
Dan ada banyak jenis data.
Berikut ini hanya 20 dari mereka, tetapi itu bahkan tidak semua dari mereka.
Jadi kita memiliki ide seperti INTs-- Integers-- kita mungkin tahu
bahwa kolom ini dapat terus bilangan bulat.
Dan ada variasi thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT.
Mungkin kita tidak selalu membutuhkan empat gigitan.
Mungkin kita perlu delapan byte, dan jadi kami dapat menggunakan variasi ini pada bilangan bulat
menjadi sedikit lebih banyak ruang efisien.
Kita bisa melakukan angka desimal, kita dapat melakukan floating point.
Ini cukup mirip.
Ada beberapa perbedaan, dan jika Anda akan
ingin mencari yang Semacam SQL dari panduan, Anda
dapat melihat apa yang sedikit perbedaan di antara mereka.
>> Mungkin kita ingin menyimpan informasi tentang tanggal dan waktu.
Mungkin kita melacak ketika pengguna bergabung website kami,
dan jadi mungkin kita ingin memiliki kolom yang
waktu tanggal atau cap yang menunjukkan ketika pengguna benar-benar
mendaftar.
Kita bisa melakukan geometri dan linestrings.
Ini sebenarnya cukup keren.
Kita bisa memetakan wilayah geografis menggunakan
GIS koordinat untuk merencanakan keluar daerah.
Jadi benar-benar dapat menyimpan semacam itu informasi di kolom SQL.
>> TEXT hanya gumpalan raksasa teks, mungkin.
Enum adalah jenis yang menarik.
Mereka benar-benar ada di C. Kami tidak melakukan berbicara tentang mereka karena mereka tidak
sangat umum digunakan, setidaknya CS50.
Tapi itu tipe data enumerasi, yang mampu memegang nilai-nilai terbatas.
>> Sebuah contoh yang benar-benar baik di sini akan untuk membuat enum mana tujuh
nilai yang mungkin adalah hari Minggu, Senin, Selasa, Rabu, Kamis, Jumat,
Sabtu, kan?
Bahwa tipe data Hari Minggu tidak ada,
tapi kita bisa menciptakan disebutkan tipe data seperti
kolom yang hanya pernah memegang salah satu dari tujuh nilai yang mungkin.
Kami telah disebutkan semua dari nilai yang mungkin.
>> Lalu kami memiliki CHAR dan VARCHAR, dan saya sudah warna hijau ini
karena kita benar-benar akan mengambil kedua
untuk berbicara tentang perbedaan antara dua hal.
Jadi CHAR, tidak seperti C di mana CHAR adalah karakter tunggal,
di SQL CHAR mengacu panjang string tetap.
Dan ketika kita membuat ini kolom, kita benar-benar
dapat menentukan panjang string.
>> Jadi, dalam contoh ini, kita bisa mengatakan CHAR (10).
Itu berarti bahwa setiap elemen kolom yang
akan terdiri dari 10 byte informasi.
Tidak lebih, tidak kurang.
Jadi jika kita mencoba dan dimasukkan ke dalam 15 bit atau 15 karakter elemen
atau nilai dalam kolom ini, kita hanya mendapatkan 10 pertama.
Jika kita dimasukkan ke dalam dua nilai karakter yang panjang,
kita akan memiliki dua karakter, dan kemudian delapan gigitan null.
Kita tidak akan pernah menjadi lebih efisien dari itu.
>> Sebuah VARCHAR adalah jenis seperti gagasan kita string
bahwa kita akrab dengan dari C atau dari PHP.
Ini adalah panjang variabel string.
Dan ketika Anda membuat kolom ini, Anda hanya
menentukan panjang maksimum yang mungkin.
Jadi mungkin 99, atau biasa 255.
Itu akan menjadi panjang maksimum.
Dan jika kita menyimpan 15 karakter string,
kita akan menggunakan 15 byte, mungkin 16 byte untuk null terminator.
Jika kita menyimpan tiga karakter string,
kita akan menggunakan tiga atau empat byte.
Tapi kita tidak akan menggunakan penuh 99.
>> Jadi, mengapa kita memiliki keduanya?
Nah, jika kita perlu mencari tahu bagaimana sesuatu yang panjang adalah dengan VARCHAR sebuah,
kita harus jenis iterate di atasnya sama seperti yang kami lakukan di C
dan mencari tahu di mana berhenti.
Sedangkan jika kita tahu bahwa segala sesuatu dalam kolom ini adalah 10 byte, mungkin
kita tahu informasi itu, kita bisa melompat 10 bytes, 10 byte, 10 byte, 10 byte,
dan selalu menemukan mulai dari string.
>> Jadi kita mungkin memiliki beberapa terbuang ruang dengan CHAR,
tapi mungkin ada perdagangan off memiliki kecepatan yang lebih baik
dalam menavigasi database.
Tapi mungkin kita ingin fleksibilitas dari VARCHAR
bukannya having-- Jika CHAR kami adalah 255, tetapi sebagian besar pengguna kami
hanya memasukkan tiga atau empat byte senilai informasi atau tiga atau empat
karakter senilai informasi.
>> Namun beberapa pengguna menggunakan seluruh 255, mungkin
VARCHAR akan lebih tepat ada.
Ini semacam trade off, dan umumnya untuk keperluan CS50,
Anda tidak perlu khawatir terlalu banyak tentang apakah Anda menggunakan CHAR atau VARCHAR.
Tapi di dunia nyata, hal-hal ini memang penting karena semua kolom ini
mengambil ruang fisik yang sebenarnya.
Dan ruang fisik, dalam dunia nyata, datang pada premi.
>> Jadi salah satu pertimbangan lain ketika Anda sedang membangun sebuah meja
adalah untuk memilih satu kolom menjadi apa yang disebut primary key.
Dan kunci utama adalah kolom di mana setiap nilai tunggal adalah unik.
Dan itu berarti bahwa Anda dapat dengan mudah memilih satu baris hanya dengan melihat
di kunci utama dari baris itu.
Jadi misalnya, Anda umumnya, dengan pengguna,
tidak ingin dua pengguna yang memiliki nomor ID pengguna yang sama.
Dan jadi mungkin Anda memiliki banyak informasi,
dan mungkin dua pengguna dapat memiliki name-- sama
Anda memiliki John Smith dan John Smith.
Itu tidak selalu masalah, karena ada beberapa orang
di dunia bernama John Smith.
Tapi kami hanya memiliki nomor ID satu pengguna 10, salah satu pengguna ID nomor 11, 12, 13.
Kami tidak memiliki dua pengguna dengan jumlah yang sama,
dan jadi mungkin nomor ID pengguna akan menjadi kunci utama baik.
>> Kami tidak memiliki duplikasi, dan kami sekarang dapat unik
mengidentifikasi setiap baris tunggal hanya dengan melihat kolom tersebut.
Memilih kunci primer dapat benar-benar membuat operasi meja berikutnya
jauh lebih mudah karena Anda dapat memanfaatkan fakta bahwa baris tertentu akan
unik, atau kolom tertentu database atau tabel
akan menjadi unik untuk memilih baris tertentu keluar.
>> Anda juga dapat memiliki utama bersama kunci, yang mungkin Anda menemukan kesempatan
untuk menggunakan, yang hanya Kombinasi dari dua kolom yang
dijamin untuk menjadi unik.
Jadi mungkin Anda memiliki satu Kolom itu As dan B,
satu kolom yang satu, dua, dan tiga, tetapi Anda akan hanya pernah
memiliki A1 tunggal, tunggal A2, dan seterusnya dan seterusnya.
Tapi Anda mungkin memiliki B2, satu C2, atau A1, A2, A3, A4.
Jadi, Anda mungkin memiliki beberapa Seperti, beberapa B, beberapa orang, beberapa berpasangan,
tapi Anda hanya dapat pernah memiliki tunggal A1, B2, C3, dan sebagainya.
Jadi seperti yang saya katakan, SQL adalah bahasa pemrograman,
tetapi memiliki kosakata yang cukup terbatas.
Ini tidak cukup sebagai luas sebagai C dan PHP dan bahasa lainnya
bahwa kita berbicara dalam kursus.
Hal ini lebih verbose sebuah bahasa daripada apa yang kita
akan berbicara tentang dalam hal ini video, karena dalam video ini
kita akan berbicara tentang empat operasi yang kita
dapat melakukan di atas meja.
>> Ada lebih dari ini.
Kita bisa melakukan lebih dari ini, tetapi untuk tujuan kita,
kita umumnya akan menggunakan hanya empat insert operations--,
pilih, memperbarui, dan menghapus.
Dan Anda mungkin bisa menebak intuitif apa semua empat hal ini lakukan.
Tapi kami akan pergi ke sedikit detail pada masing-masing.
>> Jadi untuk tujuan ini video, mari kita asumsikan
kami telah dua berikut tabel dalam database tunggal.
Kami memiliki tabel yang disebut User yang memiliki empat columns-- nomor ID, nama pengguna,
password, dan nama lengkap.
Dan kami memiliki kedua tabel dalam database yang sama
disebut Moms yang hanya menyimpan informasi tentang username dan ibu.
Jadi untuk semua contoh dalam video ini, kita akan
menggunakan database ini dan update berikutnya untuk itu.
Jadi katakanlah kita ingin menambahkan informasi ke meja.
Itulah yang operasi insert tidak.
Dalam menjelaskan semua perintah ini, aku akan
untuk memberikan kerangka umum untuk digunakan.
Karena pada dasarnya, query akan terlihat sangat mirip,
kami hanya akan mengubah potongan yang sedikit berbeda dari informasi
melakukan hal-hal yang berbeda dengan meja.
>> Jadi untuk INSERT. Kerangka terlihat jenis seperti ini.
Kami ingin masukkan ke dalam meja tertentu.
Kemudian kita memiliki kurung buka dan daftar kolom
bahwa kita ingin menempatkan nilai-nilai ke dalam.
Tutup kurung, yang berikut nilai-nilai, dan kemudian
lagi, kita daftar keluar nilai-nilai kita ingin menempatkan di meja.
>> Jadi contoh ini akan berikut.
Saya ingin memasukkan ke dalam tabel pengguna columns-- berikut
username, password, dan nama lengkap.
Jadi baris baru di mana aku meletakkan di tiga kolom dan kami
akan dimasukkan ke dalam nilai-nilai Newman, USMAIL, dan Newman.
Jadi dalam hal ini, aku menempatkan Newman huruf kecil
ke dalam kolom nama pengguna, password USMAIL, dan penuh modal nama N
Newman ke dalam kolom nama lengkap.
>> Jadi, inilah yang database tampak seperti sebelumnya.
Inilah yang tabel pengguna pada atas tampak seperti sebelum kita lakukan ini.
Setelah kita menjalankan ini query, kita mendapatkan ini.
Kami telah menambahkan baris baru ke meja.
Tapi perhatikan hal yang satu ini bahwa saya tidak menentukan,
tapi entah kenapa aku punya nilai untuk yang 12 ini di sini.
Saya tidak mengatakan saya ingin memasukkan nomor ID di sana.
Saya ingin menempatkan nama pengguna, password, nama lengkap.
Dan saya melakukan itu, itu baik-baik saja.
>> Tapi saya juga punya 12 ini.
Mengapa saya mendapatkan 12 ini?
Nah, ternyata bahwa ketika Anda mendefinisikan
kolom yang akan menjadi Anda kunci utama, yang biasanya,
seperti saya katakan, nomor ID.
Ini tidak selalu harus akan menjadi nomor ID,
tapi biasanya ide yang baik untuk menjadi semacam nilai integer.
Anda memiliki pilihan di phpMyAdmin ketika Anda sedang menciptakan database Anda
atau meja Anda untuk mengatur bahwa kolom auto incrementing.
>> Yang adalah ide yang sangat baik ketika Anda bekerja dengan kunci utama,
karena Anda ingin setiap nilai di kolom yang menjadi unik.
Dan jika Anda lupa untuk menentukan untuk lebih dari satu orang,
Anda sekarang memiliki situasi di mana kolom yang tidak lagi unik.
Anda memiliki dua kosong, sehingga Anda dapat ada lagi unik mengidentifikasi column--
atau Anda tidak bisa lagi unik mengidentifikasi baris berdasarkan kolom tersebut.
Ini kehilangan semua yang nilai sebagai kunci utama.
>> Dan begitu rupanya apa yang telah saya lakukan disini dikonfigurasi ID pengguna
kolom kenaikan otomatis sehingga setiap kali saya menambahkan informasi ke meja,
maka secara otomatis akan memberikan nilai untuk kunci primer.
Jadi saya tidak pernah bisa lupa untuk melakukannya karena database akan melakukannya untuk saya.
Jadi itu jenis yang baik.
Dan jadi itu sebabnya kita mendapatkan 12 di sana, karena saya sudah
mengatur kolom untuk kenaikan otomatis.
Jika saya menambahkan orang lain itu akan 13, jika saya menambahkan
orang lain itu akan menjadi 14, dan seterusnya.
>> Jadi mari kita melakukan satu penyisipan lebih.
Kami akan memasukkan ke dalam tabel ibu, di tertentu, username dan ibu
kolom, nilai-nilai kramer dan Babs Kramer.
Dan jadi kami punya ini sebelumnya.
Setelah kita menjalankan itu SQL query, kita memiliki ini.
Kami telah menambahkan Kramer dan Babs Kramer ke meja ibu.
>> Jadi yang memasukkan.
SELECT adalah apa yang kita gunakan untuk mengekstrak informasi dari meja.
Jadi ini adalah bagaimana kita mendapatkan informasi dari database.
Dan perintah sehingga SELECT akan menjadi sangat sering digunakan dalam pemrograman.
Umum framework-- yang kerangka umum seperti ini.
Pilih satu set kolom dari meja, dan kemudian opsional
Anda dapat menentukan condition-- atau apa yang biasanya kita sebut predikat,
biasanya istilah yang kita gunakan dalam SQL.
>> Tapi itu pada dasarnya apa yang baris tertentu Anda ingin mendapatkan.
Jika Anda ingin, bukannya segala sesuatu, mempersempit bawah,
ini adalah di mana Anda akan melakukannya.
Dan kemudian opsional, Anda juga dapat memesan dengan kolom tertentu.
Jadi mungkin Anda ingin memiliki hal-hal diurutkan abjad berdasarkan satu kolom
atau abjad berdasarkan lain.
>> Sekali lagi, MANA dan ORDER BY adalah opsional.
Tapi mereka mungkin akan useful-- khususnya
MANA akan berguna untuk mempersempit sehingga Anda tidak
mendapatkan seluruh database Anda kembali dan harus memprosesnya, Anda hanya mendapatkan
potongan itu bahwa Anda peduli.
Jadi misalnya, saya mungkin ingin memilih Nomor ID dan nama lengkap dari pengguna.
Jadi apa yang mungkin terlihat seperti ini?
Jadi, inilah meja pengguna saya.
Saya ingin memilih idnum dan nama lengkap dari pengguna.
Apa yang akan saya dapatkan?
Aku akan mendapatkan ini.
Saya tidak sempit itu, jadi aku mendapatkan nomor ID untuk setiap baris
dan aku mendapatkan penuh nama dari setiap baris.
>> OKE.
Bagaimana jika saya ingin memilih sandi dari pengguna WHERE-- jadi sekarang
Saya menambahkan kondisi, sebuah predicate-- mana idnum kurang dari 12.
Jadi, inilah database saya lagi, pengguna saya tabel atas.
Apa yang saya akan dapatkan jika saya ingin pilih informasi itu, password,
dimana pengguna ID atau idnum kurang dari 12?
Aku akan mendapatkan ini informasi kembali, kan?
Hal ini terjadi bahwa idnum adalah 10, kurang dari 12, ID nomor 11 kurang dari 12.
Saya mendapatkan password bagi mereka baris.
Itulah yang saya minta.
Bagaimana dengan ini?
Bagaimana jika saya ingin memilih bintang dari meja ibu dimana username sama Jerry?
OK, pilih star adalah khusus semacam wild card disebut
yang kita gunakan untuk mendapatkan segala sesuatu.
Jadi mereka mengatakan pilih nama pengguna ibu koma, yang
kebetulan satu-satunya dua kolom tabel ini,
Aku hanya bisa memilih bintang dan mendapatkan semuanya
di mana username sama Jerry.
Dan itulah yang saya akan mendapatkan jika saya membuat pencarian tertentu.
>> Sekarang, database adalah besar karena mereka memungkinkan
kita untuk mengatur informasi mungkin sedikit lebih efisien daripada kita
mungkin sebaliknya.
Kita tidak perlu untuk menyimpan setiap bagian yang relevan dari informasi
tentang pengguna di meja yang sama.
Kami memiliki dua tabel di sana.
>> Kita perlu untuk menyimpan Nama orang ibu,
dan mungkin kita tidak memiliki jaminan sosial nomor, kita memiliki tanggal lahir mereka.
Itu tidak selalu perlu berada di meja yang sama.
Selama kita dapat mendefinisikan hubungan antara tables-- yang
dan di sanalah relasional yang jangka Database jenis datang
ke play-- selama kita dapat mendefinisikan hubungan antara tabel,
kita bisa semacam milah atau hal-hal abstrak cara,
di mana kita hanya memiliki Informasi sangat penting
kita peduli dalam tabel pengguna.
Dan kemudian kita memiliki informasi tambahan atau informasi tambahan dalam tabel lain
bahwa kita dapat terhubung kembali ke utama tabel dengan cara tertentu pengguna.
>> Jadi di sini kita memiliki dua tabel ini, tapi ada hubungan antara mereka,
kanan?
Sepertinya nama mungkin sesuatu
yang ada di umum antara dua tabel yang berbeda ini.
Jadi bagaimana jika sekarang kita memiliki situasi di mana kita
ingin mendapatkan nama lengkap pengguna dari tabel pengguna, dan ibu mereka
nama dari tabel ibu?
Kami tidak memiliki cara untuk mendapatkan yang seperti berdiri, kan?
Tidak ada meja tunggal yang berisi kedua nama lengkap dan nama ibu.
Kami tidak memiliki pilihan itu dari apa yang telah kita lihat sejauh ini.
>> Dan jadi kita harus memperkenalkan ide JOIN.
Dan bergabung mungkin paling complex--
itu benar-benar operasi yang paling kompleks kita akan berbicara tentang dalam video.
Mereka sedikit rumit, tetapi sekali Anda mendapatkan menguasainya,
mereka benar-benar tidak terlalu buruk.
Ini hanya kasus khusus dari SELECT.
Kita akan memilih satu set kolom dari tabel bergabung
dalam tabel kedua pada beberapa predikat.
>> Dalam hal ini, berpikir tentang hal ini seperti this-- tabel satu adalah satu lingkaran di sini,
tabel dua adalah lingkaran lain di sini.
Dan bagian predikat di tengah, itu
semacam seperti jika Anda berpikir tentang sebagai diagram Venn, apa
yang mereka memiliki kesamaan?
Kami ingin menghubungkan dua tabel ini berdasarkan apa yang mereka memiliki kesamaan
dan membuat tabel hipotetis ini yang merupakan penggabungan dua bersama-sama.
Jadi kita akan melihat ini dalam sebuah contoh dan mungkin yang akan membantu
jelas itu sedikit.
Jadi mungkin Anda ingin memilih user.fullname dan moms.mother
dari pengguna bergabung di ibu tabel dalam setiap situasi
dimana kolom nama pengguna adalah sama di antara mereka.
Dan ini adalah baru sintaks sini, pengguna ini.
dan ibu ..
Jika saya melakukan beberapa tabel bersama-sama, saya dapat menentukan meja.
Saya bisa membedakan di atas tertentu bahwa pada di bagian paling bawah sana.
Aku bisa membedakan username kolom tabel pengguna
dari kolom nama pengguna dari meja ibu, yang otherwise--
jika kita hanya mengatakan nama sama nama pengguna, yang tidak benar-benar
berarti apa-apa.
Kami ingin melakukannya di mana mereka cocok.
>> Jadi saya dapat menentukan tabel dan Nama kolom dalam kasus situasi
di mana itu akan menjadi tidak jelas apa yang saya bicarakan.
Jadi itu semua yang saya lakukan ada aku mengatakan kolom ini dari tabel ini,
dan menjadi sangat eksplisit.
Jadi sekali lagi, saya memilih nama lengkap dan nama ibu
dari tabel pengguna terkait bersama-sama dengan tabel ibu dalam setiap situasi
di mana mereka berbagi column-- yang mereka berbagi bahwa username gagasan.
>> Jadi di sini adalah tabel yang kita miliki sebelumnya.
Ini adalah keadaan kami Database seperti yang ada sekarang.
Informasi yang kita penggalian adalah ini untuk memulai dengan.
Ini adalah tabel baru kita akan untuk membuat menggabungkan ini bersama-sama.
Dan perhatikan kita tidak menyoroti Baris Newman di meja pengguna,
dan kita tidak menyoroti Baris Kramer dalam tabel ibu
karena salah satu tidak ada di baik sets-- di kedua tabel.
>> Satu-satunya informasi yang sama di antara mereka adalah Jerry adalah di kedua tabel
dan gcostanza di kedua tabel.
Dan ketika kita melakukan SQL JOIN, apa yang kita get-- dan kami melakukan benar-benar mendapatkan ini.
Ini semacam variabel sementara.
Ini seperti hipotetis penggabungan dua tabel.
Kami benar-benar mendapatkan sesuatu seperti ini, di mana
kami telah bergabung bersama tabel di informasi bahwa mereka memiliki kesamaan.
>> Jadi melihat users.username yang dan kolom moms.username,
itu persis sama.
Itulah informasi yang konsisten dari pengguna
meja dan meja ibu.
Dan jadi kami bergabung bersama-sama.
Kami dibuang Kramer karena dia tidak ada dalam tabel pengguna,
dan kami dibuang Newman, karena dia tidak ada dalam tabel ibu.
Jadi ini adalah merger hipotetis menggunakan BERGABUNG operasi SELECT.
>> Dan kemudian kami mencari nama lengkap pengguna dan ibu pengguna,
dan jadi ini adalah informasi yang kita akan mendapatkan dari permintaan keseluruhan
yang kami buat dengan SELECT.
Jadi kami bergabung dengan tabel bersama-sama dan kami diekstraksi dua kolom,
dan itulah apa yang akan kita dapatkan.
Tapi SQL bergabung semacam rumit.
Anda mungkin tidak akan melakukannya terlalu banyak, tetapi hanya memiliki beberapa gagasan tentang kerangka
yang dapat Anda gunakan untuk menggabungkan dua tabel bersama-sama jika Anda perlu.
Dua yang terakhir adalah bit sederhana aku janji.
Jadi memperbarui, kita dapat menggunakan UPDATE mengubah informasi dalam sebuah tabel.
Format umum adalah UPDATE beberapa tabel, SET beberapa kolom untuk beberapa nilai
MANA beberapa predikat puas.
Jadi misalnya, kita mungkin ingin untuk memperbarui tabel pengguna
dan mengatur password untuk Yada Yada, dimana jumlah ID adalah 10.
>> Jadi dalam hal ini, kami memperbarui tabel pengguna.
Nomor ID adalah 10 untuk bahwa baris pertama di sana,
dan kami ingin memperbarui password untuk Yada Yada.
Dan itulah yang akan terjadi.
Ini cukup sederhana, bukan?
Ini hanya sangat sederhana modifikasi ke meja.
>> DELETE adalah operasi kita digunakan untuk menghapus informasi dari meja.
DELETE FROM tabel WHERE beberapa predikat puas.
Kami ingin menghapus dari tabel pengguna misalnya
di mana username adalah Newman.
Anda mungkin bisa menebak apa yang akan terjadi di sini setelah kami mengeksekusi SQL yang
query, Newman hilang dari meja.
>> Jadi semua operasi ini, seperti yang saya katakan, sangat mudah dilakukan di phpMyAdmin.
Ini adalah antarmuka pengguna yang sangat ramah.
Tapi itu membutuhkan usaha manual.
Kami tidak ingin mempekerjakan tenaga manual.
Kami ingin program untuk melakukan ini untuk kita, kan?
Jadi kita mungkin ingin melakukan pemrograman ini.
Kami ingin menggabungkan SQL dan memiliki sesuatu yang lain untuk melakukan hal ini untuk kita.
>> Tapi apa yang telah kita lihat yang memungkinkan kita untuk pemrograman melakukan sesuatu?
Kami telah melihat PHP, kan?
Hal ini memperkenalkan beberapa dinamisme dalam program kami.
Dan untungnya, SQL dan PHP bermain sangat baik bersama-sama.
Ada fungsi di PHP disebut query, yang dapat digunakan.
Dan Anda dapat melewati sebagai parameter atau argumen
untuk query query SQL yang Anda ingin mengeksekusi.
Dan PHP akan melakukannya atas nama Anda.
>> Jadi setelah Anda terhubung ke database Anda dengan PHP,
ada dua primary Anda melakukan hal ini.
Ada sesuatu yang disebut MySQLi dan sesuatu yang disebut PDO.
Kami tidak akan pergi ke besar Jumlah rinci ada.
Dalam CS50 kita menggunakan PDO.
Setelah Anda terhubung ke database Anda, Anda
kemudian dapat membuat query database Anda dengan melewati query sebagai argumen
untuk fungsi PHP.
Dan ketika Anda melakukannya, Anda menyimpan mengatur hasil dalam array asosiatif.
>> Dan kita tahu bagaimana bekerja dengan array asosiatif di PHP.
Jadi saya mungkin mengatakan sesuatu seperti this-- $ results--
ini di PHP-- sama query.
Dan kemudian bagian dalam fungsi permintaan bahwa argumen
bahwa aku lewat query yang terlihat seperti SQL.
Dan pada kenyataannya yang SQL.
Itu string yang saya akan seperti untuk mengeksekusi pada database saya.
>> Dan merah, ini adalah PHP.
Ini adalah SQL bahwa aku mengintegrasikan ke PHP dengan membuat
itu argumen untuk fungsi permintaan.
Saya ingin memilih nama lengkap dari pengguna di mana nomor ID sama dengan 10.
Dan kemudian mungkin setelah saya sudah melakukan itu, Aku mungkin mengatakan sesuatu seperti ini.
Saya ingin mencetak Terima kasih untuk pesan masuk.
>> Dan saya ingin interpolate-- saya ingin interpolasi $ hasil nama lengkap.
Dan itulah bagaimana saya bekerja dengan itu asosiatif array aku kembali.
$ hasil nama lengkap akan pada dasarnya berakhir mencetak,
terima kasih untuk log in, Jerry Seinfeld.
Itu adalah nama lengkap mana idnum sama 10.
>> Dan sehingga semua yang saya lakukan adalah aku sekarang-- saya disimpan
pertanyaan saya, hasil query saya dan hasil dalam array asosiatif,
dan nama lengkap adalah nama dari kolom saya mendapatkan untuk.
Jadi itulah kunci saya ke dalam hasil array asosiatif yang saya inginkan.
Jadi Terima kasih untuk log in, $ hasil, nama lengkap akan mencetak, akan menempel
tepat di antara mereka keriting kawat gigi, Jerry Seinfeld.
Dan saya akan ingin mencetak pesan Terima kasih untuk login Jerry Seinfeld.
>> Sekarang, kita mungkin tidak ingin keras hal kode seperti itu, kan?
Kita mungkin ingin melakukan sesuatu seperti print f, di mana kita dapat menggantikan dan mungkin
mengumpulkan informasi yang berbeda, atau mungkin memiliki proses query
informasi yang berbeda.
Dan query, fungsi permintaan memiliki Gagasan ini semacam substitusi
sangat mirip dengan mencetak f persen s dan c persen, adalah tanda tanya.
>> Dan kita bisa menggunakan pertanyaan tanda sangat analog
untuk mencetak f untuk variabel pengganti.
Jadi mungkin pengguna Anda login sebelumnya, dan Anda menyimpan nomor ID pengguna mereka
di $ _SESSION PHP yang super global dalam kunci ID.
Jadi mungkin setelah mereka login, Anda menetapkan $ _SESSION ID sama dengan 10,
ekstrapolasi dari contoh kita hanya melihat kedua lalu.
>> Dan ketika kita benar-benar melaksanakan ini query hasil sekarang,
itu akan pasang di 10, atau apa pun $ _SESSION nilai ID adalah.
Dan sehingga memungkinkan kita untuk menjadi sedikit lebih dinamis.
Kami tidak sulit coding hal di lagi.
Kami menyimpan informasi suatu tempat dan kemudian
kita dapat menggunakan informasi itu lagi ke semacam generalisasi apa yang ingin kita lakukan,
dan hanya plug-in dan perubahan perilaku halaman kami
berdasarkan apa nomor ID pengguna sebenarnya setelah mereka login.
Itu juga mungkin, meskipun, bahwa hasil Anda mengatur
mungkin terdiri dari beberapa baris.
Dalam hal ini, Anda memiliki array arrays--
array array asosiatif.
Dan Anda hanya perlu iterate melalui itu.
Dan kita tahu bagaimana untuk beralih melalui array di PHP, kan?
Jadi di sini adalah mungkin yang paling hal yang kompleks yang telah kita lihat sejauh ini.
Ini benar-benar terintegrasi tiga bahasa bersama-sama.
>> Berikut merah, ini adalah beberapa HTML.
Saya rupanya starting-- ini potongan beberapa HTML yang saya miliki.
Aku mulai paragraf baru yang kata ibu dari TV Seinfeld.
Dan kemudian segera setelah itu Aku mulai meja.
Dan kemudian setelah itu, saya memiliki beberapa PHP, kan?
Saya memiliki semua kode PHP ini di sana.
Saya tampaknya akan membuat query.
Dan untuk membuat query, aku akan akan menggunakan ibu SELECT FROM ibu.
>> Jadi ini getting-- ini SQL.
Jadi biru adalah SQL.
Merah kami melihat kedua lalu adalah HTML.
Dan hijau di sini adalah PHP.
Jadi aku membuat query ke database saya, saya
memilih semua ibu dalam tabel ibu.
Bukan hanya menyempit ke bawah untuk tertentu baris, saya meminta untuk mereka semua.
>> Lalu aku memeriksa apakah hasil adalah tidak sama dengan sama palsu.
Ini hanya cara saya memeriksa semacam dari hasil jika tidak sama dengan nol,
bahwa kita akan melihat c misalnya.
Pada dasarnya ini hanya memeriksa untuk memastikan yakin bahwa itu benar-benar mendapat data kembali.
Karena saya tidak ingin mulai mencetak keluar data jika saya tidak mendapatkan data apapun.
Kemudian untuk setiap hasil akibatnya sintaks foreach dari PHP, semua yang saya lakukan
adalah mencetak ibu $ hasil.
Dan jadi saya akan mendapatkan satu set dari semua ibu each--
itu array asosiatif arrays-- dan aku mencetak
masing-masing sebagai baris sendiri meja.
Dan itu benar-benar cantik banyak semua yang ada untuk itu.
Aku tahu ada sedikit bit terjadi di sini
dalam contoh terakhir ini dengan array arrays-- array dari array asosiatif.
Tapi itu benar-benar hanya mendidih turun di SQL untuk membuat query,
biasanya memilih setelah kami sudah sudah menaruh informasi ke dalam tabel,
dan kemudian hanya menariknya keluar.
>> Dan ini kita akan menariknya dalam kasus ini.
Kami akan mengambil semua individu ibu dari tabel ibu.
Kami mendapat satu set besar mereka, dan kami ingin iterate melalui dan mencetak
setiap.
Jadi sekali lagi, ini mungkin contoh yang paling rumit
kita lihat karena kita mencampur tiga bahasa yang berbeda bersama-sama, kan?
>> Sekali lagi, kita memiliki HTML sini dalam warna merah, dicampur dengan beberapa SQL di sini dengan warna biru,
dicampur dengan beberapa PHP hijau.
Tapi semua ini memainkan baik bersama-sama, itu
hanya masalah berkembang kebiasaan baik sehingga Anda bisa mendapatkan
mereka untuk bekerja sama seperti yang Anda inginkan.
Dan satu-satunya cara untuk benar-benar melakukan itu adalah berlatih, berlatih, berlatih.
Aku Doug Lloyd, ini CS50.