[Muzika] DOUG Lloyd: Në videot tona mbi tema web zhvillim, ne kemi përmendur konceptin e një bazë të dhënash disa herë, e drejtë? Pra, një bazë të dhënash ju jeni ndoshta i njohur me nga thonë se duke përdorur Microsoft Excel ose Google Spreadsheets. Është me të vërtetë vetëm një i organizuar vendosur i tabelave, rreshtave dhe kolonave. Dhe një bazë të dhënash është ku dyqanet tona Website informacion që është i rëndësishëm për faqen tonë të internetit për të punuar si duhet. Përsëri, një shembull i vërtetë i zakonshëm këtu po ruajtjen dhe fjalëkalimet në një bazë të dhënash, në mënyrë që kur një përdorues logs në faqen tonë të internetit, Baza e të dhënave mund të kërkohet për të parë nëse që përdoruesi ekziston në bazën e të dhënave. Dhe në qoftë se ata janë, duke kontrolluar se fjalëkalimi i tyre është i saktë. Dhe në qoftë se fjalëkalimi i tyre është i saktë, atëherë ne mund t'u japim atyre çfarëdo faqe ata janë duke kërkuar. Pra, ju jeni me siguri, përsëri, i njohur me këtë ide nga Excel ose Google Spreadsheets. Ne kemi bazat e të dhënave, tavolina, rreshta, dhe kolona. Dhe kjo është me të vërtetë lloj i vendosur themelore i avari hierarkik këtu. Kështu që këtu është një spreadsheet Excel. Dhe në qoftë se ju keni hapur ndonjëherë kjo apo një tjetër program i ngjashëm ju e dini se këto këtu janë rows-- 1, 2, 3, 4, 5, 6, 7. Këto janë kolona. Ndoshta këtu poshtë, edhe pse ju mund të nuk e përdorin këtë funksion tmerrësisht much-- Unë do të zoom in-- ne kemi kjo ideja e një fletë. Pra, ndoshta këto fletë, në qoftë se Unë alternativ mbrapa dhe me radhë, tavolina të ndryshme që ekzistojnë në bazën e të dhënave time. Dhe në qoftë se ne vazhdojmë shembullin gjithë mënyra, emri i kësaj baze të dhënash është Libri 1. Ndoshta unë kam Librin 2 dhe 3 Librin. Pra, çdo skedar Excel është një bazës së të dhënave, çdo fletë është një tabelë, dhe brenda çdo tavolinë kam kjo ide e rreshtave dhe kolonave. Pra, si mund të punojnë me këtë bazë të dhënash? Si mund të merrni informacion nga ajo? E pra nuk është një gjuhë e quajtur SQL-- që unë zakonisht vetëm thirrje Sequel-- dhe ajo qëndron për Strukturuar Query Language. Dhe kjo është një gjuhë programimi, por kjo është një programimit mjaft i kufizuar gjuhë. Kjo nuk është fare si të tjerët që ne kemi punuar me. Por qëllimi i këtij gjuhë programimi është për të query një bazë të dhënash, për të të kërkojë informacion nga një bazë të dhënash, të gjeni informacion në një bazës së të dhënave, dhe kështu me radhë. Ne gjithashtu, në CS50-- dhe kjo është një shumë platformë të përbashkët, ajo që quhet MySQL. Kjo është ajo që ne i përdorim në kurs. Kjo është një burim të hapur platformë që përcakton një të ashtu-quajtur database-- relacionale një bazë të dhënash, në mënyrë efektive. Ne nuk kemi nevojë për të marrë në shumë detaje në atë bazë të dhënash relacionale është një. Por SQL gjuha është shumë i aftë në pune me MySQL dhe të tjera të ngjashme stilet e bazave të të dhënave relacionale. Dhe shumë instalimet e MySQL vijnë me diçka quajtur phpMyAdmin, e cila është një grafik user interface-- një GUI-- që e bën atë një pak më shumë përdorues miqësore për të ekzekutuar pyetje bazës së të dhënave, sepse bazat e të dhënave nuk janë përdorur vetëm nga programuesit e avancuar, e drejtë? Ndonjëherë ka këto biznese të vogla, dhe ata nuk mund të përballojë për të punësojë një ekip i programuesve, por ata ende kanë nevojë për të ruajtur informacion në një bazë të dhënash. Diçka si phpMyAdmin bën shumë të lehtë për dikë i cili është programuar kurrë më parë për të marr dhe të bëhen të njohur me atë se si për të punuar me një bazë të dhënash. Problemi është, phpMyAdmin, ndërsa kjo është një mjet i shkëlqyer për të mësuar në lidhje me bazat e të dhënave, ajo është manual. Ju jeni do të duhet të hyni në ajo dhe të ekzekutojë komandat dhe llojin gjërat në dorë. Dhe, siç e dimë nga tonë Shembulli në programimin PHP web, që ka të bëjë me dorë gjëra në faqen tonë të internetit, në qoftë se ne duam një dinamike, të përgjegjshëm aktiv Faqja e internetit, ndoshta jo qasja më e mirë. Ne do të doja të gjetur një mënyrë për ndoshta Automate këtë disi. Dhe SQL do të na mundësojë për të bërë këtë. Pra, kur ne jemi duke shkuar për të fillojë të punojë me SQL, ne së pari duhet të ketë një bazës së të dhënave për të punuar me të. Krijimi i një bazë të dhënash është diçka që ju ndoshta do të bëni në phpMyAdmin, sepse ju do të duhet vetëm për të bërë atë një herë, dhe sintaksë për të bërë kështu është shumë më i thjeshtë. Kjo është një shumë më e lehtë për të bërë atë në një ndërfaqen e përdoruesit grafik se të shtypni atë si një komandë. Komanda mund të merrni pak i rëndë. Në mënyrë të ngjashme, duke krijuar një tabelë mund të merrni mjaft rëndë si. Dhe kështu gjëra të tilla si krijimin e një bazë të dhënash dhe duke krijuar një tabelë, të cilat ju jeni ndoshta vetëm do të bëjë once-- një herë në tryezë, një herë në database-- është në rregull për të bërë këtë në një ndërfaqe grafike. Në procesin e duke krijuar një tabelë, ju do të gjithashtu duhet të specifikojë të gjitha të shtyllat që do të jenë në atë tavolinë. Çfarë lloj informacioni të bëjë ju doni të ruajtur në tryezë? Ndoshta emri i një përdorues dhe data e lindjes, fjalëkalimin, numri përdorues ID, dhe ndoshta qytet dhe shtet, e drejtë? Dhe për çdo kohë doni të shtoni një përdorues në bazën e të dhënave, ne duam të merrni të gjithë gjashtë e atyre pjesëve të informacionit. Dhe ne bëjmë këtë duke shtuar rreshtave në tryezë. Pra, ne së pari të krijojë një bazë të dhënash, pastaj ne të krijuar një tabelë. Si pjesë e krijimit të një tavolinë, ne jemi pyetur të specifikojë çdo kolonë që ne do të dëshironim në këtë tabelë. Dhe pastaj si ne të fillojë për të shtuar informacioni në bazën e të dhënave dhe baza e të dhënave më query generally-- jo vetëm duke shtuar, por çdo gjë tjetër ne do-- ne do të jemi që kanë të bëjnë me rreshtave të tabelës, e cila është një informacion përdoruesit nga grup të tërë. Në mënyrë që çdo kolonë SQL është i aftë mbajtjen e të dhënave të një lloji të veçantë të të dhënave. Pra, ne lloj eliminuar këtë Ideja e llojeve të të dhënave në PHP, por ata janë kthyer këtu në SQL. Dhe ka shumë lloje të të dhënave. Këtu është vetëm 20 prej tyre, por kjo nuk është edhe të gjithë prej tyre. Pra, ne kemi ide si INTs-- Integers-- ne ndoshta e dini që kjo kolonë mund të mbajë integers. Dhe ka variacione thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Ndoshta ne nuk kemi gjithmonë nevojë për katër kafshon. Ndoshta ne duhet tetë bytes, dhe kështu që ne mund të përdorni këto variacione në integers të jetë pak më shumë hapësirë ​​të efektshme. Ne mund të bëjmë shifra dhjetore, ne mund të bëjë lundrues numra pikë. Këto janë mjaft të ngjashme. Ka disa dallime, dhe në qoftë se ju do si për të parë deri Lloj SQL e udhëzues, ju mund të shihni se çfarë i lehtë janë dallimet në mes tyre. Ndoshta ne duam të ruajtur informacion në lidhje me datën dhe kohën. Ndoshta ne jemi mbajtja e kur përdoruesi bashkua me faqen tonë të internetit, dhe kështu që ndoshta ne duam të ketë një kolonë që është një herë datë ose një timestamp që tregon kur përdoruesi në fakt nënshkruar. Ne mund të bëjmë geometries dhe linestrings. Kjo është në fakt shumë i ftohtë. Ne mund të ndajë një zonë gjeografike duke përdorur GIS koordinon për komplot nga një zonë. Pra, në fakt mund të ruajë atë lloj e informacionit në një kolonë SQL. TEXT është vetëm blobs gjigant të tekstit, ndoshta. ENUMs janë lloj i interesante. Ata në fakt ekzistojnë në C. Ne nuk bëjmë flasin për ta, sepse ata nuk janë të tmerrësisht përdoret zakonisht, të paktën CS50. Por kjo është një lloj i regjistruar të dhënave, e cila është e aftë për mbajtjen e vlerave limituar. Një shembull të vërtetë të mirë këtu do të jetë për të krijuar një enum ku shtatë Vlerat e mundëshme janë diel, e hënë, Martë, e mërkurë, e enjte, e premte, E shtunë, e drejtë? Atë ditë lloji i të dhënave Javën nuk ekziston, por ne mund të krijojë një renditura lloj të dhëna të tilla që kjo kolonë mund vetëm ndonjëherë të mbajnë një nga ato shtatë vlerave të mundshme. Ne kemi renditur të gjithë e vlerave të mundshme. Pastaj ne kemi CHAR dhe VARCHAR, dhe unë kam ngjyra këto gjelbër sepse ne jemi në fakt do të marrë një të dytë të flasin për ndryshim ndërmjet këtyre dy gjërave. Pra CHAR, ndryshe nga C ku CHAR ishte një karakter të vetëm, në SQL një CHAR referohet një varg gjatësi fikse. Dhe kur ne të krijuar këtë kolona, ​​ne fakt mund të specifikojë gjatësinë e vargut. Pra, në këtë shembull, mund të themi CHAR (10). Kjo do të thotë se çdo element i këtij kolonë do të përbëhet nga 10 bytes të informacionit. Jo më shumë, jo më pak. Pra, nëse ne përpiqemi dhe të vënë në një 15 bit ose një element 15 karakter ose vlera në këtë kolonë, ne jemi vetëm të marrë 10 e parë. Në qoftë se ne kemi vënë në dy Vlera karakter të gjatë, ne do të kemi dy karaktere, dhe pastaj tetë kafshon null. Ne kurrë nuk do të jetë më efikas se kaq. Një VARCHAR është lloj i si nocioni ynë i një varg se ne jemi të njohur me nga C ose nga PHP. Është një varg gjatësi variabël. Dhe kur ju krijoni kjo kolonë, ju vetëm specifikojë gjatesite maksimale të mundshme. Pra, ndoshta 99, ose zakonisht 255. Kjo do të jetë gjatësia maksimale. Dhe kështu që në qoftë se ne kemi qenë magazinimin e 15 varg karakter, ne do të përdorim 15 bytes, ndoshta 16 bytes për terminator null. Në qoftë se ne u ruajtjen një tre varg karakter, ne do të përdorim tre ose katër bytes. Por ne nuk do të përdorim të plotë 99. Pra, pse do të kemi të dy? E pra, në qoftë se ne duhet të kuptoj se si diçka gjatë është me një VARCHAR, ne duhet të llojit të iterate gjithë ajo ashtu si ne e bëmë në C dhe kuptoj se ku ndalet. Ndërsa në qoftë se ne e dimë se gjithçka në këtë kolonë është 10 bytes, ndoshta ne e dimë këtë informacion, ne mund të kërcejnë 10 bytes, 10 bytes, 10 bytes, 10 bytes, dhe gjithmonë gjeni fillimi i vargut. Pra, ne mund të ketë disa tretur hapësirë ​​me një char, por ndoshta ka një tregti off e të pasurit shpejtësi më të mirë në lundrimit bazën e të dhënave. Por ndoshta ne dëshironi fleksibiliteti i një VARCHAR në vend të having-- Nëse CHAR ynë ishte 255, por shumica e përdoruesve tonë ishin vetëm inputting tre ose katër bytes vlerë e informacionit ose tre ose katër karaktere vlerë e informacionit. Por disa përdorues janë duke përdorur të gjithë 255, ndoshta VARCHAR do të jetë më e përshtatshme atje. Kjo është lloj i një tregti off, dhe përgjithësisht për qëllime të CS50, ju nuk duhet të shqetësohen shumë për nëse ju përdorni një char apo një VARCHAR. Por në botën reale, këto gjëra kanë rëndësi, sepse të gjitha këto kolona marrë hapësirë ​​aktuale fizike. Dhe hapësirë ​​fizike, në bota e vërtetë, vjen në një premium. Pra, një konsideratë tjetër kur ju jeni ndërtimin e një tryezë të është që të marr një kolonë të jetë atë që quhet një kyç primar. Dhe një kyç primar është një kolonë ku çdo vlerë e vetme është unik. Dhe kjo do të thotë që ju mund të lehtë marr nga një rresht të vetëm vetëm duke shikuar në kyç primar të atij rresht. Kështu për shembull, ju në përgjithësi, me përdoruesit, nuk duan dy përdoruesit të cilët kanë të njëjtin numër përdorues ID. Dhe kështu që ndoshta ju keni shumë e informacionit, dhe ndoshta dy përdoruesit mund kanë të njëjtën name-- ju keni John Smith dhe John Smith. Kjo nuk është domosdoshmërisht një problem, sepse ka njerëz të shumta në botë me emrin John Smith. Por ne kemi vetëm një përdorues numrin ID 10, një përdorues numër 11, 12, 13 ID. Ne nuk kemi dy përdoruesit me numër të njëjtë, dhe kështu ndoshta numrat përdorues ID do të jetë një çelës i mirë primar. Ne nuk kemi asnjë dyfishimin, dhe ne tani mund unike të identifikojë çdo rresht të vetëm vetëm duke shikuar në atë kolonë. Zgjedhja çelësat primar në fakt mund të të bëjë operacionet e mëvonshme tryezë shumë më e lehtë për shkak se ju mund të levave fakti që rreshtat e caktuara do të të jetë unike, ose një kolonë të caktuar e bazës së të dhënave ose tabelë do të jetë unik për të marr Rreshtave jashtë veçanta. Ju gjithashtu mund të ketë një primar të përbashkët kyçe, të cilat ju mund të gjenin një pretekst për t'u përdorur, e cila është vetëm një kombinimi i dy kolonave që është e garantuar të jetë unike. Pra, ndoshta ju keni një të tillë Kolona se si dhe BS, një kolonë që është një, dy, dhe tre, por ju do të vetëm ndonjëherë kanë një A1 të vetme, një single A2, dhe kështu me radhë e kështu me radhë. Por ju mund të keni një B2, një C2, ose një A1, A2, A3, A4. Kështu që ju mund të keni sa të shumta, të shumta BS, ato të shumta, twos të shumta, por ju mund vetëm ndonjëherë të ketë një single A1, B2, C3, etj. Pra, siç thashë, SQL është një gjuhë programimi, por ajo ka një fjalor të kufizuar në mënyrë të drejtë. Kjo nuk është mjaft aq i shtrirë sa C dhe PHP dhe gjuhë të tjera që ne flasim në kurs. Kjo është më shumë një fjalëshumë gjuha sesa ajo që ne jemi do të flasim për këtë në Video, sepse në këtë video ne do të flasim për katër operacionet që ne mund të kryejnë në një tryezë. Ka më shumë se kjo. Ne mund të bëjmë më shumë se kjo, por për qëllimet tona, ne jemi në përgjithësi do të jetë duke përdorur vetëm katër insert operations--, zgjidhni, të rinovuar, dhe fshini. Dhe ju mund ndoshta me mend intuitive çfarë të katër këto gjëra bëjnë. Por ne do të shkojnë në një grimë i detajuar për secilën prej tyre. Pra, për qëllime të këtij Video, le të supozojmë ne kemi në vijim dy tavolina në një bazë të dhënash të vetme. Ne kemi një tabelë të quajtur Përdoruesit që ka katër columns-- numrin ID, emrin, fjalëkalimin, dhe emrin e plotë. Dhe ne kemi një sekondë tabela në të njëjtin dhënave quajtur moms që vetëm ruan informacion rreth një username dhe një nënë. Pra, për të gjithë shembujt në këtë video, ne do të të përdorin këtë bazë të dhënash dhe Përditësimet e mëvonshme për të. Pra, le të thonë se ne duam të shtoni informacion në një tryezë. Kjo është ajo që bën futur operacion. Në shpjegimin të gjithë këto komanda, unë jam duke shkuar për të ju jap një skelet të përgjithshme për të përdorur. Sepse në thelb, pyetje do duken mjaft të ngjashme, ne jemi vetëm duke shkuar për të ndryshuar pjesë pak më të ndryshme të informacionit për të bërë gjëra të ndryshme me tryezë. Pra, për INSERT, skeletit duket lloj i si kjo. Ne duam të futur në një tabelë të veçantë. Pastaj ne kemi një kllapë të hapur dhe një listë e shtyllave që ne duam të vënë vlerat në. Mbylle kllapa, pas vlerat, dhe pastaj përsëri, ne lista nga vlerat ne duam të vënë në tryezë. Pra, një shembull i kësaj do të jetë në vijim. Unë dua të futur në tryezë Përdoruesit columns-- vijim emrin, fjalekalimin dhe fullname. Pra, një rresht të ri, ku unë jam vënë në këto tri kolona dhe ne jemi do të vënë në vlerat Newman, USMAIL, dhe Newman. Pra, në këtë rast, unë jam vënë Newman vogle në kolonën emrin, fjalëkalimin USMAIL, dhe kryeqyteti i plotë emri N Newman në kolonën fullname. Kështu që këtu është ajo që baza e të dhënave dukej si më parë. Ja se çfarë tryeza përdoruesve në Top dukej si më parë ne e bëmë këtë. Pasi ne ekzekutojë këtë pyetje, ne të merrni këtë. Ne kemi shtuar një rresht të ri në tryezë. Por vini re këtë gjë që unë nuk përcaktoi, por disi kam një vlerë për të, e cila është ky 12 e drejtë këtu. Unë nuk them kam kërkuar për të vënë numrin e ID në atje. Unë të kërkuar për të vënë emrin, fjalëkalimin, fullname. Dhe unë e bëri atë, kjo është në rregull. Por unë gjithashtu mori këtë 12. Pse nuk kam marrë këtë 12? E pra, ajo rezulton se kur ju jeni të definimit një kolonë që do të jetë tuaj kyç primar, e cila është zakonisht, si i tha, një numër ID. Kjo nuk është gjithmonë domosdoshmërisht do të jetë një numër ID, por kjo është zakonisht një ide e mirë për të të jetë një lloj vlere integer. Ju keni një mundësi në phpMyAdmin kur ju jeni duke krijuar bazën e të dhënave tuaja ose tavolina juaj për të vendosur se kolona si bën rritjen auto. E cila është një ide me të vërtetë e mirë, kur ju jeni duke punuar me një kyç primar, sepse ju doni çdo vlerë në atë kolonë të jetë unike. Dhe në qoftë se ju harroni të specifikoni ajo për më shumë se një person, ju tani keni një situatë ku se kolona nuk është më unike. Ju keni dy bosh, kështu që ju nuk mund të më unike të identifikuar një column-- ose ju nuk mund në mënyrë unike identifikojnë një rresht të bazuar në atë kolonë. Ajo ka humbur të gjitha të saj Vlera si një kyç primar. Dhe kështu me sa duket atë që kam bërë këtu është konfiguruar ID e përdoruesit kolonë të rritjes auto në mënyrë që çdo herë që unë të shtoni informacion në tryezë, kjo automatikisht do të më jepni një vlerë për kyç primar. Kështu që unë kurrë nuk mund të harrojmë për të bërë atë, sepse baza e të dhënave do të bëjë atë për mua. Pra, kjo është lloj i bukur. Dhe kështu kjo është arsyeja pse ne kemi marrë 12 në atje, sepse unë kam vendosur atë kolonë deri në rritjes auto. Në qoftë se kam shtuar dikë tjetër ajo do të jetë 13, në qoftë se kam shtuar dikush tjetër ajo do të jetë 14, dhe kështu me radhë. Pra, le të vetëm të bëjë një futje më shumë. Ne do të futur në tryezë moms, në Veçanërisht, emri i përdoruesit dhe nëna kolona, ​​vlerat Kramer dhe Babs Kramer. Dhe kështu që ne kishim këtë para. Pasi kemi ekzekutuar se SQL query, ne kemi këtë. Ne kemi shtuar Kramer dhe Babs Kramer në tryezë moms. Kështu që është futur. SELECT është ajo që ne përdorim për nxjerrjen informacion nga tabela. Pra, kjo është se si ne të merrni informacion nga bazën e të dhënave. Dhe komandat kështu që zgjidhni do të jetë përdorur shumë shpesh në programimin. Gjenerali framework-- skelet i përgjithshëm duket si ky. Zgjidh një sërë kolona nga një tavolinë, dhe pastaj opsionale ju mund të specifikoni një condition-- ose ajo që ne zakonisht e quajmë një kallëzues, zakonisht është termi që përdorim në SQL. Por kjo është në thelb ajo që rreshtave të veçantë ju doni të merrni. Nëse ju doni të, në vend të gjetjes së çdo gjë, ngushtuar atë poshtë, kjo është ajo ku ju do të bëni atë. Dhe pastaj opsionale, ju gjithashtu mund të porositur nga një kolonë të veçantë. Pra, ndoshta ju dëshironi të keni gjërat e renditura alfabetike bazuar në një kolonë ose alfabetike bazuar në një tjetër. Përsëri, KU dhe ORDER BY janë fakultative. Por ata ndoshta do të jetë useful-- veçanërisht KU do të jenë të dobishme për kufizoni kështu që ju nuk e bëni të marrë të gjithë bazës së të dhënave tuaj mbrapa dhe duhet ta përpunojë atë, ju vetëm merrni copat e tij që ju intereson. Kështu për shembull, unë mund të dëshironi të zgjidhni Numri i ID dhe fullname nga përdoruesit. Pra, çfarë mund të duket kjo si? Kështu që këtu është tabela përdoruesit ime. Unë dua për të zgjedhur idnum dhe fullname nga përdoruesit. Çfarë jam unë do të merrni? Unë jam duke shkuar për të marrë këtë. Unë nuk e kam ngushtuar atë poshtë, kështu që unë jam duke marrë numrin e ID për çdo rresht dhe unë jam marrë të plotë emrin nga çdo rresht. NE RREGULL. Çka nëse unë dua të zgjidhni fjalëkalimin nga përdoruesit WHERE-- kështu tani Unë jam duke shtuar një gjendje, një predicate-- ku idnum është më pak se 12. Kështu që këtu është baza e të dhënave e mia përsëri, Përdoruesit tryezën time të lartë. Çfarë jam unë do të marrë në qoftë se unë dua të zgjidhni këtë informacion, fjalëkalimi, ku ID e përdoruesit ose idnum është më pak se 12? Unë jam duke shkuar për të marrë këtë informacion prapa, e drejtë? Kjo ndodh se idnum është 10, më pak se 12, numri i ID 11 më pak se 12. Unë jam marrë fjalëkalimin për këto rreshta. Kjo është ajo që kam kërkuar. Po në lidhje me këtë? Çka nëse unë dua të zgjidhni yll nga moms tabelë ku emri i përdoruesit është e barabartë me Jerry? OK, zgjidhni yll është i veçantë lloj kartë të egra ashtuquajtura që ne përdorim për të marrë gjithçka. Pra, ata janë duke thënë, përzgjidhni emri përdorues nënën presje, e cila ka ndodhur të jetë e vetmja Dy kolonat e kësaj tryeze, Unë vetëm mund të zgjidhni yll dhe të marrë çdo gjë ku emrin e barabartë Jerry. Dhe kështu kjo është ajo që unë do të merrni në qoftë se unë e bëra atë pyetje të veçantë. Tani, Bazat e të dhënave janë e madhe, sepse ato lejojnë na për të organizuar informacione mbase pak më efikase se ne mund të ndryshe. Ne nuk domosdoshmërisht për të ruajtur çdo pjesë e rëndësishme e informacionit në lidhje me një përdorues në të njëjtën tryezë. Ne kishim dy tavolina atje. Ne kemi nevojë për të ruajtur emri i nënës gjithëve së, dhe ndoshta ne nuk kemi sigurimet shoqërore numër, ne kemi datën e tyre të lindjes. Që nuk ka gjithmonë nevojë që të jetë në të njëjtin tabelës. Për sa kohë që ne mund të përcaktojë marrëdhëniet midis tables-- dhe kjo është ajo ku ajo relacionale Termi bazës së të dhënave lloj i vjen në play-- aq kohë sa ne mund të përcaktojë marrëdhëniet në mes të tabelave, ne mund të lloj compartmentalize ose gjëra abstrakte një mënyrë, ku ne vetëm kemi informacion të vërtetë e rëndësishme kemi kujdes për në tabelën e përdoruesit. Dhe pastaj kemi informacione ndihmëse ose informacion shtesë në tabela të tjera që ne mund të lidheni përsëri në kryesore Përdoruesit tavolinë në një mënyrë të veçantë. Pra, këtu ne kemi këto dy tavolina, por ka një marrëdhënie mes tyre, e drejtë? Duket sikur emrin e përdoruesit mund të jetë diçka që ekziston në mes të përbashkëta këto dy tavolina të ndryshme. Pra, çfarë nëse ne tani kemi një situatë ku ne doni të merrni emrin e plotë të një përdoruesi nga Tabela e përdoruesit, dhe nënës së tyre emrin nga tabela e nënës? Ne nuk kemi një mënyrë për të marrë se si ajo qëndron, e drejtë? Nuk ka asnjë tabelë e vetme që përmban si emri i plotë dhe emri i nënës. Ne nuk e kemi atë mundësi nga ajo që kemi parë deri tani. Dhe kështu që ne kemi për të futur ideja e një JOIN. Dhe bashkohet ndoshta Më të complex-- është e vërtetë operacioni më komplekse ne jemi duke shkuar për të folur në lidhje në video. Ata janë pak e komplikuar, por një herë ju merrni ul receptorin e telefonit të tij, ata në të vërtetë nuk janë shumë të këqija. Kjo është vetëm një rast i veçantë i një SELECT. Ne jemi duke shkuar për të zgjedhur një sërë kolona nga një tryezë të bashkuar në një tryezë të dytë në një kallëzues. Në këtë rast, të mendojnë për atë si this-- Tabela e një është një rreth mbi këtu, Tabela e dy është një tjetër rreth këtu. Dhe kjo pjesë kallëzues në mes, është lloj si në qoftë se ju mendoni se rreth si një diagram venn, çfarë ata kanë të përbashkët? Ne duam të lidhin këto dy tavolina bazuar në atë që ata kanë të përbashkët dhe për të krijuar këtë tabelë hipotetike që është bashkimi i të dy së ​​bashku. Pra, ne do të shohim këtë në një shembull dhe ndoshta kjo do të ndihmojë qartë atë pak. Pra, ndoshta ju doni të zgjidhni user.fullname dhe moms.mother nga përdoruesit e bashkuar në moms tavolinë në çdo situatë ku kolona emrin është e njëjtë mes tyre. Dhe kjo është një e re sintaksës këtu, këtë përdorues. dhe moms .. Në qoftë se unë jam duke bërë tavolina të shumta së bashku, unë mund të specifikoni një tryezë. Unë mund të dallojë në On veçantë që më në fund të fund atje. Unë mund të dallojë emrin e përdoruesit kolona e tabelës përdoruesve nga kolona emrin e tavolinë moms, të cilat janë otherwise-- në qoftë se ne vetëm tha emrin e barabartë me emrin, që nuk ka të vërtetë do të thotë asgjë. Ne duam të bëjmë atë ku ata përputhen. Kështu që unë mund të specifikoni në tryezë dhe Emri kolona në rast të një situate ku ajo do të jetë e paqartë çfarë jam duke folur rreth. Pra, kjo është e gjitha unë jam duke bërë është unë jam duke thënë se këtë kolonë nga kjo tabelë, dhe duke qenë shumë i qartë. Pra, përsëri, unë jam duke zgjedhjen e emrin e plotë dhe emrin e nënës nga tabela e përdoruesve të lidhura së bashku me tabela moms në çdo situatë ku ata ndajnë këtë column-- ata ndajnë këtë nocion emrin e përdoruesit. Kështu që këtu janë tabelat e kemi pasur më parë. Kjo është gjendja e tona bazës së të dhënave siç ekziston tani. Informacioni ne jemi nxjerrjen është kjo për të filluar me. Kjo është tryeza e re ne jemi duke shkuar për të krijuar kombinuar këto së bashku. Dhe vini re ne nuk jemi duke theksuar Rresht Newman në tryezën e përdoruesit, dhe ne nuk jemi duke theksuar Rresht kramer në tabelën moms sepse as njëra ekziston në si sets-- në të dy tabelat. I vetmi informacion që është e përbashkët në mes tyre është Jerry është në të dy tabelat dhe gcostanza është në të dy tabelat. Dhe kështu, kur ne bëjmë të SQL të bashkohen, ajo që ne get-- dhe ne bëjmë në fakt të marrë këtë. Kjo është lloj i një ndryshore të përkohshme. Është si një hipotetike bashkimi i dy tabelave. Ne fakt të marrë diçka si kjo, ku ne kemi shkrirë së bashku tabelat në informacioni që ata kanë të përbashkët. Pra, vini re se users.username dhe kolona moms.username, kjo është saktësisht e njëjtë. Kjo ishte informacioni që ishte në përputhje nga përdoruesit tryezë dhe tabela moms. Dhe kështu që ne shkrirë ato së bashku. Ne fshi Kramer, sepse ai nuk ekzistonte në tabelën e përdoruesit, dhe ne fshi Newman, sepse ai nuk ka ekzistuar në tabelë moms. Pra, kjo është bashkim hipotetike duke përdorur të bashkohet me funksionimin e SELECT. Dhe pastaj ne kemi qenë duke kërkuar për Emri i plotë përdoruesit dhe nëna e përdoruesit, dhe kështu ky është informacioni që ne do të merrni nga pyetje të përgjithshme që kemi bërë me SELECT. Pra, ne u bashkua me tavolina së bashku dhe ne nxjerrë këto dy kolona, dhe kështu që kjo është ajo që ne do të merrni. Por SQL bashkohet me një lloj të komplikuar. Ju ndoshta nuk do t'u bëjë shumë, por vetëm kanë disa ide të skeletit që ju mund të përdorni të bashkojë dy tavolina së bashku, nëse ju nevojitet për të. Dy të fundit janë një bit thjeshtë unë premtoj. Pra përditësimin, ne mund të përdorim UPDATE të ndryshojë informacionin në një tavolinë. Formati i përgjithshëm është UPDATE disa tavolinë, vendosur disa kolonë për disa vlera Ku disa kallëzues është i kënaqur. Kështu për shembull, ne mund të dëshironi për të rinovuar tabela e përdoruesve dhe të vendosur fjalëkalim për yada yada, ku numri ID është 10. Pra, në këtë rast, ne jemi përditësimin tabela e përdoruesve. Numri ID është 10 për se radhën e parë atje, dhe ne duam për të rinovuar Fjalëkalimi për yada yada. Dhe kështu kjo është ajo që do të ndodhë. Është shumë e thjeshtë, apo jo? Është vetëm një shumë e thjeshtë modifikim në tryezë. DELETE është operacioni kemi përdorur për të hiqni informacion nga një tavolinë. Fshini nga tabelë ku disa kallëzues është i kënaqur. Ne duam të fshini nga Përdoruesit tavolinë për shembull, ku emri i përdoruesit është Newman. Ju ndoshta mund të me mend se çfarë do të ndodh këtu pasi ne të ekzekutuar atë SQL pyetje, Newman është zhdukur nga tabela. Pra, të gjitha këto operacione, siç kam thënë, janë shumë të lehtë për të bërë në phpMyAdmin. Kjo është një ndërfaqe shumë përdorues miqësore. Por kjo kërkon përpjekje të manual. Ne nuk duam të punësojnë përpjekje manual. Ne duam që programet tona për bëni këtë për ne, apo jo? Pra, ne mund të dëshironi të bëni kjo programuar. Ne duam të përfshijnë SQL dhe kanë diçka tjetër për të bërë këtë për ne. Por ajo që kemi parë që lejon ne të programuar të bërë diçka? Ne kemi parë PHP, e drejtë? Ai fut disa Dinamizmi në programet tona. Dhe kështu për fat të mirë, SQL dhe PHP luajnë shumë mirë së bashku. Ka një funksion në PHP quajtur pyetje, të cilat mund të përdoret. Dhe ju mund të kalojë si parametër apo argumenti për të query një query SQL që ju do të donte për të ekzekutuar. Dhe PHP do të bëjë atë në emër tuaj. Pra, pasi ju keni lidhur në bazën e të dhënave tuaja me PHP, ka dy paraprake ju bëni këtë. Ka diçka të quajtur MySQLi dhe diçka që quhet PDO. Ne nuk do të shkojë në një të madhe Shuma detaje atje. Në CS50 ne përdorim PDO. Pasi ta keni lidhur në bazën e të dhënave tuaj, ju atëherë mund të bëjë pyetje bazës së të dhënave tuaj duke kaluar pyetje si argumente me funksionet PHP. Dhe kur ju bëni këtë, ju ruani rezultojnë të vendosur në një grup associative. Dhe ne e dimë se si të punojnë me vargjeve associative në PHP. Kështu që unë mund të them diçka si this-- $ results-- kjo është në PHP-- barabartë pyetje. Dhe pastaj brenda e Funksioni pyetje se argumenti që unë jam duke kaluar në query që duket si SQL. Dhe në fakt kjo është SQL. Kjo është string query që unë do të si për të ekzekutuar në bazën e të dhënave tim. Dhe kështu në të kuqe, kjo është PHP. Kjo është SQL që unë jam integruar në PHP duke ajo argumenti me funksionin pyetje. Unë dua për të zgjedhur fullname nga Përdoruesit ku numri i ID i barabartë me 10. Dhe atëherë ndoshta pasi kam bërë atë, Unë mund të them diçka si kjo. Unë dua të shtypura jashtë mesazh Faleminderit për prerjet në. Dhe unë dua atë interpolate-- unë dua të fut rezultatet $ fullname. Dhe kështu kjo është se si kam punuar me atë array associative që u ktheva. $ Rezultatet fullname do në thelb përfundojnë shtypjen jashtë, Faleminderit për prerjet në, Jerry Seinfeld. Ky ishte emri i plotë ku idnum barabartë me 10. Dhe kështu të gjitha unë jam duke bërë po unë jam now-- I ruajtur query im, rezultatet e pyetjes sime dhe rezulton në një rrjet asociative, dhe fullname është emri i kolona I was getting për. Pra, kjo është çelësi im në rezultatet array associative që unë dua. Pra, Faleminderit për prerjet në, $ rezultatet, fullname do të shtypura jashtë, do të rrinë të drejtë në mes të këtyre kaçurrel formatimin e teksteve, Jerry Seinfeld. Dhe unë do të doja të shtypura jashtë mesazhit Faleminderit për prerjet në Jerry Seinfeld. Tani, ne ndoshta nuk duan të vështirë Kodi gjëra të tilla në, e drejtë? Ne mund të dëshironi të bëni diçka si të shtypura f, ku ne mund të zëvendësojë dhe ndoshta mbledhin informacione të ndryshme, ose ndoshta kanë procesin pyetje informacione të ndryshme. Dhe kështu query, funksioni pyetje ka Ky nocion i lloj zëvendësime shumë të ngjashme për të shtypur f qind s dhe c qind, është pikëpyetje. Dhe ne mund të përdorim pyetje shënon shumë analoge për të shtypur dh të variablave zëvendësues. Pra, ndoshta përdorues juaj identifikuar më herët, dhe ju shpëtuam përdoruesit numrin e tyre ID në $ _session e PHP super global në ID kyç. Pra, ndoshta pasi keni hyrë në, keni vendosur $ _session ID e barabartë me 10, nxjerrjen nga shembulli ne vetëm e pa një të dytë më parë. Dhe kështu, kur ne fakt ekzekutuar ky query rezultatet tani, kjo do të vihet në prizë 10, apo çfarëdo vlera $ _session ID është. Dhe kështu që na lejon të të jetë pak më dinamike. Ne nuk jemi të vështirë kodim gjërat në më. Ne jemi duke kursyer informacion diku dhe pastaj ne mund të përdorin këtë informacion për të përsëri lloj i përgjithësuar atë që ne duam të bëjmë, dhe vetëm plug-in dhe ndryshimi sjellja e faqes tonë në bazë të çfarë numri ID e përdoruesit të vërtetë është pasi ata kanë hyrë në. Është gjithashtu e mundur, edhe pse, se rezultatet e tu i vunë mund të përbëhet nga disa rreshta. Në të cilin rast, ju keni një grup i arrays-- një grup prej vargjeve associative. Dhe ju vetëm duhet të iterate nëpërmjet saj. Dhe ne e dimë se si për të iterate përmes një grup në PHP, e drejtë? Kështu që këtu është ndoshta më gjë komplekse ne kemi parë deri tani. Ajo në fakt integron tri gjuhë së bashku. Këtu në të kuqe, kjo është një HTML. Unë jam me sa duket starting-- kjo është një copë e disa HTML që kam. Unë jam duke filluar një paragraf të ri që thotë se moms të TV-së Seinfeld. Dhe pastaj menjëherë më pas Unë jam duke filluar një tabelë. Dhe pastaj pas kësaj, unë kanë disa PHP, apo jo? Unë kam të gjithë të këtij kodi PHP në atje. Unë jam me sa duket duke shkuar për të bërë një pyetje. Dhe për të bërë pyetje, unë jam duke shkuar për të jetë duke përdorur nëna Zgjidh nga moms. Pra, kjo është getting-- kjo është SQL. Pra blu është SQL. E kuqe ne pamë një të dytë më parë ishte HTML. Dhe gjelbër këtu është PHP. Kështu që unë jam duke e bërë një pyetje në bazën e të dhënave tim, unë jam përzgjedhur gjithë e nënat në tabelë Moms. Jo vetëm ngushtuar atë poshtë për të veçantë rresht, unë jam duke kërkuar për të gjithë ata. Pastaj unë kontrolloj nëse rezultati është jo të barabartë barabartë rreme. Kjo është vetëm mënyra ime e kontrolluar lloj e nëse rezultatet nuk është e barabartë me null, se ne do të shohim c për shembull. Në thelb kjo është vetëm duke kontrolluar për të bërë i sigurt se ai në fakt mori të dhënat e mbrapa. Sepse unë nuk dua të filluar shtypjen nga të dhënat e nëse unë nuk e kam marrë asnjë të dhënë. Pastaj për çdo rezulton si rezultat Sintaksa foreach nga PHP, të gjitha unë jam duke bërë është shtypje nga nënat rezultat $. Dhe kështu që unë jam duke shkuar për të marrë një sërë të gjitha nënat e each-- është një grup i associative arrays-- dhe unë jam shtypje nga secili si rresht e vet të një tryezë. Dhe kjo është me të vërtetë mjaft sa e gjitha nuk është për atë. Unë e di se ka pak bit ndodh këtu në këtë shembull të fundit me vargjeve të arrays-- vargjeve të vargjeve associative. Por me të vërtetë ka vetëm të valoj poshtë në SQL për të bërë një pyetje, zakonisht zgjedhur pasi ne kemi tashmë vënë informacion në tryezë, dhe pastaj vetëm të tërhequr atë jashtë. Dhe kjo është që ne do të tërheqë atë në këtë rast të veçantë. Ne do të ekstrakt gjithë e individit Nënat nga tabela Moms. Ne morëm një seri e tërë e tyre, dhe ne duan të iterate nëpër dhe të shtypura nga cdo njeri. Pra, përsëri, kjo është ndoshta shembulli më i komplikuar ne kemi parë, sepse ne jemi përzierjen tre gjuhë të ndryshme së bashku, apo jo? Përsëri, ne kemi HTML këtu në të kuqe, të përziera me disa SQL këtu në blu, të përziera me disa PHP në të gjelbër. Por të gjitha këto luajnë bukur së bashku, është e vetëm një çështje e zhvillimit të zakonet e mira në mënyrë që ju mund të merrni ata që të punojnë së bashku në mënyrë që ju dëshironi. Dhe e vetmja mënyrë për të vërtetë të bëjë atë është praktikë, praktikë, praktikë. Unë jam Doug Lloyd, kjo është CS50.