[Гуляе музыка] Даг Lloyd: У нашых відэа на тэму вэб-распрацоўкі, мы згадалі паняцце база дадзеных некалькі разоў, праўда? Такім чынам, база дадзеных вы верагодна, знаёмыя з з кажуць, выкарыстоўваючы Microsoft Excel або Табліцы Google. Гэта на самай справе проста арганізаваная набор табліц, радкоў і слупкоў. І база дадзеных, дзе наш вэб-сайт крам Інфармацыя, што важна для нашага сайта, каб працаваць належным чынам. Зноў жа, на самай справе агульны прыклад тут захоўвае імёны карыстальнікаў і паролі ў базе дадзеных, так што, калі карыстальнік уваходзіць у наш вэб-сайт, база дадзеных можа быць запытаны, каб убачыць калі карыстальнік існуе ў базе дадзеных. І калі яны ёсць, праверкі таго, што іх правільны пароль. І калі іх правільны пароль, то мы можам даць ім усё, што старонка яны просьбай. Дык вы, верагодна, зноў жа, знаёмыя з гэтай ідэяй з Excel або Google Табліцы. У нас ёсць базы дадзеных, сталы, шэрагі і слупкі. І гэта сапраўды роду фундаментальнай набору іерархічнай прабоя тут. Дык вось табліца Excel. І калі вы калі-небудзь адкрыў гэта ці іншы аналагічнай праграмы Вы ведаеце, што гэта вось rows-- 1, 2, 3, 4, 5, 6, 7. Гэтыя калонкі. Можа быць, тут, хоць вы можаце Не выкарыстоўвайце гэтую функцыю жахліва much-- Я маштабу in-- ў нас ёсць гэтая ідэя ліста. Так, можа быць, гэтыя лісты, калі Я чаргаваць назад і наперад, розныя табліцы, існуе ў маёй базе дадзеных. І калі мы працягнем прыклад ўсе шлях, імя гэтай базы дадзеных гэта Кніга 1. Можа быць, у мяне ёсць кніга 2 і 3 кнігі. Такім чынам, кожны файл Excel з'яўляецца базы дадзеных, кожны ліст ўяўляе сабой табліцу, і ўнутры кожнай табліцы ў мяне гэтая ідэя з радкоў і слупкоў. Так як я працую з гэтай базай дадзеных? Як я магу атрымаць інфармацыю ад яго? Ну ёсць мова называецца SQL-- якія я звычайна проста патэлефануеце Sequel-- і гэта каштуе для Structured Query Language. І гэта мова праграмавання, але гэта даволі абмежаваны праграмавання мову. Гэта не зусім, як і іншыя што мы працавалі з. Але мэта гэтага мова праграмавання гэта зварот у базу, каб спытаеце інфармацыю з базы дадзеных, знайсці інфармацыю ў базы дадзеных, і гэтак далей. Мы таксама, у CS50-- і гэта вельмі агульная платформа, гэта называецца MySQL. Гэта тое, што мы выкарыстоўваем у курсе. Гэта з адкрытым зыходным кодам платформа, якая ўсталёўвае так званы рэляцыйнай database-- база дадзеных, эфектыўна. Нам не трэба, каб атрымаць у занадта шмат дэталяў на тое, што рэляцыйная база дадзеных. Але мова SQL з'яўляецца вельмі майстэрскія ў рабоце з MySQL і іншыя падобныя стылі рэляцыйных баз дадзеных. І многія установак MySQL прыходзяць з чым-то называецца PhpMyAdmin, якія гэта графічны карыстацкі interface-- ў GUI--, што робіць яго крыху больш дружалюбных карыстачу выканаць запыты да базы дадзеных, паколькі базы дадзеных выкарыстоўваюцца не толькі па прасунутых праграмістаў, праўда? Часам ёсць гэтыя малыя прадпрыемствы, і яны не могуць дазволіць сабе наняць каманду праграмістаў, але яны па-ранейшаму трэба захоўваць Інфармацыя ў базе дадзеных. Нешта накшталт PhpMyAdmin робіць яго вельмі лёгка для кагосьці які ніколі не запраграмаваны, перш чым падабраць і азнаёміцца ​​з тым, як працаваць з базай дадзеных. Праблема складаецца ў тым, PHPMYADMIN, а гэта фантастычны інструмент для навучання аб базах дадзеных, гэта кіраўніцтва. Вы будзеце мець, каб увайсці ў гэта і выконваць каманды і тып рэчы ўручную. І, як мы ведаем з нашага Прыклад на PHP вэб-праграмавання, таго, каб ўручную рабіць рэчы на ​​нашым сайце, калі мы хочам дынамічны, актыўны рэагаваць сайт, магчыма, не самы лепшы падыход. Мы хацелі б знайсці шлях да магчыма, гэта неяк аўтаматызаваць. І SQL дазволіць нам гэта зрабіць. Таму, калі мы збіраемся пачаць працаваць з SQL, мы спачатку павінны мець базы дадзеных для працы з. Стварэнне база дадзеных то вы, верагодна, будзе рабіць у PhpMyAdmin, таму што Вы павінны будзеце зрабіць гэта толькі адзін раз, і сінтаксіс для гэтага з'яўляецца значна больш простым. Гэта нашмат лягчэй зрабіць гэта ў графічным інтэрфейсе карыстальніка чым друкаваць яго ў якасці каманды. Каманда можа атрымаць трохі грувасткім. Аналагічна, ствараючы табліцу можна атрымаць крыху грувасткі, а таксама. І так такія рэчы, як стварэнне базы дадзеных і стварэння табліцы, якой вы верагодна, толькі збіраецца зрабіць once-- адзін раз у табліцы, адзін раз у database-- гэта нармальна, каб зрабіць гэта ў графічны інтэрфейс. У працэсе стварэння табліцы, вы Таксама трэба паказаць усе з слупкі, якія будуць у гэтай табліцы. Якая інфармацыя зрабіць Вы хочаце, каб захоўваць у табліцы? Можа быць, імя карыстальніка і дата нараджэння, пароль, ID нумар карыстальніка, а можа быць, Горад і дзяржава, праўда? І кожны раз, мы хочам, каб дадаць карыстальніка у базу дадзеных, мы хочам, каб усе шэсць з гэтых частак інфармацыі. І мы робім гэта шляхам дадання Радкі ў табліцы. Такім чынам, мы спачатку стварыць базу дадзеных, Затым мы ствараем табліцу. У рамках стварэння стол, мы папрасілі пазначыць, што кожны слупок мы хацелі б у гэтай табліцы. І тое, як мы пачнем дадаваць Інфармацыя ў базу дадзеных і запытаць больш база дадзеных generally-- не проста даданне, але ўсё астатняе мы do-- мы будзем мець справу з радамі табліцы, якая з'яўляецца адным Інфармацыя карыстальніка з усяго мноства. Такім чынам, кожны слупок SQL здольны правядзенне дадзеных пэўнага тыпу дадзеных. Такім чынам, мы ліквідаваны роду гэта Ідэя тыпаў дадзеных у PHP, але яны зноў тут, у SQL. І ёсць шмат тыпаў дадзеных. Вось толькі 20 з іх, але гэта нават усе з іх няма. Так у нас ёсць ідэі, як INTs-- Integers-- мы, напэўна, ведаеце што гэты слупок можа ўтрымліваць цэлыя лікі. І ёсць варыяцыі thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Можа быць, мы не заўсёды трэба чатыры укусаў. Можа быць, мы павінны восем байт, і таму мы можаце выкарыстоўваць гэтыя варыяцыі на цэлых каб быць крыху больш месца эфектыўным. Мы можам зрабіць дзесятковых лікаў, мы можна зрабіць плавае коскі. Яны вельмі падобныя. Ёсць некаторыя адрозненні, і, калі б вы люблю глядзець уверх па SQL роду кіраўніцтва, вы можа бачыць тое, што невялікая адрозненні паміж імі. Можа быць, мы хочам, каб захаваць інфармацыя пра дату і час. Можа быць, мы адсочвання калі карыстальнік далучыўся наш сайт, і таму, магчыма, мы хочам мець слупка, які час дата цi адзнака, што паказвае, калі карыстальнік сапраўды падпісаў. Мы можам зрабіць геаметрыю і linestrings. Гэта на самай справе даволі халаднавата. Мы маглі б намеціць геаграфічны раён з дапамогай ГІС каардынаты сюжэт з вобласці. Так можа на самай справе захоўваць такога роду інфармацыі ў калонцы SQL. ТЭКСТ за ўсё гіганцкія кроплі тэксту, можа быць. Пералічэння з'яўляюцца свайго роду цікава. Яны на самой справе існуе ў С. Мы не казаць пра іх, таму што яны не жудасна звычайна выкарыстоўваецца, па меншай меры, CS50. Але гэта перечислимого тыпу дадзеных, якія здольны ўтрымліваць абмежаваныя значэння. Сапраўды добры прыклад тут будзе стварыць пералік, дзе сем Магчымыя значэння нядзеля, панядзелак, Аўторак, серада, чацвер, пятніца, Субота, праўда? Гэта тып дадзеных Дзень Тыдзень не існуе, але мы маглі б стварыць перечислимого тыпу дадзеных, напрыклад што гэта слупок можа толькі калі-небудзь правесці адзін з тых сямі магчымых значэнняў. Мы пералічылі ўсе з магчымых значэнняў. Тады ў нас ёсць вугаль і VARCHAR, а ў мяне колер гэтыя зялёныя таму што мы на самай справе збіраецца ўзяць другую казаць пра розніцу паміж гэтымі двума рэчамі. Так ЗНАК, у адрозненне ад З, дзе ЗНАК быў адзін знак, у SQL паўкокс ставіцца да фіксаваная даўжыня радка. І калі мы ствараем гэта калонка, мы на самай справе можна паказаць даўжыню радка. Такім чынам, у гэтым прыкладзе, мы маглі б сказаць, CHAR (10). Гэта азначае, што кожны элемент гэтага слупка будзе складацца з 10 байт інфармацыі. Ні больш, ні менш. Так што, калі мы будзем спрабаваць паставіць у 15 біт або элемент 15 сімвалаў ці значэнне ў гэтай калонцы, мы толькі атрымаць першыя 10. Калі мы ў двух доўга значэнне характар, мы будзем мець два сімвалы, а затым васьмі нулявыя укусаў. Мы ніколі не будзем больш эфектыўна, чым гэта. VARCHAR накшталт як наша паняцце радкі што мы знаёмыя з з З або з РНР. Гэта пераменная даўжыня радка. І калі вы ствараеце гэтая калонка, вы проста пазначыць максімальна магчымыя даўжыні. Так, можа быць, 99 або 255, звычайна. Гэта было б максімальная даўжыня. І таму, калі мы былі захоўвання 15 радок знакаў, мы хацелі б выкарыстоўваць 15 байт, можа быць, 16 байт для нулявога тэрмінатара. Калі мы захоўвае тры радок знакаў, мы будзем выкарыстоўваць тры ці чатыры байта. Але мы б не выкарыстоўваць поўны 99. Дык чаму б нам другога? Ну, калі мы павінны высветліць, як доўга нешта з VARCHAR, мы павінны выгляду ітэрацыі па гэта толькі так, як мы гэта рабілі ў C і высветліць, дзе ён спыняецца. У той час як, калі мы ведаем, што ўсе ў гэтай калонцы 10 байт, можа быць, мы ведаем, што інфармацыя, мы можам перайсці 10 байт, 10 байт, 10 байт, 10 байт, і заўсёды знайсці пачатак радка. Такім чынам, мы, магчыма, некаторыя марна месца з CHAR, але, магчыма, ёсць гандаль ад таго, больш высокую хуткасць ў навігацыі база дадзеных. Але, можа быць, мы хочам, каб Гнуткасць VARCHAR замест having-- Калі наша ЗНАК быў 255, але большасць нашых карыстальнікаў былі толькі ўвод тры ці чатыры байта Варта інфармацыі ці тры ці чатыры сімвалы коштам інфармацыі. Але некаторыя карыстальнікі выкарыстоўваюць уся 255, можа быць, VARCHAR б больш дарэчы там. Гэта свайго роду кампрамісу, і як правіла, для мэт CS50, Вам не трэба занадта турбавацца аб Ці вы выкарыстоўваць CHAR або VARCHAR. Але ў рэальным свеце, гэтыя рэчы маюць значэнне, таму што ўсе з гэтых слупкоў ўзяць фактычную фізічнае прастору. І фізічнае прастору, у рэальны свет, прыходзіць у вялікай пашане. Так адной іншай разгляду калі вы ствараеце табліцу гэта выбраць адзін слупок, каб быць тое, што называецца першасным ключом. І першасны ключ ўяўляе сабой слупок дзе кожны значэнне з'яўляецца унікальным. А гэта значыць, што вы можаце лёгка выбраць адну радок, проста зірнуўшы на першасны ключ гэтага радка. Так, напрыклад, вы Як правіла, з карыстальнікамі, не хачу двух карыстальнікаў, маюць аднолькавы лік ідэнтыфікатара карыстальніка. І таму, магчыма, у вас ёсць шмат інфармацыі, і, магчыма, два карыстальніка могуць ёсць жа name-- ў вас ёсць Джон Сміт і Джон Сміт. Гэта не абавязкова з'яўляецца праблемай, таму што ёсць некалькі чалавек ў свеце па імені Джон Сміт. Але ў нас ёсць толькі адно ідэнтыфікацыйны нумар карыстальніка 10, адзін карыстальнік ідэнтыфікацыйны нумар 11, 12, 13. Мы не маем двух карыстальнікаў з такім жа колькасцю, і таму, магчыма, ID карыстальніка лік будзе добры першасны ключ. Мы не маем ніякага дублявання, і зараз мы можам адназначна вызначыць кожную радок толькі гледзячы на ​​гэтага слупка. Выбар першасных ключоў можа на самай справе зрабіць наступныя таблічныя аперацыі нашмат лягчэй, таму што вы можаце выкарыстоўваць той факт, што некаторыя радкі будзе быць унікальным, або пэўны слупок вашай базы дадзеных або табліцы будзе унікальным, каб забраць з канкрэтных радкоў. Вы таксама можаце мець сумеснае першасны ключ, які вы можаце знайсці падставу ў выкарыстанні, што гэта проста Спалучэнне двух слупкоў, гарантавана будзе унікальным. Так, можа быць, у вас ёсць адзін слупок, як і Bs, адзін слупок, што адзін, два, і тры, але вы будзеце толькі калі-небудзь ёсць адзін A1, адзін А2, і гэтак далей, і гэтак далей. Але вы, магчыма, В2, А С2, або А1, А2, А3, А4. Такім чынам, вы, магчыма, прыйдзецца некалькі Гэтак жа, некалькі Bs, некалькі з іх, некалькі двоек, але вы можаце толькі калі-небудзь мець аднаго А1, В2, С3, і гэтак далей. Так як я ўжо сказаў, SQL з'яўляецца Мова праграмавання, але ён мае даволі абмежаваны слоўнікавы запас. Гэта не зусім так, як экспансіўны З і PHP і іншыя мовы што мы гаворым ў курсе. Гэта больш падрабязны мова, чым тое, што мы пагаворым аб ў гэтым відэа, таму што ў гэтым відэа мы будзем казаць аб чатыры аперацыі, якія мы можа выконваць на стале. Ёсць больш, чым гэта. Мы можам зрабіць больш, чым гэта, але для нашых мэтаў, мы, як правіла збіраецеся выкарыстоўваць толькі чатыры operations-- устаўка, выберыце, абнаўляць і выдаляць. І вы, верагодна, інтуітыўна здагадацца тое, што ўсе гэтыя чатыры рэчы. Але мы пойдзем у трохі дэталізацыі па кожным з іх. Такім чынам, для мэтаў гэтага відэа, давайце выкажам здагадку, У нас ёсць наступныя два Сталы ў адзінай базе дадзеных. У нас ёсць табліца называецца карыстальнікаў, што мае чатырох columns-- ідэнтыфікацыйны нумар, імя карыстальніка, пароль і поўнае імя. І ў нас ёсць другі стол у той жа базе дадзеных называецца мам, якія проста захоўвае інфармацыю аб імя карыстальніка і маці. Так што для ўсіх прыкладаў ў гэтым відэа, мы будзем выкарыстоўваць гэтую базу дадзеных і наступныя абнаўлення да яго. Так што давайце казаць, што мы хочам, каб дадаць інфармацыю ў табліцу. Гэта тое, што робіць аперацыі ўстаўкі. Тлумачачы ўсё гэтыя каманды, я збіраюся каб даць вам агульнае шкілет выкарыстоўваць. Таму што ў асноўным, запытаў збіраюцца погляд вельмі падобныя, мы толькі збіраемся, мяняецца некалькі розных частак інфармацыі рабіць розныя рэчы са сталом. Такім чынам, для INSERT, шкілета выглядае накшталт як гэта. Мы хочам, каб ўставіць канкрэтны стол. Тады ў нас ёсць адкрывалую дужку і спіс слупкоў што мы хочам, каб пакласці значэння ст. Зачыніць дужкі, то наступныя значэнні, а затым зноў жа, мы пералічыць значэння мы хочам, каб пакласці ў стол. Так прыкладам гэтага будзе наступнае. Я хачу, каб ўставіць ў табліцу карыстальнікі наступны columns-- імя карыстальніка, пароль, і FullName. Так у новым радку, дзе я стаўлю у гэтых трох слупкоў, і мы збіраецца паставіць у значэннях Ньюман, USMAIL, і Ньюман. Такім чынам, у гэтым выпадку, я пакласці ў ніжнім рэгістры Ньюман ў полі карыстальніка, пароль USMAIL, і поўная назва сталіцы Н Ньюман ў калонцы FULLNAME. Дык вось тое, што база дадзеных паглядзеў, як раней. Вось тое, што табліца карыстальнікі на топ выглядаў, перш чым мы гэта зрабілі. Пасля таго як мы гэта выканаць запыт, мы атрымліваем гэта. Мы дадалі новы радок табліцы. Але звярніце ўвагу, гэта адно што я не ўдакладніў, але чамусьці я атрымаў значэнне для, што гэта 12 прама тут. Я не кажу, што я хацеў паклаў ідэнтыфікацыйны нумар там. Я хацеў, каб пакласці імя карыстальніка, пароль, FullName. І я зрабіў гэта, гэта нармальна. Але я таксама атрымаў гэтую 12. Чаму я атрымліваю гэта 12? Ну, атрымліваецца, што калі вы вызначаеце слупок, які будзе ваш Першасны ключ, які, як правіла, як я ўжо сказаў, ідэнтыфікацыйны нумар. Гэта не заўсёды абавязкова будзе ідэнтыфікацыйны нумар, але гэта, як правіла, добрая ідэя, каб быць свайго роду цэлы лік. У вас ёсць магчымасць у PhpMyAdmin калі вы ствараеце базу дадзеных ці ваш стол, каб усталяваць, што калонку, як аўто прырашчэнне. Які з'яўляецца сапраўды добрая ідэя, калі вы працуеце з першасным ключом, таму што вы хочаце кожнае значэнне у гэтым слупку павінны быць унікальнымі. І калі вы забыліся пазначыць гэта больш, чым аднаго чалавека, зараз у вас ёсць сітуацыі, калі ня, што калонка больш не унікальная. Вы не маеце дзве нарыхтоўкі, так што вы можаце не больш адназначна ідэнтыфікаваць column-- ці вы не больш не магу адназначна ідэнтыфікацыі радка на аснове гэтага слупка. Гэта страціў усе свае Значэнне ў якасці першаснага ключа. І так, па-відаць, што я зрабіў тут настроены ідэнтыфікатар карыстальніка слупок аўтаматычнае прырашчэнне так, каб кожны раз я дадаць інфармацыю ў табліцы, ён будзе аўтаматычна дасць мне значэнне для першаснага ключа. Так што я ніколі не змагу забыцца гэта зрабіць, таму што база дадзеных зробіць гэта за мяне. Так што збольшага добра. І вось чаму мы атрымліваем 12 там, таму што я ўсталяваць, што калона да аўтаматычнае прырашчэнне. Калі я кагосьці яшчэ дадаў гэта было б 13, калі я дадаў нехта яшчэ было б 14, і гэтак далей. Так што давайце проста зробім яшчэ адну ўстаўку. Мы ўставіць ў табліцу мам, у прыватнасці, імя карыстальніка і маці слупкоў, значэння Крамер і Бабс Крамер. І таму мы павінны былі гэта раней. Пасля таго як мы выканаць якія SQL запытаў, мы павінны гэта. Мы дадалі Крамер і Бабс Крамер табліцы мам. Так што гэта ўстаўкі. ВЫБАР, што мы выкарыстоўваем, каб атрымаць Інфармацыя з табліцы. Так што гэта, як мы атрымліваем Інфармацыя з базы дадзеных. І таму абярыце каманды будзе вельмі часта выкарыстоўваюцца ў праграмаванні. Агульная framework-- Наогул шкілет выглядае так. Выберыце набор слупкоў з стол, і затым, неабавязкова, Вы можаце паказаць condition-- або тое, што мы звычайна выклікаюць прэдыкатаў, Звычайна тэрмін мы выкарыстоўваем у SQL. Але гэта ў асноўным тое, што канкрэтныя радкі вы хочаце атрымаць. Калі вы хочаце, каб, замест таго, каб усе, звузіць яе, гэта дзе вы маглі б зрабіць гэта. І тады, магчыма, вы таксама можаце замовіць па вызначаным слупка. Так, можа быць, вы хочаце, каб рэчы, адсартаваныя па алфавіце на аснове аднаго слупка або ў алфавітным парадку на аснове іншага. Зноў жа, дзе і ORDER BY з'яўляюцца неабавязковымі. Але яны, верагодна, будзе useful-- асабліва ДЗЕ будзе карысна звузіць так што вам не атрымаць усю базу дадзеных і назад павінны апрацаваць яго, вы проста атрымаеце кавалкі яго, што вы клапоціцеся аб. Так, напрыклад, я мог бы хацець выбраць Ідэнтыфікацыйны нумар і FullName ад карыстальнікаў. Так што, магчыма, гэта выглядае? Дык вось мой стол карыстальнікі. Я хачу, каб выбраць idnum і FULLNAME ад карыстальнікаў. Што я збіраюся атрымаць? Я збіраюся атрымаць гэта. Я не звузіць яе, таму я атрыманне ідэнтыфікацыйнага нумара для кожнага радка і я атрымліваю поўны назву ад кожнага радка. ДОБРА. Што рабіць, калі я хачу, каб выбраць пароль ад карыстальнікаў, так што зараз WHERE-- Я дадаю стане, predicate-- дзе idnum менш 12. Дык вось мая база дадзеных зноў, мой карыстальнікі табліцы зверху. Што я збіраюся атрымаць, калі я хачу выбраць гэтую інфармацыю, пароль, дзе ідэнтыфікатар карыстальніка ці idnum менш 12? Я збіраюся атрымаць гэта інфармацыю назад, праўда? Бывае, што idnum 10, менш чым 12, ідэнтыфікацыйны нумар 11 менш, чым 12 гадоў. Я атрымліваю пароль для гэтых радкоў. Вось тое, што я прасіў. Што пра гэта? Што рабіць, калі я хачу, каб выбраць зорку з мамы стол, дзе імя карыстальніка роўны Джэры? ОК, абярыце зорка спецыяльны накшталт джокера так званы што мы выкарыстоўваем, каб атрымаць усе. Так яны кажуць абярыце імя карыстальніка коску маці, якая апынуўся адзіным дзве калонкі гэтай табліцы, Я магу толькі выбраць зорку і атрымаць усе дзе імя карыстальніка роўны Джэры. І вось што я хацеў бы атрымаць калі я зрабіў што канкрэтны запыт. Цяпер, базы дадзеных выдатна, таму што яны дазваляюць нам арганізоўваць інфармацыю, магчыма, трохі больш эфектыўна, чым мы у адваротным выпадку. Мы не абавязкова, каб захоўваць кожны значная інфармацыя пра карыстальніка ў той жа табліцы. У нас было два сталах. Мы павінны захоўваць імя маці ва ўсіх, у і, магчыма, мы не павінны сацыяльнае забеспячэнне лік, гэта значыць іх узрост. Гэта не заўсёды трэба каб быць у той жа табліцы. Пакуль мы можам вызначыць адносіны паміж tables-- а вось дзе, што рэляцыйная Тэрмін база дадзеных роду прыходзіць у play-- тых часоў, як мы можам вызначыць паміж табліцамі, мы можам роду адсекі або абстрактныя рэчы, спосаб, дзе ў нас ёсць толькі сапраўды важная інфармацыя мы клапоцімся пра ў табліцы карыстальніка. І тады ў нас ёсць дапаможная інфармацыя або дадатковая інфармацыя ў іншых табліцах што мы можам падключыць вярнуцца на галоўную Табліца карыстальнікі пэўным чынам. Дык вось у нас ёсць гэтыя дзве табліцы, але існуе ўзаемасувязь паміж імі, дакладна? Падобна на тое, імя карыстальніка можа быць нешта што існуе агульнае паміж Гэтыя два розных табліц. Так што, калі ў нас зараз ёсць сітуацыя, калі мы хочаце атрымаць поўнае імя карыстальніка ад Табліца карыстальніка, і іх маці назваць з табліцы маці? Мы не ёсць спосаб, каб атрымаць што ў яго цяперашнім выглядзе, праўда? Там няма ні аднаго табліца, якая змяшчае як поўнае імя і імя маці. Мы не маем гэтую опцыю ад таго, што мы бачылі да гэтага часу. І таму мы павінны ўвесці Ідэя аб'яднання. І далучаецца, верагодна, найбольш complex-- гэта сапраўды найбольш складаная аперацыя мы будзем казаць аб ў відэа. Яны крыху больш складана, але як толькі вы атрымаеце павесіць яго, яны на самой справе не так ужо дрэнна. Гэта проста прыватны выпадак SELECT. Мы збіраемся, каб выбраць набор слупкі з табліцы, якія злучаюць у другой табліцы на некаторы прэдыкатаў. У гэтым выпадку, думаю, пра гэта хацеў this-- Табліца адзін адзін круг тут, табліца з двух яшчэ адзін круг тут. І, што прэдыкатаў частка ў сярэдзіне, гэта накшталт як, калі вы думаеце, аб выглядзе дыяграмы Венна, тое, што у іх ёсць агульнага? Мы хочам, каб звязаць гэтыя дзве табліцы на аснове таго, што яны маюць у агульным і стварыць табліцу гэтую гіпатэтычную што зліццё двух разам. Такім чынам, мы ўбачым гэта ў Прыклад і, магчыма, гэта дапаможа ачысціць яго няшмат. Так, можа быць, вы хочаце, каб выбраць user.fullname і moms.mother ад карыстальнікаў, захаджалых ў мамы стол у любой сітуацыі дзе слупок імя карыстальніка тое ж самае паміж імі. І гэта новы Сінтаксіс тут, гэты карыстальнік. і мамы .. Калі я раблю некалькі табліц разам, я магу пазначыць табліцу. Я магу адрозніць, у прыватнасці, што ў самым нізе ёсць. Я магу адрозніць карыстальніка слупок табліцы карыстальнікаў з калонкі Навіны з мамы стол, якія otherwise-- калі мы толькі што сказалі, імя карыстальніка роўны імя карыстальніка, што на самой справе не значыць нічога. Мы хочам зрабіць яго там, дзе яны супадаюць. Так што я магу пазначыць табліцу і Імя слупка ў выпадку ўзнікнення сітуацыі, дзе гэта было б незразумела, тое, што я кажу. Так што ўсё, што я раблю там я кажучы гэтую калонку з гэтай табліцы, і, быўшы вельмі відавочным. Такім чынам, яшчэ раз, я выбраўшы поўнае найменне і імя маці з табліцы карыстальнікаў звязаны адзін з адным з табліцай мам у любой сітуацыі дзе яны падзяляюць гэтую column-- яны падзяляюць гэтае імя карыстальніка паняцце. Дык вось сталы, якія мы мелі раней. Гэта стан нашага базы дадзеных, як яна існуе цяпер. Інфармацыя мы здабывання гэта для пачатку. Гэта новая табліца мы збіраемся стварыць аб'яднання іх разам. І звярніце ўвагу, што мы не вылучаючы Шэраг Ньюмана ў табліцы карыстальніка, і мы не вылучаючы Шэраг Крамера ў табліцы мам таму што ні адно існуе ў і sets-- ў абедзвюх табліцах. Адзіная інфармацыя, якая з'яўляецца агульным паміж імі Джэры ў абедзвюх табліцах і gcostanza ў абедзвюх табліцах. І таму, калі мы робім тое SQL JOIN, тое, што мы get-- і мы робім на самай справе атрымаць гэта. Гэта свайго роду часовай зменнай. Гэта як гіпатэтычная Зліццё двух табліц. Мы на самай справе што-небудзь як гэта, дзе мы зліліся разам сталы на Інфармацыя, што яны маюць у агульным. Так што users.username заўважыць і слупок moms.username, гэта тое ж самае. Гэта было інфармацыю, ўзгадняецца з карыстальнікаў стол і стол мамы. І таму мы аб'ядналі іх разам. Мы адкінутыя Крамер, таму што ён не існуе ў табліцы карыстальнікаў, і мы адмовіліся Ньюман, таму што ён не існуе ў табліцы мам. Так што гэта гіпатэтычны зліццё з дапамогай аперацыі злучэння з SELECT. А потым мы шукалі для Поўнае імя карыстальніка і маці карыстальніка, і такім чынам, гэта інфармацыя, якая мы хацелі б атрымаць ад агульнага запыту што мы зрабілі з SELECT. Такім чынам, мы далучыліся да табліцы разам і мы вынялі гэтыя два слупка, і так гэта тое, што мы хацелі б атрымаць. Але SQL JOIN і свайго роду складаным. Вы, верагодна, не будзе рабіць ім занадта шмат, але толькі мець некаторы ўяўленне пра шкілеце што вы маглі б выкарыстоўваць, каб аб'яднаць два сталы разам, калі вам трэба. Апошнія два з'яўляюцца трохі прасцей я абяцаю. Так абнаўленні, мы можам выкарыстоўваць UPDATE змяніць інфармацыю ў табліцы. Агульны фармат абнавіць некаторыя стол, усталяваць некаторыя калонкі да некаторага значэння Дзе некаторыя прэдыкатаў выконваецца. Так, напрыклад, мы маглі б абнавіць табліцу карыстальнікі і ўсталяваць пароль для балбатня йада, дзе ідэнтыфікацыйны нумар 10. Такім чынам, у гэтым выпадку, мы абнаўленне табліцы карыстальнікаў. Ідэнтыфікацыйны нумар 10 для што першая радок ёсць, і мы хочам, каб абнавіць пароль для балбатня. І вось што здарыцца. Гэта даволі проста, ці не так? Гэта проста вельмі просты мадыфікацыя табліцы. DELETE з'яўляецца аперацыя, каб мы выкарыстоўвалі выдаліць інфармацыю з табліцы. DELETE FROM табліца, у якой некаторыя прэдыкатаў выконваецца. Мы хочам, каб выдаліць з Табліца карыстальнікі, напрыклад дзе імя карыстальніка з'яўляецца Ньюман. Вы, напэўна, можаце здагадацца, што збіраецца адбудзецца тут пасля выканання SQL, што запыт, Ньюман сышоў з-за стала. Такім чынам, усе гэтыя аперацыі, як я ўжо сказаў, вельмі лёгка зрабіць у PhpMyAdmin. Гэта зручны інтэрфейс вельмі зручна. Але гэта патрабуе ручной працы. Мы не хочам, каб выкарыстоўваць ручной намаганні. Мы хочам, каб нашы праграмы на зрабіць гэта для нас, ці не так? Такім чынам, мы, магчыма, захочаце зрабіць гэта праграмна. Мы хочам, каб уключыць SQL і ёсць нешта яшчэ, каб зрабіць гэта для нас. Але тое, што мы бачылі, што дазваляе нам праграмна нешта зрабіць? Мы бачылі PHP, праўда? Ён уводзіць некаторыя дынамізм ў нашых праграмах. І так на шчасце, SQL і PHP гуляць вельмі добра разам. Там гэта функцыя ў PHP называецца запыт, які можа быць выкарыстаны. І вы можаце прайсці як Параметр або аргумент запытваць SQL-запыт, які Вы хацелі б выканаць. І PHP зробіць гэта ад вашага імя. Так пасля таго як вы падлучаныя да базы дадзеных з PHP, ёсць два праймерыз вы робіце гэта. Там нешта называецца MySQLi і тое, што называецца PDO. Мы не будзем удавацца ў велізарны колькасць дэталяў там. У CS50 мы выкарыстоўваем PDO. Пасля падлучэння да вашай базе даных, вы то можа рабіць запыты да базы дадзеных пры праходжанні запытаў у якасці аргументаў у PHP функцый. І калі вы гэта зробіце, вы захоўваць Выніковы набор у асацыятыўным масіве. І мы ведаем, як працаваць з асацыятыўныя масівы ў PHP. Так што я, магчыма, нешта сказаць як this-- $ results-- гэта ў PHP-- роўная запыт. І тады ўнутры з Функцыя запыту, аргумент што я перадаю запытаць які выглядае як SQL. І на самай справе, што гэта SQL. Гэта радок запыту, што я б хацеў выканаць на маёй базе дадзеных. І так у чырвоны, гэта PHP. Гэта SQL, што я інтэграцыі ў PHP шляхам гэта аргумент функцыі запыту. Я хачу, каб выбраць з FullName карыстальнікі, дзе ідэнтыфікацыйны нумар складае 10. І тады, можа быць, пасля таго, як я зрабіў гэта, Я мог бы сказаць нешта накшталт гэтага. Я хачу, каб раздрукаваць вароты паведамленне Дзякуй за ўваход у. І я хачу яго interpolate-- Я хачу интерполировать $ FullName вынікі. І вось як я працую з гэтым Асацыятыўны масіў, што я вярнуўся. $ FullName б вынікі у асноўным у канчатковым выніку раздрукоўкі, дзякуй за ўваходу ў сістэму, Джэры Seinfeld. Гэта было поўнае імя дзе idnum роўная 10. А так усё, што я раблю з'яўляецца Я now-- я захаваў мой запыт, вынікі запыту маёй і вынікі ў выглядзе асацыятыўнага масіва, і FullName гэтае імя слупок я атрымліваю за. Так што мой ключ у выніках Асацыятыўны масіў, што я хачу. Так што дзякуй за ўваходу ў $ Вынікі, FullName будзе раздрукаваць, будзе прытрымлівацца прама паміж тымі кучаравых брекеты, Джэры Seinfeld. І я хацеў, каб раздрукаваць паведамленне Дзякуй за ўваход у Джэры Seinfeld. Зараз, мы, верагодна, не хочаце, каб цяжка код рэчы, як, што ў, правільна? Мы маглі б зрабіць нешта накшталт друку е, дзе мы можам замяніць і, магчыма, збіраць розную інфармацыю, ці, можа быць, ёсць працэс запыту розная інфармацыя. І так запыт, функцыя запыту мае гэта паняцце роду замен вельмі падобны на друк е адсоткаў з і адсотак З, пытальныя знакі. І мы можам выкарыстоўваць пытанне знакі вельмі аналагічна друкаваць е падставіць зменных. Так, можа быць, ваш карыстальнік рэгіструецца ў раней, і вы захавалі свой ідэнтыфікацыйны нумар карыстальніка $ _SESSION У PHP супер глабальны ідэнтыфікатар ключа. Так, можа быць, пасля таго як яны ўвайшлі ў сістэму, ўсталяваць $ _SESSION ID роўны 10, Экстрапалюючы на ​​прыкладзе мы толькі што бачылі секунду таму. І таму, калі мы на самай справе выканаць Гэты запыт вынікі ў цяперашні час, было б падключыць 10, ці нешта ідэнтыфікатар значэнне $ _SESSION ёсць. І так, што дазваляе нам быць трохі больш дынамічным. Мы не жорсткага кадавання рэчы ў больш. Мы эканомім інфармацыі дзе-то і то мы можам выкарыстоўваць гэтую інфармацыю, каб зноў накшталт абагульніць тое, што мы хочам зрабіць, і проста падключыце і змены паводзіны нашай старонцы на чым заснавана ідэнтыфікацыйнага нумара карыстальніка на самай справе пасля таго, як яны ўвайшлі. Гэта таксама магчыма, хоць, што вашы вынікі ўстаноўлена можа складацца з некалькіх радкоў. У гэтым выпадку, у вас ёсць масіў arrays-- масіў асацыятыўных масіваў. І трэба проста паўтараць праз яго. І мы ведаем, як для перабору у масіве ў PHP, праўда? Дык вось, напэўна, самая Комплекс, што мы бачылі да гэтага часу. Гэта на самай справе аб'ядноўвае трох мовах разам. Тут, у чырвоны, гэта нейкая HTML. Я, мабыць, гэта starting-- фрагмент нейкі HTML, што ў мяне ёсць. Я пачынаю новы пункт, што Кажа мам Seinfeld тэлевізара. А потым адразу ж пасля Я пачынаю табліцу. А потым, пасля гэтага, я ёсць PHP, праўда? У мяне ўсё гэта PHP код там. Я, мабыць, збіраецца зрабіць запыт. І зрабіць запыт, я збіраюся быць з дапамогай выбару маці ад мам. Так што гэта getting-- гэта SQL. Такім чынам, сіні з'яўляецца SQL. Чырвоны мы ўбачылі секунду таму быў HTML. І вось зялёны PHP. Так што я раблю запыт у маёй базе дадзеных, я выбару ўсіх маці ў табліцы мам. Не толькі звузіўшы яго да прыватнасці шэраг, я прашу ўсіх з іх. Затым я правяраю, калі вынік ня роўнае раўняецца хлусня. Гэта проста мой спосаб праверкі свайго роду з, калі вынікі не роўны нулю, што мы хацелі б бачыць C, напрыклад. У асноўным гэта проста праверка, каб упэўнены, што ён на самай справе атрымаў дадзеныя назад. Таму што я не хачу, каб пачаць друк з дадзеных, калі я не атрымаў якіх-небудзь дадзеных. Тады для кожнага вынікаў У выніку Еогеасп сінтаксіс з PHP, усё, што я раблю друкуе з $ вынік маці. І таму я іду, каб атрымаць набор ўсіх маці each-- гэта масіў асацыятыўных arrays-- і я друкую кожны з а ўласнай радку табліцы. І гэта сапраўды вельмі шмат усяго, што трэба зрабіць. Я ведаю, што гэта крыху трохі тут адбываецца У гэтым апошнім прыкладзе з масівамі arrays-- масівы асацыятыўных масіваў. Але на самой справе гэта проста кіпяціць ўніз ў SQL, каб зрабіць запыт, звычайна выбіраючы пасля таго як мы ўжо размясціць інфармацыю ў табліцы, а затым проста пацягнуўшы яго. І гэта мы выцягнуць яго у гэтым канкрэтным выпадку. Мы здабываем б усе асобы маці з табліцы мам. Мы атрымалі цэлы набор з іх, і мы хачу для перабору і раздрукаваць кожны. Такім чынам, яшчэ раз, гэта, верагодна, найбольш складаны прыклад мы бачылі, таму што мы змешвання трох розныя мовы разам, праўда? Зноў жа, у нас ёсць HTML тут, у чырвоны, змяшаная з SQL тут у сіні, змяшаная з PHP ў зялёны. Але ўсе яны гуляюць прыгожа разам, гэта проста пытанне распрацоўкі добрыя звычкі, так што вы можаце атрымаць ім працаваць разам, як вы хочаце. І адзіны спосаб, каб сапраўды зрабіць што гэта практыка, практыка, практыка. Я Дуг Лойд, гэта CS50.