[Speel van musiek] DOUG LLOYD: In ons video's op die web ontwikkeling onderwerpe, ons het genoem die konsep van 'n databasis 'n paar keer, reg? So 'n databasis is jy waarskynlik vertroud met van sê die gebruik van Microsoft Excel of Google Spreadsheets. Dit is regtig net 'n georganiseerde stel tafels, rye en kolomme. En 'n databasis is waar ons webwerf winkels inligting wat belangrik vir ons webwerf om behoorlik te werk. Weereens, 'n baie algemene voorbeeld hier is die stoor gebruikersname en wagwoorde in 'n databasis, sodat wanneer 'n gebruiker inteken in ons webwerf, die databasis kan bevraagteken word om te sien As die gebruiker bestaan ​​in die databasis. En as hulle is, kontroleer dat hul wagwoord korrek is. En as hul wagwoord korrek is, dan kan ons hulle ook al page gee hulle versoek. So is jy waarskynlik weer, bekende met hierdie idee van Excel of Google Spreadsheets. Ons het databasisse, tafels, rye en kolomme. En dit is regtig soort van die fundamentele stel van hiërargiese verdeling hier. So hier is 'n Excel spreadsheet. En as jy al ooit hierdie geopen of 'n ander soortgelyke program jy weet dat hierdie hier is rows-- 1, 2, 3, 4, 5, 6, 7. Dit is kolomme. Miskien af ​​hier, maar jy kan hierdie funksie nie vreeslik much-- gebruik Ek sal in-- zoom ons het hierdie idee van 'n vel. So miskien hierdie velle, as Ek wissel heen en weer, verskillende tabelle wat bestaan ​​in my databasis. En as ons die voorbeeld al voortgaan die weg, die naam van die databasis is Boek 1. Miskien het ek Boek 2 en Boek 3. So elke Excel lêer is 'n databasis, elke vel is 'n tafel, en binnekant van elke tafel het ek hierdie idee van rye en kolomme. So hoe kan ek werk met hierdie databasis? Hoe kan ek inligting van dit te kry? Wel daar is 'n taal, die sogenaamde SQL-- wat ek gewoonlik net Sequel-- noem en dit staan ​​vir die Structured Query Language. En dit is 'n programmeertaal, maar dit is 'n redelik beperk programmering taal. Dit is nie heeltemal soos ander dat ons gewerk het met. Maar die doel van hierdie programmeertaal is om 'n navraag van 'n databasis te vra inligting van 'n databasis, vind inligting in 'n databasis, en so aan. Ons het ook in CS50-- en dit is 'n baie algemene platform, is dit genoem MySQL. Dit is wat ons gebruik in die kursus. Dit is 'n oop bron platform wat bepaal 'n sogenaamde relasionele database-- 'n databasis, effektief. Ons hoef nie te kry in te veel detail oor wat 'n relasionele databasis is. Maar die SQL taal is baie meesters in die werk met MySQL en ander soortgelyke style van relasionele databasisse. En baie installasies van MySQL kom met iets genoem phpMyAdmin, wat is 'n grafiese gebruikerskoppelvlak interface-- n GUI-- dat maak dit 'n bietjie meer gebruikersvriendelik te voer databasis navrae, omdat databasisse is nie net gebruik deur gevorderde programmeerders, reg? Soms is daar hierdie klein besighede, en hulle kan nie bekostig om huur 'n span van programmeerders, maar hulle moet nog steeds om te stoor inligting in 'n databasis. Iets soos phpMyAdmin maak dit baie maklik vir iemand wat nog nooit tevore geprogrammeer haal en vertroud te raak met die manier waarop om te werk met 'n databasis. Die probleem is, phpMyAdmin, terwyl dit is 'n fantastiese instrument vir leer oor databasisse, is dit handleiding. Jy gaan hê om aan te meld in dit en voer opdragte en tipe dinge in die hand. En soos ons weet uit ons voorbeeld op PHP web ontwikkeling, om te hand te doen dinge op ons webwerf, as ons wil 'n dinamiese, aktiewe reageer webwerf, miskien nie die beste benadering. Ons wil graag 'n manier om uit te vind hierdie dalk een of ander manier te outomatiseer. En SQL sal ons in staat stel om dit te doen. So wanneer ons gaan begin werk met SQL, moet ons eers 'n het databasis te werk. Skep van 'n databasis iets wat jy waarskynlik sal doen in phpMyAdmin, want jy sal net nodig om dit weer te doen, en die sintaksis om dit te doen is 'n baie meer eenvoudig. Dit is 'n baie makliker om dit te doen in 'n grafiese gebruikerskoppelvlak as uit tik dit as 'n opdrag. Die opdrag kan 'n bietjie omslagtig te kry. Net so, die skep van 'n tafel kan kry nogal 'n bietjie omslagtig as well. En so goed soos die skep van 'n databasis en die skep van 'n tafel, wat jy waarskynlik net gaan once-- doen een keer per tafel, een keer per database-- dit is OK om dit te doen in 'n grafiese koppelvlak. In die proses van skep van 'n tafel, jy sal het ook al die spesifiseer kolomme wat sal wees in daardie tafel. Watter soort inligting het jy wil om te stoor in die tabel? Miskien se naam 'n gebruiker en datum van geboorte, wagwoord gebruiker ID-nommer, en miskien stad en die staat, reg? En elke keer as ons wil 'n gebruiker by te voeg die databasis, ons wil al ses kry van daardie stukkies inligting. En ons doen deur die byvoeging rye na die tafel. Sodat ons eers 'n databasis te skep, dan skep ons 'n tafel. As deel van die skep van 'n tafel, ons vra elke kolom spesifiseer dat Ons wil graag in hierdie tabel. En dan as ons begin om by te voeg inligting aan die databasis en navraag die databasis van meer generally-- nie net toe te voeg, maar alles wat ons do-- ons sal die hantering met rye van die tabel, wat een inligting gebruiker van die hele stel. So elke SQL kolom in staat is om hou data van 'n spesifieke tipe data. Sodat ons soort van hierdie uitgeskakel idee van tipes data in PHP, maar hulle is weer hier in SQL. En daar is 'n baie tipes data. Hier is net 20 van hulle, maar dit is nie eens almal van hulle. So het ons idees soos INTs-- Integers-- ons weet waarskynlik dat hierdie kolom heelgetalle kan hou. En daar is variasies thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Miskien het ons nie altyd nodig vier byt. Miskien moet ons agt grepe, en so het ons kan hierdie variasies op heelgetalle gebruik om 'n bietjie meer ruimte doeltreffend. Ons kan desimale getalle te doen, ons kan doen swaai punt nommers. Dit is redelik soortgelyk. Daar is 'n paar verskille, en as jy sou wil om te kyk die SQL soort gids, jy kan sien wat die effense verskille tussen hulle. Miskien wil ons stoor inligting oor die datum en tyd. Miskien is ons die dop van wanneer die gebruiker by ons webwerf, en so miskien wil ons om 'n kolom wat het 'n datum, tyd of 'n tyd stempel wat dui wanneer die gebruiker eintlik onderteken. Ons kan geometrieën en linestrings doen. Dit is eintlik pretty cool. Ons kon kaart uit 'n geografiese gebied met behulp van GIS koördineer te erf uit 'n gebied. So eintlik kan stoor daardie soort van inligting in 'n SQL kolom. Die teks is net reuse druppels van die teks, miskien. ENUMs is soort van interessant. Hulle het eintlik bestaan ​​in C. Ons doen nie praat oor hulle, want hulle is nie vreeslik algemeen gebruik, ten minste CS50. Maar dit is 'n versyferde data tipe, wat in staat is om te hou beperk waardes. 'N baie goeie voorbeeld hier sou wees om 'n enum skep waar die sewe Moontlike waardes is Sondag, Maandag, Dinsdag, Woensdag, Donderdag, Vrydag, Saterdag, reg? Dat die tipe data Dag van Week bestaan ​​nie, maar ons kan 'n te skep vervat tipe data soos dat kolom net ooit kan hou een van die sewe moontlike waardes. Ons het almal vervat van die moontlike waardes. Dan het ons CHAR en VARCHAR, en ek het hierdie groen kleur want ons is eintlik gaan om 'n tweede neem om te praat oor die verskil tussen hierdie twee dinge. So CHAR, in teenstelling met C waar CHAR was 'n enkele karakter, in SQL n CHAR verwys na 'n vaste lengte string. En toe ons dit skep kolom, het ons eintlik kan die lengte van die string te spesifiseer. So in hierdie voorbeeld, Ons kan sê CHAR (10). Dit beteken dat elke element van daardie kolom sal bestaan ​​uit 10 grepe van inligting. Nie meer nie, niks minder nie. So as ons probeer en sit in 'n 15 bietjie of 'n 15 karakter element of waarde in hierdie kolom, ons net die eerste 10. As ons in die twee karakter lang waarde ons gaan die twee het karakters, en dan agt nul byt. Ons sal nooit meer doeltreffend as dit. A VARCHAR is soort van soos ons idee van 'n string dat ons vertroud met van C of van PHP. Dit is 'n veranderlike lengte string. En wanneer jy skep hierdie kolom, jy moet net spesifiseer die maksimum moontlike lengtes. So miskien 99 of 255 algemeen. Dit sou die maksimum lengte wees. En so as ons die stoor 15 karakter string, ons sal gebruik 15 grepe, miskien 16 grepe vir die null terminator. As ons 'n stoor drie karakter string, ons sal gebruik drie of vier grepe. Maar ons sal nie die volle 99. So hoekom sou ons albei? Wel, as ons moet uitvind hoe lang iets met 'n VARCHAR, ons het soort iteraat oor dit net soos ons gedoen het in C en uit te vind waar dit tot stilstand kom. Terwyl as ons weet dat alles in hierdie kolom is 10 grepe, miskien ons weet dat die inligting, kan ons spring 10 grepe, 10 grepe, 10 grepe, 10 grepe, en altyd die begin van die string. So kan ons 'n paar het vermors ruimte met 'n CHAR, maar miskien is daar 'n handel af van 'n beter spoed in opgevolg deur die databasis. Maar miskien wil ons die buigsaamheid van 'n VARCHAR in plaas van having-- As ons CHAR was 255, maar die meeste van ons gebruikers is net die skryf van drie of vier grepe waarde van inligting of drie of vier karakters werd van inligting. Maar sommige gebruikers is deur gebruik te maak die hele 255, miskien VARCHAR sou daar meer gepas wees. Dit is soort van 'n kompromis, en algemeen vir doeleindes van CS50, jy hoef nie te veel bekommerd wees oor Of jy nou 'CHAR of 'n VARCHAR gebruik. Maar in die werklike wêreld, hierdie dinge nie saak nie, want al hierdie kolomme neem werklike fisiese ruimte. En fisiese ruimte, in die werklike wêreld, kom teen 'n premie. So een ander oorweging wanneer jy die bou van 'n tafel is om een ​​kolom kies om te wees wat genoem word 'n primêre sleutel. En 'n primêre sleutel is 'n kolom waar elke enkele waarde is uniek. En dit beteken dat jy kan maklik kies uit 'n enkele ry net deur te kyk op die primêre sleutel van daardie ry. So byvoorbeeld, kan jy algemeen, met die gebruikers, wil nie twee gebruikers wat het dieselfde gebruiker ID nommer. En so miskien het jy baie van die inligting, en miskien twee gebruikers kan het dieselfde name-- jy het John Smith en John Smith. Dit is nie noodwendig 'n probleem, want daar is verskeie mense in die wêreld vernoem John Smith. Maar ons het net een gebruiker ID-nommer 10, 'n gebruiker ID-nommer 11, 12, 13. Ons het nie 'twee gebruikers met dieselfde nommer, en so miskien gebruiker ID-nommers sou 'n goeie primêre sleutel wees. Ons het nie enige duplisering het, en ons kan nou uniek identifiseer elke enkele ry net deur te kyk na wat kolom. Die keuse van primêre sleutels kan eintlik maak daaropvolgende tabel bedrywighede 'n baie makliker, want jy kan hefboom die feit dat sekere rye sal uniek wees, of 'n sekere kolom van jou databasis of tafel unieke te haal sal wees uit bepaalde rye. Jy kan ook 'n gesamentlike primêre sleutel, wat julle aanleiding kan vind te gebruik, wat net 'n kombinasie van twee kolomme wat gewaarborg om uniek te wees. So miskien het jy 'n kolom wat se en Bs, een kolom wat een, twee, en drie, maar jy sal altyd net 'n enkele A1, 'n enkele A2, en so aan en so aan. Maar jy kan 'n B2 het, 'n C2, of 'n A1, A2, A3, A4. So jy kan verskeie As, verskeie Bs, verskeie kinders, verskeie twees, maar jy kan net al ooit 'n het enkele A1, B2, C3, en so aan. So as ek gesê het, is 'n SQL programmeertaal, maar dit het 'n redelik beperkte woordeskat. Dit is nie heeltemal so uitgestrekte as C en PHP en ander tale dat ons praat in die kursus. Dit is meer 'n verbose taal as wat ons is gaan oor om te praat in hierdie video, want in hierdie video ons gaan om te praat oor vier operasies wat ons kan verrig op 'n tafel. Daar is meer as dit. Ons kan meer as dit te doen, maar vir ons doeleindes, ons oor die algemeen gaan word met behulp net vier operations-- insetsel, kies, te verander en verwyder. En jy kan waarskynlik intuïtief raai wat al vier hierdie dinge te doen. Maar ons sal 'n bietjie te gaan in detail oor elkeen. So vir doeleindes van hierdie video, laat ons veronderstel ons het die volgende twee tafels in 'n enkele databasis. Ons het 'n tabel genaamd Gebruikers wat vier columns-- ID-nommer, gebruikersnaam, wagwoord en volle naam. En ons het 'n tweede tafel in dieselfde databasis genoem Mammas wat net stoor inligting oor 'n gebruikersnaam en 'n ma. So vir al voorbeelde in hierdie video, sal ons gebruik word om hierdie databasis en daaropvolgende updates om dit te. So kom ons sê ons wil voeg inligting aan 'n tafel. Dit is wat die insetsel werking nie. In verduidelik al hierdie opdragte, ek gaan om jou te gee 'n algemene geraamte te gebruik. Omdat basies, die navrae gaan kyk mooi soortgelyke, ons net gaan verander effens verskillende stukkies inligting om verskillende dinge te doen met die tafel. So vir INSERT, die geraamte lyk dit soort van soos. Ons wil voeg in 'n bepaalde tafel. Dan het ons 'n oop hakies en 'n lys van kolomme wat ons wil waardes in te sit. Close hakies, die volgende waardes, en dan weer ons lys die waardes ons wil in die tabel om te sit. So 'n voorbeeld van hierdie sou die volgende wees. Ek wil voeg in die tafel gebruikers die volgende columns-- gebruikersnaam, wagwoord en die volle naam. So 'n nuwe ry waar ek sit in die drie kolomme en ons is gaan in die waardes te sit Newman, USMAIL en Newman. So in hierdie geval, is ek om die klein Newman in die kolom gebruikersnaam, wagwoord USMAIL en die volle naam kapitaal N Newman in die kolom die volle naam. So hier is wat die databasis lyk soos tevore. Hier is wat die tafel gebruikers op die top lyk soos voordat ons dit gedoen het. Na hierdie voer ons navraag, kry ons hierdie. Ons het 'n nuwe ry by die tafel. Maar let hierdie een ding dat ek nie spesifiseer, maar een of ander manier het ek nie 'n waarde het Want wat is die 12 reg hier. Ek het nie gesê ek wou sit ID nommer in daar. Ek wou gebruikersnaam sit, wagwoord volle naam. En ek het dit gedoen, is dit goed. Maar ek het dit ook 12. Hoekom het ek hierdie 12? Wel, dit blyk dat wanneer jy definieer 'n kolom wat gaan wees om jou primêre sleutel, wat is gewoonlik, soos ek gesê het, 'n ID-nommer. Dit is nie altyd noodwendig gaan 'n ID-nommer wees, maar dit is gewoonlik 'n goeie idee om wees 'n soort van heelgetal waarde. Jy het 'n opsie in phpMyAdmin wanneer jy skep jou databasis of jou tafel om dit te stel kolom as die motor die verhoog. Wat is 'n baie goeie idee wanneer jy werk met 'n primêre sleutel, omdat jy elke waarde wil in daardie kolom te wees uniek. En as jy vergeet om te spesifiseer dit vir meer as een persoon, jy het nou 'n situasie waar daardie kolom is nie meer uniek. Jy het twee spasies, so jy kan nie meer uniek identifiseer column-- of jy kan nie meer uniek identifiseer 'n ry gebaseer op wat kolom. Dit het al van sy waarde as 'n primêre sleutel. En so glo wat ek gedoen het hier is ingestel die gebruiker ID kolom motor inkrement sodat elke keer as ek inligting by te voeg om die tafel, dit sal my outomaties gee 'n waarde vir die primêre sleutel. So ek kan nooit vergeet om dit te doen nie, omdat die databasis sal dit doen vir my. So dit is soort van mooi. En so dit is hoekom ons kry 12 daar, want ek het stel dat kolom tot motor inkrement. As ek iemand anders bygevoeg dit sou wees 13, as ek bygevoeg iemand anders dit sou wees 14, en so aan. So laat ons net doen een inplanting. Ons sal voeg in die tafel mammas, in die besonder, die gebruikersnaam en moeder kolom, die waardes Kramer en Babs Kramer. En so het ons dit voor. Na voer ons dat SQL navraag, ons het hierdie. Ons het bygevoeg Kramer en Babs Kramer na die tafel mammas. So dit is die inbring. SELECT is wat ons gebruik om te onttrek inligting uit die tabel. So dit is hoe ons inligting uit die databasis. En so SELECT opdragte gaan wees baie dikwels gebruik in programmering. Die algemene framework-- die algemene geraamte lyk. Kies 'n stel van kolomme van 'n tafel, en dan opsioneel jy kan 'n condition-- spesifiseer of wat ons noem 'n tipies gesegde, is gewoonlik die term wat ons gebruik in SQL. Maar dit is basies wat spesifieke rye wat jy wil te kry. As jy wil, in plaas van om alles, smal dit af, dit is waar jy dit sou doen. En dan opsioneel, jy kan ook bestel deur 'n bepaalde kolom. So miskien het jy wil dinge gesorteer het alfabeties gebaseer op een kolom of alfabeties gebaseer op 'n ander. Weereens, waar en ORDER BY is opsioneel. Maar hulle sal waarskynlik useful-- veral WAAR sal nuttig te wees vernou sodat jy dit nie doen nie kry jou hele databasis terug en het om dit te verwerk, kry jy net die stukke dat jy omgee. So byvoorbeeld, ek wil dalk om te kies ID-nommer en die volle naam van die gebruikers. So, wat kan dit lyk? So hier is my gebruikers tafel. Ek wil idnum kies en die volle naam van die gebruikers. Wat gaan ek kry? Ek gaan om dit te kry. Ek het nie vernou dit af, so ek is kry die ID nommer vir elke ry en ek kry die volle noem van elke ry. OK. Wat gebeur as ek wil wagwoord kies Gebruikers WHERE-- so nou Ek is die toevoeging van 'n toestand, 'n predicate-- waar idnum is minder as 12. So hier is my databasis weer my gebruikers die tafel van die top. Wat gaan ek kry as ek wil kies dat die inligting, die wagwoord, waar die gebruiker ID of idnum is minder as 12? Ek gaan om dit te kry inligting terug, reg? Dit gebeur dat idnum is 10 minder as 12, ID-nommer 11 minder as 12. Ek kry die wagwoord vir diegene rye. Dit is wat ek gevra het. Wat van hierdie? Wat gebeur as ek wil sterre uit die kies mammas tafel waar gebruikersnaam gelyk Jerry? OK, kies ster is die spesiale soort van wild card sogenaamde wat ons gebruik om alles te kry. So hulle is kies sê gebruikersnaam komma ma, wat gebeur die enigste te wees twee kolomme van die tabel, Ek kan net kies ster en kry alles waar die gebruikersnaam gelyk Jerry. En so dit is wat ek sou kry As ek daardie spesifieke navraag. Nou, databasisse groot omdat hulle toelaat om inligting te organiseer dalk 'n bietjie meer doeltreffend as wat ons anders kan. Ons hoef nie noodwendig te slaan elke stukkie inligting relevant oor 'n gebruiker in dieselfde tafel. Ons het twee tafels daar. Ons moet stoor naam almal se ma se, en miskien het ons nie sosiale sekerheid nommer, ons het die datum van geboorte. Dit is nie altyd nodig te wees in dieselfde tafel. Solank as wat ons kan definieer verhoudings tussen die tables-- en dit is waar dat relasionele databasis termyn soort kom in play-- solank ons ​​kan definieer verwantskappe tussen die tabelle, kan ons soort van kompartemente of abstrakte dinge 'n manier, waar ons het net die regtig belangrike inligting ons omgee in tabel van die gebruiker. En dan het ons aanvullende inligting of ekstra inligting in ander tafels dat ons terug kan koppel aan die hoof gebruikers tafel in 'n bepaalde manier. So hier het ons hierdie twee tafels, maar daar is 'n verhouding tussen hulle, reg? Dit lyk asof gebruikersnaam dalk iets wees wat bestaan ​​in gemeen tussen hierdie twee verskillende tafels. So wat as ons nou 'n situasie waar ons wil volle naam 'n gebruiker se kry van tafel van die gebruiker se en hul ma se noem van die moeder tafel? Ons het nie 'n manier om te kry dat as dit nou is, reg? Daar is nie 'n enkele tabel bevat beide volle naam en die naam moeder. Ons het nie daardie opsie van wat ons tot dusver gesien het. En so het ons in te voer die idee van 'n sluit. En sluit aan by is waarskynlik die mees complex-- dit is regtig mees komplekse werking ons gaan om te praat oor in die video. Hulle is 'n bietjie ingewikkeld, maar sodra jy die hang kry dit, hulle is eintlik nie te sleg nie. Dit is net 'n spesiale geval van 'n te kies. Ons gaan 'n stel van te kies kolomme van 'n tafel by in 'n tweede tabel op sommige gesegde. In hierdie geval, dink oor dit graag this-- tafel een is een sirkel hier, Tabel Twee is 'n ander sirkel hier. En dat gesegde deel in die middel, dit is soort van soos as jy dink oor as 'n Venn-diagram, wat het hulle in gemeen? Ons wil hierdie twee tabelle gebaseer op wat hulle in gemeen het en die skep van hierdie hipotetiese tafel dit is die samesmelting van die twee saam. So sal ons sien dit in 'n voorbeeld en miskien sal help duidelik dit 'n bietjie. So miskien het jy wil om te kies user.fullname en moms.mother Gebruikers by die mammas tafel in elke situasie waar die kolom gebruikersnaam is dieselfde tussen hulle. En dit is 'n nuwe hier sintaks, hierdie gebruiker. en mammas .. As ek doen verskeie tafels saam, ek kan 'n tafel te spesifiseer. Ek kan onderskei in die besonder op wat op die heel onderste daar. Ek kan die gebruikersnaam onderskei kolom van die tabel gebruikers uit die rekening van die kolom mammas tafel, wat otherwise-- is as ons net sê gebruikersnaam gelyk gebruikersnaam, wat nie regtig beteken nie. Ons wil om dit te doen waar hulle pas. So kan ek die tafel en die spesifiseer kolom naam in die geval van 'n situasie waar dit onduidelik sou wees wat ek praat. So dit is al wat ek doen is daar ek is sê hierdie kolom van die tabel, en dat dit baie duidelik. So weer, ek kies die volle naam en die naam van die moeder se van die tafel gebruikers met mekaar verbind met die tabel mammas in elke situasie waar hulle deel wat column-- hulle deel wat gebruikersnaam idee. So hier is die tafels wat ons voorheen gehad het. Dit is die toestand van ons databasis soos dit nou bestaan. Die inligting wat ons onttrek is dit om te begin met. Dit is die nuwe tabel ons gaan skep die kombinasie van hierdie saam. En sien ons is nie die klem op Newman se ry in die tafel van die gebruiker se en ons is nie die klem op Kramer se ry in die tabel mammas want nie een bestaan ​​in beide sets-- in beide tabelle. Die enigste inligting wat in die algemeen tussen hulle is Jerry is in beide tafels en gcostanza is in beide tabelle. En so wanneer ons dit doen die SQL te sluit, wat ons get-- en ons doen eintlik kry hierdie. Dit is soort van 'n tydelike veranderlike. Dit is soos 'n hipotetiese samesmelting van die twee tafels. Ons het eintlik iets te kry soos hierdie, waar ons het saam saamgesmelt die tafels op die inligting wat hulle in gemeen het. So sien dat users.username en moms.username kolom dit is presies dieselfde. Dit was die inligting wat was in ooreenstemming van die gebruikers tafel en die tafel mammas. En so het ons saamgevoeg hulle saam. Ons weggegooi Kramer omdat hy nie bestaan ​​het nie in die tabel gebruikers, en ons weggegooi Newman, want Hy het nie bestaan ​​nie in die tabel mammas. So, dit is die hipotetiese samesmelting die gebruik van die JOIN werking van te kies. En dan is ons op soek na die volle naam gebruiker en moeder van die gebruiker en so is dit die inligting wat sou ons kry van die algehele navraag dat ons met kies. Sodat ons by die tafels saam en ons die twee kolomme onttrek, en so dit is wat ons sou kry. Maar SQL sluit 'n soort van ingewikkeld. Jy sal waarskynlik nie doen nie te veel, maar net 'n idee van die skelet wat jy kan gebruik om saam te smelt twee tafels saam as jy nodig het om. Die laaste twee is 'n bietjie eenvoudiger Ek belowe. So opdatering, kan ons UPDATE gebruik om inligting te verander in 'n tabel. Die algemene formaat is UPDATE paar tafel, SET sommige kolom om waarde Waar sommige gesegde tevrede is. So byvoorbeeld, kan ons wil na die tafel gebruikers werk en stel die wagwoord om yada yada, waar die ID-nommer is 10. So in hierdie geval, ons is opdatering van die tafel gebruikers. Die ID-nommer is 10 vir dat die eerste ry daar, en ons wil hê dat die werk wagwoord yada yada. En so dit is wat sou gebeur. Dit is redelik eenvoudig, reg? Dit is net 'n baie eenvoudige verandering aan die tafel. DELETE is die operasie ons gebruik om te vanaf 'n tabel te verwyder inligting. Verwyder uit tabel WHERE sommige gesegde tevrede is. Ons wil verwyder uit die gebruikers tafel byvoorbeeld waar die gebruikersnaam is Newman. Jy kan seker raai wat gaan hier gebeur nadat ons dat SQL navraag, Newman is weg van die tafel. So al hierdie bedrywighede, soos ek gesê het, is baie maklik om te doen in phpMyAdmin. Dit is 'n baie gebruikersvriendelike koppelvlak. Maar dit vereis handleiding moeite. Ons wil nie die handleiding moeite diens. Ons wil ons programme om doen dit vir ons, reg? Sodat ons kan wil doen hierdie programmaties. Ons wil SQL inkorporeer en iets anders om dit vir ons te doen. Maar wat het ons gesien dat toelaat ons programmaties iets te doen? Ons het gesien PHP, reg? Dit stel 'n paar dinamika in ons programme. En so gelukkig, SQL en PHP speel baie mooi saam. Daar is 'n funksie in PHP genoem navraag, wat gebruik kan word. En jy kan slaag as die parameter of die argument 'n SQL navraag navraag wat jy wil uit te voer. En PHP sal dit doen namens jou. So nadat jy verbind om jou databasis met PHP, daar is twee primêre jy dit doen. Daar is iets genoem MySQLi en iets genaamd BOB. Ons sal nie in 'n groot gaan bedrag detail daar. In CS50 gebruik ons ​​BOB. Nadat jy verbind om jou databasis, jy kan dan navrae jou databasis deur verby die navrae as argumente PHP funksies. En wanneer jy dit doen, slaan jy die resultaat in 'n assosiatiewe skikking. En ons weet hoe om te werk met assosiatiewe skikkings in PHP. So ek dalk iets sê soos this-- $ results-- dit is in PHP-- gelyk navraag. En dan binnekant van die navraag funksie wat argument dat ek verby om 'n navraag wat lyk soos SQL. En in die feit dat is SQL. Dit is die vraag wat ek nie wil string wil uit te voer op my databasis. En so in die rooi, dit is PHP. Dit is SQL dat ek die integrasie in PHP deur dit die argument om die navraag te funksioneer. Ek wil die volle naam kies uit gebruikers waar ID-nommer gelyk aan 10. En dan miskien nadat ek dit gedoen het, Ek kan iets soos hierdie te sê. Ek wil om uit te druk die Dankie vir die boodskap in te teken. En ek wil dit interpolate-- Ek wil om interpoleer $ resultate volle naam. En so dit is hoe ek werk met wat assosiatiewe skikking wat ek terug. $ resultate volle naam sou basies beland uit te druk, Dankie vir die aanteken in, Jerry Seinfeld. Dit was die volle naam waar idnum gelyk aan 10. En so al wat ek doen is ek now-- Ek gestoor my navraag, is die resultate van my navraag en die resultate in 'n assosiatiewe skikking, en die volle naam is die naam van die kolom ek besig was om vir. So dit is my sleutel in die resultate assosiatiewe skikking wat ek wil. So Dankie vir afteken, $ resultate, die volle naam sal druk, sal vashou reg in tussen die krullerige draadjies, Jerry Seinfeld. En ek sal graag die druk van die boodskap Dankie vir die aanteken in Jerry Seinfeld. Nou, ons het waarskynlik nie wil hê om hard te kode dinge soos wat in, reg? Wil ons dalk iets soos gedrukte doen f, waar ons kan vervang en miskien versamel verskillende inligting, of miskien het die navraag proses verskillende inligting. En so navraag, die navraag funksie het hierdie idee van soort substitusies baie soortgelyk aan druk f persent s en persent c, is vraagtekens. En ons kan die vraag gebruik punte baie analoog druk f om plaasvervanger veranderlikes. So miskien is jou gebruiker aangemeld vroeër, en jy hul gebruiker ID-nommer gered in $ _session van PHP super globale in die sleutel ID. So miskien nadat hulle aangeteken het, jy $ _session ID gelyk aan 10 stel, ekstrapolasie van die voorbeeld ons het net gesien 'n tweede gelede. En so wanneer ons eintlik voer Hierdie navraag die resultate nou, dit sou prop in 10, of wat ook al die $ _session ID waarde is. En sodat ons toelaat om 'n bietjie meer dinamiese. Ons is nie hard kodering dinge in nie. Ons spaar inligting iewers en dan ons kan daardie inligting weer te gebruik soort veralgemeen wat ons wil doen, en net plug-in en verandering die gedrag van ons blad gebaseer op wat die gebruiker se ID-nommer eintlik is nadat hulle in geteken nie. Dit is ook moontlik, al is, dat jou resultate stel kan bestaan ​​uit verskeie rye. In welke geval, jy het 'n verskeidenheid van arrays-- 'n verskeidenheid van assosiatiewe skikkings. En jy moet net Itereer deur dit. En ons weet hoe om Itereer deur 'n verskeidenheid in PHP, reg? So hier is waarskynlik die mees komplekse ding wat ons tot dusver gesien het. Dit integreer eintlik drie tale saam. Hier in rooi, dit is 'n HTML. Ek glo dit is starting-- 'n uittreksel van 'n paar HTML wat ek het. Ek begin 'n nuwe paragraaf wat sê die mammas van Seinfeld TV's. En dan onmiddellik daarna Ek begin 'n tafel. En dan na dit, ek het 'n paar PHP, reg? Ek het al van hierdie PHP-kode daar. Ek glo gaan maak 'n navraag. En om die navraag te maak, gaan ek gebruik word om SELECT moeders UIT mammas. So dit is getting-- dit is SQL. So het die die blou is SQL. Die rooi sien ons 'n tweede gelede was HTML. En die groen hier is PHP. So ek maak 'n navraag om my databasis, ek is al die kies moeders in die tabel mammas. Nie net vernouing dit af na die besonder ry, ek vra vir almal van hulle. Toe ek kyk of resultaat is nie gelykes gelyk onwaar. Dit is net my manier van kontrole soort van as die resultate is nie gelyk aan nul dat ons c byvoorbeeld sou sien. Basies dit is net die nagaan om te maak seker dat dit eintlik het data terug. Want ek wil nie begin met drukwerk uit data as ek nie enige inligting te kry. Dan vir elke resultate as gevolg van die foreach sintaksis van PHP, al wat ek doen is uit te druk $ gevolg moeders. En so ek gaan om 'n stel te kry van al die moeders van each-- dit is 'n verskeidenheid van assosiatiewe arrays-- en ek druk uit elkeen as sy eie ry van 'n tafel. En dit is baie mooi veel al wat daar is om dit. Ek weet daar is 'n bietjie bietjie gaan hier in hierdie laaste voorbeeld met skikkings van arrays-- skikkings van assosiatiewe skikkings. Maar is dit regtig nie net kook in SQL te maak van 'n navraag, gewoonlik kies nadat ons reeds sit inligting in die tabel en dan is dit net uit te trek. En dit is wat ons sou trek in hierdie spesifieke geval. Ons wil al die individuele onttrek moeders van die tafel mammas. Ons het 'n hele reeks van hulle, en ons wil deur Itereer en druk elke een. So weer, is dit waarskynlik die mees ingewikkelde byvoorbeeld ons gesien omdat ons meng drie verskillende tale saam, reg? Weereens, ons het HTML hier in rooi, gemeng met 'n paar SQL hier in blou, gemeng met 'n paar PHP in die groen. Maar al hierdie speel mooi saam, dit is net 'n kwessie van die ontwikkeling van goeie gewoontes sodat jy kan kry om saam te werk om die manier waarop jy wil. En die enigste manier om werklik te doen wat is om te oefen, oefen, oefen. Ek is Doug Lloyd, dit is CS50.