[MUZIKO Ludante] DOUG LLOYD: En nia videos sur ttt disvolviĝo temoj, ni menciis la koncepton de datumbazo kelkajn fojojn, dekstra? Do datumbazon vi estas verŝajne konata kun de diri uzanta Microsoft Excel aŭ Google Spreadsheets. Ĝi estas vere nur organizitaj fiksita de tabloj, vicoj kaj kolumnoj. Kaj datumbazon estas kie nia retejo vendejoj informo kiu estas grava por nia retejo por labori konvene. Denove, vere komuna ekzemplo tie estas stoki salutnomoj kaj pasvortoj en datumbazo, tiel ke kiam uzanto protokolojn en nian retejon, la datumbazo eblas konsulti vidi se tiu uzanto ekzistas en la datumbazo. Kaj se ili estas, kontrolanta ke ilia pasvorto estas korekta. Kaj se ilia pasvorto estas ĝustaj, tiam ni povas doni al ili kion ajn paĝon ili estas petante. Do vi probable, denove, familiara kun tiu ideo de Excel aŭ Google Spreadsheets. Ni havas datumbazojn, tabloj, vicoj kaj kolumnoj. Kaj tio estas vere speco de la fundamenta aro de hierarkia kolapso tie. Do jen Excel kalkultabelo. Kaj se vi iam malfermis ĉi aŭ alia simila programo vi scias, ke tiuj tie estas rows-- 1, 2, 3, 4, 5, 6, 7. Tiuj estas kolumnojn. Eble cxi tie, kvankam vi Ne uzu tiun funkcion terure much-- Mi zomi in-- ni havas tiu ideo de folio. Do eble tiuj tukoj, se Mi alterni tien kaj reen, estas malsamaj tabloj ke ekzistas en mia datumbazo. Kaj se ni daŭrigas la ekzemplon ĉiuj Parenteze, la nomo de tiu datumbazo Estas Libro 1. Eble mi havas Libro 2 kaj Libro 3. Do ĉiu Excel dosiero estas datenbazo, ĉiu folio estas tabulo, kaj ene de ĉiu tablo mi devas tiu ideo de vicoj kaj kolumnoj. Do kiel mi laboras kun tiun datumbazon? Kiel igi informojn el ĝi? Nu ekzistas lingvo nomata SQL-- kiun mi kutime simple nomas Sequel-- kaj ĝi staras por la Strukturita Query Language. Kaj estas komputila programlingvo sed estas sufiĉe limigita programado lingvo. Ĝi ne estas tute kiel aliaj ke ni laboris kun. Sed la celo de ĉi tiu programlingvo estas konsulti datumbazon, por petu informon de datumbazo, trovi informojn en datenbazo, kaj tiel plu. Ni ankaŭ, en CS50-- kaj estas tre komuna platformo, ĝi nomiĝas MySQL. Tion ni uzas en la kurso. Ĝi estas malferma fonto platformo kiu establu tn interrilata database-- datumbazo, efike. Ni ne bezonos akiri en tro da detalo sur kia rilata datumbazo estas. Sed la SQL lingvo tre lerta pri laboranta kun MySQL kaj aliaj similaj stiloj de interrilataj datumaroj. Kaj multaj instalaĵoj de MySQL veni kun io nomita phpMyAdmin, kiu estas grafika uzanto interface-- a GUI-- ke faras ĝin iom pli uzanto amika ekzekuti datumbazo pridemandojn, ĉar datumbazoj ne nur uzata per progresinta programistoj, dekstra? Kelkfoje ekzistas tiuj malgrandaj entreprenoj, kaj ili ne povas havigi al dungi teamon de programistoj, sed ili ankoraŭ bezonas stoki informojn en datumbazo. Io kiel phpMyAdmin faras tre facila por iu kiuj neniam planita antaŭ al repreni kaj familiarizarse kun kiel labori kun datumbazo. La problemo estas, phpMyAdmin, dum ĝi estas mirinda ilo por lernado pri datumbazoj, estas manlibro. Vi tuj devas ensaluti ĝin kaj ekzekuti komandojn kaj tipo aferojn en permane. Kaj kiel ni scias el niaj ekzemple sur PHP ttt programado, devi permane fari aferojn sur nia retejo, se ni volas dinamikan, aktiva respondema retejo, eble ne la plej bona alproksimiĝo. Ni ŝatus trovi manieron eble aŭtomatigi ĉi iel. Kaj SQL ebligos nin fari tion. Do kiam ni tuj komenci labori kun SQLa, ni unue bezonas havi datumbazo por labori kun. Krei datumbazo io vi probable faros en phpMyAdmin, ĉar vi nur bezonas fari tion unufoje, kaj la sintakson por fari tion estas multe pli simpla. Ĝi estas multe pli facila fari ĝin en grafika uzantinterfaco ol tajpi ĝin kiel komando. La komando povas akiri iom maloportuna. Simile, kreante tablo povas akiri tre iom maloportuna tiel. Kaj tiel aĵoj kiel krei datumbazon kaj krei tablo, kiu vi estas probable nur tuj faros once-- unufoje po tablo, fojo por database-- ĝi estas BONE fari tion en grafika interfaco. En la procezo de kreante tablon, vi ankaŭ devus specifi ĉiujn kolumnoj kiuj estos en tiu tabelo. Kia informo fari vi volas konservi en la tablo? Eble uzanto nomo kaj dato de naskiĝo, pasvorto de uzanto ID nombro, kaj eble urbo kaj ŝtato, ĉu ne? Kaj por ĉiufoje ni volas aldoni uzanton al la datumbazo, ni volas ricevi ĉiujn ses de tiuj pecoj de informo. Kaj ni faras tion per aldono vicoj al la tablo. Do ni unue krei datumbazon, tiam ni krei tabulon. Kiel parto de kreado tablo, Ni demandas specifi ĉiu kolumno kiu Ni ŝatus en tiu tabelo. Kaj tiam ni komencos aldoni informon al la datumbazo kaj konsulti la datumbazon pli generally-- ne ĝuste aldonante, sed ĉio alia ni do-- ni estos kontraktanta kun vicoj de la tablo, kiu estas unu uzanto informojn de la tuta aro. Do ĉiu SQLa kolumno kapablas tenante datumoj de aparta datumtipo. Do ni ia forigita ĉi ideo de datumtipoj en PHP, sed ili estas reen tie en SQL. Kaj estas multe da datumtipoj. Ĉi tie estas nur 20 el ili, sed ĝi estas eĉ ne ĉiuj el ili. Do ni havas ideojn kiel INTs-- Integers-- ni probable scias ke tiu kolumno povas teni entjeroj. Kaj estas variadoj thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Eble ni ne ĉiam bezonas kvar mordoj. Eble ni bezonos ok bajtoj, kaj tiel ni povas uzi ĉi tiuj variadoj sur entjeroj esti iom pli spaco efika. Ni povas fari dekumaj nombroj, ni povas fari glitpunktaj nombroj. Tiuj estas sufiĉe simila. Ekzistas kelkaj diferencoj, kaj se vi farus ŝatas rigardi supre la SQLa ia gvidilon povas vidi kion la malgrava diferencoj estas inter ili. Eble ni volas konservi informo pri dato kaj tempo. Eble ni konservanta trako de kiam la uzanto aliĝis nia retejo, kaj do eble ni volas havi kolumno tio daton tempo aŭ tempindiko ke indikas kiam la uzanto reale subskribis. Ni povas fari geometrioj kaj linestrings. Tiu estas fakte sufiĉe freŝa. Ni povis mapi eksteren geografia areo uzante GIS koordinatoj komploti ekstere areon. Do povas fakte stokas tiajn de informo en SQL kolumno. TEKSTO estas nur gigantaj blobs de teksto, eble. ENUMs estas speco de interesa. Ili vere ekzistas en C. Ni faras ne paroli pri ili ĉar ili ne estas terure komune uzata, almenaŭ CS50. Sed ĝi estas numeritaj datumtipo, kiu kapablas tenante limigitaj valoroj. Vere bona ekzemplo tie estus krei enumeracian kie la sep eblaj valoroj estas dimanĉo, lundo, Mardo, merkredo, ĵaŭdo, vendredo, Sabaton, dekstra? Ke datumtipo Tago de Semajno ne ekzistas, sed ni povis krei numeritaj datumtipo tia ke tiu kolumno povas nur iam teni unu el tiuj sep eblaj valoroj. Ni listigis cxiujn de la eblaj valoroj. Tiam ni havas CHAR kaj VARCHAR, kaj mi havas kolorigi tiujn verdajn ĉar ni estas vere tuj prenos dua paroli pri la diferenco inter tiuj du aferoj. Do char, kontraste C kie CHAR estis ununura karaktero, en SQLa char rilatas al fiksa longo kordo. Kiam ni kreas ĉi kolumno, ni reale povas precizigi la longon de la kordo. Do en ĉi tiu ekzemplo, ni povus diri CHAR (10). Tio signifas, ke ĉiu elemento de tiu kolumno konsistos de 10 bajtoj de informo. Nenio pli, nenio malpli. Do se ni provas kaj metis en 15 bita aŭ 15 karaktero elemento aŭ valoro en tiu kolono, ni nur ricevos la unuan 10. Se ni metas en la du karaktero longa valoro, ni tuj havos la du karakteroj, kaj tiam ok nula mordoj. Ni neniam estos pli efika ol tio. A VARCHAR estas ia kiel nia nocio de kordo ke ni estas familiara kun el C aŭ de PHP. Estas ŝanĝiĝema longitudo kordo. Kiam vi kreas tiu kolumno, vi nur specifas la maksimuman eblan longoj. Do eble 99, aŭ komune 255. Kiu estus la maksimuma longeco. Kaj do se ni stokante 15 signoĉeno, ni uzus 15 bajtoj, eble 16 bajtoj por la nula Terminator. Se ni stokante a tri signoĉeno, ni uzus tri aŭ kvar bitokoj. Sed ni ne uzus la plenan 99. Do kial ni havas ambaŭ? Nu, se ni devas eltrovi kiom longa io estas kun VARCHAR, ni devos ia ripeti Super ĝi Samkiel ni faris en C kaj eltrovi kie ĉesas. Dum kiu se ni scias ke ĉiu en ĉi kolumno estas 10 bitokoj, eble ni scias ke informo, ni povas salti 10 bajtoj, 10 bajtoj, 10 bajtoj, 10 bajtoj, kaj ĉiam trovi la komencante de la kordo. Do ni havu iun malŝparita spaco kun Char, sed eble tie estas komerco for de havi bona rapido en naviganta la datumbazo. Sed eble ni volas la flekseblo de VARCHAR anstataŭ having-- Se nia CHAR estis 255, sed la plejparto de niaj uzantoj nur inputting tri aŭ kvar bitokoj Valoro de informo aŭ tri aŭ kvar karakteroj valoras de informo. Sed kelkaj uzantoj uzis la tutaj 255, eble VARCHAR estus pli taŭga tie. Ĝi estas speco de komerco ekstere, kaj ĝenerale por celoj de CS50, vi ne bezonas zorgi tro multe pri ĉu vi uzas char aŭ VARCHAR. Sed en la reala mondo, tion ĉu gravas ĉar ĉiuj el tiuj kolumnoj levu fakta fizika spaco. Kaj fizika spaco, en la reala mondo, venas je premio. Do unu alia konsidero kiam vi konstruado tablo estas elekti unu kolumno esti kio nomiĝas primara ŝlosilo. Kaj primara ŝlosilo estas kolumna kie ĉiu unuopa valoro estas unika. Kaj tio signifas ke vi povas facile atentaro ununura vico ĵus per rigardado ĉe la primara ŝlosilo de tiu vico. Do ekzemple, vi ĝenerale, kun uzantoj, ne volas du uzantoj kiuj havi la sama uzanto ID nombro. Kaj do eble vi havas multajn informojn, kaj eble du uzantoj povas havas la saman name-- vi havas John Smith kaj John Smith. Tio ne nepre estas problemo, ĉar ekzistas multoblaj homoj en la mondo nomita John Smith. Sed ni nur havas unu uzanto ID nombro 10, unu uzanto ID numero 11, 12, 13. Ni ne havas du uzantoj kun la sama nombro, kaj do eble uzanto ID nombroj estus bona primara ŝlosilo. Ni ne havas neniun duplikaton, kaj ni povas nun unike identigi ĉiu unuopa vico nur rigardante tiu kolumno. Elektante primaraj ŝlosiloj povas reale fari posta tablo operacioj multe pli facila ĉar vi povas utiligi la fakto ke certaj vicoj volo esti sola, aŭ certa kolumno de via datumbazo aŭ tablo Estos unika elekti el aparta vicoj. Vi povas ankaŭ havi komunan primara ŝlosilo, kiun vi povas trovi pretekston uzi, kiu estas nur kombino de du kolumnoj kiuj estas garantiita esti unika. Do eble vi havas unu kolumno jen Kiel kaj Bs, unu kolumno kiu estas unu, du, kaj tri, sed vi nur iam havi solan A1, ununura A2, kaj tiel plu kaj tiel plu. Sed vi havu B2, a C2, aŭ A1, A2, A3, A4. Do vi povus havi multoblajn Kiel, multoblaj Bs, multnombraj aĵoj, multnombraj duoj, sed vi povas nur iam havi sola A1, B2, C3, kaj tiel plu. Do kiel mi diris, SQL estas programlingvo, sed ĝi havas sufiĉe limigita vortprovizo. Ĝi ne estas tiom vasta kiel C kaj PHP kaj aliaj lingvoj ke ni parolas en la kurso. Ĝi estas pli parolema a lingvo ol kio ni estas tuj parolos pri en tiu video, ĉar en ĉi tiu video ni tuj parolos pri kvar operacioj kiujn ni povas elfari sur tablo. Ekzistas pli ol tio. Ni povas fari pli ol tio, sed por niaj celoj, ni ĝenerale iranta esti uzanta nur kvar operations-- insert, elektu, ĝisdatigi kaj forviŝi. Kaj vi povas verŝajne diveni intuicie kio ĉiuj kvar el tiuj aferojn. Sed ni iros en iom de detalo sur ĉiu. Do por celoj de ĉi tiu video, ni supozu ni havas la sekvaj du tabelojn en ununura datumbazo. Ni havas tablon nomita Uzantoj kiuj havas kvar columns-- ID nombro, uzantnomo, Pasvorto Kaj plena nomo. Kaj ni havas duan tablo en la sama datumbazo nomata Panjoj ke nur stokas informojn pri uzantonomon kaj patrinon. Do por ĉiuj ekzemploj en tiu video, ni esti uzanta tiun datumbazon kaj posta ĝisdatigojn al ĝi. Do diru ni volas aldoni informon al tablo. Tion la enigaĵo operacio faras. En klarigante ĉiujn tiujn ordonojn, mi tuj doni al vi ĝenerala skeleto uzi. Ĉar esence, la mendoj iras belaspektas similaj, ni nur tuj estos ŝanĝanta iomete malsamaj pecoj de informo fari malsamajn aĵojn kun la tablo. Do por INSERT, la skeleto aspektas ia kiel tiu. Ni volas enmeti en aparta tablo. Tiam ni havas malferman parentezo kaj listo de kolumnoj ke ni volas meti valorojn en. Fermi krampoj, la sekvaj valoroj, kaj tiam denove, ni listigas la valorojn ni volas meti en la tablo. Do ekzemplon de tiu estus la sekva. Mi volas enmeti en la tablo uzantoj la jenaj columns-- salutnomon, pasvorton, kaj fullname. Do nova vico kie mi estas metanta en tiuj tri kolumnoj kaj ni tuj metos en la valoroj Newman, USMAIL kaj Newman. Do en ĉi tiu kazo, mi estas metante la minuskla Newman en la salutnomo kolumno, la pasvorton USMAIL, kaj la plena nomo ĉefurbo N Newman en la fullname kolumno. Do jen kion la datumbazo aspektis kiel antaŭe. Jen kion la uzantoj tablo pinto similis antaŭ ni faris. Post ni ekzekuti tiu query, ni preni ĉi. Ni aldonis novan vicon al la tablo. Sed rimarki tiun unu aferon ke mi ne specifis, sed iel mi hvas valoro por, kiu estas tiu 12 ĉi tie. Mi ne diris mi volis metis ID nombro en tie. Mi volis meti uzantnomo, pasvorto fullname. Kaj mi faris tion, tio estas bone. Sed mi ankaŭ ricevis tiun 12. Kial mi ricevas ĉi 12? Nu, Ĝi rezultas ke kiam vi difinanta kolumnon kiu tuj estos viaj primara ŝlosilo, kiu estas kutime, kiel mi diris, IRU nombro. Ĝi ne estas ĉiam nepre fariĝos ID nombro, sed ĝi estas kutime bona ideo esti ia entjera valoro. Vi havas eblon en phpMyAdmin kiam vi kreas vian datumbazon aŭ via tablo agordi ke kolumno kiel auto pliigante. Kiu estas vere bona ideo kiam vi laboras kun primara tonalo, ĉar vi volas ĉiu valoro en tiu kolumno esti unika. Kaj se vi forgesos specifi ĝin por pli ol unu persono, vi nun havas situacion kie ke kolumno ne plu unika. Vi havas du truojn, do vi povas ne plu unike identigi column-- aŭ Vi ne plu povas unike identigi vicon bazita sur tiu kolumno. Ĝi perdis ĉiujn ĝiaj valoro kiel primara ŝlosilo. Do ŝajne, kion mi faris tie estas agordita la uzanto ID kolumno auto pliigo por ke ĉiu tempo mi aldonas informon al la tablo, ĝi aŭtomate donas al mi valoron por la primara ŝlosilo. Do mi neniam forgesas fari ĝin ĉar datumbazaj faros tion por mi. Do jen speco de agrabla. Kaj tiel tio estas kial ni preni 12 en tie, ĉar mi havas starigis tiun kolonon ĝis auto pliigo. Se mi aldonis iu alia Estus 13, se mi aldonis iu alia gxin estus 14, kaj tiel plu. Do ni nur faru unu pli inserción. Ni enmeti en la panjoj tablo, en Aparte, la salutnomo kaj patrino kolumno, la valoroj Kramer kaj Babs Kramer. Kaj do ni havis ĉi antaŭe. Post ni ekzekuti tiu SQL query, ni havas tion. Ni aldonis Kramer kaj Babs Kramer al la panjoj tablo. Do jen enmeto. ELEKTU estas kion ni uzas por ĉerpi informoj el la tablo. Do jen kiel ni preni informojn el la datumbazo. Kaj tiel ELEKTU komandoj estas iranta esti tre ofte uzita en programado. La ĝenerala framework-- la ĝenerala skeleto aspektas jene. Elektu aron de kolumnoj de tablo, kaj tiam laŭvole vi povas specifi condition-- aŭ kion ni tipe nomas predikato, estas kutime la termino ni uzas en SQL. Sed estas esence kion aparta vicoj vi volas ricevi. Se vi volas, anstataŭ ricevi ĉio, mallarĝigi ĝin malsupren, ĉi tiu estas kie vi farus tion. Kaj tiam laŭvole, vi povas ankaŭ ordigi per aparta kolumno. Do eble vi volas havi aĵojn ordo alfabete bazita sur unu kolumno aŭ alfabete bazita sur alia. Denove, KIE kaj ordo de estas laŭvolaj. Sed ili verŝajne estus useful-- aparte KIE estos utila al mallarĝigi malsupren tiel vi ne akiri via tuta datumbazo dorso kaj devas prilabori ĝin, vi simple akiri dispecigitan ke vi zorgas pri. Do ekzemple, mi eble volas elekti ID nombro kaj fullname de uzantoj. Do kio povus tiu aspektas? Do jen mia uzantoj tablo. Mi volas elekti idnum kaj fullname de uzantoj. Kion mi ricevos? Mi tuj akiri ĉi. Mi ne mallarĝigi ĝin malsupren, do mi estas atingi la ID nombro por ĉiu vico kaj mi ricevas la plenan nomon de ĉiu vico. BONE. Kio se mi volas elekti pasvorton de uzantoj WHERE-- tiel nun Mi aldonante kondiĉo, predicate-- kie idnum estas malpli ol 12. Do jen mia datumbazo denove, miaj uzantoj tablo supre. Kion mi ricevos, se mi volas elektu tiun informon, la pasvorto, kie uzanto ID aŭ idnum estas malpli ol 12? Mi tuj akiri tiun informo reen, dekstra? Okazas ke idnum estas 10, malpli ol 12, ID nombro 11 malpli ol 12. Mi ricevas la pasvorton por tiuj vicoj. Tion mi petis. Kio pri tio? Kio se mi volas elekti stelon el la panjoj tablo kie salutnomo egalas Jerry? OK, unuaranga stelo estas la speciala ia sovaĝa karto tn ke ni uzos por akiri ĉion. Do ili diras unuaranga salutnomo komo patrino, kiu pasis al esti la sola du kolumnoj de ĉi tablo Mi povas nur elekti stelo kaj akiri ĉion kie la salutnomo egalas Jerry. Kaj tiel tio estas kion mi alportus se mi faris tiu aparta demando. Nun, datumbazoj grandaj ĉar ili permesas nin organizi informon eble iom pli efike ol ni alie. Ni ne nepre enteni ĉiun rilatan peco de informo pri uzanto en la sama tablo. Ni havis du tabeloj tie. Ni devas gardi ĉies patrino nomon kaj eble ni ne havas socian sekurecon numeron, ni havas lian daton de naskiĝo. Tio ne ĉiam bezonas esti en la sama tablo. Tiel longe kiel ni povas difini interrilatoj inter la tables-- kaj tio estas kie tiu interrilata datumbaza termino ia venas en play-- tiel longe kiel ni povas difini rilatoj inter la tabloj, ni povas ordigi de compartmentalize aŭ abstraktaj aferoj vojon, kie ni nur havas la vere grava informo ni zorgas pri en la uzanto tablo. Kaj tiam ni havas helpaj informoj aŭ ekstra informo en aliaj tabloj ke ni povas konekti al la ĉefa uzantoj tablo en aparta maniero. Do jen ni havas tiujn du tabloj, sed ekzistas rilato inter ili, dekstra? Ŝajnas kiel uzantonomo povus esti io kiu ekzistas en komuna inter tiuj du malsamaj tabloj. Do kio se ni nun havas situacio kie ni volas akiri uzanto plena nomo de la uzanto tablo, kaj ilia patrino nomon de la patrino tablo? Ni ne havas manieron por akiri ke kiel ĝi staras, dekstra? Mankas simpla tablo, kiu enhavas ambaŭ plenan nomon kaj patrina nomo. Ni ne havas tiun eblon de kion ni vidis ĝis nun. Kaj tial ni devas enkonduki la ideo de JOIN. Kaj aliĝas verŝajne la plej complex-- ĝi estas vere pli kompleksa operacio ni iras por raporti en la vídeo. Ili estas iom komplika, Sed unufoje vi akiras la pendi de ĝi, ili estas fakte ne tro malbona. Estas nur speciala kazo de unuaranga. Ni tuj elekti aron de kolumnoj de tabelo aliĝado en dua tablo sur iu predikato. En tiu kazo, pensu pri ĝi plaĉas this-- tablo estas unu cirklo super tie, tablo du estas alia cirklo super tie. Kaj ke predikato parto en la mezo, estas ia kiel se vi pensas pri kiel Venn diagramo, kion ĉu ili havas komune? Ni volas ligi tiujn du tabloj bazita sur kion ili havas en komuna kaj krei tiun hipoteza tablo kiu estas la fandado de la du kune. Do ni vidos ĉi tion en Ekzemple kaj eble tio helpos malbari ĝin iomete. Do eble vi volas elekti user.fullname kaj moms.mother de uzantoj enirado en la panjoj tablo en ĉiu situacio kie la salutnomo kolumno estas la sama inter ili. Kaj ĉi estas nova sintakso tie, ĉi uzanto. kaj panjoj .. Se mi faras multoblajn tablojn kune, mi povas specifi tablo. Mi povas distingi precipe sur ke sur ĉe la tre malsupra tie. Mi povas distingi la uzantnomon kolumno de la uzantoj tablo el la salutnomo kolumno de la panjoj tablo, kiuj estas otherwise-- se ni nur diris salutnomo egalas uzantonomo, kiu ne vere nenion signifas. Ni volas fari ĝin kie ili egalas. Do mi povas entajpi la tablo kaj la kolumno nomo en kazo de situacio kie estus neklara kio mi parolas. Do jen ĉio mi faras estas mi dirante tiun kolumnon el tiu tablo, kaj estante tre eksplicita. Do denove, mi elektanta la plenan nomon kaj la patrino nomon el la uzantoj tablo kunligitaj kun la panjoj tablo en ĉiu situacio kie dividas ke column-- ili dividas tiun uzantnomon nocio. Do jen la tabloj ni havis antaŭe. Jen la stato de nia datumbazo kiel ĝi ekzistas nun. La informo ni ĉerpante Estas ĉi komence. Tiu estas la nova tablo ni iras krei kombinante tiujn kune. Kaj rimarki ni ne reliefigante Newman vico en la uzanto tablo, kaj ni ne reliefigante Kramer la vico en la panjoj tablo ĉar nek ekzistas en ambaŭ sets-- en ambaŭ tabuloj. La sola informo kiu estas en komuna inter ili estas Jerry estas en ambaŭ tabloj kaj gcostanza estas en ambaŭ tabuloj. Kaj tial kiam ni faros la SQL JOIN, kion ni get-- kaj ni faras reale preni ĉi. Ĝi estas speco de portempa variablo. Estas kiel hipoteza kunfandiĝo de la du tabloj. Ni reale preni ion kiel tiun, kie ni kunfandis kune la tabloj sur la informon ke ili havas komune. Do rimarki ke users.username kaj moms.username kolumno, ĝi estas precize la sama. Tio estis la informo ke estis konsekvenca de la uzantoj tablo kaj la panjoj tablo. Kaj do ni kunfandis ilin kune. Ni forĵetitaj Kramer ĉar li ne ekzistis en la uzantoj tablo, kaj ni forĵetitaj Newman, ĉar Li ne ekzistis en la panjoj tablo. Do tiu estas la hipoteza fuzio uzante la JOIN operacio de ELEKTU. Kaj poste ni atendis la uzanto plenan nomon kaj la uzanto patrino, kaj jen la informo ke ni akirus el la entute query ke ni faris kun ELEKTU. Do ni eniris la tabloj kune kaj ni ĉerpas tiujn du kolumnoj, kaj do tio estas kion ni akirus. Sed SQL kunigas ia komplika. Vi probable ne faros ilin tro da, sed ĵus havas iun ideon de la skeleto ke vi povis uzi kunfandi du tabloj kune se vi bezonis. La lasta du estas iom simpla Mi promesas. Do ĝisdatigi, ni povas uzi UPDATE ŝanĝi informon en tabulo. La ĝenerala formato estas UPDATE iuj tablo, metis iujn kolumno al iu valoro KIE iu predikato estas kontentigita. Do ekzemple, ni povus voli ĝisdatigi la uzantoj tablo ekbruligis la pasvorton al Yada Yada, kie la ID nombro estas 10. Do ĉi-kaze, ni estas ĝisdatiganta la uzantoj tablo. La ID nombro estas 10 por tiu unua vico tien, kaj ni volas ĝisdatigi la pasvorton por Yada Yada. Kaj por ke-a kio okazos. Estas bela simpla, ĉu ne? Estas nur tre simplajn modifon al la tablo. DELETE estas la operacio ni kutimis forigi informojn de tablo. DELETE FROM tablo KIE iu predikato estas kontentigita. Ni volas forviŝi el la uzantoj tablo ekzemple kie la uzantnomo estas Newman. Vi povas probable diveni kio okazas al okazi tie post ni ekzekuti tiu SQLa query, Newman iris de la tablo. Do ĉiuj tiuj operacioj, kiel mi diris, Estas tre facila fari en phpMyAdmin. Ĝi estas tre uzanto amika interfaco. Sed ĝi postulas manlibro penado. Ni ne volas dungi manlibro penado. Ni volas niajn programojn al Faru por ni, ĉu ne? Do ni volus fari ĉi programmatically. Ni volas korpigi SQL kaj havas ion alian fari tion por ni. Kion ni vidis ke permesas nin al programmatically fari ion? Ni vidis PHP, dekstra? Ĝi enkondukas iujn dinamismo en niajn programojn. Kaj tiel feliĉe, SQL kaj PHP ludas tre bele kune. Ekzistas funkcio en PHP nomata query, kiu povas esti uzita. Kaj vi povas pasi kiel la parametro aŭ la argumento konsulti SQL query ke Vi ŝatus ekzekuti. Kaj PHP faros por vi. Do post vi konektita al via datumbazo per PHP, ekzistas du antaŭbalotoj vi fari tion. Estas io nomita MySQLi kaj iu nomita PDO. Ni ne iros en grandegan kvanto detalon tie. En CS50 ni uzas PDO. Post vi konektita por via datumbazo, vi tiam povas fari konsultojn via datumbazo aprobante la demandoj kiel argumentoj al PHP funkcioj. Kaj kiam vi faros tion, vi stoki la Rezulto starigis en asocieca tabelo. Kaj ni scipovas labori kun asociaj tabeloj en PHP. Do mi povus diri ion kiel this-- $ results-- tiu estas en PHP-- egalas mendo. Kaj poste ene de la query funkcio kiu argumento ke mi pasante por konsulti kiu aspektas kiel SQL. Kaj fakte tiu estas SQL. Jen la query string ke mi volus plaĉas ekzekuti sur mia datumbazo. Kaj tial en ruĝa, ĉi tiu estas PHP. Jen SQLa ke mi estas integrante en PHP per fari ĝi la argumento al la konsulto funkcio. Mi volas elekti fullname el uzantoj kie ID nombro egalas 10. Kaj tiam eble post mi faris tion, Mi povus diri ion kiel tion. Mi volas presi la mesaĝo Dankon pro ensalutadon. Kaj mi volas ĝin interpolate-- mi volas al interpoli $ rezultoj fullname. Kaj por ke-a kiel mi laboras kun tiu asocieca tabelo kiu mi reiris. $ rezultoj fullname volus esence fini presi el, dankon pro ensalutadon, Jerry Seinfeld. Tio estis la plena nomo kie idnum egalas 10. Kaj tial ĉiuj mi faras estas mi now-- mi stokitaj mia konsulto, la rezultoj de mia query kaj rezultojn en asocieca tabelo, kaj fullname estas la nomo de la kolumno mi komencis esti por. Do jen mia ŝlosilo en la rezultoj asocieca tabelo kiu mi volas. Do Dankon pro ensalutadon, $ rezultoj, fullname presos, temas juste inter tiuj buklaj krampoj, Jerry Seinfeld. Kaj mi ŝatos presi la mesaĝo Dankon pro ensalutanta Jerry Seinfeld. Nun, ni probable ne volas forte kodo tiaĵojn en, dekstra? Ni volus fari ion kiel presaĵo f, kie ni povas anstataŭigi kaj eble kolekti malsamajn informojn, aŭ eble havas la konsulto procezo malsamajn informojn. Kaj tiel query, la konsulto funkcio havas ĉi nocio de speco de anstataŭigoj tre simila al presi f procentoj s kaj procento c, estas demandosignojn. Kaj ni povas uzi demando markoj tre analoge presi f al anstataŭanto variabloj. Do eble via uzanto ensalutinta antaŭe, kaj vi savis iliajn uzanto ID nombro en $ _SESSION de PHP súper suma en la ŝlosilo ID. Do eble post ili ensalutinta, vi fiksis $ _SESSION ID egalas 10, extrapolar de la ekzemplo ni nur vidis duan antaŭe. Kaj tial kiam ni efektive ekzekuti tiun konsulti la rezultojn nun, ĝi konektas en 10, aŭ kio ajn la $ _SESSION ID valoro estas. Kaj tial permesas al ni esti iom pli dinamika. Ni ne malfacile kodigo aferoj en anymore. Ni savanta informo ie kaj tiam ni povas uzi tiun informon denove al ia ĝeneraligi kion ni volas fari, kaj nur ŝtopi-en kaj ŝanĝo la konduto de nia paĝo surbaze de kio la uzanto ID nombro fakte estas post ili is ensalutinta. Ĝi estas ankaŭ ebla, kvankam, ke via rezultoj fiksita povus konsisti el multoblaj vicoj. En kiu kazo, Vi havas tabelo de arrays-- tabelo de asociaj tabeloj. Kaj vi devas nur persisti tra ĝi. Kaj ni scias kiel persisti tra tabelo en PHP, ĝuste? Do jen probable la plej kompleksa afero ni vidis ĝis nun. Ĝi efektive integriĝas tri lingvoj kune. Tie en ruĝa, ĉi tiu estas iom da HTML. Mi ŝajne starting-- ĉi estas fragmento de iu HTML kion mi havas. Mi komencas novan alineon ke diras la panjoj de TV Seinfeld. Kaj tiam tuj poste Mi komencas tablo. Kaj tuj poste, mi havi iun PHP, dekstra? Mi havas ĉiujn ĉi PHP kodo tie. Mi ŝajne iranta fari mendo. Kaj fari la konsulto, mi tuj esti uzante ELEKTU patrinoj EL panjoj. Do tiu estas getting-- ĉi estas SQL. Do la la blua estas SQL. La ruĝa ni vidis duan tempoj estis HTML. Kaj la verda tie estas PHP. Do mi faras query al mia datumbazo, mi estas elektanta ĉiujn de la patrinoj en la panjoj tablo. Ne nur malvastigante gxin malsupren al aparta vico, mi demandas por ĉiuj el ili. Tiam mi kontrolu se rezulto ne egalas egalas malvera. Tio estas nur mia maniero de kontrolanta speco de se rezultoj estas ne egala al nula, ke ni vidus c ekzemple. Esence tiu estas ĝuste kontrolanta fari certas ke ĝi efektive akiris datumojn reen. Ĉar mi ne volas komenci impreso eksteren datumoj se mi ne ricevis neniun informon. Tiam por ĉiu rezultoj kiel rezulto la foreach sintakso de PHP, ĉiuj mi faras estas presi el $ rezulto patrinoj. Kaj tial mi iros akiri aron de ĉiuj patrinoj de each-- ĝi estas tabelo de asocieca arrays-- kaj mi presi el ĉiu kiel ĝia propra vico de tablo. Kaj tio estas vere bela tre ĉiuj estas al ĝi. Mi scias ke estas iom iom okazas tie en ĉi lasta ekzemplo kun tabeloj de arrays-- arrays de asociaj tabeloj. Sed ĝi ja nur kuiru malsupren en SQL por fari query, kutime elektante post ni jam metis informojn en la tablon, kaj tiam simple tirante ĝin. Kaj tio estas ni povos tion en tiu konkreta kazo. Ni volus ĉerpi ĉiujn la individua patrinoj de la panjoj tablo. Ni akiris tuta aro de ili, kaj ni volas persisti tra kaj elprinti ĉiu. Do denove, ĉi tiu estas probable la plej komplika ekzemplo ni vidis ĉar ni miksante tri malsamaj lingvoj kune, ĉu ne? Denove, ni havas ĉi tiun HTML en ruĝa, miksita kun iuj SQL tie en blua, miksita kun iuj PHP verde. Sed ĉiuj tiuj ludi bele kune, ĝi estas nur demando de evoluantaj bonajn kutimojn tiel ke vi povas akiri ilin labori kune kiel vi volas. Kaj la sola maniero por vere fari tion estas praktiki, praktiko, praktiko. Mi Doug Lloyd, tiu estas CS50.