>> [Muziek]
DOUG LLOYD: In onze video's op web ontwikkeling onderwerpen,
we hebben het concept van de een database een paar keer, toch?
Dus een database die u bent waarschijnlijk bekend met uit
zeggen dat het gebruik van Microsoft Excel of Google Spreadsheets.
Het is eigenlijk gewoon een georganiseerde set van tabellen, rijen en kolommen.
>> En een databank waarin onze website winkels
belangrijke informatie voor onze website goed te laten werken.
Nogmaals, een heel bekend voorbeeld hier is het opslaan van gebruikersnamen en wachtwoorden
in een database, zodat wanneer een gebruiker inlogt op onze website,
de database kan worden opgevraagd om te zien indien die gebruiker in de database.
En als ze zijn, controleren of hun wachtwoord correct is.
En als hun wachtwoord correct is, dan kunnen we hen wat pagina te geven
ze vraagt.
>> Dus je bent waarschijnlijk, nogmaals, bekend met dit idee van Excel of Google
Spreadsheets.
We hebben databases, tabellen, rijen en kolommen.
En dat is echt een soort van de fundamentele set
hiërarchische uitsplitsing hier.
Dus hier is een Excel-spreadsheet.
En als je ooit deze geopend of een ander soortgelijk programma
je weet dat deze zijn hier rows-- 1, 2, 3, 4, 5, 6, 7.
Deze kolommen zijn.
>> Misschien hier beneden, hoewel je misschien deze functie niet vreselijk much-- gebruiken
Ik zal in-- zoomen we Dit idee van een blad.
Dus misschien deze bladen, indien Ik afwisselend heen en weer,
zijn verschillende tabellen die bestaan ​​in mijn database.
En als we het voorbeeld allen blijven weg, de naam van deze databank
is Boek 1.
Misschien heb ik Boek 2 en Boek 3.
Dus elke Excel-bestand is een databank, elk blad is een tabel,
en de binnenkant van elke tafel heb ik Dit idee van rijen en kolommen.
>> Dus hoe kan ik werken met deze database?
Hoe kan ik de informatie uit te halen?
Wel is er een taal genaamd SQL-- die ik meestal gewoon Sequel-- bellen
en het staat voor de Structured Query Language.
En het is een programmeertaal, maar het is een vrij beperkt programmering
taal.
Het is niet helemaal zoals anderen dat we hebben gewerkt.
Maar het doel van deze programmeertaal
is te vragen een databank, Vraag informatie over een database,
vinden van informatie in een gegevensbestand, enzovoort.
>> We hebben ook in CS50-- en het is een zeer gemeenschappelijk platform, het heet MySQL.
Dat is wat we gebruiken in de cursus.
Het is een open source platform dat voorziet in
een zogenaamde relationele database-- een database, effectief.
We hoeven niet te krijgen te veel in detail
wat een relationele database.
Maar de SQL-taal is zeer bedreven in het werken
met MySQL en andere soortgelijke stijlen van de relationele databases.
>> En vele installaties MySQL komen met iets
genaamd phpMyAdmin, die is een grafische user
interface-- een GUI-- dat maakt het een beetje meer
gebruiksvriendelijk te voeren database queries,
omdat de databases worden niet alleen gebruikt door geavanceerde programmeurs, toch?
Soms zijn er deze kleine bedrijven,
en ze kunnen zich niet veroorloven om het huren van een team van programmeurs,
maar ze moeten nog steeds op te slaan in een database.
>> Zoiets als phpMyAdmin maakt het zeer eenvoudig voor iemand
wie nooit naar geprogrammeerde pick-up en vertrouwd te raken met de manier waarop
werken met een database.
Het probleem is, phpMyAdmin, terwijl Het is een fantastische tool voor het leren
over databases, is handmatig.
Je gaat te hebben om in te loggen het en commando's uitvoeren en het type
dingen in de hand.
>> En zoals we weten uit Bijvoorbeeld op PHP web programmeren,
handmatig te hoeven doen dingen op onze website,
als we willen een dynamische, actieve responsieve website, misschien niet de beste aanpak.
We willen een manier te vinden dit misschien een of andere manier te automatiseren.
En SQL zal ons in staat stellen om dit te doen.
Dus toen we gaan begint te werken met SQL,
moeten we eerst een hebben database werken.
Een database iets wat je waarschijnlijk
zal doen in phpMyAdmin, omdat je hoeft alleen maar om het een keer te doen,
en de syntax daarvoor is een stuk eenvoudiger.
Het is een stuk makkelijker om het te doen in een grafische gebruikersinterface
dan uit te typen als een opdracht.
Het commando kan een beetje lastig te krijgen.
Ook het creëren van een tafel nogal een beetje omslachtig ook.
En dus dingen zoals het maken van een database en het creëren van een tafel, die je bent
waarschijnlijk alleen maar once-- doen eenmaal per tafel, een keer per database--
het OK is om dat te doen in een grafische interface.
In het proces van het creëren van een tafel, je zult
moeten ook alle opgeven kolommen die zal zijn in die tabel.
Wat voor soort informatie te doen u wilt opslaan in de tabel?
Misschien de naam van een gebruiker en datum van geboorte, wachtwoord, gebruikersnaam ID-nummer, en misschien
stad en staat, toch?
>> En voor elke keer als we willen een gebruiker toe te voegen de database, we willen alle zes te krijgen
van die stukjes informatie.
En dat doen we door het toevoegen van rijen aan de tabel.
Dus we eerst een database te maken, dan creëren we een tafel.
Bij het maken een tafel, we zijn gevraagd
elke kolom geven dat willen we in deze tabel.
En vervolgens als we beginnen te voegen gegevens aan de database
en opvragen van de database meer generally-- niet alleen toe te voegen:
maar alles wat we doen-- we zullen omgaan
met rijen van de tabel, dat een gebruikersinformatie's van de hele set.
>> Dus elke SQL kolom staat die gegevens van een bepaald gegevenstype.
Dus we soort van dit geëlimineerd idee van data types in PHP,
maar ze zijn hier terug in SQL.
En er is een heleboel soorten data.
Hier is slechts 20 van hen, maar het is niet eens allemaal.
Dus we hebben ideeën zoals INTs-- Integers-- weten we waarschijnlijk
Deze informatie integers kan bevatten.
En er zijn variaties thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT.
Misschien hebben we niet altijd nodig vier beten.
Misschien moeten we acht bytes, en dus hebben we kunnen deze variaties op integers
om een ​​beetje meer ruimte efficiënt.
We kunnen decimale getallen doen, we kan doen floating point getallen.
Deze zijn redelijk vergelijkbaar.
Er zijn enkele verschillen, en als je zou
graag opzoeken van de SQL soort gids, je
kan zien wat de lichte verschillen daartussen.
>> Misschien willen we opslaan informatie over datum en tijd.
Misschien zijn we het bijhouden van wanneer de gebruiker toegetreden tot onze website,
en dus misschien willen we aan een kolom die moet
een datum tijd of een tijdstempel die geeft aan wanneer de gebruiker daadwerkelijk
ingeschreven.
We kunnen geometrieën en regelstrings doen.
Dit is eigenlijk best cool.
We konden in kaart een geografische gebied met gebruikmaking
GIS-coördinaten te plotten uit een gebied.
Dus eigenlijk kan opslaan dat soort informatie in een SQL kolom.
>> TEXT is gewoon gigantisch blobs van tekst, misschien.
ENUMs zijn soort interessant.
Ze eigenlijk bestaan ​​in C. We doen niet praten over hen, omdat ze niet
verschrikkelijk veel gebruikte, althans CS50.
Maar het is een opgesomd type gegevens, die kan voor beperkte waarden.
>> Een heel goed voorbeeld zou zijn een enum creëren waarbij de zeven
mogelijke waarden zijn zondag, maandag, Dinsdag, woensdag, donderdag, vrijdag,
Zaterdag, toch?
Dat soort gegevens Dag van Week niet bestaat,
maar we konden een creëren opgesomd soort gegevens zoals
dat die kolom alleen maar kan vasthouden zo'n zeven mogelijke waarden.
We hebben allemaal opgesomd mogelijke waarden.
>> Dan hebben we CHAR en VARCHAR, en ik heb deze kleur groen
omdat we eigenlijk gaan om een ​​tweede te nemen
om te praten over het verschil tussen deze twee dingen.
Dus CHAR, in tegenstelling tot C waarbij CHAR was een enkel teken,
in een SQL CHAR betreft een vaste lengte string.
En als we deze creëren kolom, we eigenlijk
kan de lengte van de string opgeven.
>> In dit voorbeeld, We zouden kunnen zeggen CHAR (10).
Dat betekent dat elke element van die kolom
bestaat uit 10 bytes van gegevens.
Niet meer niet minder.
Dus als we proberen en in een 15 bit of een 15 karakter element
of de waarde in deze kolom, we alleen de eerste 10.
Als we in de twee karakter lange waarde,
we gaan naar de twee hebben personages, en dan acht nul beten.
We zullen nooit efficiënter zijn dan dat.
>> Een VARCHAR is een soort ons begrip tekenreeks
die we kennen met van C of PHP.
Het is een variabele lengte string.
En als je te maken deze column, je gewoon
geeft u de maximaal mogelijke lengtes.
Dus misschien 99, of algemeen 255.
Dat zou de maximale lengte.
En dus als we het opslaan 15 tekenreeks,
we zouden gebruiken 15 bytes, misschien 16 bytes voor de null-terminator.
Als we het opslaan van een drie tekenreeks,
we gebruik van drie of vier bytes.
Maar we zouden niet de volledige 99.
>> Dus waarom zouden we hebben allebei?
Nou, als we nodig hebben om erachter te komen hoe lang iets met een VARCHAR,
we moeten soort iterate overheen net als wij deden in C
en erachter te komen waar het stopt.
Terwijl als we weten dat alles in deze kolom is 10 bytes, misschien
We weten dat de informatie kunnen we springen 10 bytes, 10 bytes, 10 bytes, 10 bytes,
en altijd de begin van de string.
>> Dus kunnen we sommige hebben verspilde ruimte met een char,
maar misschien is er een trade off van het hebben van een betere snelheid
in het navigeren in de database.
Maar misschien willen we de flexibiliteit van een VARCHAR
in plaats van having-- Als onze CHAR was 255, maar de meeste van onze gebruikers
waren alleen invoeren drie of vier bytes waarde van informatie of drie of vier
karakters waarde van informatie.
>> Maar sommige gebruikers werd met behulp het geheel 255, misschien
VARCHAR zouden er meer geschikt.
Het is een soort van een afweging, en veelal ten behoeve van de CS50,
je hoeft niet te veel zorgen over te maken Of u nu een CHAR of VARCHAR gebruiken.
Maar in de praktijk, deze dingen toe doen omdat al deze kolommen
nemen werkelijke fysieke ruimte.
En fysieke ruimte, in de echte wereld, komt op een premie.
>> Dus een andere overweging als je het bouwen van een tafel
is een kolom te halen wat heet een primaire sleutel.
En een primaire sleutel is een kolom waar elke enkele waarde is uniek.
En dat betekent dat u gemakkelijk kiezen uit een enkele rij gewoon door te kijken
op de primaire sleutel van die rij.
Zodat u bijvoorbeeld algemeen, met gebruikers,
wil niet dat twee gebruikers die hebben hetzelfde gebruikers-ID-nummer.
En dus misschien heb je veel informatie,
en misschien twee kunnen gebruikers hebben dezelfde name--
je hebt John Smith en John Smith.
Dat is niet per se een probleem, want er zijn meerdere mensen
in de wereld genaamd John Smith.
Maar we hebben maar één gebruiker ID-nummer 10, een gebruikers-ID nummer 11, 12, 13.
We hebben geen twee gebruikers met hetzelfde nummer,
en dus misschien gebruikers-ID-nummers zou een goede primaire sleutel zijn.
>> We hebben geen dubbel werk te hebben, En we kunnen nu een unieke
identificeren elke rij net door naar die kolom.
Het kiezen van primaire sleutels daadwerkelijk kan maakt volgende tabel operaties
een stuk makkelijker, want je kunt benutten het feit dat bepaalde rijen
uniek, of een bepaalde kolom van uw database of tafel
uniek te halen zal zijn uit bepaalde rijen.
>> U kunt ook een gezamenlijke primaire sleutel, die u gelegenheid kunnen vinden
te gebruiken, dat is gewoon een combinatie van twee kolommen die
is gegarandeerd uniek.
Dus misschien heb je een kolom die is As en B,
een kolom die één, twee, en drie, maar je zult alleen ooit
A1 een enkele, één A2, enzovoort, enzovoort.
Maar je zou een B2 hebben, een C2, of A1, A2, A3, A4.
Dus je zou kunnen hebben meerdere As, multiple Bs, meerdere degenen, meerdere tweeën,
maar je kunt alleen maar een hebben één A1, B2, C3, enzovoort.
Dus zoals ik al zei, SQL is een programmeertaal,
maar het heeft een vrij beperkte woordenschat.
Het is niet zo uitgebreid als C en PHP en andere talen
dat we praten in de loop.
Het is meer een breedsprakig taal dan wat we
gaan om over te praten in dit video, omdat in deze video
We gaan om te praten over vier operaties die we
kan uitvoeren op een tafel.
>> Er zijn meer dan dit.
We kunnen meer doen dan dit, maar voor onze doeleinden,
we over het algemeen gaan gebruiken slechts vier operations-- insert,
selecteren, te werken en te verwijderen.
En je kunt waarschijnlijk intuïtief raden wat al vier van deze dingen te doen.
Maar we zullen in een beetje te gaan van detail op elk een.
>> Dus voor de doeleinden van deze video, laten we aannemen
hebben we de volgende twee tabellen in een database.
We hebben een lijst genoemd Gebruikers die heeft vier columns-- ID-nummer, gebruikersnaam,
wachtwoord en volledige naam.
En we hebben een tweede tabel in dezelfde database
genaamd Moeders die net slaat informatie over een gebruikersnaam en een moeder.
Dus voor alle voorbeelden in deze video, zullen we
worden deze databank en latere updates aan het.
Dus laten we zeggen dat we willen informatie toe te voegen aan een tabel.
Dat is wat de insert operatie doet.
Bij het verklaren van alle deze opdrachten, ga ik
om u een algemene skelet te gebruiken.
Omdat het in principe, de queries gaan kijken redelijk vergelijkbaar,
we gaan gewoon te veranderen enigszins verschillende gegevens
om verschillende dingen te doen met de tafel.
>> Dus voor INSERT, het skelet lijkt dit een soort van.
We willen invoegen in een bepaalde tabel.
Dan hebben we een open haakje en een lijst van de kolommen
dat we willen waarden in kunt plaatsen.
Close haakjes, de volgende waarden, en dan
weer, geven we de waarden We willen in de tafel te zetten.
>> Dus een voorbeeld zou de volgende zijn.
Ik wil invoegen in de tabel de gebruikers de volgende columns--
gebruikersnaam, wachtwoord, en fullname.
Zodat een nieuwe rij waar ik het zetten in die drie kolommen en we zijn
gaan in de waarden gezet Newman, USMAIL, en Newman.
Dus in dit geval, ik ben zetten de kleine Newman
in de kolom gebruikersnaam, wachtwoord USMAIL, en de volledige naam hoofdstad N
Newman in de kolom fullname.
>> Dus hier is wat de database leek eerder.
Hier is wat de tafel gebruikers op het top leek voordat we dit deden.
Daarna voeren we query, krijgen we dit.
We hebben een nieuwe rij toegevoegd aan de tabel.
Maar let op dit ene dat ik niet opgeven,
maar een of andere manier heb ik een waarde gekregen voor, dat deze 12 hier.
Ik heb niet gezegd dat ik wilde zet ID-nummer in.
Ik wilde gebruikersnaam te zetten, wachtwoord fullname.
En ik deed dat, dat is prima.
>> Maar ik kreeg ook deze 12.
Waarom heb ik deze 12?
Nou, het blijkt dat wanneer u definieert
een kolom die gaat worden uw primaire sleutel, die meestal,
zoals ik al zei, een ID-nummer.
Het is niet altijd noodzakelijk gaan naar een ID-nummer zijn,
maar het is meestal een goed idee om zijn een soort van integer waarde.
Heb je een optie in phpMyAdmin als je het maken van uw database
of uw tafel om die set kolom zoals automatische opeenvolging.
>> Dat is een heel goed idee wanneer je werkt met een primaire sleutel,
omdat u elke waarde wilt in die kolom uniek.
En als je vergeet te specificeren het voor meer dan een persoon,
je hebt nu een situatie waarin die kolom is niet langer uniek.
Je hebt twee blanks, dus je kunt geen meer uniek te identificeren een column--
of u kunt niet meer uniek identificeren van een rij op basis van die kolom.
Het verloor al zijn waarde als primaire sleutel.
>> En dus blijkbaar wat ik heb gedaan hier is geconfigureerd de gebruikers-ID
kolom op auto increment zodat elke keer dat ik informatie toe te voegen aan de tafel,
het zal me automatisch geven een waarde voor de primaire sleutel.
Dus ik kan nooit vergeten om het te doen, omdat de database zal het voor mij.
Dus dat is wel leuk.
En dus dat is waarom we 12 daar, want ik heb
ingesteld die kolom tot auto increment.
Als ik voegde iemand anders het zou zijn 13, als ik toegevoegd
iemand anders het zou zijn 14, en ga zo maar door.
>> Dus laten we gewoon doen nog één inbrengen.
We zullen voegen in de tabel moeders, in Vooral de gebruikersnaam en moeder
kolom de waarden kramer en Babs Kramer.
En dus moesten we dit al eerder.
Na voeren we dat SQL-query, hebben we dit.
We hebben toegevoegd Kramer en Babs Kramer naar de tafel moeders.
>> Dus dat is het invoegen.
SELECT is wat we gebruiken om te extraheren informatie van de tafel.
Dus dit is hoe we informatie uit de database.
En zo SELECT commando's zullen worden heel vaak gebruikt in de programmering.
De algemene framework-- de algemene skelet ziet er als volgt uit.
Selecteer een set van kolommen uit een tafel, en vervolgens eventueel
kunt u een Staat- specificeren of wat wij meestal noemen een predikaat,
gewoonlijk de term die wij in SQL.
>> Maar het is eigenlijk wat bijzonder rijen die u wilt krijgen.
Als u wilt, in plaats van het krijgen van alles, smal het neer,
dit is waar je dat zou doen.
En vervolgens eventueel, kunt u ook bestelling op een bepaalde kolom.
Dus misschien je dingen wilt naargelang hebben alfabetisch op basis van één kolom
of alfabetisch op basis van een ander.
>> Nogmaals, WHERE en ORDER BY zijn optioneel.
Maar ze zullen waarschijnlijk useful-- bijzonder
Waar zal nuttig zijn verfijnen zodat je niet
krijg je hele database back en hebben om het te verwerken, krijg je alleen maar
de stukken van het dat u de zorg over.
Dus bijvoorbeeld, ik zou willen selecteren ID-nummer en de volledige naam van de gebruikers.
Dus wat kan dit eruit?
Dus hier is mijn gebruikers table.
Ik wil idnum selecteren en FullName van gebruikers.
Wat moet ik krijgen?
Ik ga om dit te krijgen.
Ik heb niet versmallen het neer, dus ik ben het verkrijgen van de ID-nummer voor elke rij
en ik krijg de volledige naam van elke rij.
>> OK.
Wat als ik wil om het wachtwoord te selecteren van gebruikers WHERE-- dus nu
Ik ben het toevoegen van een aandoening, een predicate-- waarbij idnum minder dan 12.
Dus hier is mijn-database opnieuw, mijn gebruikers table de top.
Wat ga ik krijg als ik wil selecteert u die informatie, het wachtwoord,
waar de gebruikers-ID of idnum is minder dan 12?
Ik ga om dit te krijgen informatie terug, toch?
Het gebeurt dat idnum is 10, minder dan 12, ID nummer 11 minder dan 12.
Ik krijg het wachtwoord voor die rijen.
Dat is wat ik vroeg voor.
Hoe zit het met deze?
Wat als ik wil ster uit de te selecteren moms tafel waar gebruikersnaam gelijk Jerry?
OK, selecteer ster is de speciale soort wild card zogenaamde
die we gebruiken om alles te krijgen.
Dus ze select zeggen gebruikersnaam komma moeder, die
gebeurde de enige te zijn twee kolommen van deze tabel,
Ik kan het gewoon selecteren ster en alles
waar de gebruikersnaam gelijk Jerry.
En dat is wat ik zou krijgen als ik die specifieke zoekopdracht.
>> Nu zijn databanken groot, omdat zij toestaan
ons de informatie misschien organiseren iets efficiënter dan we
misschien anders.
We hebben niet noodzakelijk te slaan alle relevante stukje informatie
over een gebruiker in dezelfde tabel.
We hadden twee tafels daar.
>> We moeten slaan ieders naam van de moeder,
en misschien hebben we niet de sociale zekerheid nummer, we hebben hun geboortedatum.
Dat hoeft niet altijd nodig worden in dezelfde tabel.
Zolang we kunnen definiëren relaties tussen de tables--
en dat is waar dat relationele databank termijn soort komt
in play-- zolang we kunnen definiëren relaties tussen de tabellen,
kunnen we een soort hokjes of abstracte dingen een bepaalde manier,
waar we alleen de echt belangrijke informatie
we de zorg over in de tabel van de gebruiker.
En dan hebben we aanvullende informatie of extra informatie in andere tabellen
dat we terug kunnen verbinden met de belangrijkste gebruikers tafel in een bepaalde manier.
>> Dus hier hebben we deze twee tabellen, maar er is een relatie tussen hen,
rechts?
Het lijkt alsof gebruikersnaam misschien iets zijn
die bestaat in gemeenschappelijke tussen deze twee tabellen.
Dus wat als we nu hebben een situatie waarin we
willen de volledige naam van een gebruiker te krijgen van de tafel van de gebruiker, en hun moeder
naam van de moeder tafel?
We niet een manier om te krijgen dat zoals het nu is, toch?
Er is geen enkele tabel bevat zowel de volledige naam en de naam van de moeder.
We hebben geen die optie van wat we tot nu toe hebben gezien.
>> En dus moeten we introduceren het idee van een JOIN.
En voegt zich bij zijn waarschijnlijk de meest complex--
het is echt het meest complexe operatie gaan we over praten in de video.
Ze zijn een beetje ingewikkeld, maar als je eenmaal onder de knie krijgen van het,
ze zijn eigenlijk niet zo slecht.
Het is gewoon een speciaal geval van een SELECT.
We gaan om een ​​set van te selecteren kolommen uit een tabel mee
in een tweede tabel op sommige predikaat.
>> In dit geval, na te denken over het leuk dit-- tafel één is een cirkel over hier,
tabel twee is een andere cirkel hier.
En dat predikaat deel in het midden, het is
soort als als je denkt over een Venn diagram, wat
hebben ze met elkaar gemeen?
Wij willen deze twee tabellen koppelen op basis van wat ze gemeen hebben
en maak deze hypothetische tafel dat is de fusie van de twee samen.
Dus we zullen zien in een voorbeeld en misschien dat zal helpen
duidelijk dat een beetje.
Dus misschien dat u wilt selecteren USER.FULLNAME en moms.mother
van gebruikers mee in de moms tafel in elke situatie
waar de kolom gebruikersnaam hetzelfde daartussen.
En dit is een nieuwe syntax hier, deze gebruiker.
en moeders ..
Als ik doe meerdere tabellen samen, kan ik een tafel te geven.
Ik kan onderscheiden in het bijzonder op dat op op de bodem daar.
Ik kan de gebruikersnaam onderscheiden kolom van de tabel gebruikers
uit de kolom van de gebruikersnaam moms tafel, die otherwise-- zijn
als we net zei gebruikersnaam gelijk gebruikersnaam, die niet echt
alles betekenen.
Wij willen doen waar ze passen.
>> Dus ik kan de tafel en het specificeren kolomnaam bij een situatie
wanneer het onduidelijk zou waar ik het over heb.
Dus dat is alles wat ik doe is ik ben zegt deze kolom van deze tabel,
en zeer expliciet.
Dus nogmaals, ik ben het selecteren van de volledige naam en de naam van de moeder
Uit de tabel gebruikers met elkaar verbonden de tabel moeders in elke situatie
waar ze delen dat column-- ze delen die gebruikersnaam begrip.
>> Dus hier zijn de tafels we eerder hadden.
Dit is de toestand van onze databank zoals het nu bestaat.
De informatie die we extraheren Hierdoor te beginnen.
Dit is de nieuwe tafel gaan we maken combineren van deze met elkaar.
En let we niet markeren Newmans rij in tabel van de gebruiker,
en we zijn niet markeren Kramer rij in de tabel moeders
omdat geen van beide bestaat in zowel sets-- in beide tabellen.
>> De enige informatie die gemeen tussen hen Jerry in beide tabellen
en gcostanza is in beide tabellen.
En dus toen we de SQL JOIN, wat we get-- en doen we eigenlijk dit.
Het is een soort van een tijdelijke variabele.
Het is als een hypothetische fusie van de twee tafels.
We eigenlijk iets te krijgen als dit waar
we samen hebben samengevoegd de tabellen op de informatie die ze gemeen hebben.
>> Zo merken dat users.username en moms.username kolom
Het is precies hetzelfde.
Dat was de informatie die was consistent gebruikers
tafel en de tafel moeders.
En dus hebben we samengevoegd ze samen.
We weggegooid Kramer, omdat hij niet bestaan ​​in de gebruikerstabel,
en we weggegooid Newman, omdat hij niet bestaan ​​in de tabel moeders.
Dus dit is de hypothetische fusie met behulp van de JOIN werking van SELECT.
>> En dan waren we op zoek naar de volledige naam van de gebruiker en de moeder van de gebruiker,
en dus dit is de informatie die we zouden krijgen van de totale vraag
dat we gemaakt met SELECT.
Dus we lid geworden van de tafels bij elkaar en we deze twee kolommen geëxtraheerd,
en dus dat is wat we zouden krijgen.
Maar SQL JOINs een soort ingewikkeld.
U zult waarschijnlijk hen niet te veel, maar gewoon een idee van het skelet
dat je zou kunnen gebruiken om te fuseren twee tafels samen als u nodig.
De laatste twee zijn een iets eenvoudiger dat beloof ik.
Dus updaten, kunnen we UPDATE gebruiken voor gegevens in een tabel.
Het algemene formaat is UPDATE sommige tafel, SET enkele kolom een ​​bepaalde waarde
Waar sommige predikaat is voldaan.
Dus bijvoorbeeld, zouden we willen om de tafel gebruikers actualiseren
en stel het wachtwoord in om yada yada, waar de ID-nummer is 10.
>> Dus in dit geval, we zijn bijwerken van de tabel gebruikers.
Het ID-nummer is 10 voor die eerste rij daar,
en we willen de update wachtwoord yada yada.
En dat is wat er zou gebeuren.
Het is vrij eenvoudig, toch?
Het is gewoon een heel simpel wijziging van de tafel.
>> DELETE wordt de operatie hebben we gebruikt om uit een tabel te verwijderen informatie.
DELETE FROM tabel WHERE sommige predikaat is voldaan.
We willen verwijderen uit de gebruikers table bijvoorbeeld
waar de gebruikersnaam is Newman.
U kunt waarschijnlijk wel raden wat er gaat hier gebeuren nadat we dat SQL uitvoeren
query, Newman is verdwenen uit de tabel.
>> Dus al deze handelingen, zoals ik al heb gezegd, zijn zeer eenvoudig te doen in phpMyAdmin.
Het is een zeer gebruiksvriendelijke interface.
Maar het vereist handmatige inspanning.
We willen niet handmatige inspanning in dienst.
We willen dat onze programma's om doet dit voor ons, toch?
Dus we zouden willen doen dit programmatisch.
We willen SQL te nemen en hebben iets anders om dit voor ons doen.
>> Maar wat hebben we gezien dat toestaat ons programmatisch iets te doen?
We hebben gezien PHP, toch?
Het introduceert een aantal dynamiek in onze programma's.
En zo gelukkig, SQL en PHP spelen heel mooi samen.
Er is een functie in PHP genaamd query, die kan worden gebruikt.
En u kunt doorgeven als parameter of het argument
een SQL-query query je zou willen voeren.
En PHP zal het te doen op uw rekening.
>> Dus nadat u hebt aangesloten om uw database met PHP,
er twee voorverkiezingen u dit doet.
Er is iets genaamd MySQLi en iets genaamd BOB.
We zullen niet in een enorm gaan hoeveelheid detail daar.
In CS50 maken we gebruik van de BOB.
Nadat u hebt aangesloten om uw database, u
kan dan vragen uw database door het passeren van de queries argumenten
PHP functies.
En als je dat doet, slaat u de resultaat in een associatieve array.
>> En we weten hoe te werken met associatieve arrays in PHP.
Dus ik misschien iets te zeggen zoals dit-- $ results--
Dit is in PHP-- gelijk query.
En vervolgens binnen de vraag functie die argument
dat ik langs om te vragen dat lijkt op SQL.
En dat is SQL.
Dat is de query string die ik zou willen uitvoeren op mijn database.
>> En zo in het rood, dit is PHP.
Dit is SQL dat ik integreren in PHP door
Het argument om de query-functie.
Ik wil fullname kiezen uit gebruikers, waar ID-nummer is gelijk aan 10.
En dan misschien nadat ik dat gedaan hebt, Ik zou zoiets zeggen.
Ik wil uitprinten bericht Bedankt voor aanmelden.
>> En ik wil het interpolate-- Ik wil te interpoleren $ resultaten fullname.
En dus dat is hoe ik werk met dat associatieve array die ik terug.
$ resultaten fullname zou eigenlijk uiteindelijk uit te printen,
bedankt voor het inloggen, Jerry Seinfeld.
Dat was de volledige naam waarbij idnum is gelijk aan 10.
>> En dus alles wat ik doe wordt ik now-- ik opgeslagen
mijn vraag, de resultaten van mijn zoekopdracht en resulteert in een associatieve array,
en fullname is de naam van de kolom ik kreeg voor.
Dus dat is mijn sleutel in de resultaten associatieve array die ik wil.
Dus bedankt voor het inloggen, $ resultaten, fullname zal uitprinten, zal vasthouden
precies tussen de gekrulde bretels, Jerry Seinfeld.
En ik wil printen het bericht Bedankt voor het aanmelden Jerry Seinfeld.
>> Nu, we waarschijnlijk niet te moeilijk code dat soort dingen in, toch?
Willen we misschien iets zoals print doen f, waar we kunnen vervangen en misschien
verzamelt verschillende soorten informatie, of misschien hebben de query-proces
verschillende informatie.
En zo query, de query functie heeft dit begrip soort vervangingen
vergelijkbaar met drukken f procent s en c procent, is vraagtekens.
>> En we kunnen vraag gebruiken merken zeer analoog
afdrukken f om vervangende variabelen.
Dus misschien uw gebruikersnaam ingelogd eerder, en je hun gebruikers-ID-nummer opgeslagen
in $ _SESSION van PHP super globaal in de sleutel-ID.
Dus misschien nadat ze ingelogd zijn, u $ _SESSION ID gelijk aan 10 ingesteld,
extrapolatie van het voorbeeld we zagen slechts een seconde geleden.
>> En dus toen we daadwerkelijk uit te voeren Deze query de resultaten nu,
het zou aansluiten 10, of wat dan ook de $ _SESSION ID-waarde is.
En zo dat ons toelaat om een beetje meer dynamiek.
We zijn niet moeilijk codering dingen in het meer.
We besparen informatie ergens en dan
we kunnen die informatie weer te gebruiken soort generaliseren wat we willen doen,
en gewoon plug-in en verandering het gedrag van onze pagina
gebaseerd op wat de gebruiker ID nummer eigenlijk is nadat ze ingelogd.
Het is ook mogelijk, hoewel, dat de resultaten ingesteld
kan bestaan ​​uit meerdere rijen.
In dat geval heb je een array van arrays--
een array van associatieve arrays.
En je hoeft alleen maar te herhalen doorheen.
En we weten hoe we herhalen door middel van een array in PHP, toch?
Dus hier is waarschijnlijk de meest complexe wat we tot nu toe hebben gezien.
Het integreert eigenlijk drie talen samen.
>> Hier in rood, dit is een HTML.
Ik ben blijkbaar starting-- dit is een fragment van een aantal HTML die ik heb.
Ik ben het starten van een nieuwe paragraaf die zegt dat de moeders van Seinfeld TV's.
En dan onmiddellijk daarna Ik begin een tafel.
En dan na dat ik hebben een aantal PHP, toch?
Ik heb dit alles PHP code in.
Ik ben blijkbaar te gaan maken van een query.
En om de query te maken, ga ik worden met behulp van SELECT moeders uit moeders.
>> Dus dit is getting-- dit is SQL.
Dus het de blauwe is SQL.
De rode zagen we een tweede geleden was HTML.
En het groen is hier PHP.
Dus ik ben het maken van een query mijn gegevensbestand, ik ben
alle selecteren moeders in de tabel moeders.
Niet alleen het verkleinen van het naar beneden om bepaalde rij, ik vraag voor hen allen.
>> Dan controleer ik als het resultaat niet gelijken gelijk vals.
Dit is gewoon mijn manier om te controleren soort van als de resultaten niet gelijk is aan nul,
dat we c bijvoorbeeld zou zien.
In principe is dit gewoon het controleren om ervoor te zeker dat het eigenlijk data terug.
Want ik wil niet beginnen met afdrukken uit gegevens als ik geen gegevens op te halen.
Dan voor elke resultaten als gevolg van de foreach syntax van PHP, alles wat ik doe
is het afdrukken van $ result moeders.
En dus ik ga naar een set te krijgen van alle moeders van each--
het is een array van associatieve arrays-- en ik ben printen
ieder als zijn eigen rij van een tabel.
En dat is echt mooi veel allen daar is aan het.
Ik weet dat er een beetje wat hier aan de hand
In dit laatste voorbeeld reeksen arrays-- arrays associatieve arrays.
Maar het is echt gewoon koken in SQL om het maken van een query,
Meestal selecteren nadat we hebben al zet informatie in de tabel,
en dan is het gewoon uit te trekken.
>> En dit is dat we zouden trekken in dit specifieke geval.
We zouden alle afzonderlijke extraheren moeders van de tafel moeders.
We hebben een hele reeks van hen, en we willen door middel van herhalen en uit te printen
elke.
Dus nogmaals, dit is waarschijnlijk de meest ingewikkelde voorbeeld
we hebben gezien, omdat we het mengen van drie verschillende talen samen, toch?
>> Nogmaals, we HTML hier in rood, vermengd met een aantal SQL hier in blauw,
gemengd met wat PHP in het groen.
Maar al deze spelen mooi in elkaar, het is
gewoon een kwestie van het ontwikkelen goede gewoonten, zodat je kunt krijgen
ze samen te werken zoals u dat wilt.
En de enige manier om echt te doen is om te oefenen, oefenen, oefenen.
Ik ben Doug Lloyd, dit is CS50.