[MUSIC nagpe-play] DOUG LLOYD: Sa aming mga video sa mga paksa ng web development, nabanggit na namin ang konsepto ng isang database ng ilang beses, tama? Kaya ang isang database ikaw malamang na pamilyar sa mula sa sabihin gamit ang Microsoft Excel o Google Spreadsheets. Ito ay talagang lamang ng isang organisado set ng talahanayan, hilera, at mga haligi. At ang isang database ay kung saan sa aming mga tindahan website impormasyon na mahalaga para sa aming mga website upang gumana nang maayos. Muli, isang tunay na karaniwang halimbawa dito ay pag-iimbak ng mga username at password sa isang database, kaya na kapag isang tala sa aming website sa paggamit, maaaring query sa database upang makita kung umiiral ang user na sa database. At kung sila, check na ang kanilang password ay tama. At kung ang kanilang password ay tama, pagkatapos ay maaari naming bigyan ang mga ito sa kahit anong pahina sila ay humihiling. Kaya ikaw ay malamang na, muli, pamilyar sa ideya na ito mula sa Excel o Google Spreadsheets. Mayroon kaming mga database, mga talahanayan, hilera, at mga haligi. At iyan ay talagang uri sa mga pangunahing hanay ng hierarchical breakdown dito. Kaya narito ang isang Excel spreadsheet. At kung sakaling mo na binuksan ito o iba pang katulad na programa alam mo na ang mga ito dito ay rows-- 1, 2, 3, 4, 5, 6, 7. Ang mga ito ay mga haligi. Siguro down dito, kahit na ikaw ay maaaring hindi magamit ang tampok na masyado much-- Kukunin ko mag-zoom in-- kami ang ideya na ito ng isang sheet. Kaya siguro ang mga sheet, kung Ako kahaliling papunta at pabalik, mga iba't-ibang mga talahanayan na umiiral sa aking database. At kung patuloy naming ang mga halimbawa ng lahat ang paraan, ang pangalan ng database na ito ay Book 1. Siguro mayroon akong Book 2 at Book 3. Kaya bawat Excel file ay isang database, ang bawat sheet ay isang table, at sa loob ng bawat talahanayan mayroon akong ang ideya na ito ng mga hanay at haligi. Kaya paano mo ba akong makipagtulungan sa database na ito? Paano ako makakakuha ng impormasyon mula sa mga ito? Well mayroong isang wika na tinatawag SQL-- kung saan ako karaniwang tawag lamang Sequel-- at ito ay para sa mga Nakabalangkas na Query Wika. At ito ay isang programming language, ngunit ito ay isang medyo limitado programming wika. Ito ay hindi lubos tulad ng iba na kami ay nagtrabaho sa. Ngunit ang layunin ng mga ito programming language ay sa query ng database, upang humingi ng impormasyon ng isang database, maghanap ng impormasyon sa isang database, at iba pa. Kami rin, sa CS50-- at ito ay isang napaka karaniwang platform, ito ay tinatawag na MySQL. Iyon ay kung ano ang ginagamit namin sa kurso. Ito ay isang open source platform na nagtatatag isang tinatawag database-- pamanggit isang database, mabisa. Hindi namin kailangan upang makakuha ng sa masyadong maraming detalye sa kung ano ang isang pamanggit database ay. Ngunit ang wika SQL ay sanay ka na sa pagtatrabaho may MySQL at iba pang katulad estilo ng pamanggit database. At maraming mga pag-install ng MySQL sumama sa isang bagay tinatawag na phpMyAdmin, na ay isang graphical user interface-- isang GUI-- na gumagawa ito ng kaunti pa friendly na mag-execute user database ng mga tanong, dahil database ay hindi lamang ginagamit sa pamamagitan ng advanced na programmer, di ba? Minsan may mga mga maliliit na negosyo, at hindi nila kayang pag-upa ng isang koponan ng mga programmers, ngunit kailangan pa rin nila sa tindahan impormasyon sa isang database. Isang bagay tulad phpMyAdmin ginagawang mas madali para sa isang tao sino ang hindi kailanman program bago sa pick up at maging pamilyar sa kung paano upang gumana sa isang database. Ang problema ay, phpMyAdmin, habang ito ay isang hindi kapani-paniwala na tool para sa pag-aaral tungkol sa mga database na ito, ay manual. Ikaw ay pagpunta sa may upang mag-log sa ito at isakatuparan ang mga utos at uri bagay sa mano-mano. At bilang alam namin mula sa aming halimbawa sa PHP web programming, pagkakaroon upang mano-manong gawin mga bagay-bagay sa aming website, kung gusto namin ng isang dynamic, aktibong tumutugon website, marahil hindi ang pinakamahusay na diskarte. Nais naming mahanap ang isang paraan upang marahil automate na ito sa anumang paraan. At SQL ay magpapahintulot sa amin upang gawin ito. Kaya kapag kami ay pagpunta sa simulan ang nagtatrabaho sa SQL, kailangan muna naming magkaroon ng isang database upang gumana sa. Ang paglikha ng isang database ay isang bagay na ikaw ay malamang na ay gawin sa phpMyAdmin, dahil ikaw lamang ang kailangan upang gawin ito nang isang beses, at ang syntax para sa paggawa nito ay isang pulutong mas tapat. Ito ay isang pulutong mas madali upang gawin ito sa isang graphic user interface kaysa sa pag-type ito bilang isang command. Ang utos ay maaaring makakuha ng isang maliit na mahirap. Sa katulad na paraan, ang paglikha ng isang talahanayan na maaari makakuha ng isang lubos na bit pahirap rin. At kaya ang mga bagay tulad ng paglikha ng isang database at paglikha ng isang table, kung saan ikaw ay malamang lamang pagpunta sa gawin once-- isang beses sa bawat table, isang beses bawat database-- ito ay ang OK upang gawin iyon sa isang graphical interface. Sa proseso ng paglikha ng isang talahanayan, makakakita ka mayroon din upang tukuyin ang lahat ng mga haligi na iyon ay sa table. Anong uri ng impormasyon ang nais mong iimbak sa talahanayan? Siguro pangalan at petsa ng kapanganakan ng isang user, password, numero ng ID ng gumagamit, at marahil lungsod at estado, tama? At para sa bawat oras na nais namin na magdagdag ng isang user sa database, gusto naming makuha ang lahat ng anim ng mga piraso ng impormasyon. At gawin namin na sa pamamagitan ng pagdaragdag mga hilera sa talahanayan. Kaya namin ang unang bumuo ng isang database, pagkatapos ay gumawa kami ng isang table. Bilang bahagi ng paglikha isang table, kami ay nagtanong upang tukuyin ang bawat column na nais namin sa table na ito. At pagkatapos ay bilang namin simulan upang magdagdag ng impormasyon sa database at query sa karagdagang mga database generally-- hindi lamang pagdaragdag, ngunit lahat ng iba pa naming do-- kami ay magiging pakikitungo may mga hilera ng talahanayan, na kung saan ay isa impormasyon ng user mula sa buong set. Kaya ang bawat SQL column ay may kakayahang may hawak na data ng isang partikular na uri ng data. Kaya namin uri ng inalis ito ideya ng mga uri ng data sa PHP, ngunit ang mga ito ay bumalik dito sa SQL. At mayroong isang pulutong ng mga uri ng data. Narito ang 20 lamang sa mga ito, ngunit ito ay hindi kahit lahat ng mga ito. Kaya kami ay may mga ideya tulad INTs-- Integers-- marahil namin alam na ang hanay na ito ay maaaring humawak ng integer. At may mga pagkakaiba-iba thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Siguro hindi kami laging kailangan ng apat na kagat. Baka kailangan naming walong bytes, at gayon din kami maaaring gamitin ang mga pagkakaiba-iba sa integer upang maging isang bit mas maraming espasyo mahusay. Maaari naming gawin ang mga numero ng decimal, kami maaaring gawin lumulutang point numero. Ang mga ito ay medyo katulad. Mayroong ilang mga pagkakaiba, at kung gagawin mo nais na tingnan ang mga SQL uri ng gabay na ito, ikaw ay maaaring makita kung ano ang bahagyang pagkakaiba sa pagitan ng mga ito. Siguro gusto namin upang mag-imbak impormasyon tungkol sa petsa at oras. Siguro Pinananatili namin ang pagsubaybay ng kapag sumali ang user ng aming website, at kaya marahil gusto namin na magkaroon ng isang hanay na iyon ay isang oras na petsa o isang timestamp na nagpapahiwatig kapag ang user ay talagang naka-sign up. Maaari naming gawin geometries at linestrings. Ito ay talagang medyo cool. Maaari naming i-map ang isang heograpikal na lugar gamit GIS coordinate sa balangkas ng isang lugar. Kaya maaari aktwal na tindahan na uri ng mga impormasyon sa isang haligi SQL. TEXT ay higanteng blobs lang ng text, siguro. Enums ay uri ng kawili-wiling. Sila ang tunay na umiiral sa C. Hindi namin makipag-usap tungkol sa mga ito dahil sila ay hindi katakut-karaniwang ginagamit, hindi bababa sa CS50. Ngunit ito ay isang enumerated uri ng data, na kung saan ay may-hawak na limitado halaga. Ang isang talagang magandang halimbawa dito ay magiging upang lumikha ng isang enum kung saan ang pitong posibleng halaga ay Linggo, Lunes, Martes, Miyerkoles, Huwebes, Biyernes, Sabado, tama? Na uri ng data Araw ng Week ay hindi umiiral, ngunit kami ay maaaring lumikha ng isang inisa-isa na uri ng data tulad ng na haligi na maaari lamang kailanman humawak isa sa mga posibleng pitong mga halaga. Na inisa-isa namin ang lahat ng ng mga posibleng halaga. Pagkatapos kami ay may pansamantalang trabaho at VARCHAR, at na ako kulayan ang mga green dahil hindi namin talaga pagpunta sa tumagal ng pangalawang upang makipag-usap tungkol sa mga pagkakaiba pagitan ng dalawang mga bagay-bagay. Kaya pansamantalang trabaho, hindi tulad ng C kung saan Pansamantalang trabaho ay isang solong character, sa SQL isang pansamantalang trabaho ay tumutukoy sa isang nakapirming haba string. At kapag gumawa kami na ito column, namin talagang maaaring tukuyin ang haba ng string. Kaya sa halimbawang ito, maaari nating sabihin char (10). Ito ay nangangahulugan na ang bawat elemento ng hanay na iyon ay binubuo ng 10 bytes ng impormasyon. Walang labis, walang kulang. Kaya kung susubukan namin at ilagay sa isang 15 bit o isang element 15 na karakter o halaga sa hanay na ito, kami ay lamang makuha ang unang 10. Kung namin ilagay sa dalawang character ang haba ng halaga, kami ay pagpunta sa may dalawang character, at pagkatapos ay walong null kagat. Hindi namin kailanman maging mas mahusay kaysa sa na. Ang isang VARCHAR ay uri ng tulad ang aming paniwala ng isang string na kami ay pamilyar may mula sa C o mula sa PHP. Ito ay isang variable na haba string. At kapag ikaw ay lumikha ang hanay na ito, ikaw lamang tukuyin ang pinakamataas na posibleng mga haba. Kaya marahil 99, o karaniwang 255. Iyon ay ang maximum na haba. At kaya kung kami ay pag-iimbak 15 character na string, Gusto naming gamitin ang 15 bytes, marahil 16 bytes para sa mga null terminator. Kung kami ay pagtatago ng isang tatlong character na string, Gusto naming gamitin ang tatlo o apat na bytes. Ngunit hindi pa namin na gustong gamitin ang buong 99. Kaya bakit nais namin pareho? Well, kung kailangan namin upang malaman kung paano matagal ang isang bagay ay may isang VARCHAR, kami ay may sa uri ng umulit sa kabuuan gusto lang ito ginawa namin sa C at malaman kung saan ito hihinto. Sapagkat kung alam natin na ang lahat ng bagay sa hanay na ito ay 10 bytes, siguro alam namin na impormasyon, maaari naming tumalon 10 bytes, 10 bytes, 10 bytes, 10 bytes, at laging mahanap ang simula ng string. Kaya maaaring mayroon kaming ilang mga nasayang na espasyo na may isang pansamantalang trabaho, ngunit marahil ay may isang trade off ng pagkakaroon ng mas mahusay na bilis sa pag-navigate ng database. Pero siguro gusto namin ang mga flexibility ng isang VARCHAR sa halip ng having-- Kung ang aming mga char ay 255, ngunit karamihan ng aming mga gumagamit ay tanging inputting tatlo o apat na bytes halaga ng mga impormasyon o tatlo o apat character na halaga ng impormasyon. Ngunit ang ilang mga gumagamit ay gumagamit ng ang buong 255, siguro VARCHAR ay magiging mas naaangkop doon. Ito ay uri ng isang kalakalan off, at sa pangkalahatan ay para sa mga layunin ng CS50, hindi mo na kailangan mag-alala masyadong maraming tungkol sa kung gumamit ka ng isang pansamantalang trabaho o isang VARCHAR. Ngunit sa tunay na mundo, ang mga bagay gawin ang bagay dahil ang lahat ng mga hanay na ito tumagal ng hanggang mga aktwal na pisikal na espasyo. At pisikal na espasyo, sa tunay na mundo, ay dumating sa isang premium. Kaya isa sa iba pang mga pagsasaalang-alang kapag ikaw ay gusali ng isang talahanayan ay upang pumili ng isa sa haligi upang maging ano ang tinatawag na primary key. At isang pangunahing key ay isang haligi kung saan ang bawat solong halaga ay natatangi. At na nangangahulugan na maaari mong madaling pumili ng isang solong hanay pamamagitan lamang ng pagtingin sa pangunahing susi ng hilerang iyon. Kaya halimbawa, ikaw ay sa pangkalahatan, na may mga gumagamit, ayaw ng dalawang mga gumagamit na may parehong bilang user ID. At kaya baka mayroon kang maraming mga impormasyon, at siguro dalawang mga user ay maaaring magkaroon ng parehong name-- ikaw ay may John Smith at John Smith. Iyan ay hindi kinakailangan ng isang problema, dahil may mga maramihang mga tao sa mundo na may pangalang John Smith. Ngunit kami ay may lamang ang numero ng ID sa isang user 10, sa isang user ID number 11, 12, 13. Wala kaming dalawang mga gumagamit na may parehong bilang, at kaya siguro numero user ID ay isang magandang pangunahing key. Wala kaming anumang pagkopya, at maaari naming ngayon katangi kilalanin ang bawat solong hanay lamang sa pamamagitan ng pagtingin sa hanay na iyon. Pagpili ng pangunahing mga susi ay maaaring aktwal na gumawa ng mga kasunod na mga pagpapatakbo talahanayan isang pulutong mas madali dahil maaari mong pagkilos ang katunayan na ang ilang mga hilera ay maging kakaiba, o sa isang tiyak na haligi ng iyong database o talahanayan ay natatangi sa pick out partikular na mga hilera. Maaari ka ring magkaroon ng isang pinagsamang primary key, na kung saan maaari mong mahanap ang mga dahilan ng ipagkakasala gamitin, na kung saan ay lamang ng isang kumbinasyon ng dalawang mga hanay na ay garantisadong maging kakaiba. Kaya marahil ay may isa column na Bilang at BS, isa sa haligi na ang isa, dalawa, at tatlong, ngunit maari ka lamang kailanman magkaroon ng isang single A1, ang isang solong A2, at iba pa at iba pa. Ngunit maaari kang magkaroon ng isang B2, isang C2, o isang A1, A2, A3, A4. Kaya maaari kang magkaroon ng maramihang mga Bilang, multiple BS, maramihang mga, maramihang mga twos, ngunit maaari ka lamang ba magkaroon ng isang single A1, B2, C3, at iba pa. Kaya tulad ng sinabi ko, SQL ay isang programming language, ngunit ito ay isang medyo limitado bokabularyo. Ito ay hindi lubos na malawak na bilang C at PHP at iba pang mga wika na makipag-usap namin sa kurso. Ito ay mas maligoy isang wika kaysa sa kung ano ang hindi namin pagpunta sa makipag-usap tungkol sa mga ito video, dahil sa video na ito kami ay pagpunta sa makipag-usap tungkol apat na mga pagpapatakbo na tayo maaaring isagawa sa isang table. Mayroong higit sa na ito. Maaari naming gawin ang higit pa sa, ngunit para sa aming mga layunin, pangkalahatan kami ay pagpunta sa gumagamit lamang ng apat operations-- insert, piliin, i-update, at tanggalin. At maaari mong marahil intuitively hulaan kung ano ang lahat ng apat na mga bagay na dapat gawin. Ngunit kami ay pumunta sa isang bit ng detalye sa bawat isa. Kaya para sa mga layunin ng video, sabihin ipalagay ipaalam kami ay ang mga sumusunod na dalawang mga talahanayan sa isang database. Kami ay may isang talahanayan na tinatawag na Ang mga gumagamit na may apat columns-- ID number, username, password, at buong pangalan. At kami ay may isang segundo talahanayan sa parehong database tinatawag moms na nag-iimbak ng impormasyon lamang tungkol sa isang username at isang ina. Kaya para sa lahat ng mga halimbawa sa video na ito, bibigyan namin ng ay gumagamit ng database na ito at kasunod na mga update sa mga ito. Kaya sabihin nating nais nating magdagdag ng impormasyon sa isang table. Iyon ay kung ano ang ginagawa ng insert operasyon. Sa nagpapaliwanag ang lahat ng ang mga utos, pupuntahan ko upang mabigyan ka ng isang pangkalahatang balangkas upang gamitin. Dahil isa lamang, ang mga query pupunta hitsura medyo katulad, lang kami na ang pagbabago bahagyang iba't ibang piraso ng impormasyon upang gawin ang iba't ibang bagay sa mga mesa. Kaya para INSERT, ang balangkas hitsura uri ng tulad nito. Gusto naming ipasok sa isang partikular na table. Pagkatapos kami ay may isang bukas na panaklong at isang listahan ng mga haligi na gusto naming ilagay ang halaga sa. Isara panaklong, ang sumusunod na mga halaga, at pagkatapos ay muli, ang listahan namin out ang mga halaga gusto naming ilagay sa talahanayan. Kaya ang isang halimbawa ng mga ito ay ang mga sumusunod. Gusto kong ipasok sa table mga sumusunod columns-- username, password, at fullname. Kaya ang isang bagong hilera kung saan makakakuha ako ng paglagay sa tatlong hanay ng mga at hindi namin pagpunta sa ilagay sa ang mga halaga Newman, USMAIL, at Newman. Kaya sa kasong ito, ako paglagay ng lowercase newman sa haligi ng username, password USMAIL, at ang buong pangalan capital N Newman sa haligi fullname. Kaya narito ang kung ano ang database mukhang bago. Narito ang kung ano ang mga gumagamit ng talahanayan sa top mukhang bago namin ginawa ito. Pagkatapos naming execute ito query, makuha namin ito. Nagdagdag kami ng isang bagong hilera sa talahanayan. Ngunit mapansin ang isang bagay na hindi ko tukuyin, ngunit sa anumang paraan Mayroon akong isang halaga para sa, na kung saan ay ang 12 karapatan dito. Hindi ko sinasabi ko nais na ilagay ang numero ng ID sa doon. Nais kong ilagay username, password, fullname. At ginawa ko na, na fine. Pero nakuha ko rin ito sa 12. Bakit ako nakakuha ito ng 12? Well, ito lumiliko out na kapag ikaw ay pagtukoy ang isang haligi na ito ay pagpunta sa maging ang iyong pangunahing susi, na kung saan ay karaniwang, tulad ng sinabi ko, ang isang numero ng ID. Ito ay hindi palaging nangangahulugang magiging isang numero ng ID, ngunit ito ay karaniwang isang magandang ideya na ilang uri ng integer value. Mayroon kang isang pagpipilian sa phpMyAdmin kapag ikaw ay lumilikha ng iyong database o ang iyong mga talahanayan upang i-set na haligi bilang auto incrementing. Aling ay isang tunay na magandang ideya kapag ikaw ay nagtatrabaho sa isang pangunahing susi, dahil gusto mo ang bawat halaga sa hanay na iyon upang maging kakaiba. At kung nakalimutan mo upang tukuyin ito para sa higit sa isang tao, ngayon ikaw ay may isang sitwasyon kung saan hanay na iyon ay hindi na kakaiba. Mayroon kang dalawang mga patlang, kaya maaari mong hindi na natatanging kilalanin ang isang column-- o maaari mong hindi na katangi kilalanin ang isang hilera batay sa hanay na iyon. Ito ay nawala ang lahat ng kanyang halaga bilang isang pangunahing key. At kaya tila kung ano ang aking ginawa dito ay naka-configure ang user ID haligi sa auto paglakas upang ang bawat oras ako magdagdag ng impormasyon sa table, ito ay awtomatikong magbibigay sa akin isang halaga para sa mga pangunahing susi. Kaya hindi ko ma-kalimutan na gawin ito dahil ang database ay gawin ito para sa akin. Kaya na uri ng magaling. At kaya na kung bakit kami makakuha 12 sa doon, dahil ako na set na column hanggang sa auto pagdagdag. Kung nagdagdag ako ng ibang tao gusto ito ay 13, kung ako nagdagdag may ibang tao na gusto ito ay 14, at iba pa. Kaya sabihin gawin lamang ng isa pang insertion. Susubukan naming ipasok sa table moms, sa partikular, ang mga username at ina column, ang mga halaga kramer at Babs Kramer. At kaya kami ay nagkaroon na ito bago. Pagkatapos naming execute na SQL query, kung ito namin. Nagdagdag kami ng Kramer at Babs Kramer sa talahanayan moms. Kaya na pagpasok. SELECT ay kung ano ang ginagamit namin upang kunin impormasyon mula sa mga table. Kaya ito ay kung paano makuha namin impormasyon sa labas ng database. At kaya SELECT utos ay magiging very madalas na ginagamit sa programming. Ang pangkalahatang framework-- ang pangkalahatang balangkas ganito ang hitsura nito. Pumili ng isang set ng mga hanay mula sa isang table, at pagkatapos ay opsyonal maaari mong tukuyin ang isang condition-- o ano ang karaniwang tawag namin sa isang tambalan, ay karaniwang ang katawagan na ginagamit namin sa SQL. Ngunit ito ay isa lamang kung ano partikular na mga hilera na nais mong makakuha ng. Kung nais mong, sa halip ng pagkuha ng lahat ng bagay, makitid ito, ito ay kung saan na iyong nais na gawin iyon. At pagkatapos ay opsyonal, maaari mo ring order sa pamamagitan ng isang partikular na hanay. Kaya marahil nais mong magkaroon ng mga bagay-bagay na pinagsunod-sunod ayon sa alpabeto batay sa isang hanay o ayon sa alpabeto batay sa isa pa. Muli, SAAN at Order NG ay opsyonal. Ngunit ang mga ito ay malamang na maging useful-- lalo SAAN magiging kapaki-pakinabang sa paliitin ang kaya hindi mo makakuha ng iyong buong database sa likod at Mayroon na proseso ito, makakakuha ka lamang ang mga piraso ng mga ito na mahalaga sa iyo. Kaya halimbawa, baka gusto kong piliin ID number at fullname mula sa mga gumagamit. Kaya kung ano ang maaaring maging hitsura ng tulad? Kaya narito ang aking mga talahanayan ng mga gumagamit. Gusto kong piliin idnum at fullname mula sa mga gumagamit. Ano ako pagpunta upang makakuha ng? Pupunta ako upang makakuha ng ito. Hindi ko makitid ito, kaya hindi ako sa pagkuha ng mga numero ng ID para sa bawat hilera at Nakakakuha ako ng full pangalan mula sa bawat hilera. SIGE. Paano kung gusto kong piliin ang password mula sa mga gumagamit WHERE-- kaya ngayon Magdaragdag ako ng kondisyon, isang predicate-- kung saan idnum ay mas mababa sa 12. Kaya narito muli ang aking database, ang aking mga talahanayan ng mga user ang top. Ano ako pagpunta upang makakuha ng kung gusto kong piliin ang impormasyon na iyon, ang mga password, na kung saan ang user ID o idnum ay mas mababa sa 12? Pupunta ako upang makakuha ng ito impormasyon sa likod, di ba? Ito ay nangyayari na idnum ay 10, mas mababa sa 12, ID number 11 mas mababa sa 12. Nakakakuha ako ng mga password para sa mga hilera. Iyan ay kung ano ang aking hiniling para sa. Ano ang tungkol sa mga ito? Paano kung gusto kong piliin star mula sa moms table kung saan username katumbas Jerry? OK, piliin ang star ay ang espesyal na uri ng wild card tinatawag na ginagamit namin upang makakuha ng lahat ng bagay. Kaya sila ay sinasabi piliin username comma ina, na nangyari na ang tanging dalawang mga hanay ng talahanayan na ito, Maaari ko lang pumili ng star at makuha ang lahat kung saan ang mga username ay katumbas Jerry. At kaya na kung ano ang nais kong makuha kung ginawa ko na ang partikular na query. Ngayon, database ay malaki dahil pinapayagan nila sa amin upang ayusin ang impormasyon marahil medyo mas mahusay kaysa sa namin maaaring sa kabilang banda. Kami ay hindi kinakailangang mag-imbak ng bawat kaugnay na piraso ng impormasyon tungkol sa isang user sa parehong table. Nagkaroon kami ng dalawang tables doon. Kailangan naming iimbak pangalan ng ina ng lahat ng tao, at baka wala tayong social security number, kami ay may sa kanilang mga petsa ng kapanganakan. Iyan ay hindi laging kailangan upang maging sa parehong table. Hangga't maaari naming tukuyin ang relasyon sa pagitan ng tables-- at na kung saan na pamanggit kataga database uri ng pagdating sa play-- hangga't maaari naming tukuyin ang relasyon sa pagitan ng mga mesa, maaari naming uri ng compartmentalize o abstract bagay sa isang paraan, kung saan ang tanging nasa atin ang talagang mahalaga na impormasyon pinapahalagahan namin ang tungkol sa talahanayan ng gumagamit. At pagkatapos kami ay may mababa na impormasyon o dagdag na impormasyon sa iba pang mga talahanayan na maaari naming ikonekta pabalik sa pangunahing mesa mga gumagamit sa isang partikular na paraan. Kaya dito kami ng mga dalawang mga talahanayan, ngunit mayroong isang kaugnayan sa pagitan ng mga ito, right? Tila tulad ng username maaaring maging isang bagay na umiiral sa mga karaniwang sa pagitan ang dalawang mga iba't ibang mga talahanayan. Kaya kung ano kung mayroon kami ngayon isang sitwasyon kung saan kami ay nais upang makakuha ng buong pangalan ng isang user mula sa talahanayan ng gumagamit, at ang kanilang mga ina pangalan mula sa ina table? Hindi namin magkaroon ng isang paraan upang makakuha ng na dahil ito ay nakatayo, di ba? Walang iisang table na naglalaman ng parehong buong pangalan at ang pangalan ng ina. Wala kaming na opsyon mula sa kung ano ang nasaksihan namin sa ngayon. At kaya kami ay may sa kitang ipakilala ang ideya ng isang SUMALI. At pagsali ay marahil ang pinaka complex-- ito ay talagang pinaka masalimuot na operasyon kami ay pagpunta sa makipag-usap tungkol sa video. Ang mga ito ay isang maliit na kumplikado, ngunit sa sandaling makuha mo ang hang ng mga ito, ang mga ito ay aktwal na hindi masyadong masama. Ito lamang ay isang espesyal na kaso ng isang PUMILI. Kami ay pagpunta sa pumili ng isang hanay ng mga mga haligi mula sa isang table pagsali sa isang pangalawang talahanayan sa ilang predicate. Sa kasong ito, isipin ang tungkol dito gusto this-- mesa isa ay isang bilog sa paglipas dito, talahanayan ng dalawang ay isa pang bilog sa paglipas dito. At na predicate bahagi sa gitna, ito ay uri ng tulad ng kung sa tingin mo tungkol sa bilang isang Venn diagram, kung ano ang mayroon sila sa mga karaniwang? Gusto naming i-link ang mga ito ng dalawang mga talahanayan batay sa kung ano ang mayroon sila sa mga karaniwang at lumikha ng hypothetical talahanayan na ito iyon ay ang pagsama-sama ng dalawang magkasama. Kaya makikita namin makita ang mga ito sa isang Halimbawa at baka makikita na makakatulong sa malinaw na ito up ng isang maliit na bit. Kaya marahil na gusto mong piliin user.fullname at moms.mother mula sa mga gumagamit ng pagsali sa moms talahanayan sa bawat sitwasyon kung saan ang mga haligi ng username ay pareho sa pagitan ng mga ito. At ito ay isang bagong syntax dito, ang user na ito. at moms .. Kung ako ng paggawa ng maramihang mga talahanayan sama-sama, maaari ko bang tukuyin ang isang table. Maaari kong makilala sa partikular na sa na sa sa pinakadulo ibaba doon. Maaari ko bang makilala ang mga username haligi ng talahanayan gumagamit mula sa mga username haligi ng moms table, na kung saan ay otherwise-- kung sinabi lang namin ay katumbas ng username username, na hindi talaga nangangahulugan na kahit ano. Gusto naming gawin ito kung saan sila ay tumugma. Kaya ang maaari kong tukuyin ang table at ang pangalan ng haligi sa kaso ng isang sitwasyon kung saan ito ay hindi maliwanag kung ano ang sinasabi ko. Kaya na ang lahat ako ginagawa mayroong Ako sinasabi ng hanay na ito mula sa talahanayan na ito, at sa pagiging napaka malinaw. Kaya muli, ako ng pagpili sa buong pangalan at ang pangalan ng ina mula sa talahanayan gumagamit na naka-link nang sama-sama may table moms sa bawat sitwasyon kung saan sila nagbabahagi na column-- nilang ibahagi na paniwala username. Kaya dito ay ang mga talahanayan kami ay bago. Ito ang estado ng ating database na ito ay umiiral ngayon. Ang impormasyon na kami ay extract ay ito na magsimula sa. Ito ay ang bagong mesa kami ay pagpunta upang lumikha ng mga pagsasama-sama ng mga sama-sama. At mapansin hindi kami highlight Hilera Newman sa talahanayan ng gumagamit, at hindi namin pag-highlight Hilera Kramer ni sa talahanayan moms dahil mayroon na hindi isa sa parehong sets-- sa parehong talahanayan. Ang tanging impormasyon na nasa karaniwang pagitan ng mga ito ay Jerry ay sa parehong mga talahanayan at gcostanza ay sa parehong talahanayan. At kaya kapag ginagawa namin ang SQL SUMALI, kung ano ang aming get-- at ginagawa namin talagang makakuha ng ito. Ito ay uri ng isang pansamantalang variable. Ito ay tulad ng isang hypothetical pagsama-sama ng dalawang mga talahanayan. Kami ay talagang makakuha ng isang bagay tulad nito, kung saan na ipinagsama namin nang magkasama ang mga talahanayan sa impormasyon na mayroon sila sa pangkaraniwan. Kaya mapapansin na users.username at haligi moms.username, ito ay eksaktong kapareho. Iyon ay ang mga impormasyon na ay pare-pareho mula sa mga gumagamit mesa at mga talahanayan moms. At kaya Pinagsama namin ang mga ito nang magkakasama. Tinapon namin Kramer dahil siya ay hindi na umiiral sa talahanayan ng mga gumagamit, at tinapon namin Newman, dahil hindi siya ay umiiral sa talahanayan moms. Kaya ito ay ang hypothetical pagsama-sama gamit ang SUMALI operasyon ng SELECT. At pagkatapos kami ay naghahanap para sa mga buong pangalan ng user at ina ng gumagamit, at sa gayon ito ay ang mga impormasyon na Gusto naming makuha mula sa pangkalahatang query na aming ginawa sa SELECT. Kaya sumali namin ang mga talahanayan ng magkasama at nakuha namin ang dalawang mga hanay ng mga, at sa gayon ay kung ano ang gusto naming makuha. Ngunit SQL pagsali ng isang uri ng kumplikado. Marahil ay hindi mo gawin ang mga ito ng masyadong maraming, ngunit mayroon lamang ilang mga ideya ng mga balangkas na maaari mong gamitin upang sumanib dalawang talahanayan ng magkasama kung kinakailangan mo na. Ang huling dalawang mga bit mas simple pangako ko. Kaya sa pag-update, maaari naming gamitin UPDATE upang baguhin ang mga impormasyon sa isang table. Ang pangkalahatang format ay UPDATE ilang table, SET ilang column sa ilang mga halaga SAAN ilang predicate ay nasiyahan. Kaya halimbawa, maaari naming nais upang i-update ang talahanayan gumagamit at itakda ang password sa yada yada, kung saan ang mga numero ng ID ay 10. Kaya sa kasong ito, hindi namin pag-update ng mga gumagamit ng talahanayan. Ang numero ng ID ay 10 para sa na ang unang hilera doon, at gusto naming i-update ang password upang yada yada. At kaya na kung ano ang mangyayari. Ito ay medyo tapat, di ba? Ito lamang ay isang napaka-simple pagbabago sa talahanayan. ALISIN ay ang operasyon na ginamit namin upang tanggalin ang impormasyon mula sa isang table. ALISIN MULA mesa SAAN ilang predicate ay nasiyahan. Gusto naming tanggalin ang mula sa gumagamit ng talahanayan para sa mga halimbawa kung saan ang mga username ay Newman. Maaari mong marahil hulaan kung ano ang nangyayari sa mangyari dito pagkatapos naming execute na SQL query, Newman ay nawala mula sa talahanayan. Kaya lahat ng mga operasyon, tulad ng sinabi ko na, ay tunay madali na gawin sa phpMyAdmin. Ito ay isang friendly interface tunay user. Ngunit ito ay hindi nangangailangan ng manual na pagsisikap. Hindi namin nais upang umupa manual pagsisikap. Gusto naming ang aming mga programa sa gawin ito para sa amin, di ba? Kaya maaaring gusto naming gawin ito ng programming. Gusto naming isama ang SQL at magkaroon ibang bagay upang gawin ito para sa amin. Ngunit ano ang aming nakita na nagbibigay-daan amin sa programming gawin ang isang bagay? Nakita namin ang PHP, di ba? Ito introduces ilang dynamism sa aming mga programa. At kaya sa kabutihang-palad, SQL at PHP play tunay mabuti sama-sama. May isang function sa PHP tinatawag na query, na kung saan ay maaaring gamitin. At maaari mong ipasa ang bilang ng mga parameter o ang argument para sa mga tanong ng isang SQL query na Gusto mo bang mag-execute. At PHP ay gawin ito sa iyong ngalan. Kaya pagkatapos mong konektado sa iyong database sa PHP, mayroong dalawang primaries mong gawin ito. May isang bagay na tinatawag na MySQLi at isang bagay na tinatawag na PDO. Hindi namin pumunta sa isang malaking halaga ng detalye doon. Sa CS50 ginagamit namin PDO. Pagkatapos mong ma-konektado sa iyong database, ikaw ay Maaari pagkatapos ay gumawa ng mga query ng iyong database pamamagitan ng pagpasa sa mga query bilang argumento sa mga function na PHP. At kapag ginawa mo na, mag-imbak mo ang ang resulta na itinakda sa isang nag-uugnay array. At alam namin kung paano gumagana sa uugnay array sa PHP. Kaya ako maaaring sabihin ng isang bagay tulad this-- $ results-- ito ay nasa PHP-- katumbas query. At pagkatapos ay sa loob ng query function na argumento na ako makapasa sa query na ganito ang hitsura SQL. At sa katotohanan na ang SQL. Iyan ang query string na gusto ko Gusto upang maipatupad sa aking database. At kaya sa red, ito ay PHP. Ito ang SQL na ako pagsasama sa PHP sa pamamagitan ng paggawa ito ang argumento sa function query. Gusto kong piliin fullname mula mga user kung saan ang numero ng ID ay katumbas ng 10. At pagkatapos ay marahil matapos Ginawa ko na iyon, Maaaring sabihin ko ng isang bagay na katulad nito. Gusto kong i-print out ang Salamat mensahe para sa pag-log in. At gusto ko ito interpolate-- gusto ko sa salita o mga salita $ resulta fullname. At kaya na kung paano ako magtrabaho kasama na nag-uugnay array na Nakatanggap ako pabalik. $ fullname resulta ng gagawin talaga humantong sa pag-print out, salamat para sa pag-log in, Jerry Seinfeld. Iyon ay ang buong pangalan kung saan idnum katumbas ng 10. At sa gayon ang lahat ako ginagawa ay ako now-- ko na naka-imbak aking query, ang mga resulta ng aking query at mga resulta sa isang nag-uugnay array, at fullname ay ang pangalan ng ang haligi ng ako ay nakakakuha ng para sa. Kaya na ang aking mga susi sa mga resulta nag-uugnay array na gusto ko. Kaya Salamat para sa pag-log in, $ resulta, Makikita fullname i-print out, dumikit karapatan sa pagitan ng mga kulot braces, Jerry Seinfeld. At kukunin ko na i-print out ang mensahe Salamat para sa pag-log in Jerry Seinfeld. Ngayon, marahil hindi namin nais sa hard bagay code na tulad nang sa, right? Maaaring gusto naming gawin ang isang bagay tulad ng pag-print f, kung saan maaari naming kapalit at baka mangolekta ng iba't ibang impormasyon, o marahil ay may proseso query iba't-ibang impormasyon. At kaya query, ang query function ay ang paniwala ng mga uri ng mga pamalit halos kapareho sa i-print ang f percent s at porsiyento c, ay mga tandang pananong. At maaari naming gamitin tanong marks very analogously upang i-print f na kapalit variable. Kaya marahil ang iyong user naka-log in nang mas maaga, at na-save mo ang kanilang mga user ID number sa $ _SESSION ng PHP super global sa key ID. Kaya marahil pagkatapos nilang naka-log in, kang magtakda ng $ _SESSION ID ay katumbas ng 10, extrapolating mula sa halimbawa Nakita lang namin ng isang segundo na nakalipas. At kaya kapag namin talagang execute ito query ng mga resulta ngayon, ito ay plug sa 10, o kahit anong ang $ _SESSION halaga ID ay. At kaya na nagbibigay-daan sa amin upang maging mas dynamic ng kaunti. Hindi namin hard coding bagay sa ngayon. Kami ay pag-save ng impormasyon sa tabi-tabi at pagkatapos ay maaari naming gamitin muli ang impormasyon na iyon uri ng tuntuning panlahat kung ano ang gusto naming gawin, at mga plug-in at mga pagbabago lamang ang pag-uugali ng aming mga pahina batay sa kung ano ang numero ng ID ng gumagamit talaga ay pagkatapos nilang mag-log in. Posible rin, bagaman, na-set ang iyong mga resulta maaaring binubuo ng maraming mga hilera. Sa anong kaso, mayroon kang isang array ng arrays-- isang hanay ng mga nag-uugnay array. At ikaw lamang ang kailangan upang umulit sa pamamagitan nito. At alam namin kung paano upang umulit pamamagitan ng isang array sa PHP, di ba? Kaya dito ay marahil ang pinaka kumplikadong bagay na nakita namin sa ngayon. Ito ang tunay na integrates tatlong mga wika na magkasama. Dito sa red, ito ang ilang mga HTML. Tila ako starting-- ito ay isang snippet ng ilang mga HTML na mayroon ako. Ako simula ng isang bagong talata na sabi ng moms ng Seinfeld TV. At pagkatapos ay agad pagkatapos Ako simula ng isang table. At pagkatapos ay pagkatapos na, ako may ilang PHP, di ba? Mayroon akong lahat ng code na PHP sa doon. Tila ako pagpunta gumawa ng isang query. At upang gumawa ng mga query, ako pagpunta sa ay gumagamit ng mga ina SELECT FROM moms. Kaya ito ay getting-- ito ay SQL. Kaya ang mga asul ay SQL. Ang red nakita namin ang isang segundo na nakalipas ay HTML. At ang green dito ay PHP. Kaya ako gumawa ng isang query sa aking database, ako piliin ang lahat ng mga ina sa talahanayan moms. Hindi lamang kitid ito sa mga partikular na hilera, ako na humihingi para sa lahat ng mga ito. Pagkatapos suriin ko kung resulta ay Hindi equals katumbas false. Ito ay lamang ang aking paraan ng pag-uuri-check ng kung resulta ay hindi katumbas ng null, na gusto namin makita c halimbawa. Karaniwang ito ay lamang ng pagsuri upang gumawa ng siguraduhin na ito talagang matindi ang data sa likod. Dahil hindi ko nais upang simulan ang pag-print out data kung hindi ko makuha ang anumang data. Pagkatapos para sa bawat resulta ng bilang isang resulta ang foreach syntax mula sa PHP, ang lahat ako ginagawa ay pag-print out ina $ resulta. At kaya ako pagpunta upang makakuha ng isang set ng lahat ng mga ina ng each-- ito ay isang hanay ng mga nag-uugnay arrays-- at ako nagpi-print out bawat isa ayon sa sarili nitong hanay ng isang table. At iyan ay talagang pretty magkano ang lahat ng mayroong dito. Alam ko mayroong isang maliit na bit nangyayari dito sa huling halimbawa na may mga array ng arrays-- array ng nag-uugnay array. Ngunit ito tunay ay pakuluin lamang down sa SQL sa paggawa ng isang query, karaniwang pagpili pagkatapos naming nai nai maglagay ng impormasyon sa table, at pagkatapos lamang ng paghila ito. At ito ang gusto namin hilahin ito out sa partikular na kasong. Nais naming kunin ang lahat ng mga indibidwal na mga ina mula sa talahanayan moms. Nakakuha kami ng isang buong set ng mga ito, at hindi na namin Gusto upang umulit sa pamamagitan at i-print out bawat isa. Kaya muli, ito ay marahil ang pinaka-kumplikadong halimbawa nakakita kami dahil kami ay paghahalo ng tatlong iba't-ibang wika na magkasama, tama? Muli, kami ay may HTML dito sa red, halo-halong may ilang mga SQL dito sa blue, halo-halong may ilang PHP sa berde. Ngunit lahat ng mga ito i-play mabuti sama-sama, ito ay lamang ng isang bagay ng pag-unlad magandang gawi sa gayon ay maaari kang makakuha ng ang mga ito upang gumana nang magkasama sa paraang nais mo. At ang tanging paraan upang talagang gawin iyon ay ang pagsasanay, pagsasanay, pagsasanay. Ako Doug Lloyd, ito ay CS50.