[CHWARAE CERDDORIAETH] DOUG LLOYD: Yn ein fideos ar bynciau datblygu ar y we, rydym wedi crybwyll y cysyniad o cronfa ddata ychydig o weithiau, dde? Felly, cronfa ddata rydych yn yn ôl pob tebyg yn gyfarwydd â oddi dweud gan ddefnyddio Microsoft Excel neu Taenlenni Google. Mae'n wir yn unig drefnus set o dablau, rhesi, a cholofnau. A chronfa ddata yw lle ein gwefan siopau gwybodaeth sy'n bwysig ar gyfer ein gwefan i weithio'n iawn. Unwaith eto, yn enghraifft wirioneddol gyffredin yma yn storio enwau defnyddwyr a chyfrineiriau mewn cronfa ddata, felly pan defnyddiwr yn mewngofnodi i mewn i'n gwefan, Gall y gronfa ddata yn cael ei holi i weld os yw'r defnyddiwr yn bodoli yn y gronfa ddata. Ac os ydynt, gwirio bod eu cyfrinair yn gywir. Ac os yw eu cyfrinair yn gywir, Yna gallwn ei roi iddynt beth bynnag dudalen maent yn gofyn. Felly, mae'n debyg eich bod, unwaith eto, cyfarwydd gyda'r syniad hwn o Excel neu Google Taenlenni. Mae gennym gronfeydd data, tablau, rhesi, a cholofnau. A dyna wir yn fath o'r set sylfaenol o chwalu hierarchaidd yma. Felly dyma taenlen Excel. Ac os ydych chi wedi agor hyn erioed neu raglen debyg arall eich bod yn gwybod bod y rhain yma rows-- 1, 2, 3, 4, 5, 6, 7. Mae'r rhain yn colofnau. Efallai i lawr yma, er bod efallai y byddwch Nid yw defnyddio'r nodwedd hon ofnadwy much-- 'N annhymerus' chwyddo in-- gennym syniad hwn o daflen. Felly efallai y taflenni hyn, os Rwyf yn ail yn ôl ac ymlaen, yn wahanol dablau sy'n yn bodoli yn fy gronfa ddata. Ac os byddwn yn parhau yr enghraifft i gyd y ffordd, enw'r gronfa ddata hon yw Llyfr 1. Efallai gennyf Llyfr 2 a 3 Llyfr. Felly pob ffeil Excel yn cronfa ddata, pob dalen yn dabl, ac y tu mewn o bob bwrdd gen i syniad hwn o rhesi a cholofnau. Felly, sut ydw i'n gweithio gyda gronfa ddata hon? Sut mae cael gwybodaeth ohoni? Wel mae 'na iaith o'r enw SQL-- yr wyf fel arfer dim ond galw Sequel-- ac mae'n sefyll ar gyfer y Iaith Ymholiad Strwythuredig. Ac mae'n iaith raglennu, ond mae'n raglennu cyfyngedig yn deg iaith. Dyw hi ddim yn hollol fel eraill ein bod wedi gweithio gyda. Ond diben hwn iaith rhaglennu yw holi cronfa ddata, i gofyn gwybodaeth o gronfa ddata, ddod o hyd i wybodaeth mewn cronfa ddata, ac yn y blaen. Rydym hefyd, yn CS50-- ac mae'n iawn llwyfan cyffredin, fe'i gelwir MySQL. Dyna beth rydym yn ei ddefnyddio yn y cwrs. Mae'n ffynhonnell agored llwyfan sy'n sefydlu yn database-- berthynol hyn a elwir yn cronfa ddata, yn effeithiol. Nid oes angen i ni gael i ormod o fanylder ar yr hyn cronfa ddata berthynol yn. Ond mae'r iaith SQL yw fedrus iawn wrth weithio gyda MySQL ac eraill tebyg arddulliau o gronfeydd data perthynol. Ac mae llawer o osodiadau MySQL yn dod â rhywbeth Gelwir phpMyAdmin, a oedd yn yn defnyddiwr graffigol interface-- yn GUI-- sy'n yn ei gwneud yn ychydig yn fwy gyfeillgar i weithredu defnyddiwr ymholiadau cronfa ddata, oherwydd nad yw cronfeydd data yn cael eu defnyddio yn unig gan rhaglenwyr uwch, dde? Weithiau mae yna busnesau bach hyn, ac ni allant fforddio llogi tîm o raglenwyr, ond mae angen iddynt i storio gwybodaeth mewn cronfa ddata. Rhywbeth fel phpMyAdmin ei gwneud yn hawdd iawn i rywun sydd byth wedi rhaglennu o'r blaen i codi a dod yn gyfarwydd â sut i weithio gyda chronfa ddata. Y broblem yw, phpMyAdmin, tra mae'n arf gwych ar gyfer dysgu am y cronfeydd data, mae'n llaw. Rydych yn mynd i gael i logio i mewn ac redeg gorchmynion a math pethau mewn llaw. Ac fel y gwyddom oddi wrth ein enghraifft ar raglenni gwe PHP, gorfod gwneud â llaw pethau ar ein gwefan, os ydym am gael ddeinamig, ymatebol gweithredol gwefan, efallai nad yw'r dull gorau. Hoffem i ddod o hyd i ffordd i efallai awtomeiddio'r hyn rywsut. A bydd SQL yn ein galluogi i wneud hyn. Felly, pan fyddwn ni'n mynd i dechrau gweithio gyda SQL, angen i ni gael yn gyntaf cronfa ddata i weithio gyda nhw. Creu cronfa ddata yn cael ei rhywbeth yr ydych yn ôl pob tebyg bydd yn gwneud yn phpMyAdmin, oherwydd bydd dim ond angen i chi ei wneud hynny unwaith, a'r cystrawen ar gyfer gwneud hynny yn llawer symlach. Mae'n llawer haws i wneud hynny mewn rhyngwyneb defnyddiwr graffig na deipio allan fel gorchymyn. Gall y gorchymyn yn cael ychydig o feichus. Yn yr un modd, gan greu tabl gall cael cryn dipyn feichus hefyd. Ac felly pethau fel creu cronfa ddata a chreu bwrdd, yr ydych chi'n yn ôl pob tebyg dim ond yn mynd i wneud once-- unwaith y bwrdd, unwaith y database-- mae'n iawn i wneud hynny mewn rhyngwyneb graffigol. Yn y broses o creu tabl, byddwch yn rhaid hefyd i bennu pob un o'r colofnau a fydd yn y tabl hwnnw. Pa fath o wybodaeth yn ei wneud ydych am i storio yn y tabl? Efallai enw a dyddiad geni y defnyddiwr, cyfrinair, rhif adnabod defnyddiwr, ac efallai ddinas a'r wladwriaeth, dde? Ac am bob tro y byddwn eisiau ychwanegu defnyddiwr at y gronfa ddata, rydym yn awyddus i gael pob un o'r chwe o ddarnau hynny o wybodaeth. Ac rydym yn gwneud hynny drwy ychwanegu rhesi at y bwrdd. Felly rydym yn gyntaf creu cronfa ddata, Yna, rydym yn creu tabl. Fel rhan o greu tabl, gofynnir i ni i nodi pob colofn sy'n byddem yn hoffi yn y tabl hwn. Ac yna wrth i ni ddechrau i ychwanegu gwybodaeth i'r gronfa ddata ac yn holi cronfa ddata mwy generally-- nid dim ond ychwanegu, ond popeth arall yr ydym yn do-- byddwn yn delio gyda rhesi o'r tabl, sy'n un Gwybodaeth defnyddiwr o'r set gyfan. Felly pob colofn SQL yn gallu gadw data o fath data penodol. Felly, rydym yn fath o dileu hwn syniad o fathau o ddata yn PHP, ond maent yn ôl yma yn SQL. Ac mae llawer o fathau o ddata. Dyma dim ond 20 ohonyn nhw, ond Nid yw hyd yn oed pob un ohonynt. Felly mae gennym syniadau fel INTs-- Integers-- mae'n debyg yn gwybod y gall y golofn hon ddal cyfanrifau. Ac mae yna amrywiadau thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Efallai nad ydym bob amser yn angen pedair brathiadau. Efallai mae angen wyth bytes, ac felly rydym yn yn gallu defnyddio amrywiadau hyn ar gyfanrifau i fod ychydig yn fwy o le effeithlon. Gallwn wneud rhifau degol, rydym yn yn gallu ei wneud rhifau pwynt arnawf. Mae'r rhain yn eithaf tebyg. Mae rhai gwahaniaethau, ac os byddech yn hoffi edrych ar y Math SQL o'r canllaw, yr ydych gallu gweld yr hyn y mae'r bychan gwahaniaethau rhyngddynt. Efallai rydym am i storio gwybodaeth am ddyddiad ac amser. Efallai ein bod yn cadw golwg ar pan ymunodd y defnyddiwr ein gwefan, ac felly efallai yr ydym am i gael colofn sy'n amser ddyddiad neu stamp amser sy'n yn dangos pan fydd y defnyddiwr mewn gwirionedd ymuno. Gallwn wneud geometries a linestrings. Mae hyn mewn gwirionedd 'n bert oera. Gallem mapio ardal ddaearyddol gan ddefnyddio GIS cyfesurynnau i blotio allan ardal. Gall Felly mewn gwirionedd yn storio fath gwybodaeth mewn colofn SQL. TEXT yn unig yw smotiau mawr o destun, efallai. ENUMs yn fath o ddiddorol. Maent mewn gwirionedd yn bodoli yn C. Nid ydym yn ei wneud siarad am nhw oherwydd dydyn nhw ddim ofnadwy a ddefnyddir yn gyffredin, o leiaf CS50. Ond ei fod yn fath o ddata wedi'u rhifo, a oedd yn yn gallu cynnal gwerthoedd cyfyngedig. Ceir enghraifft dda iawn fyddai yma yn i greu enum lle mae'r saith Gwerthoedd posib yw Dydd Sul, Dydd Llun, Dydd Mawrth, Dydd Mercher, Dydd Iau, Dydd Gwener, Dydd Sadwrn, dde? Bod Diwrnod math data o Nid yw wythnos yn bodoli, ond gallem greu Math data wedi'u rhifo o'r fath y gall y golofn dim ond byth yn dal un o'r rhai a saith o werthoedd posibl. Rydym wedi rhifo pob o'r gwerthoedd posib. Yna, mae gennym CHAR a VARCHAR, ac rwyf wedi lliwio rhain gwyrdd oherwydd ein bod yn mewn gwirionedd mynd i gymryd eiliad i siarad am y gwahaniaeth rhwng y ddau beth. Felly CHAR, yn wahanol C lle CHAR yn gymeriad unigol, mewn SQL a CHAR yn cyfeirio at llinyn hyd penodol. A phan fyddwn yn creu hyn colofn, yr ydym mewn gwirionedd Gall pennu hyd y llinyn. Felly, yn yr enghraifft hon, efallai y byddwn yn dweud CHAR (10). Mae hynny'n golygu bod pob elfen yn y golofn honno bydd yn cynnwys 10 o bytes o wybodaeth. Dim mwy, dim llai. Felly, os ydym yn ceisio rhoi mewn 15 bit neu elfen 15 cymeriad neu werth mewn i golofn hon, rydym yn unig yn cael y 10 cyntaf. Os byddwn yn ei roi yn y ddau gwerth hir gymeriad, rydym yn mynd i gael y ddau cymeriadau, ac yna wyth o brathiadau null. Byth Byddwn yn fwy effeithlon na hynny. Mae VARCHAR yn fath o fel ein syniad o gyfres ein bod yn gyfarwydd gyda o C neu gan PHP. Mae'n llinyn hyd amrywiol. A phan fyddwch yn creu golofn hon, 'ch jyst pennu uchafswm y darnau posibl. Felly efallai 99, neu yn gyffredin 255. Byddai hynny'n uchafswm hyd. Ac felly os ydym yn cadw 15 llinyn cymeriad, byddem yn defnyddio 15 o bytes, efallai 16 bytes gyfer y terminator null. Os byddwn yn storio tri llinyn cymeriad, byddem yn defnyddio tair neu bedair bytes. Ond ni fyddem yn defnyddio'r 99 llawn. Felly pam y byddai'n rhaid ddau? Wel, os bydd angen i chyfrif i maes sut rhywbeth hir yw gyda VARCHAR, mae'n rhaid i ni fath o ailadrodd ar ei draws yn union fel y gwnaethom yn C a chyfrif i maes lle mae'n dod i ben. Tra os ydym yn gwybod bod popeth yn y golofn hon yw 10 bytes, efallai rydym yn gwybod y wybodaeth, gallwn neidio 10 bytes, 10 bytes, 10 bytes, 10 bytes, a bob amser yn dod o hyd i'r gan ddechrau y llinyn. Felly efallai y byddwn yn cael rhywfaint o lle gwastraffu gyda CHAR, ond efallai mae 'na masnach off o gael cyflymder yn well wrth lywio y gronfa ddata. Ond efallai rydym am i'r hyblygrwydd o VARCHAR yn hytrach na having-- Os yw ein CHAR Roedd 255, ond mae'r rhan fwyaf o'n defnyddwyr mai dim ond mewnbynnu tri neu bedwar bytes gwerth o wybodaeth neu dair neu bedair cymeriadau gwerth o wybodaeth. Ond mae rhai defnyddwyr yn defnyddio y cyfan 255, efallai Byddai VARCHAR yn fwy priodol yno. Mae'n fath o fasnach i ffwrdd, ac Yn gyffredinol, at ddibenion CS50, Nid oes angen i chi boeni gormod am p'un a ydych yn defnyddio CHAR neu VARCHAR. Ond yn y byd go iawn, y pethau hyn yn bwysig gan fod yr holl o'r colofnau hyn cymryd lle corfforol fel y cyfryw. A gofod ffisegol, yn y byd go iawn, yn dod ar bremiwm. Felly un ystyriaeth arall pan fyddwch yn adeiladu tabl yw i ddewis un golofn i fod yn hyn a elwir yn allwedd gynradd. Ac allwedd gynradd yn colofn lle mae pob gwerth unigol yn unigryw. Ac mae hynny'n golygu eich bod yn gallu hawdd ddewis un rhes yn unig drwy edrych ar yr allwedd gynradd y rhes. Felly, er enghraifft, eich bod yn gyffredinol, gyda defnyddwyr, nad ydych am ddau ddefnyddiwr sy'n yr un rhif adnabod defnyddiwr. Ac felly efallai bod gennych llawer o wybodaeth, ac efallai y gall dau ddefnyddiwr yn cael yr un name-- mae gennych John Smith a John Smith. Nid yw hynny'n reidrwydd yn broblem, oherwydd bod pobl yn lluosog yn y byd a enwir John Smith. Ond dim ond un rhif adnabod defnyddiwr gennym 10, un defnyddiwr rhif 11, 12, 13 adnabod. Nid oes gennym ddau ddefnyddiwr gyda'r un nifer, ac felly efallai rhifau enw defnyddiwr fyddai allwedd gynradd da. Nid oes gennym unrhyw ddyblygu, ac y gallwn yn awr yn unigryw nodi pob un rhes yn unig drwy edrych ar y golofn honno. Dewis allweddi cynradd yn gallu mewn gwirionedd gwneud gweithrediadau tabl dilynol yn llawer haws oherwydd gallwch trosoledd y ffaith bod rhai rhesi bydd yn unigryw, neu golofn penodol eich cronfa ddata neu dabl Bydd yn unigryw i godi rhesi penodol allan. Gallwch hefyd gael cynradd ar y cyd allweddol, y gallwch ddod o hyd i achlysur i'w defnyddio, sydd ychydig yn cyfuniad o ddwy golofn sy'n yn sicr o fod yn unigryw. Felly efallai gennych un colofn dyna Fel a brecwast, un golofn dyna un, dau, a thri, ond wnewch chi helpu dim ond erioed cael A1 sengl, un A2, ac yn y blaen ac yn y blaen. Ond efallai y bydd gennych B2, a C2, neu A1, A2, A3, A4. Felly, efallai y byddwch yn cael Fel lluosog, lluosog Brecwast, rhai lluosog, fesul dau lluosog, ond gallwch ond byth yn cael sengl A1, B2, C3, ac yn y blaen. Felly, fel y dywedais, SQL yn iaith raglennu, ond mae ganddo eirfa gyfyngedig deg. Dyw hi ddim yn hollol mor eang â C a PHP a ieithoedd eraill ein bod yn siarad yn y cwrs. Mae'n fwy verbose iaith na'r hyn rydym yn mynd i siarad am yn hyn fideo, gan fod yn y fideo hwn rydym yn mynd i siarad am pedwar gweithrediad ein bod yn Gall perfformio ar fwrdd. Mae mwy na hyn. Gallwn wneud mwy na hyn, ond ar gyfer ein dibenion, rydym yn gyffredinol yn mynd i gael ei ddefnyddio dim ond pedwar mewnosoder operations--, dewis, diweddaru, ac yn dileu. Ac mae'n debyg y gallwch ddyfalu reddfol beth pob un o'r pedwar o'r pethau hyn yn ei wneud. Ond byddwn yn mynd i mewn i ychydig o fanylion am bob un. Felly, ar gyfer ddibenion yr fideo, gadewch i ni dybio rydym wedi y canlynol dau tablau yn un gronfa ddata. Mae gennym fwrdd o'r enw Defnyddwyr sydd wedi pedwar columns-- rhif adnabod, enw defnyddiwr, cyfrinair, a enw llawn. Ac mae gennym ail tabl yn yr un gronfa ddata Gelwir Moms mai dim ond yn storio gwybodaeth am enw defnyddiwr a mam. Felly, ar gyfer pob un o'r enghreifftiau yn y fideo hwn, rydym yn chi helpu yn defnyddio'r gronfa ddata hon ac diweddariadau dilynol iddo. Felly, gadewch i ni ddweud ein bod am ychwanegu gwybodaeth at dabl. Dyna beth y mewnosodiad weithredu yn ei wneud. Wrth egluro pob un gorchmynion hyn, dw i'n mynd rhoi sgerbwd cyffredinol i chi ei ddefnyddio. Gan fod y bôn, mae'r ymholiadau yn mynd yn edrych 'n bert debyg, rydym yn jyst yn mynd i fod yn newid ychydig yn wahanol ddarnau o wybodaeth i wneud pethau gwahanol gyda'r bwrdd. Felly, ar gyfer RHOWCH, y sgerbwd yn edrych yn fath o fel hyn. Rydym am i fewnosod i mewn i tabl penodol. Yna, mae gennym parenthesis agor a rhestr o golofnau ein bod am roi gwerthoedd ar. Cromfachau Close, mae'r yn dilyn gwerthoedd, ac yna unwaith eto, rydym yn rhestru'r gwerthoedd rydym am roi yn y tabl. Felly yn enghraifft o hyn fyddai'r canlynol. Rwyf am i fewnosod yn y tabl defnyddwyr y columns-- canlynol enw defnyddiwr, cyfrinair, a fullname. Felly rhes newydd lle rydw i'n rhoi yn y rhai tair colofn ac rydym yn mynd i roi yn y gwerthoedd Newman, USMAIL, a Newman. Felly, yn yr achos hwn, rwy'n rhoi'r Newman llythrennau bach i mewn i'r golofn enw defnyddiwr, cyfrinair USMAIL, ac mae'r brifddinas enw llawn N Newman i mewn i'r golofn fullname. Felly, dyma beth y gronfa ddata yn edrych fel o'r blaen. Dyma beth y tabl ddefnyddwyr ar y top edrych fel cyn i ni yn gwneud hyn. Ar ôl i ni gyflawni'r hyn cwestiwn, rydym yn cael hyn. Rydym wedi ychwanegu rhes newydd at y bwrdd. Ond sylwi ar un peth hwn nad oeddwn yn pennu, ond rhywsut mae gen i werth amdano, sef hyn yn 12 iawn yma. Doeddwn i ddim yn dweud fy mod i eisiau rhoi rhif adnabod i mewn 'na. Roeddwn i eisiau rhoi enw defnyddiwr, cyfrinair, fullname. Ac yr wyf yn gwneud hynny, mae hynny'n iawn. Ond rwyf hefyd yn cael hyn yn 12. Pam wnes i gael hyn 12? Wel, mae'n ymddangos fod pan fyddwch yn diffinio colofn sydd yn mynd i fod yn eich allwedd gynradd, sydd fel arfer yn, fel y dywedais, mae nifer adnabod. Nid yw bob amser o reidrwydd mynd i fod yn rhif adnabod, ond fel arfer mae'n syniad da i cael rhyw fath o werth gyfanrif. Mae gennych opsiwn yn phpMyAdmin pan fyddwch yn creu eich cronfa ddata neu eich bwrdd i osod y colofn fel auto incrementing. Pa yn syniad da iawn pan eich bod yn gweithio gydag allwedd gynradd, oherwydd eich bod am i bob gwerth yn y golofn honno fod yn unigryw. Ac os byddwch yn anghofio i bennu am fwy nag un person, ydych yn awr mewn sefyllfa lle bellach yn y golofn honno yn unigryw. Mae gennych ddau bylchau, felly dim y gallwch hirach unigryw nodi column-- neu os ydych mwyach unigryw y gall nodi rhes yn seiliedig ar y golofn honno. Mae'n colli ei holl Gwerth fel allwedd gynradd. Ac felly yn ôl pob golwg yr hyn yr wyf wedi ei wneud yma wedi ei ffurfweddu y ID defnyddiwr golofn i auto gynyddiad fel bod pob tro rwy'n ychwanegu gwybodaeth at y bwrdd, bydd yn rhoi i mi yn awtomatig gwerth am yr allwedd gynradd. Felly, gallaf byth yn anghofio gwneud hynny oherwydd Bydd y gronfa ddata yn ei wneud i mi. Felly dyna fath o 'n glws. Ac felly dyna pam rydym yn cael 12 i mewn 'na, am fy mod i wedi gosod y golofn hyd at auto gynyddiad. Os byddaf yn ychwanegu rhywun arall byddai'n fod 13, os wyf yn ei llwytho rhywun arall byddai'n fod 14, ac yn y blaen. Felly gadewch i ni dim ond gwneud un gosod mwy. Byddwn yn mewnosod i mewn i'r tabl moms, yn arbennig, yr enw defnyddiwr a mam colofn, gwerthoedd Kramer a Babs Kramer. Ac felly rydym wedi cael hyn o'r blaen. Ar ôl i ni fod yn gweithredu SQL query, rydym wedi hyn. Rydym wedi ychwanegu Kramer a Babs Kramer at y tabl moms. Felly mae hynny'n fewnosod. SELECT yw'r hyn rydym yn ei ddefnyddio i echdynnu gwybodaeth o'r tabl. Felly dyma sut cawn gwybodaeth allan o'r gronfa ddata. A gorchmynion felly SELECT yn mynd i fod a ddefnyddir yn aml iawn mewn rhaglennu. Mae'r cyffredinol framework-- y sgerbwd cyffredinol yn edrych fel hyn. Dewiswch set o golofnau o tabl, ac yna optionally gallwch bennu condition-- neu yr hyn yr ydym fel arfer yn ei alw'n predicate, yw'r term a ddefnyddiwn yn SQL fel arfer. Ond yn y bôn yr hyn rhesi penodol yr ydych am gael. Os ydych eisiau, yn hytrach na chael popeth, cul i lawr, dyma lle y byddech yn gwneud hynny. Ac yna yn ddewisol, gallwch hefyd archebu dros y golofn penodol. Felly efallai y byddwch am gael pethau didoli yn nhrefn yr wyddor yn seiliedig ar un golofn neu yn seiliedig yn nhrefn yr wyddor ar un arall. Unwaith eto, BLE a GORCHYMYN GAN yn ddewisol. Ond byddant yn debygol o fod yn useful-- arbennig BLE bydd yn ddefnyddiol cul i lawr fel nad ydych yn ei wneud cael eich gronfa ddata gyfan yn ôl ac rhaid ei phrosesu, 'ch jyst cael y darnau ohono eich bod yn poeni am. Felly, er enghraifft, efallai y byddwn am i ddewis Rhif adnabod a fullname gan ddefnyddwyr. Felly beth allai hyn yn edrych? Felly dyma fy mwrdd ddefnyddwyr. Rwyf am i ddewis idnum a fullname gan ddefnyddwyr. Beth ydw i'n mynd i gael? Rydw i'n mynd i gael hyn. Doeddwn i ddim yn culhau i lawr, felly rwy'n cael y rhif adnabod ar gyfer pob rhes a dwi'n cael y llawn enw o bob rhes. IAWN. Beth os wyf am i ddewis cyfrinair gan ddefnyddwyr WHERE-- felly nawr Im 'yn ychwanegu amod, a predicate-- lle idnum yn llai na 12. Felly dyma fy cronfa ddata eto, fy mwrdd defnyddwyr y brig. Beth ydw i'n mynd i gael os wyf eisiau dewiswch y wybodaeth honno, y cyfrinair, lle ID defnyddiwr neu idnum yn llai na 12? Rydw i'n mynd i gael hyn gwybodaeth yn ôl, dde? Mae'n digwydd bod idnum yw 10, llai na 12, rhif ID 11 yn llai na 12. Im 'yn cael y cyfrinair ar gyfer rhesi hynny. Dyna beth yr wyf yn gofyn amdano. Beth am hyn? Beth os wyf am i ddewis seren gan tabl moms lle enw defnyddiwr hafal Jerry? OK, dewiswch seren yw'r arbennig math o gerdyn gwyllt hyn a elwir yn a ddefnyddiwn i gael popeth. Felly, maent yn ei ddweud dethol enw defnyddiwr mam coma, a oedd yn digwydd bod yr unig dwy golofn o'r tabl hwn, Gallaf dewiswch seren a chael popeth lle mae'r enw defnyddiwr hafal Jerry. Ac felly dyna beth fyddwn i'n ei gael os wyf yn gwneud hynny ymholiad penodol. Yn awr, cronfeydd data yn cael eu wych oherwydd eu bod yn caniatáu ni i drefnu gwybodaeth o bosibl ychydig yn fwy effeithlon nag yr ydym efallai fel arall. Nid ydym o reidrwydd i storio pob darn perthnasol o wybodaeth am ddefnyddiwr yn yr un tabl. Cawsom ddwy tablau yno. Mae angen i storio enw mam pawb yn, ac efallai nad oes gennym nawdd cymdeithasol Rhif, yr ydym wedi eu dyddiad geni. Nid yw bob amser angen hynny i fod yn yr un tabl. Cyn belled ag y gallwn ddiffinio berthynas rhwng y tables-- a dyna lle y perthynol tymor cronfa ddata fath o yn dod i mewn i play-- cyn belled ag y gallwn ddiffinio berthynas rhwng y byrddau, gallwn fath o yn adrannau neu bethau haniaethol ffordd, lle rydym yn unig yn cael y Gwybodaeth bwysig iawn yr ydym yn gofalu amdanynt yn nhabl y defnyddiwr. Ac yna mae gennym wybodaeth ategol neu wybodaeth ychwanegol mewn tablau eraill ein bod yn gallu cysylltu yn ôl at y prif tabl defnyddwyr mewn ffordd arbennig. Felly dyma ni gael y rhain ddau dabl, ond mae 'na berthynas rhyngddynt, iawn? Mae'n ymddangos fel enw defnyddiwr Efallai fod yn rhywbeth sy'n bodoli yn gyffredin rhwng y ddau tablau gwahanol. Felly beth os ydym yn awr wedi sefyllfa lle rydym am gael enw llawn y defnyddiwr o tabl y defnyddiwr, ac mae eu mam enwi o'r tabl fam? Nid oes gennym ffordd i gael hynny fel y mae, dde? Does dim tabl sengl sy'n cynnwys y ddau enw llawn ac enw'r fam. Nid oes gennym yr opsiwn hwnnw o'r hyn yr ydym wedi ei weld hyd yn hyn. Ac felly mae'n rhaid i ni gyflwyno y syniad o YMUNWCH. Ac yn ymuno yn ôl pob tebyg y complex-- fwyaf 'i' 'n sylweddol gweithrediad mwyaf cymhleth rydym yn mynd i siarad am yn y fideo. Maent yn ychydig yn gymhleth, ond ar ôl i chi gael y hongian ohono, eu bod mewn gwirionedd yn ddim yn rhy ddrwg. 'I' jyst yn achos arbennig o SELECT. Rydym yn mynd i ddewis set o colofnau o dabl ymuno mewn ail dabl ar rai predicate. Yn yr achos hwn, yn meddwl am y peth yn hoffi this-- tabl un yn un cylch dros yma, tabl dau yw cylch arall dros yma. A bod predicate rhan yn y canol, mae'n fath o fel os ydych yn meddwl am fel diagram Venn, beth oes ganddynt yn gyffredin? Rydym yn awyddus i gysylltu'r rhain ddau dabl seiliedig ar yr hyn sydd ganddynt yn gyffredin ac yn creu y tabl hwn ddamcaniaethol hynny yw uno'r ddau gyda'i gilydd. Felly byddwn yn gweld hyn mewn esiampl ac efallai y byddant yn helpu clirio i fyny ychydig bach. Felly efallai y byddwch am ddewis user.fullname a moms.mother gan ddefnyddwyr yn ymuno yn y tabl moms ym mhob sefyllfa lle y golofn enw defnyddiwr yr un fath rhyngddynt. Ac mae hyn yn newydd Syntax yma, defnyddiwr hwn. a moms .. Os ydw i'n gwneud tablau lluosog gyda'i gilydd, gallaf nodi tabl. Gallaf wahaniaethu mewn ar neilltuol hynny ymlaen yn y gwaelod iawn yno. Gallaf gwahaniaethu rhwng y enw defnyddiwr golofn y tabl defnyddiwr o'r golofn enw defnyddiwr y tabl moms, sy'n otherwise-- os ydym newydd ei ddweud enw defnyddiwr hafal enw defnyddiwr, nad yw'n wir golygu unrhyw beth. Rydym am wneud hynny lle maent yn cyd-fynd. Felly, yr wyf yn gallu nodi y tabl a'r enw colofn mewn achos o sefyllfa lle y byddai'n aneglur beth rwy'n siarad amdano. Felly dyna i gyd rwy'n ei wneud yna rwy'n gan ddweud y golofn hon o'r tabl hwn, a bod yn eglur iawn. Felly unwaith eto, rwy'n ddewis y enw llawn ac enw'r y fam o'r tabl ddefnyddwyr cysylltu â'i gilydd â'r tabl moms ym mhob sefyllfa lle maent yn rhannu y column-- maent yn rhannu y syniad enw defnyddiwr. Felly dyma y tablau oedd gennym o'r blaen. Mae hyn yn y cyflwr ein cronfa ddata fel y mae ar hyn o bryd. Mae'r wybodaeth rydym yn echdynnu yw hyn i ddechrau. Mae hyn yn y tabl newydd yr ydym yn mynd i greu cyfuno'r rhain at ei gilydd. Ac yn sylwi nid ydym yn tynnu sylw at Rhes Newman yn nhabl y defnyddiwr, ac nid ydym yn tynnu sylw at Rhes Kramer yn y tabl moms oherwydd nid un yn bodoli mewn y ddau sets-- yn y ddau tablau. Yr unig wybodaeth sydd yn gyffredin rhyngddynt yn Jerry yn y ddau tablau ac gcostanza yn y ddau tablau. Ac felly pan fyddwn yn gwneud y SQL YMUNO, yr hyn yr ydym get-- ac rydym yn ei wneud mewn gwirionedd yn cael hyn. Mae'n fath o newidyn dros dro. Mae'n debyg i damcaniaethol uno'r ddau dabl. Rydym mewn gwirionedd yn cael rhywbeth fel hyn, lle rydym wedi uno ynghyd y tablau ar y wybodaeth sydd ganddynt yn gyffredin. Felly sylwi bod users.username a colofn moms.username, 'i' yn union yr un fath. Dyna oedd y wybodaeth a yn gyson gan y defnyddwyr bwrdd ac mae'r tabl moms. Ac felly rydym yn cyfuno gyda'i gilydd. Rydym yn taflu Kramer am ei fod Nid oedd yn bodoli yn y tabl defnyddiwr, ac rydym yn taflu Newman, oherwydd nad oedd yn bodoli yn y tabl moms. Felly, mae hyn yn yr uno damcaniaethol gan ddefnyddio'r YMUNWCH gweithrediad SELECT. Ac yna roeddem yn chwilio am y enw llawn defnyddiwr a mam y defnyddiwr, ac felly mae hwn yn y wybodaeth y byddem yn ei gael gan yr ymholiad cyffredinol ein bod yn ei wneud gyda SELECT. Felly, rydym yn ymuno â'r tablau at ei gilydd ac rydym dynnu rhai ddwy golofn, ac felly dyna beth y byddem yn ei gael. Ond SQL yn ymuno â rhyw fath o gymhleth. Mae'n debyg na fydd yn gwneud gormod iddyn nhw, ond dim ond gael rhyw syniad o'r sgerbwd y gallech ei ddefnyddio i uno dau tablau gyda'i gilydd os ydych angen. Mae'r ddau olaf yn bit symlach wyf yn addo. Felly diweddaru, gallwn ddefnyddio DIWEDDARIAD i newid gwybodaeth mewn tabl. Mae'r fformat cyffredinol yw DIWEDDARIAD rhai bwrdd, SET rhywfaint colofn i ryw werth LLE mae rhai predicate yn fodlon. Felly, er enghraifft, efallai y byddwn eisiau i ddiweddaru'r tabl defnyddwyr ac yn gosod y cyfrinair i yada yada, lle mae nifer adnabod yw 10. Felly, yn yr achos hwn, rydym yn diweddaru'r tabl defnyddwyr. Mae'r rhif adnabod yn 10 am y rhes gyntaf yno, ac rydym am i ddiweddaru'r cyfrinair i yada yada. Ac felly dyna beth fyddai'n digwydd. Mae'n eithaf syml, dde? Mae'n dim ond syml iawn addasu at y bwrdd. DILEU yn y llawdriniaeth roeddem yn arfer tynnu gwybodaeth o dabl. DILEU O dabl BLE rhywfaint o predicate yn fodlon. Rydym eisiau dileu o'r tabl defnyddwyr er enghraifft lle bo'r enw defnyddiwr yw Newman. Mae'n debyg y gallwch ddyfalu beth sy'n mynd i ddigwydd yma ar ôl i ni yn gweithredu y SQL ymholiad, Newman wedi mynd o'r tabl. Felly yr holl weithrediadau hyn, fel yr wyf wedi dweud, yn hawdd iawn i'w wneud yn phpMyAdmin. Mae'n rhyngwyneb defnyddiwr gyfeillgar iawn. Ond mae'n gofyn am ymdrech llaw. Nid ydym am i gyflogi ymdrech llaw. Rydym am ein rhaglenni i gwneud hyn i ni, dde? Felly efallai y byddwn am ei wneud mae hyn programmatically. Rydym am i ymgorffori SQL a chael rhywbeth arall i wneud hyn ar ein rhan. Ond beth yr ydym wedi gweld sy'n caniatáu ni wneud rhywbeth programmatically? Rydym wedi gweld PHP, dde? Mae'n cyflwyno rhai egni yn ein rhaglenni. Ac felly yn ffodus, SQL a PHP yn chwarae 'n glws iawn gyda'i gilydd. Mae 'na swyddogaeth yn PHP Gelwir ymholiad, y gellir eu defnyddio. A gallwch basio fel y paramedr neu'r ddadl holi ymholiad SQL sy'n hoffech i weithredu. A bydd PHP yn gwneud hynny ar eich rhan. Felly, ar ôl i chi gysylltu at eich cronfa ddata gyda PHP, mae dwy ysgol gynradd i wneud hyn. Mae mysqli rhywbeth o'r enw a rhywbeth o'r enw PDO. Ni fyddwn yn mynd i mewn i enfawr swm fanwl yno. Yn CS50 rydym yn defnyddio PDO. Ar ôl i chi cysylltu at eich cronfa ddata, chi Yna gall wneud ymholiadau eich cronfa ddata drwy basio y cwestiynau fel dadleuon â swyddogaethau PHP. A phan fyddwch yn gwneud hynny, byddwch yn storio'r cyfres canlyniadau mewn amrywiaeth cysylltiadol. Ac rydym yn gwybod sut i weithio gyda araeau cysylltiadol yn PHP. Felly, gallwn ddweud rhywbeth fel this-- $ results-- mae hyn yn PHP-- hafal ymholiad. Ac yna tu mewn i'r swyddogaeth ymholiad ddadl honno fy mod i'n pasio i ymholiad sy'n edrych fel SQL. Ac yn wir sydd yn SQL. Dyna y llinyn ymholiad fy mod byddai yn hoffi i weithredu ar fy gronfa ddata. Ac felly mewn coch, mae hyn yn PHP. Mae hyn yn SQL fy mod integreiddio i mewn i PHP drwy wneud mae'n y ddadl i'r swyddogaeth ymholiad. Rwyf am i ddewis fullname o defnyddwyr lle mae rhif adnabod hafal 10. Ac yna efallai ar ôl fy mod wedi gwneud hynny, Efallai fy mod yn dweud rhywbeth fel hyn. Rwyf am argraffu'r Neges Diolch am logio i mewn. Ac yr wyf am iddo interpolate-- Rwyf am i interpolate $ canlyniadau fullname. Ac felly dyna sut yr wyf yn gweithio gyda hynny arae cysylltiadol fy mod yn mynd yn ôl. Byddai $ fullname canlyniadau yn y bôn yn y pen draw argraffu, diolch am logio i mewn, Jerry Seinfeld. Dyna oedd yr enw llawn lle idnum hafal i 10. Ac felly i gyd fy mod yn gwneud yw fy mod yn now-- wyf storio fy ymholiad, canlyniadau fy ymholiad ac yn arwain at amrywiaeth cysylltiadol, ac fullname yw enw'r y golofn oeddwn yn ei gael am. Felly dyna fy allwedd yn y canlyniadau arae cysylltiadol yr wyf am. Felly Diolch am logio i mewn, $ canlyniadau, Bydd fullname argraffu, bydd yn ffon iawn yn rhwng y rhai cyrliog bresys, Jerry Seinfeld. A byddaf yn hoffi argraffu'r neges Diolch am logio i mewn Jerry Seinfeld. Nawr, nid ydym yn ôl pob tebyg yn dymuno caled cod pethau fel 'na i mewn, dde? Efallai y byddwn am wneud rhywbeth fel print f, lle y gallwn gymryd lle ac efallai casglu gwybodaeth wahanol, neu efallai yn cael y broses ymholiad gwybodaeth wahanol. Ac felly ymholiad, y swyddogaeth ymholiad wedi syniad hwn o fath o dirprwyon debyg iawn i argraffu f cant s ac y cant c, yn farciau cwestiwn. A gallwn ddefnyddio cwestiwn marciau analogously iawn i argraffu f at newidynnau eilydd. Felly efallai eich defnyddiwr wedi mewngofnodi gynharach, ac rydych yn arbed eu rhif adnabod defnyddiwr yn $ _session o PHP super byd-eang yn y ID allweddol. Felly, efallai ar ôl iddynt wedi logio i mewn, chi osod $ _session ID hafal 10, allosod o yr enghraifft rydym yn unig yn gweld eiliad yn ôl. Ac felly pan fyddwn mewn gwirionedd yn gweithredu Bydd yr ymholiad hwn mae'r canlyniadau yn awr, byddai'n plwg yn 10, neu beth bynnag y $ _session gwerth ID yw. Ac felly sy'n ein galluogi i fod ychydig yn fwy deinamig. Nid ydym yn codio pethau caled yn anymore. Rydym yn arbed gwybodaeth rhywle ac yna y gallwn ddefnyddio'r wybodaeth honno eto i math o cyffredinoli hyn yr ydym am ei wneud, a dim ond plug-in a newid ymddygiad ein dudalen seiliedig ar yr hyn rhif adnabod y defnyddiwr mewn gwirionedd ar ôl eu bod wedi mewngofnodi. Mae hefyd yn bosibl, fodd bynnag, bod eich canlyniadau a osodwyd Gallai gynnwys rhesi lluosog. Os felly, mae gennych amrywiaeth o arrays-- amrywiaeth o araeau cysylltiadol. A dim ond angen i chi ei ailadrodd drwyddo. Ac rydym yn gwybod sut i ailadrodd drwy amrywiaeth yn PHP, dde? Felly dyma yn ôl pob tebyg y mwyaf beth cymhleth yr ydym wedi ei weld hyd yn hyn. Mae'n mewn gwirionedd yn integreiddio tair iaith gyda'i gilydd. Yma yn goch, mae hyn yn rhywfaint o HTML. Im 'yn ôl pob golwg starting-- mae hyn yn snippet o ryw HTML sydd gennyf. Dwi'n dechrau paragraff newydd sy'n Dywed y moms o deledu Seinfeld. Ac yna yn syth ar ôl hynny Dwi'n dechrau tabl. Ac yna ar ôl hynny, yr wyf yn cael rhywfaint o PHP, dde? Mae gen i hyn i gyd cod PHP mewn 'na. Im 'yn ôl pob golwg yn mynd yn gwneud ymholiad. Ac i wneud yr ymholiad, dw i'n mynd i yn defnyddio famau SELECT O moms. Felly, mae hyn yn getting-- mae hyn yn SQL. Felly y mae'r glas yn SQL. Mae'r coch gwelsom eiliad yn ôl yn HTML. Ac mae'r gwyrdd yma yw PHP. Felly, fy mod yn gwneud ymholiad at fy cronfa ddata, rwy'n dewis pob un o'r mamau yn y tabl moms. Nid dim ond culhau i lawr i neilltuol rhes, rwy'n gofyn i bob un ohonynt. Yna mi gadarnhau a oes canlyniad yn Nid yw hafal hafal ffug. Mae hyn yn unig fy ffordd o wirio math o os nad yw canlyniadau yn hafal i null, y byddem yn gweld c er enghraifft. Yn y bôn mae hyn yn unig yw gwirio i wneud yn siŵr ei fod mewn gwirionedd yn cael y data yn ôl. Oherwydd nad wyf am ddechrau argraffu allan data os nad oeddwn yn cael unrhyw ddata. Yna, ar gyfer pob un canlyniadau o ganlyniad i'r cystrawen foreach o PHP, pob rydw i'n ei wneud yn argraffu $ canlyniad mamau. Ac felly yr wyf i'n mynd i gael set o bob un o'r mamau o each-- ei fod yn amrywiaeth o cysylltiadol arrays-- ac rwy'n argraffu pob un fel ei rhes hun o dabl. A dyna '' n sylweddol 'n bert llawer pawb mae iddo. Rwy'n gwybod bod yna ychydig bit digwydd yma yn yr enghraifft olaf gyda rhesi o arrays-- araeau o araeau cysylltiadol. Ond mae'n wir yn unig berwi i lawr yn y SQL i wneud ymholiad, fel arfer yn dewis ar ôl i ni i wedi eisoes rhoi gwybodaeth i mewn i'r bwrdd, ac yna dim ond tynnu allan. Ac mae hyn yn byddem yn tynnu ei allan yn yr achos penodol hwn. Byddem yn tynnu pob unigolyn mamau o'r tabl moms. Rydym yn cael set gyfan ohonynt, ac yr ydym yn eisiau ailadrodd drwy ac argraffu pob un. Felly unwaith eto, mae hyn yn ôl pob tebyg yr enghraifft fwyaf cymhleth rydym wedi gweld oherwydd ein bod yn cymysgu tri ieithoedd gwahanol at ei gilydd, dde? Unwaith eto, mae gennym HTML yma mewn coch, gymysg gyda rhai SQL yma mewn glas, gymysg gyda rhai PHP mewn gwyrdd. Ond mae pob un o'r rhain yn chwarae 'n glws at ei gilydd,' i ' dim ond mater o ddatblygu arferion da fel y gallwch ei gael iddynt weithio gyda'i gilydd y ffordd yr ydych ei eisiau. A'r unig ffordd i wneud iawn bod yw i ymarfer, ymarfer, ymarfer. Rwy'n Doug Lloyd, mae hyn yn CS50.