[ SKAN MŪZIKA ]
DEIVIDS MALANS: Labi.
Šis ir CS50, un šī jau ir septītā nedēļa.
Un šī ir nedēļa, kurā mēs turpināsim no vietas, kur mēs beidzām ar
Python, iepazīstinot jūs ar mazliet vairāk valodas sintaksi un
iespējām, lai jūs varētu atrisināt interesantas problēmas.
Taču daudzas no šīm problēmām arvien vairāk kaut kādā veidā ir
saistītas ar datiem.
Galu galā, ja mūsdienās lielākoties domājat par jebkuru vietni vai
mobilo lietotni vai procesu, kas ietver problēmu risināšanu, tas
gandrīz vienmēr ietver noteiktu datu apjomu un bieži vien liela
mēroga datus.
Daudz, daudz datu.
Tātad, ko mēs vispirms redzēsim šodien, ir tas, ka, jā, jūs varat
izmantot Python, lai atrisinātu visas problēmas, kuras esam redzējuši
, kā arī dažas problēmas, kas saistītas ar datiem, taču dažreiz tas
būs kaitinoši.
Tas būs nedaudz sāpīgi.
Lai saņemtu atbildi, būs vairāk darba, nekā jūs vēlētos.
Tāpēc arī šodien mēs jūs iepazīstināsim ar jaunu valodu, ko sauc par
SQL — strukturēto vaicājumu valodu.
Varat būt droši, ka šī valoda ir daudz mazāka nekā C un Python.
Tas it kā dara mazāk, bet ne pārāk labi.
Un tā ir valoda datu bāzu vaicājumu veikšanai, datu glabāšanai tajās,
atjaunināšanai, ievietošanai, dzēšanai un daudz ko citu.
Un tā ir tehnoloģija, kas mūsdienās patiešām tiek izmantota tīmekļa
lietotnēs un mobilajās lietotnēs, datu zinātnē, analīzē un daudz kur
citur .
Tā patiešām labi spēj uzglabāt daudz un daudz datu.
Tagad šī ir vēl viena valoda.
Un ticiet vai nē, bet nākamnedēļ mēs jūs iepazīstināsim ar vēl trim
valodām — HTML un CSS, kas tehniski nav programmēšanas valodas.
Tā ir saistītas ar estētiku un informācijas iezīmēšanu.
Bet arī JavaScript, kas patiesībā ir programmēšanas valoda.
Taču CS50 mērķis patiešām būs dot jums iespēju programmēt vispārīgāk.
Un patiešām, kad pēc dažiem gadiem atrodaties reālajā pasaulē, tur
vienmēr būs kāda jauna cita populāra valoda.
Un, cerams, šonedēļ un nākamnedēļ un pēc tam viens no mērķiem ir ne
tikai iemācīt jums šīs valodas, bet arī tas, kā iemācīt sev nākotnes
valodas, par kurām mēs vēl neesam dzirdējuši.
Tātad, to sakot, sāksim ar sava veida aptauju.
Ja savā tālrunī vai klēpjdatorā apmeklējat šo URL, cs50.ly/favorites,
jūs gaida ļoti vienkārša Google veidlapa, kurā tiks uzdoti daži
jautājumi ar atbilžu variantiem.
Dodieties uz vietni cs50.ly/favorites, un tam vajadzētu novirzīt jūs
uz Google veidlapu, kas izskatās nedaudz līdzīga šai , vispirms jau
septītajā nedēļā vaicājot, kura ir jūsu iecienītākā valoda starp šīm
opcijām.
Un tad zemāk vēl viens jautājums.
Ja atceraties problēmu kopas no 0 līdz 6, kāda bija jūsu iecienītākā
problēmu kopas problēma, ja tāda bija?
Vai tas būtu Scratch, C vai Python versijā.
Tāpēc atbildiet uz šiem diviem jautājumiem.
Pēc brīža es pārslēgšos uz savu ekrānu šeit, kur jūs redzēsit, un
ikviens, kas izmanto Google Forms, zina, izklājlapu , kas tagad
apkopo šos datus.
Microsoft Office 365 var darīt to pašu, ja izmantojat kādu no šīm
veidlapām.
Un tas, ko jūs tagad redzat, ir Google Sheets , izklājlapu kurā ir
uzskaitīti visi auditorijas jautājumi.
Valoda ir kolonnā B, problēma ir kolonnā C, un katra rinda ir viens
skolēns, kurš ir atbildējis.
Daži no jums ļoti vēlējās ierasties uz stundu šodien plkst. 8:33 pēc
austrumu laika.
Labi, tagad mēs ieejam īstajā nodarbību laikā.
Un, ja es ritināšu uz leju, mēs, iespējams, redzēsim dažus desmitus,
pāris simtus atbilžu.
Un jā, tāpēc mēs šeit saņemam ļoti daudz atbilžu.
Un es redzu, ka parādās daži modeļi, bet cilvēka acīm ne vienmēr ir
skaidrs, kas tie ir.
Tagad, protams, varat izmantot Google Spreadsheets .
Varat izcelt datus un maģiski no tiem izveidot diagrammas.
Taču ar datiem varat darīt tikai to, ko Google atļauj.
Un tas pats attiecas uz Microsoft Excel vai Apple Numbers.
Bet vai nebūtu jauki, ja varētu vienkārši manipulēt ar
neapstrādātajiem datiem, lai gan tas ir salīdzinoši vienkārši, lai
tikai atbildētu uz jautājumiem par datiem?
Iespējams, ilgtermiņā izveidojiet savas diagrammas, pielāgojiet tās
tieši tā, kā vēlaties, nevis esat atkarīgi no programmatūras, kas ir
pieejama veikala plauktā.
Nu, kā mēs varētu to darīt?
Ļaujiet man ierosināt šo datu kopu tagad uzskatīt par to, ko mēs
tagad saucam par izplātās datnes datu bāzi.
Šodien mēs redzēsim, ka ir vēl labākas datu bāzes, taču pasaulē
vienkāršākā datu bāze patiešām ir kā .csv fails.
Un mēs to redzējām pirms pāris nedēļām C.
Mēs uzrakstījām mazliet C koda, kas izmantoja fprintf, lai ierakstītu
datus failā, izmantojot komatus kā atdalītāju.
Tomēr tajā laikā mēs nedarījām daudz vairāk ar CSV, jo tas ir
patiešām kaitinoši, sāpīgi, laikietilpīgi, nebija parocīgi izmantot C
kaut kam tamlīdzīgam - malloc, atmiņas un citu lietu dēļ.
Bet ar Python tas būs daudz vieglāk.
Tāpēc ikreiz, kad jums ir piekļuve kādai datu kopai, kur varat to
vienkārši lejupielādēt savā Mac datorā vai personālajā datorā, vai
mākoņa vidē, tagad ir iespējams rakstīt kodu, lai kaut ko darītu ar
datiem.
Varbūt nekavējoties varat analizēt to.
Ja tas ir manuāli importēts, iespējams, jums tas ir jānotīra, veicot
daudz meklēšanas un nomaiņas, bet ne ar tastatūru, bet gan ar kodu.
Un tāpēc ļaujiet man turpināt un darīt to.
Ļaujiet man atgriezties pie manas Google izklājlapas, kurā ir visi
šobrīd saņemtie dati.
Un ļaujiet man iet uz priekšu un lejupielādēt to, izmantojot izvēlni
Fails šeit.
Un paskatīsimies.
Lejupielādēt.
Un jūs varat redzēt veselu virkni iespēju.
Lielākā daļa formātu varētu būt pazīstami, taču šodien mēs
koncentrēsimies tikai uz šo, komatatdalītajām vērtībām vai CSV.
Turpināsim un lejupielādēsim to manā Mac datorā šeit, mapē
Lejupielādes.
Un tagad es turpināšu un darīšu to.
Ļaujiet man turpināt un izvilkt VS Code šeit mākonī.
Un, ja jūs to nekad iepriekš neesat darījis, ir daži veidi, kā to
izdarīt.
Bet vienkāršākais veids, kā augšupielādēt failu savā koda telpā, tā
sakot, ir tikai sava veida vilkšana un nomešana.
Tas maģiski augšupielādēs to tur esošajā serverī.
Un mēs redzēsim, ka, pirmkārt, tam ir ļoti garš faila nosaukums, kuru
es patiesībā iztīrīšu, jo būs ļoti nogurdinoši rakstīt kodu.
Tāpēc es varētu, protams, ar peles labo pogu noklikšķināt šeit, bet
es izmantošu savu Linux komandu.
Pārvietosim šo failu ar nosaukumu CSV 50 2022 un nosauksim to
vienkāršāk, favorites.csv.
Tātad visi mazie burti, bez atstarpēm, sava veida labi pamati.
Un ļaujiet man tagad atvērt šo failu ar kodu favorites.csv.
Es aizvēršu File Explorer pārlūkprogrammu, un mēs redzēsim tieši
tādus pašus datus kā iepriekš, bet ne tik skaisti, kā to dara Google
izklājlapas.
Drīzāk mēs šeit redzam, ka man joprojām ir trīs kolonnas:
laikspiedols, valoda, problēma un visas zemāk esošās vērtības,
tostarp laikspiedoli un atbildes, kurām tie ir paredzēti.
Bet tai nav atbilstošu kolonnu.
Tajā ir tikai komats, kas tos atdala.
Tagad mēs varētu ļoti viegli rakstīt Python kodu tāpat kā mēs
rakstījām C kodu, lai manipulētu ar tādiem failiem kā šis, lai
rakstītu vai lasītu.
Bet tā vietā darīsim kaut ko mazliet patīkamāku, kas patiešām ir
Python formā.
Tātad Python faktiski ir aprīkots ar vietējo CSV failu atbalstu.
Tam patiešām ir pakotne ar nosaukumu CSV, kas ļauj tikai lasīt un
rakstīt, kā arī veikt daudz noderīgu lietu, kad runa ir par CSV
failiem.
Tātad, turpināsim un darīsim kaut ko ar šo failu.
Ļaujiet man atgriezties šeit pie VS Code.
Pagaidām aizvēršu favorites.csv.
Taču atcerieties, ka laikspiedols bija pirmā kolonna, valoda bija
otrā kolonna un problēma bija trešā.
Un ievērojiet, jo mēs izmantojam komatus, tie atkal nesakrīt ideāli,
taču tā nav problēma.
Visticamāk, katrā rindā ir divi komatu.
Un es turpināšu un tagad izveidošu failu kā par favorites.py, lai es
varētu sākt rakstīt kodu, lai manipulētu ar šiem datiem.
Un darīsim kaut ko vienkāršu.
Vienkārši uzrakstīsim vienkāršu programmu Python, kas atver šo failu,
nolasa to un izdrukāsim kaut ko tikai kā drošības pārbaudi, lai es
zinātu, ko daru, lai gan tas nebūs noderīgi.
Tātad Python, ja vēlaties CSV atbalstu, importējiet CSV.
Un tas dod jums piekļuvi visām tā maģiskajām iespējām.
Ļaujiet man tagad iet uz priekšu un izmantot šo paņēmienu, lai
atvērtu failu Python, kas ir līdzīgs C.
Bet ar Python mēs to darīsim.
Atslēgvārds ar.
Es atvēršu failu ar nosaukumu favorites.csv, kas bija īsākais
nosaukums, ko es tam devu.
Tas nav obligāts, taču skaidrības labad es to atvēršu lasīšanas
režīmā, tāpat kā f open izmantoja otru argumentu.
Un es šo failu, kad tas tiks atvērts, nosaukšu pavisam vienkārši ,
lai gan es to varētu saukt kā vien vēlos.
Un tagad tas ir tikai atvērts fails.
Cik Python šobrīd zina, tas ir tikai teksts vai vēl labāk, tas ir
tikai nulles un vieninieki.
Ja vēlaties, lai šī Python pakotne ar nosaukumu CSV patiešām darītu
ar to kaut ko noderīgu, jums šis fails ir jāielādē tagad bibliotēkā.
Un vienkāršākais veids, kā to izdarīt, ir piešķirt sev mainīgo, ko
sauc par reader , jo es vēlos lasīt šo failu.
Lai gan arī to es varētu saukt citādi.
Pēc tam es to iestatīšu vienādu ar funkcijas csv.reader atgriešanas
vērtību.
Un es nododu tam atvērto failu saskaņā ar dokumentāciju.
Tātad, pirmais solis, es atveru failu.
Un tas tikai dod man piekļuvi tajā esošajiem baitiem.
Otrais solis tagad ar csv.reader liek Python pakotnei ar nosaukumu
CSV darīt ar to kaut ko noderīgu, sākt analizēt komatus un ļaut man
to tālāk parsēt.
Tāpēc turpinām un darīsim to.
Ļaujiet man turpināt tagad un šajā ciklā teiksim to.
Atvainojiet, šajā atvērtajā failā darīsim to.
Katrai rindai, ja vēlaties, vai rindiņai failā, AKA lasītājs,
izdrukāsim tikai 1. rindas iekavu .
Kas te tagad notiek?
Izrādās, ja lasāt CSV lasītāja funkcijas dokumentāciju, tas, ko tā
jums atdod, būtībā ir šis īpašais objekts, tā sakot, kas ļauj to
uzskatīt tā, it kā tas būtu tikai patiešām liels rindiņu saraksts no
faila , AKA lasītājs.
Tātad,runājot par rindu lasītājā , šis ir kodolīgāks veids, kā
pateikt: dodiet man faila pirmo rindiņu plus plus, dodiet man otro
rindiņu failā plus plus un tā tālāk, lai mēs būtu darījuši daudz
vairāk mehāniski C valodā .
Tas ir tikai daudz draudzīgāks Python un angļu valodai, ja vēlaties.
Tātad katrā šīs cilpas atkārtojumā rindā būs visi dati no pašreizējās
rindas.
Bet vēl labāk, lasītāja funkcija man palīdz, ja tā man katru rindu
nodod ne tikai kā virkni vai STR, vai tekstu programmā Python.
Tas man sniedz to, kas, šķiet, ir balstīts uz sestās rindas sintaksi.
Kāds instinkts?
Jā.
Mērķauditorija: saraksts.
DEIVIDS MALANS: Tas man patiešām atdod sarakstu.
Un es pieņemu, ka vizuālais pavediens jums bija fakts, ka mēs šeit
izmantojam kvadrātiekavas.
Un patiešām, rindas 1. iekava būs nevis pirmais, bet gan otrais
elements šajā sarakstā.
Un tāpēc tikai miniet .
Kad es palaižu šo kodu pēc brīža, kas tiks izdrukāts?
Laika zīmogs, valoda vai problēma?
Jā?
AUDITORIJA: Valoda.
DEIVIDS MALANS: valoda, jo tā ir otrā kolonna, kas failā ir atdalīta
ar šiem komatiem.
Tāpēc ļaujiet man turpināt un darīt to.
Ļaujiet man notīrīt savu termināli šeit.
Ļaujiet man palaist Python no favorites.py un Enter.
Un tur ir viss.
Tas bija super ātri.
Bet šeit ir patiešām garš saraksts.
Un patiesībā, ja es palielināšu sava termināļa izmēru un sākšu
ritināt uz augšu, jūs vienkārši redzēsit visus neapstrādātos datus.
Tagad tas vēl nav tik noderīgi.
Es būtu varējis vienkārši paskatīties uz CSV.
Bet skaidri redzams, ka tagad man ir iespēja atvērt failu, parsēt to,
tā sakot, tas ir, sadalīt to tā sastāvdaļās un kaut ko darīt ar
konkrētām tā daļām.
Labi.
Tātad, ja es vēlos to darīt nedaudz patīkamāk, ļaujiet man to vismaz
semantiski padarīt nedaudz tīrāku.
Un ziniet ko, skaidrības labad ļaujiet man dot sev mainīgo.
Tas nav noteikti nepieciešams, bet es zinu, ka šī ir iecienītākā
valoda, piemēram.
Tāpēc sauksim to tikai par favorite .
Iestatiet to vienādu ar 1. rindas iekavu .
Un tagad, lai manā kodā būtu skaidrāks, lai gan atkal mums nav
vajadzīgs mainīgais pats par sevi, šis kods, protams, darīs to pašu.
Tas vienkārši izmanto papildu mainīgo, ko sauc par favorite .
Ja es pārvietojos šeit šeit, ritinu uz augšu, palaižu programmu
vēlreiz, es atgriežos pie tiem pašiem datiem.
Taču šis ir atspēriena punkts uz kaut ko, kas ir vēl jaudīgāks
saistībā ar Python atbalstu CSV failiem, jo jums nav vienkārši
jāuzskata atgriešanas vērtība kā saraksts ar 0 un 1 un 2.
Tātad, tikai intuitīvi domājot, kāpēc šis varbūt nav labākais
dizains, lai jūs, programmētājs, atgrieztu datus sarakstā, kas ir
skaitliski indeksēts ar 0, 1, 2?
Tas nepārprotami darbojas, taču kritizējiet to.
Kas varētu noiet greizi?
Kas ir nedaudz slikti izstrādāts?
Jā?
kāds ir pasūtījums [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Tātad, jā, tāpēc jums ir jāatkārto — jums ir jāatceras, kurā kolonnā
dati faktiski atrodas.
Un nedod Dievs, lai jūs sadarbotos ar kādu citu izklājlapā.
Ja esat izmantojis Google izklājlapas, varat pārvietot kolonnas,
iespējams, tikai tāpēc, ka vēlaties vizuāli pārkārtot lietas.
Un, ja jūs to darāt un pēc tam kāds cits lejupielādēs tos pašus
datus, viss viņa kods sabojāsies.
Tātad tas ir tikai ļoti slikts dizains.
Tas ir trausls tikai tāpēc, ka jūs savā veidā izmantojat goda
sistēmu, kas nozīmē datus, kurus vēlaties.
Vai nebūtu jauki, ja tā varētu būt nedaudz skaidrāka ?
Atcerieties, ka šī faila pati pirmā rindiņa patiesībā ir šī.
Un es šoreiz apturēju izvadi, lai mēs pēc izvēles varētu redzēt
vairāk.
Es tikko pārlasīju favorites.py.
Un ievērojiet, ka viena no šīm lietām nav līdzīga otrai.
Katra izvade bija vai nu scratch, vai C, vai Python, izņemot šo pirmo.
Kāpēc es šeit redzu vārdu ‘valoda’?
No kurienes radās valoda?
Jums nebija iespējas manuāli ievadīt.
Nē.
No kurienes tas radās?
Jā.
Mērķauditorija: Tā būtu virsraksts.
DEIVIDS MALANS: Jā, virsraksts.
Pati pirmā rindiņa failā, kas pēc cilvēciskās vienošanās parasti
tikai definē, ko kolonnas attēlo, lai tajā būtu kāda cilvēkiem
noderīga informācija.
Šobrīd tas nav īsti paredzēts kā daļa no mana iznākuma, tāpēc ir
veids, kā to izlaist.
Ja vēlaties izlaist pirmo rindu, faktiski varat darīt kaut ko līdzīgu
šim.
Varat pateikt nākamo rindu, un šī rinda tiks ignorēta.
Tad es tiešām sāku ar katru rindu pēc tam.
Bet ir labāks veids, kā to risināt.
Tas atbrīvos no izvades rindas, taču ļaujiet man izmantot citu CSV
pakotnes līdzekli, kas tikai padarīs to nedaudz kārtīgāku .
Tāpēc ļaujiet man šeit notīrīt termināļa logu.
Ļaujiet man atsaukt šo nākamo lietu, ko tikko pievienoju.
Un tā vietā, lai izmantotu lasītāju, ļaujiet man izmantot vārdnīcas
lasītāju, saīsināti diktātu lasītāju, kas tagad man atgriezīs visu
rindu ekvivalentu pa vienam.
Tāpēc es to joprojām varu saukt par lasītāju tāpat kā iepriekš.
Taču, kā norāda nosaukums, šis lasītājs atgriezīs nevis sarakstu pēc
saraksta pēc saraksta, bet gan vārdnīcu, vārdnīcu, vārdnīcu.
Un atcerieties, ka vārdnīca ir tikai galveno vērtību pāru kolekcija.
Tātad, ko tas nozīmē?
Kas ir atslēgas?
Kādas ir vērtības?
Tagad, kad es izmantoju vārdnīcu lasītāju, es to tiešām varu izdarīt.
Tā vietā, lai goda sistēmā atcerētos, ka vēlos pirmo kolonnu, es
tagad varu uzskatīt rindu nevis kā sarakstu, bet gan kā vārdnīcu.
Un tas nozīmē, ka es varu šeit ieiet un teikt "language." . Un mēs to
redzējām sestajā nedēļā.
Python ļauj indeksēt vārdnīcās, izmantojot kvadrātiekavu notācijas
virknēs vai STR iekšpusē, tāpat kā saraksti pieļauj skaitļus.
Bet tagad es domāju, ka tas būs nedaudz izturīgāks.
Ja es to palaistu vēlreiz, Python no favorites.py darbojās labi.
Un ļaujiet man arī apturēt izvadi, izmantojot šo programmu ar
nosaukumu more.
Tagad es pat neredzu galveni.
Tagad ikviens, kurš strādā ar Python, uzrakstīja šīs pakotnes kodu,
lai tikai analizētu pirmo koda rindiņu, izmantojiet galveni, kā jūs
to tikko nosaucāt, kā atslēgas, un pēc tam katru reizi, kad
atkārtojat šo cilpu, tas atjaunina vērtības, vērtības, vērtības, bet
atslēgas paliek nemainīgas.
Vai ir kādi jautājumi par šo tehniku?
Pietiek pateikt, ka tas būtu sāpīgi C.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Tāpēc atslēgas vienmēr būs "timestamp, language, and problem." . Taču
katrā šīs cilpas atkārtojumā rindā būs cita vērtību rinda, cita
vērtību rinda, atšķirīga vērtību rinda.
Tātad, ja vēlaties, jūs atgūsit vienu vārdnīcu katram skolēnam, kurš
ir iesniedzis Google veidlapu, atkārtojot to tur.
Labi.
Tātad, ja mums ir šī iespēja, kāpēc gan mēs nepārietu uz to, kā
neizmantot tikai vārdnīcas lasītāju, kas padara kodu nedaudz
izturīgāku.
Jo tagad, ja jūs pārvietojat kolonnas, nekas nav liels.
Nav svarīgi, vai skaitliskie indeksi mainās.
Tā vietā joprojām varat izmantot šos atslēgvārdus.
Bet tagad faktiski analizēsim datus.
Es vienkārši runāju , kas nevienam neatrisina problēmas.
Aprēķināsim Scratch, C un Python popularitāti un redzēsim, ko visi
šeit domā.
Labi.
Tātad, kā es to varētu izdarīt?
Ļaujiet man turpināt un darīt to šeit.
Pirms es sāku atkārtot, ļaujiet man dot sev, teiksim, trīs mainīgos.
Un, lai lietas būtu vienkāršas, es pateikšu vienu mainīgo, ko sauc
par Scratch.
Iestatiet to vienādu ar 0; 0 skolēniem līdz šim.
C būs vienāds ar 0 un Python būs vienāds ar 0.
Ir nedaudz skaistāks veids, kā to izdarīt, jo tas ir kā trīs koda
rindiņas, lai paveiktu kaut ko ļoti vienkāršu.
Varat arī izmantot Python, bet ne C , dariet to Scratch comma C comma
Python equals 0 comma 0
Tik nedaudz elegantāks, lai to visu ievietotu vienā rindā.
Bet tagad darīsim kaut ko interesantāku.
Septītajā rindā es joprojām izdomāšu, kas ir šī brīža iecienītākā
valoda.
Un tagad es tikai gatavojos veikt dažas nosacītas pārbaudes.
Kā būtu, ja favorite ir vienāds ar "Scratch," ;, turpināsim un
palielināt Scratch par 1.
Mēs nevaram to izdarīt plus plus Python, bet mēs varam izdarīt plus
vienāds ar 1.
Kā būtu ar elif if favorite equals equals C , tad darīsim C plus
vienāds ar 1.
Mēs varētu darīt else .
Tas patiesībā ir labs dizaina jautājums.
Vai man darīt else ?
Vai man vajadzētu darīt elifu?
Šeit ir kādi instinkti?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Jā, tiešām labi instinkti.
Ja kāds nākamnedēļ pievienos veidlapai citu valodu, jo šodien mēs
acīmredzot ieviesīsim citu valodu, jūs nevēlaties, lai jūsu kods
tagad mākslīgi palielinātu Python punktu skaitu tikai tāpēc, ka jūs
sajaucat vairākas valodas. .
Tāpēc es piekrītu, ka aizsardzības veids un labāks veids, kā rakstīt
šo kodu, būtu elif favorite equals equals Python.
Pēc tam turpināsim un palielināsim Python plus equals 1
Un, ja nākamnedēļ būs jauna valoda, mums acīmredzot būs jāatjaunina
kods, bet vismaz mēs neskaitām nepareizi.
Mums vienkārši trūkst jaunās valodas.
Tāpēc es domāju, ka tas ir nedaudz izturīgāks.
Labi, tagad šīs programmas pašā apakšā un ārpus cilpas, kad esmu
pabeidzis skaitīšanu, ļaujiet man turpināt un izdrukāt, izmantojot
dažas f virknes.
Kā ir ar kopējo to cilvēku skaitu, kuru iecienītākais ir Scratch?
Tātad šī ir tikai sestās nedēļas f virknes sintakse.
Ļaujiet man izdrukāt citu f virkni, kas paredzēta C.
Un es, protams, salieku mainīgos lielumus figūriekavās , kas visi ir
mazie, bet angļu vārdiem es rakstu lielos burtus.
Veicam pēdējo ar f Python kolu un pēc tam figūriekavās Python
nosēdzošās pēdiņas .
Un es domāju, ka esmu pabeidzis.
Tāpēc ļaujiet man uz brīdi paslēpt savu termināli.
Šeit ir visa programma.
Tās pašas lietas, kas iepriekš.
Atveriet favorites.csv .
Atveriet to tālāk ar vārdnīcas lasītāju, lai veiktu apstrādi mūsu
vietā.
Inicializējiet trīs mainīgos uz 0, lai mums būtu ar ko rēķināties.
Un pēc tam atkārtojiet failu rindu pēc rindas.
Un šī ir tikai sava veida nedēļas vienas stila nosacījuma loģika,
kaut arī Python valodā, lietu skaitīšana.
Labi.
Tātad, kā mēs tagad varam to izpildīt?
Ļaujiet man atgriezties savā terminālī.
Python favorites.py.
Un te nu tas ir .
Šobrīd visi, kas ziņo tiešsaistē , izmantojot Google Form , viņu
iecienītākās valodas ir interesantas.
Tas ir diezgan interesanti arī pēc vienas Python nedēļas.
Bet Scratch tur ir veselīgs sāncensis.
Daudz C.
Tātad šeit ir diezgan labs sajaukums.Vai tas būs labākais veids, kā
rakstīt šo programmu ilgtermiņā?
Kā jau atzīmējāt, ja nākamnedēļ būs jauna valoda, šonedēļ mums tā būs
pastāvīgi jāatjaunina.
Un šeit jums vajadzētu ļaut prātam ieskatīties nākotnē
Ja mums ir ceturtā valoda, piektā valoda, sestā, septītā, astotā,
kuriem aspektiem šeit varētu būt kāda koda smarža?
Tas, iespējams, nav labākais dizains, lai mūs sagatavotu nākotnei.
Kas varētu būt labāks par šo?
Jā.
AUDITORIJA: Piektajai rindai jāpievieno valoda.
DEIVIDS MALANS: Jā.
Mums ir jāturpina pievienot valoda piektajai rindai.
Un labi, tas nav nekas liels.
Mēs varētu pievienot SQL šodien un varbūt JavaScript nākamnedēļ.
Bet ikreiz, kad koda rindiņa, loģikas līnija,būs pievienota tā
vienkārši izaugs ārpus kontroles.
Mums ir bijusi šī tērzēšana pāris reizes ar atšķirīgu sintaksi.
Iespējams, ka ir labāks veids.
Tātad darīsim tā.
Tā vietā, lai izmantotu šos atsevišķos mainīgos, mēs varētu izmantot
sarakstu, taču saraksts būtu nedaudz mulsinošs, jo ko nozīmē iekava
0?
Kas ir 1. iekava, 2. iekava?
Bet vārdnīca, atcerieties, ir šis Šveices armijas datu struktūru
nazis, ar kuru jūs varat saistīt jebko ar jebko citu, atslēgas ar
vērtībām.
Tāpēc es uzdrošinos teikt, ka tīrāks veids, kā atrisināt šo problēmu,
kas liek mums mazāk strādāt vai vēlāk apjukt, būtu izveidot jaunu
mainīgo ar nosaukumu counts, ja mēs to darām, saskaitot lietas un
vienkārši iestatīt to vienādu ar tukšu vārdnīca.
Un jūs varat burtiski teikt dict ar atvērtajām iekavām, aizvērtām
iekavām un neko, vai Python valodā vienkārši izmantojiet atvērtas un
aizvērtas figūriekavas , kurās nav nekā.
Tas man dod tukšu vārdnīcu, tāpat kā kvadrātiekavas man dod sarakstu .
Tagad manai loģikai šeit ir nedaudz jāmainās.
Bet patīkami ir tas, ka man nav vajadzīgs viens nosacījums katrai
valodai.
Jo atkal, ja mums ir ceturtā, piektā, sestā, arī šī koda daļa nedaudz
izaugs nekontrolējama.
Tāpēc es varu atbrīvoties no šī šeit.
Un tas, ko es domāju, ka es darīšu, ir pateikt to.
Neatkarīgi no pašreizējās favorite faila rindas, kāpēc mēs
neiedziļināmies mūsu skaita mainīgajā ar šo atslēgu ?
Un atkal favorite ir mainīgais.
Tas nav "favorite." . Tas būs Scratch, C vai Python.
Un kāpēc tad mēs neturpinām un nepalielinām neatkarīgi no šī skaitļa
vērtības, kas ir šajā atslēgā?
Tagad tas ir tehniski kļūdains.
Mēs esam ļoti tuvu, bet ir kļūda.
Vai kāds vēlas uzminēt, kas par kļūdu?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Labs jautājums, kas tomēr atbild uz manu jautājumu.
Tātad nē.
Jūsu aprakstītā maģija nenotiks.
Un, atkārtojot hipotēzi, vai tas automātiski izveidos atslēgu katrai
valodai, kuru mēģināsim iespraust šajās kvadrātiekavās?
Īsā atbilde nē.
Iespējams, ka tas radīs atslēgas kļūdu — vienu no tiem izsekošanas
kļūdu ziņojumiem, ko, iespējams, jau esat redzējis klasē vai problēmu
kopās, un, ja Scratch vārdnīcā iepriekš nav parādījies vai C vai
Python, tad vārdnīcai nav ne jausmas, par ko jūs runājat.
Tāpēc es domāju, ka mums joprojām ir vajadzīga nosacīta loģika, taču
tā ar katru valodu kļūs garāka un garāka.
Es domāju, ka mēs, iespējams, vēlamies to darīt.
Ja pašreizējais favorite ir iekļauts skaitīšanas vārdnīcā un Python
veidā var vienkārši pateikt, vai šajā vārdnīcā ir šī atslēga, tad
droši veiciet counts favorite plus equals 1
Citādi, pēc jūsu pieņēmumiem tagad, ko es vēlos darīt.
Counts favorites equals, jā , 1
Tāpēc inicializējiet pilnīgi jaunu atslēgu, lai iegūtu pilnīgi jaunu
vērtību 1, jo es acīmredzot tikai redzu šo valodu.
Pretējā gadījumā palieliniet atkal un atkal.
Un tagad, šeit , man tikai nedaudz jāpielāgo sava sintakse.
Man nav nepieciešams manuāli izdrukāt visas šīs lietas pa vienai.
Es domāju, ka es tiešām varu aizmukt ar citu cilpu pašā apakšā.
Tātad, kā es to darītu?
Katrai izlasei šajos aprēķinos, un tas atkal ir Python veids, kā
atkārtot visus vārdnīcas taustiņus, izdrukājiet, izmantojot f virkni
neatkarīgi no pašreizējās izlases — Scratch, C vai Python, un pēc tam
kolu un pēc tam noskaidrojiet, kāds ir tā skaits.
To var izdarīt, ieejot skaitīšanas vārdnīcā, apskatot favorite key un
atgūstot tā vērtību.
Tāpēc es aiztaisu figūriekavas .
Es noslēdzu pēdiņas .
Un, lai gan tas šobrīd izskatās neglīts, tagad tas ir daudz
dinamiskāks.
Jo, ja mēs rīt pievienosim SQL CSV failam vai pievienosim JavaScript
nākamnedēļ, tas vienkārši darbosies.
Tagad tas turpinās darboties automātiski.
Viss, ko es mainu, ir Google Form , nevis mans faktiskais kods.
Labi.
Izmēģināsim Python no favorites.py.
Sakrusto pirkstus kā vienmēr.
Un tagad ir pašreizējie dati.
Jautājumi par šo kodu šeit?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tiešām labs jautājums.
Ko darīt, ja vēlaties to izdrukāt noteiktā secībā?
Es varētu jums piedāvāt dažus risinājumus.
Ja vēlaties to izdrukāt, tas jau ir nejauši alfabēta secībā.
Tātad jūs to saņēmāt bez maksas, lai gan šeit tas ir tikai nejaušība.
Bet ir veids, kā to izdarīt.
Un ļaujiet man ierosināt, lai mēs dotos šeit uz manu cilpu.
Un es skaidri izmantoju funkciju, kuru jūs, iespējams, vēl neesat
redzējis Python, bet to burtiski sauc par , kas aizņem vai nu
sarakstu, vai šajā gadījumā vārdnīcu un pēc noklusējuma kārto to pēc
atslēgas alfabētiskā secībā.
Ja mana intuīcija ir pareiza, tas nemainīs izvadi, jo tas jau ir
alfabētisks.
Bet, ja lasāt sorted function dokumentāciju, iespējams, ir
nepieciešami vairāki parametri, no kuriem daži ir nosaukti par
parametriem.
Un tāpēc jūs patiešām varat to izdarīt.
Ja vēlaties skaitīt, bet vēlaties mainīt secību kāda iemesla dēļ
šeit, lai tā būtu apgrieztā alfabētiskā secībā.
Tagad ļaujiet man turpināt un palaist šo vēlreiz, un es saglabāšu
iepriekšējo izvadi ekrānā.
Enter , un tagad tas ir atpakaļ alfabētiskā secībā, ja vēlaties.
Citi jautājumi par šo šeit?
Nē?
Kā būtu, ja mēs pārejam uz mainīgu šķirošanu pēc vērtības.
Un tas uz īsu brīdi nedaudz ātri saasināsies, bet pēc tam mēs to
atkal mazināsim.
Ņemiet vērā, ka šobrīd tas patiešām tiek kārtots pēc atslēgas.
Ko darīt, ja, it īpaši, ja man ir daudz datu, būtu jauki izveidot
labāko 10 sarakstu vai šajā gadījumā labāko trīs sarakstu un faktiski
redzēt skaitu secībā , kādas ir šīs populārās vērtības.
Tātad tas nav C, Python, Scratch.
Ideālā gadījumā tam vajadzētu būt Python, pēc tam C, pēc tam Scratch
vērtību un lieluma dēļ.
Tātad, kā es varu to izdarīt?
Izrādās, ka ir vēl viena atslēga, vēl viens parametrs, ko varat nodot
sorted function , kas parasti tiek ieviesta kā pati funkcija.
Un tāpēc es turpināšu un darīšu to.
Es uz laiku definēšu funkciju ar nosaukumu get value , lai atvieglotu
savu dzīvi.
Un šai get value funkcijai , es teikšu, būs nepieciešams valodas
parametrs.
Un tad viss, ko es darīšu, ir atgriezt visu uzskaitījumu , kas ir
šajā valodā.
Tātad ārpus konteksta šī ir ļoti vienkārša funkcija, ko varat
izmantot tādā valodā kā Scratch, C vai Python, tā tikai pastāstīs,
kāds ir uzskaitījums tajā vārdnīcā, ko sauc par counts.
Bet ko es varu darīt tagad, šeit, manā nesen ieviestajā call to sort
, es varu pateikt, ko izmantot kā atslēgu.
Tā vietā, lai burtiski izmantotu atslēgu Scratch, C, Python, es varu
ignorēt šo uzvedību un pateikt, vai jūs zināt, ko?
Lai noskaidrotu, pēc kā kārtot, turpiniet un izsauciet šo funkciju ar
nosaukumu get value .
Ņemiet vērā, ka es neesmu ievietojis iekavas aiz get value, jo es
nevēlos izsaukt vērtību get value tieši tad un tur.
Es vēlos nodot get value funkciju kā pašu argumentu sorted function ,
lai sorted function , ko pirms gadiem uzrakstīja Python lietotāji,
varētu atkal un atkal un atkal izsaukt manu vērtību iegūšanas
versiju, mēģinot kārtot šos faktiskos datus.
Tāpēc tagad, ja es to pievienošu un atstāju apgriezto vērtību vienāds
ar patiesu, redzēsim, kas notiks.
Python no favorites.py.
Enter .
Un tagad es saņēmu savu top 10 vai šajā gadījumā trīs labāko sarakstu.
Un, ja man būtu sarežģītāki dati ar vairākām kolonnām, kas man
patiešām rūp, es pat varētu kārtot tos efektīvāk.
Bet ļaujiet man to nedaudz iztīrīt, lai jūs to redzētu, lai gan mēs
tos neizmantosim tik bieži CS50 līdz nodarbības beigām, un tie atkal
parādīsies.
Tehniski tas ir nedaudz — šis ne vienmēr ir labākais dizains, lai
visu šo laiku pavadītu, ieviešot funkciju un pēc tam to izmantotu
tikai vienuviet.
Kopumā mēs esam iebilduši, ka jums nav obligāti nepieciešams
mainīgais, ja to izmantosit tikai vienā vietā.
Funkcija īsti nav vajadzīga, ja to izmantosiet tikai vienuviet.
Un šeit mums ir labs kandidāts.
Un tā izrādās Python, ja nevēlaties apgrūtināt sevi ar funkcijas
izveidi, lai to izmantotu vienreiz, varat izveidot tā saukto
anonymous function jeb lambda funkciju, piemēram, pazīstamo lambda
simbolu.
Un lambda funkcijai , sintakse izskatās nedaudz dīvaina, bet jūs
sakāt to.
Jūs burtiski sakāt lambda.
Pēc tam jūs burtiski sakāt argumenta nosaukumu, kuru vēlaties
izmantot, lai šī anonīmā funkcija bez nosaukuma tiktu izmantota.
Tad jums ir kols.
Un tad vienkārši ierakstiet, kādu vēlaties šīs funkcijas atgriešanas
vērtību.
Tu pat nesaki burtiski atgriezties.
Šīs lambda funkcijas ir paredzētas ļoti kodolīgai lietošanai, lai jūs
varētu vienā rindā izteikt kaut ko līdzīgu šim.
Un es atzīstu, ka šī, manuprāt, izskatās noslēpumaināka nekā
iepriekšējā versija.
Bet, kad jūs darbojaties ērtāk ar Python vai citām valodām, kas
atbalsta šo funkciju, tas ļauj jums brīvāk rīkoties ar šādām koda
rindām un tikai nedaudz pievilkt kodu.
Tātad šī rinda šeit, lambda language colon counts language , ir šīs
vienas rindas versija.
Un jums pat nav jāuztraucas, izvēloties tam nosaukumu.
Lambda saka Python, ka es netērēju laiku, domājot par šīs funkcijas
nosaukumu.
Tātad jautājumi par šo Python izmantošanas paņēmienu, lai analizētu
šādus datus?
Vai ir kādi jautājumi?
Ar Python esam gandrīz pabeiguši.
Jautājumi?
Nē?
Labi.
Kāpēc gan nepadarīt lietas nedaudz interesantākas?
Tā kā mums bija daudz interesantāka datu kopa ar problēmām, kuras
esam piešķīruši pēdējo nedēļu laikā.
Kāpēc gan mums neturpināt un, gluži vienkārši, es domāju, ka mēs šeit
uzrakstījām diezgan labu kodu.
Tāpēc es domāju, ka mēs gandrīz varam to nedaudz mainīt, lai teiktu:
paskatīsimies, ja es nevēlos valodu, es gribu uzdevumu .
Un, ja es gribu kārtot nevis pēc valodas, bet pēc uzdevuma , domāju,
ka viss.
Es domāju, ka, ja es šeit kaut ko nepamanītu, vienkārši mainot sleju,
no kuras es lasu datus, un pēc tam konsekventi pārdēvējot savus
mainīgos, lai es zinātu, ko skatos, ko šī programma tagad darīs pēc
šim nelielajām izmaiņām ?
Ko es redzēšu, kad es to vadīšu?
Kas būtu pirmais, ko es redzētu, kad es to palaistu?
Daudziem šodien grūti .
Jā.
AUDITORIJA: Problēma.
DEIVIDS MALANS: Jā.
Galvenā problēma.
Tātad populārākā problēma, par kuru es esmu nedaudz noraizējies, tā
varētu būt hello vai vienkārši Scratch, bet turpināsim un redzēsim.
Tāpēc ļaujiet man turpināt un atvērt termināļa logu.
Es pat palielināšu savu termināļa logu, lai mēs varētu daudz redzēt.
Ļaujiet man turpināt un palaist Python no favorites.py.
Es tagad turpināšu un sakrustoju pirkstus, ka nesajaucu un nospiedīšu
Enter.
Un labi, lieliski.
Mēs sasniedzām maksimumu agri.
Tāpēc Scratch bija vispopulārākā programma saskaņā ar datiem, kad to
lejupielādēju.
Esmu pārliecināts, ka kopš tā laika ir saņemti citi balsojumi.
Filtrs ceturtajā nedēļā bija saistīts arī ar Tīdemenu.
Mario ir tuvu trešajai vietai un tā tālāk.
Tāpēc tas ir noderīgi mums, darbiniekiem, kuri nav tik ļoti mīlēti
šeit, saraksta beigās.
Tāpēc bija jāraksta daudz koda, taču tagad, kad esam to uzrakstījuši
ļoti daudzpusīgā dinamiskā veidā, tas ir diezgan labs, piemēram, datu
apkopošanai un analītikas veikšanai.
Bet tas joprojām ir pienācīgs rindu skaits, kas bija jāraksta manuāli.
Un dažreiz tas ne vienmēr ir īstais rīks darbam, bet gan kandidāts
vispārējai citas valodas lietošanai, it īpaši, ja tā nav tikai
vienreizēja programma, kuru palaižat un vēlaties redzēt atbildi.
Kā rīkoties, ja vēlaties saņemt informāciju no lietotāja un atbildēt
uz jautājumiem dinamiski, kā to darītu mobilā lietotne, piemēram,
vietne,, Microsoft Excel vai Apple Numbers vai Google izklājlapas.
Pagaidām veiksim pēdējās izmaiņas šajā programmas versijā un faktiski
pieņemsim kādu lietotāja ievadi.
Tātad, ne tikai ielādēsim visus datus atmiņā, bet arī turpinām un ne
tikai izdrukāsim labāko 10 sarakstu, ja vēlaties, bet arī liksim
lietotājam izvēlēties savus favorītus.
Es izmantošu Python ievades funkciju un aicināšu viņus ar "favorite,"
;,, piemēram, pastāstiet man, kāda ir jūsu iecienītākā problēma —
kāda problēma jūs drīzāk interesē.
Un tagad ļaujiet man turpināt un pateikt, ja šis favorīts ir
skaitīšanas mainīgajā, tāpēc jūs neievadījāt kaut ko nejaušu, ko mēs
patiesībā nepiešķīrām kā problēmu, tad ļaujiet man turpināt un
izdrukāt ar formāta virkni neatkarīgi no tā kāds iecienītākais ir
jūsu un parādīt tā faktisko popularitāti, indeksējot to skaitu,
izmantojot šo favorite atslēgu, un izdrukājot to.
Tātad tagad tā ir dinamiska programma.
Tā neizlādē visus datus un visus summāros datus.
Drīzāk tā ļaus man redzēt, kāda ir mana iecienītākā izvēle.
Un es turpināšu un teikšu: paskatīsimies, es šeit fanoju par Mario.
Tātad Enter .
Un patiešām, mēs redzam to pašu vērtību, ko redzējām pirms brīža, bet
tikai Mario.
Bet tagad būtība ir tāda, ka, viens, tas viss ir iespējams.
Otrkārt, ir daudz vieglāk un patīkamāk, nekā tas būtu bijis C.
Tās joprojām ir tikai 15 koda rindiņas.
Un C valodā atkal ir atmiņas pārvaldība.
Mēģinot atrast komatus, notiek virkņu atkārtošana.
Vienkārši ir daudz vairāk darba.
Taču, godīgi sakot, pat tad, ja vēlaties vienkārši atbildēt uz šādu
jautājumu programmā Excel un Apple Numbers, Google izklājlapās,
parasti varat vienkārši izcelt lietas.
Varat noklikšķināt uz pogas un pēkšņi , jūs saņemsiet atbildi uz
summēšanu vai maksimālo vai minimālo, vai jebkuru no šiem pamatiem.
Vai nebūtu jauki, ja mēs kā programmētāji nespertu soli atpakaļ un
nebūtu spēcīgāki, taču tagad mums ir jādara vairāk darba?
Tāpēc varbūt dažreiz Python vai kāda valoda nav labākais rīks šim
darbam.
Un tas tagad ļaus mums vispārīgāk ieviest kaut ko, ko sauc par
relāciju datu bāzi.
Pārejot no vienkāršām failu datu bāzēm, piemēram, teksta failiem vai
binārajiem failiem, kuros visi jūsu dati tiek glabāti, kaut ko
piemērotāku.
Bet vispirms jautājumi.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tiešām labs jautājums.
Ja es gribētu atkārtot, vai šis ir jutīgs pret lielajiem un mazajiem
burtiem ?
Tātad, ja es rakstītu Mario ar mazajiem burtiem un nospiestu taustiņu
Enter, es faktiski nesaņemu šādu atbildi.
Tagad tas varētu būt pieņemami, jo problēma tehniski ir lielais M.
Bet tas ir mazliet smieklīgi būt tik pedantiskam attiecībā uz ievadi.
Tātad, kā mēs to varētu atrisināt?
Vai ir kādi padomi, kā to padarīt nedaudz izturīgāku?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Labi, jā.
Jā.
Tāpēc mēs varētu izmantot dažas dažādas funkcijas, no kurām viena
tiek saukta par title , kas mainīs to uz virsraksta reģistru, kur,
tāpat kā lielākajā daļā angļu teikumu, šī teikuma pirmais burts tiek
rakstīts ar lielo burtu.
Mēs varētu izmantot capitalize .
Mēs varētu izmantot upper .
Mēs varētu izmantot lower
Bet patiešām mēs varētu vienkārši izlemt, kā mēs vēlamies
standartizēt lielo burtu lietojumu.
Lielie, mazie burti vai to kombinācija.
Un vienkārši pārliecinieties, ka esat mainījis pašus counts .
Pārliecinieties, ka rīkojaties tāpat ar favorite un, iespējams,
saglabājat datu dublējumu, ja vēlaties parādīt sākotnējo versiju, kas
iegūta no CSV, neuzskatot, ka visu lietojat tikai ar lielo burtu.
Bet tiešām, tas būtu visizplatītākais scenārijs.
Veicot šos salīdzinājumus , jūs vienkārši padarāt lietas nejutīgas
pret lielajiem un mazajiem burtiem.
Citi jautājumi par Python, pirms mēs to atstājam uz nākamo nedēļu?
Labi, tad ieviesīsim šīs relāciju datu bāzes.
Tātad relāciju datu bāze ir tas, ko ikviens — tas ir ļoti populārs
veids, kā uzglabāt daudz datu.
To izmanto pasaules Twitter, pasaules Google un pasaules Meta , lai
glabātu dažus savus datus plašā mērogā.
Relāciju datu bāzēm ir alternatīvas.
Patiešām, šodien mēs runāsim par valodu, ko sauc par SQL.
Ir arī kustība, ja vēlaties, vai alternatīva, ko parasti sauc par
NoSQL, kas ir tieši pretēja.
Jūs neizmantojat SQL.
Ir lietas, ko sauc par objektorientētām datubāzēm un tamlīdzīgi.
Bet, ja esat kādreiz dzirdējis par MySQL vai PostgreSQL, Microsoft
SQL Server, Oracle vai MariaDB vai daudziem citiem produktiem, gan
bezmaksas, gan komerciāliem, viņi runā par to.
Datu bāzes, kas paredzētas daudzu datu glabāšanai.
Relāciju datu bāzēs patīkami ir tas, ka tās patiešām ir līdzīgas
izklājlapām, ar kurām jūs, domājams, bijāt pazīstamas ilgi pirms
šodienas nodarbības.
Tātad relāciju datu bāze, kā jūs redzēsit, visus datus glabās rindās
un kolonnās.
terminoloģija pēc tam būs nedaudz atšķirīga.
Tā vietā, lai būtu izklājlapas , jums būs tabulas .
Bet šajās tabulās joprojām būs rindas un kolonnas.
Un jums būs vēl lielāka kontrole pār savu datu veiktspēju, kad sāksit
tiem piekļūt, izmantojot šo strukturēto vaicājumu valodu vai SQL.
Šī ir valoda, kuru varat izmantot tīmekļa lietotnēm un mobilajām
lietotnēm.
Daudzi analītiķi apsēstos pie sava Mac vai PC un faktiski uzdotu
jautājumus par datiem, lai saņemtu atbildi.
Un brīnišķīgi, lai gan šodien būs jauna sintakse, SQL patiešām veic
tikai četras pamata lietas.
CRUD šeit ir sava veida akronīms.
CRUD ir veids, kā atcerēties, ka relāciju datu bāze galu galā
atbalsta datu izveidi, datu nolasīšanu, datu atjaunināšanu un datu
dzēšanu.
Tātad, pat ja jums liekas, oho, šeit ir daudz jaunas sintakses, kas
nav saistīta ar mūsu pagātnes valodām, vienīgais, ko jūs darāt, ir
datu izveide, datu lasīšana, atjaunināšana un dzēšana ,tas pats.
Tagad nedaudz mulsinoši SQL, atbilstošās funkcijas vai komandas, kas
ir saistītas ar CRUD, patiesībā ir šīs.
Tātad tā joprojām ir izveidot funkcija , bet ir vēl viena , ko sauc
par ievietošanu.
Tas ir nevis lasīt , kas ir vairāk datorzinātnieku veids, kā to
pateikt, bet gan atlasīt, kas ir nedaudz skaidrāks veids kā
izteikties .
Tāpat kā atlasīt datus, kas jums rūp.
Atjauninājums joprojām ir tas pats atjauninājums .
Dzēst joprojām ir dzēst.
Bet ir vēl viena komanda ar nosaukumu drop, kas ļauj nomest, tas ir,
dzēst, arī veselas tabulas.
Tātad jūs varat izveidot tabulas, izmantojot sintaksi, kas parasti
izskatīsies šādi.
Jūs izveidosiet tabulu.
Jūs norādīsiet tabulas nosaukumu, kuru varat saukt par visu, ko
vēlaties, taču parasti vislabāk ir izmantot mazos burtus, bez
atstarpēm.
Pēc tam iekavās varat norādīt ar komatu atdalītu kolonnu sarakstu,
kuras varētu būt vajadzīgas šajā tabulā.
Tātad šis ir koda ekvivalents SQL valodā, manuāli atverot Google
izklājlapas vai Excel vai Numbers un noklikšķinot augšējā kreisajā
šūnā un, piemēram, ierakstot laikspiedolu, un pēc tam nākamajā
ierakstot valodu un pēc tam trešā ierakstot problēmu .
Tas ir veids, kā izklājlapā noteikt, kas ir jūsu galvenes.
Bet tagad to sauc partabulu .
Tagad mēs vispirms neizmantosim šo komandu manuāli.
Darīsim kaut ko nedaudz vienkāršāku.
Mēs sāksim ar šo datu importēšanu .
Un es turpināšu un darīšu to.
Ļaujiet man atgriezties pie VS Code šeit.
Pagaidām es atstāšu favorites .py, jo tagad mēs pāriesim uz šo citu
valodu, ko sauc par SQL.
Un, lai to izdarītu, es izveidošu jaunu datu bāzes failu.
Un es to darīšu, izmantojot komandu sauktu par sqlite3, kas ir tikai
tās trešā versija, un es došu datubāzei nosaukumu favorites.db.
Ir dažādas konvencijas, taču šī ir viena no visizplatītākajām.
Nospiežot taustiņu Enter, man tiks izveidota jauna tukša datu bāze,
tāpat kā beznosaukuma izklājlapas atvēršana programmā Excel, Google
Sheets vai Apple Numbers.
Man tiek prasīts, vai es vēlos izveidot favorites.db .
Es nospiedīšu Y, lai izvēlētos Jā.
Labi, mēs esam gatavi.
Tagad jūs pamanīsit citu uzvedni.
Es neesmu savā Linux uzvednē per se, kas vienmēr ir dolāra zīme.
Tagad esmu programmā SQLite.
Un mēs izmantosim SQLite, SQLite3, kā tikai interaktīvu veidu, kā
spēlēt ar SQL kodu.
Šodienas beigās mēs jums parādīsim, kā jūs varat izmantot SQL Python
kodā, lai jūs joprojām rakstītu Python kodu, lai darītu visu, ko
vēlaties, bet jūs varat runāt ar datu bāzēm, izmantojot Python.
Un tieši tā darbojas tīmekļa lietotnes un mobilās lietotnes.
Piemēram, operētājsistēmā iOS, iPhone, iPad vai līdzīgās ierīcēs, ja
vēlaties saglabāt datus, tie ļoti bieži tiek saglabāti SQL datu bāzē,
kā mēs to gatavojamies darīt.
Bet jūs varat izmantot valodu, ko sauc par SWIFT vai Objective C.
Un tas pats pastāv Android pasaulē, izmantojot Java vai Kotlin vai
kaut ko citu, lai vaicātu datu bāzē.
Tāpēc mēs pašlaik skatīsim SQL atsevišķi, piemēram, analītiķi varētu
to izmantot kopā ar savu Mac vai personālo datoru, taču mēs to
sasaistīsim kopā līdz dienas beigām.
Tāpēc šajā terminālī SQLite ļaujiet man turpināt un vispirms izpildīt
šo komandu.
Vispirms es pārlikšu SQLite CSV režīmā, jo sākotnēji es mēģināšu iet
pa īsāko ceļu .
Un es tikai automātiski importēšu visus datus, kas tika iesniegti,
izmantojot Google Form , ko eksportēju kā CSV un augšupielādēju savā
koda vietā.
Un es tikai automātiski pārvērtīšu šo CSV failu par SQL datu bāzi,
lai man nebūtu jāizdomā, kas ir tās izveides tabulas komandas.
Lai to izdarītu, es teikšu mode csv, lai SQLite zinātu, ka šī ir
komanda, zinātu, ka tas ir CSV fails.
Tas ir burtiski .mode .
Tātad punkts ir pirms atslēgvārda.
Un tagad es teikšu .import un pēc tam faila nosaukumu, kuru vēlos
importēt, kas ir favorites.csv.
Un tagad tās tabulas nosaukumu , kuru es vēlos izveidot ar šiem
datiem.
Un konsekvences labad es to nosaukšu par favorites .
Es varētu šīs lietas pārveidot par jebko, ko vēlos, bet es to darīšu.
Un voila, šķiet, ka nekas nav noticis.
Bet tāpat kā C un Python un Linux, kad šķiet, ka nekas nenotiek, tas
parasti ir labi.
Tas nozīmē, ka es nesajaucu.
Tātad, ja es gribu redzēt, kas tikko notika, ir šī cita komanda.
Un šīs komandas, kas sākas ar punktiem, ir specifiskas SQLite, kas
patiešām ir viegla SQL versija.
Tās nav SQL,pašas par sevi.
Tātad, ja izmantojat Oracle vai kaut ko līdzīgu, jūs neizmantosit šīs
precīzās komandas.
Pēc brīža jūs redzēsiet tās , kuras mēs izmantojam.
Un šeit ir pirmais.
Kad es ierakstu .schema, datu bāzes shēma ir datu bāzes dizains.
Kādas ir tabulas?
Kas ir kolonnas un tas viss?
Tātad, kad es ierakstu .schema, šajā gadījumā man tiek parādīta
tabulas izveides komanda, kas man tika automātiski uzzīmēta,
vienkārši izpildot šo importēšanas rindiņu.
Kad sāku strādāt ar SQL, es varētu burtiski to ierakstīt pats vai
izmantot kādu programmu, lai to ģenerētu.
Bet tas, ko tas man rada, ir šis.
Izveidojiet tabulu, ja tā neeksistē, lai gan tā ir kodolīgāka.
Es vēlos izveidot tabulu, ko sauc par favorites .
Un tad šīs tabulas kolonnas būs laikspiedols, kas būs teksts, komats,
valoda, kas arī būs teksts, komats, problēma, kas arī būs teksts.
To ļoti triviāli secināja komanda .import, lai saprastu, ka jā,
vienkārši iedodiet man trīs kolonnu datu bāzes tabulu, kuras pamatā
ir Google veidlapa.
Jautājumi par šo?
Šīs ir komandas, kuras izpildāt vienreiz, lai sāktu darbu.
Šīs komandas nepalaižat bieži, taču tās ir slaidā tikai uzziņai.
Labi.
Tāpēc tagad darīsim kaut ko nedaudz interesantāku.
Es šeit notīrīšu savu SQLite termināli, bet joprojām esmu SQLite.
Es tagad izmantošu dažas no savām pirmajām SQL komandām, kuras ja
atceraties select bija starp tām.
Tātad CRUD, CRUD.
R bija select . Iespējams, šī ir visizplatītākā, visnoderīgākā un
jaudīgākā lieta, ko izmantot SQL datu bāzē, atlasot datus, lai
atbildētu uz jautājumiem, kas ir līdzīgi tiem, uz kuriem mēģinājām
atbildēt ar Python.
Šī ir vispārējā sintakse.
Ikreiz, kad vēlaties atlasīt datus no SQL datu bāzes, jūs burtiski
sakāt:select .
Pēc tam norādiet kolonnu vai kolonnas, no kurām vēlaties atlasīt
datus.
Jūs burtiski ierakstāt vārdu no un pēc tam norādāt tabulas nosaukumu.
Šajā gadījumā vēlaties iegūt šos datus no semikola.
Viss, kas šeit ir rakstīts ar lielajiem burtiem, ir SQL atslēgvārds.
Stingri sakot, lietas nav jāraksta ar lielo burtu, taču mēs iesakām
to darīt stilistiski.
Un jo īpaši mācoties un pat rakstot, tas tikai palīdz atšķirt SQL no
jūsu izvēlētajiem vārdiem, piemēram, kolonnu nosaukumiem un tajā
esošajiem datiem.
Tāpēc pieņemiet šo paradumu agri.
Tāpēc ļaujiet man atgriezties pie manas koda vietas šeit.
Es darbinu savu termināļa logu ar SQLite3 tajā .
Pieņemsim, ka es vienkārši vēlos iegūt visus datus no izlases
tabulas, kas tika automātiski importēta.
Darīsim tā.
Izvēlieties.
Es gribu visu.
Nu, es varu veikt timestamp comma language comma problem
Bet zini ko?
Šeit jau ir ērtības.
Ja vēlaties visu, SQL ir tas, ko sauc par wild card character , kas
ir tikai zvaigzne, zvaigznīte, kas nozīmē, dodiet man katru kolonnu,
man pat nezinot, kā tās sauc.
Ļaujiet man turpināt t no favorites semikola.
Un tas ir SQL veids, kā atvērt datubāzi, atkārtojot katru tajā esošo
rindu, izdrukājot katru rindu tajā, un tas ir izdarīts.
Tātad šie trīs soļi, kas bija kā deviņas Python koda rindiņas, kas
tiek dotas vai ņemtas agrāk, tagad ir viena SQL rinda.
Nospiedu Enter.
Ir visi dati.
Tāpēc es tagad redzu visus datus.
Vienkārši izvadiet to šeit kā CSV.
Bet tas nav CSV fails.
Tagad tā faktiski ir tabula .
Un patiesībā ļaujiet man to izdarīt, jo nākamajā reizē, kad atvērsim
failu, jūs redzēsit darbību nedaudz savādāk.
Es tikko izgāju no SQLite3.
Es grasos to palaist atkārtoti, bet es negrasos atkārtoti importēt
datus vai darīt kaut ko tamlīdzīgu, jo mans fails tagad pastāv.
Patiesībā ļaujiet man spert soli atpakaļ.
Ja es ierakstu ls savā Linux uzvednē, tur ir mans favorites.py no
iepriekš.
Tur ir mans favorites.csv no iepriekš.
Un šeit ir trešais fails, ko es izveidoju pirms brīža, kad pirmo
reizi palaižu SQLite3.
Tātad dati ir noturīgi.
Tas neizmanto RAM vai atmiņu.
Viss, ko es tagad daru, tiek saglabāts.
Tātad, turpināsim un atkārtoti palaidīsim SQLite3 ar to pašu failu.
Bet es netaisos... Man nav viss atkārtoti jāimportē, jo fails jau
pastāv.
Ļaujiet man tagad atkārtot to pašu.
Izvēlieties zvaigznīti no favorites , lai iegūtu visus datus.
Un tas, ko jūs redzēsit tagad, ir tie paši dati, taču tagad tie ir
nedaudz skaistāki.
Tā kā es to palaidu vēlreiz , šoreiz es faktiski atspējoju CSV režīmu.
Un tas, ko es tagad redzu, ir viss šīs datu bāzes tabulas saturs, ko
sauc par favorites .
Tagad šeit nav nekā jauna, taču jūs vienkārši redzat visus tos pašus
datus no šīs datu bāzes ASCII vai Unikoda versiju.
Pieņemsim, ka es vēlos iegūt datu apakškopu.
Ļaujiet man notīrīt ekrānu.
Un tāpat kā operētājsistēmā Linux, es varu Control L tikai notīrīt
lietas estētiski.
Pieņemsim, ka es vēlos iegūt tikai valodas.
Tāpēc es varētu izvēlēties valodu no izlases.
Un tagad tiks atlasītas nevis visas trīs kolonnas, jeb zvaigznīte,
bet tiks atlasīta tikai valodas kolonna un visi tajā esošie dati.
Ja es nospiedīšu Enter, voila.
Tagad es tikai tos tur redzu.
Nav laika zīmogu, nav problēmu.
Tā ir tikai tabulas daļa , ja vēlaties.
Labi, joprojām nav tik interesanti, jo tā ir tikai liela datu kolonna.
Bet tagad lietas kļūst interesantākas.
SQL izrādās, ka ir funkcijas, kas nāk ar šo valodu, tāpat kā C, tāpat
kā Python.
SQL, daās no noderīgākajām , dažas no visvienkāršākājām , ir šīs .
Average, count, distinct, lower, max, min, upper , kas gandrīz
atbilst tam, ko saka.
Un count ir īpaši noderīga.
Sāksim ar to.
Tas ir pamatots jautājums, kas tiek uzdots, cik cilvēku ir iesnieguši
Google Form līdz brīdim, kad es faktiski lejupielādēju CSV.
Kāpēc gan mums to nedarīt?
Ļaujiet man atgriezties pie VS Code šeit manā termināļa logā.
Ļaujiet man izvēlēties nevis zvaigzni, bet zvaigžņu count .
Tāpēc norādiet to rindu skaitu, kuras tiek atgrieztas no datu bāzes,
ko sauc par datu bāzes tabulu, ko sauc par favorites .
Tagad, nospiežot taustiņu Enter, es nesaņemšu visus datus.
Es vienkārši iegūšu skaitli.
430 rindas atgriezās.
Tātad tas ir diezgan labi.
Tagad es zinu, cik daudz datu tur ir.
Nu, kādas valodas tur bija?
Es varētu izvēlēties valodu no izlases tāpat kā iepriekš, taču tas
nav tik noderīgi, it īpaši, ja es mantoju datus.
It kā es esmu analītiķis, kuram mans priekšnieks ir iedevis datu
kopu, un viņi vēlas, lai es izskaitļotu dažus skaitļus.
Labi, es varētu ielādēt to programmā Excel.
Es varētu to sakārtot.
Bet tagad varat izmantot SQL, lai atbildētu arī uz diezgan
vienkāršiem jautājumiem.
Ja vēlaties atlasīt atsevišķas valodas datu kopā, jo jums nebija
piekļuves Google Form , ļaujiet man izvēlēties tikai atsevišķās
valodas no favorites tabulas.
Un tagad es nospiežu Enter un saņemu daudz kodolīgāku atbildi.
Tikai trīs attiecīgās valodas.
Nav īsti noderīgs, jo es izveidoju Google Form , taču, protams, ja
mantojat datus no kāda cita, jūs tikko lejupielādējāt datu kopu,
vismaz tagad es domāju, par notiekošo.
Tagad tas nav nepieciešams tik mazai datu kopai, bet es varu apvienot
šīs lietas.
Veiciet select par atšķirīgo valodu skaitu šajā datu kopā, ko sauc
par favorites .
Un tagad man vajadzētu saņemt atbildi?
Tāpēc, cerams, patiešām atbilde sauca trīs.
Un tas, ko jūs atkal pamanāt arī estētiski, ir kā neliels pagaidu
tabula .
Kad es prasīju tikai atsevišķas valodas, SQL man atdod šo pagaidu
tabulu atmiņā, kurā ir viena kolonna ar nosaukumu valoda un pēc tam
trīs rindas.
Tagad tas nekur nav saglabāts.
Tas ir vienkārši izpildīts īslaicīgi šādi.
Bet tāpēc tas ir attēlots šādā veidā.
Tas, ko jūs saņemat, ir jūsu datu apakškopas, mazākas tabulas, kurās
ir daži jūsu dati.
Un tas pats šeit .
Šis ir traki garš kolonnas nosaukums.
Ja patiešām vēlaties, varat to pārdēvēt.
Bet tas ir viss, ko mēs tur redzam.
Un patiesībā, ja tas ir nedaudz neglīti, mēs varam šīs lietas saukt
par aizstājējiem.
N ir parasts mainīgā, skaitļa nosaukums jebkurā programmēšanas valodā.
Tāpēc es faktiski varu to nosaukt par kolonnu ar nosaukumu n.
Nospiediet Enter.
Un tagad es saņemu mazu, niecīgu tabulu, kuras kolonna tiek saukta
par n un kurā ir tikai viena vērtība.
Labi, jautājumi par šo funkciju lietošanu šeit?
Jautājumi, jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Sakiet mazliet skaļāk.
Mērķauditorija: AS.
DEIVIDS MALANS: Ak, AS.
Kā burtiski angļu valodā.
Tātad pārdēvējiet šo kolonnu par šo.
Tehniski tas kolonnai izveido aizstājvārdu.
Tātad tas arī viss.
Jā?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Distinct darbosies ar visu, ko iekavās ievietosiet, un atbrīvosies no
visiem dublikātiem, atdodot tikai unikālos.
Pareizi.
Citi jautājumi šeit?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Labs jautājums.
Ja definējat aizstājvārdu, piemēram, n, ko es tikko izdarīju, vai tas
kļūst kā mainīgais, ko varat izmantot atkārtoti?
Īsa atbilde, šajā gadījumā nē, taču varat to izmantot atkārtoti savā
vaicājumā.
Lai gan šie vaicājumi kļūst nedaudz garāki, protams, paziņojumi, ka
tie tādi ir, jūs faktiski varat atkārtoti izmantot n vēl garākā
vaicājumā.
Tātad vēlāk jūsu vaicājumā.
Un mēs redzēsim dažus, kas sāks augt garumā.
Tāpēc tas ir jauks veids, kā nosaukt lietas, lai vaicājums būtu
nedaudz precīzāks.
Tāpēc mēs varam pāriet uz dažiem no šiem sarežģītākajiem vaicājumiem,
jo izrādās, ka ir arī dažas citas metodes, kuras varam ieviest.
Šeit ir daži citi SQL atslēgvārdi.
Un atkal, lai gan šis ir vēl viens lietu saraksts, mēs darām tikai
četras lietas.
Creating, reading, updating, un deleting data.
Tie tikai ļauj mums precīzi noregulēt, kā mēs to darām.
Tātad, kur mēs varēsim filtrēt datus, kā mēs to darīsim pēc brīža.
Piemēram, atlasiet datus, kur šis nosacījums ir patiess.
Piemēram, būs alternatīva vienādības zīmei.
Tā vietā, lai meklētu tieši Scratch vai Python vai tieši C, varat
meklēt kaut ko līdzīgu dot dot dot, un tas var būt nedaudz
izplūdušāks rezultāts , ja vēlaties, arī ar citām rakstzīmēm.
Order by nodarbosies ar šķirošanu.
Limit tikai ļaus man ierobežot kopējo rindu skaitu, kas tiek
atgrieztas līdz 1 vai 10, vai ierobežotu, ja nevēlos redzēt visas
400 plus rindas vienlaikus, jo es tikai cenšos to saprast . .
Un group by vislabāk parāda piemērs.
Tātad, padarbosimies arī tikai ar pāris no tiem.
Ļaujiet man atgriezties pie VS Code šeit.
Es notīrīšu ekrānu.
Es joprojām esmu tajā pašā SQLite piemērā .
Un saskaitīsim, cik daudziem no jums patika C, nerakstot Python kodu
kā iepriekš.
Tāpēc ļaujiet man turpināt un atlasīt to rindu skaitu no izlases, kur
valoda katrā rindā ir vienāda ar C.
Un SQLite parasti izmanto vienas pēdiņas jebkurā laikā, kad ieskauj
virkni, kas ir paredzēta, lai attēlotu burtisku teksta daļu, nevis C,
kas bija dubultpēdiņas, vai Python, kas bija vai nu dubultpēdiņas vai
vienas pēdiņas .
Tātad tiek atlasīts rindu skaits no izlases tabulas, kur attiecīgā
valoda ir C.
EnterAnd , un tas man dod 98.
Tomēr ņemiet vērā, ka, ja es izlaidīšu šo predikātu, kā mēs to
darījām iepriekš, jūs atgūsit kopējo tabulā esošo rindu skaitu.
Tātad, kur ir tas, ko sauc par predikātu, kas ļauj man filtrēt lietas
tāpat kā nosacījumu ja vai tamlīdzīgi valodā, ko esam redzējuši
iepriekš.
Varat pateikt nedaudz precīzāk, piemēram, cik daudziem cilvēkiem
patiešām patika C un tieši Mario problēma?
Nu, darīsim tā.
Turpināsim un favorites tabulā atlasiet rindu skaitu, kur valoda ir C
un.
Tātad tas joprojām ir burtiski vārds ands un or , tāpat kā Python,
bet ne kā C.
Un problēma ir vienāda ar Mario. Redzēsim, vai ir kāds C un Mario
problēmas cienītājs.
Un šajā gadījumā mums trim ļoti patīk šīs divas lietas kopā.
Labi, ko mēs vēl varam darīt?
Pārliecinošāk varētu būt noskaidrot, kāda bija tās popularitāte
katrai valodai, līdzīgi kā Python?
Un šobrīd mums nav īsti iespēju to izdarīt, izņemot Python, kur mums
bija cilpa, un mums bija šie mainīgie un vārdnīca, kas to visu
izdarīja mūsu vietā.
Pilnīgi izpildāms, taču nogurdinošs, it īpaši, ja jūsu uzdevums ir
analizēt datus.
Mans Dievs, pat uzrakstīt 15 koda rindiņas, lai atbildētu uz
vienkāršiem jautājumiem, ir smieklīgi.
SQL var mums palīdzēt.
Tāpēc ļaujiet man turpināt un darīt to.
Ļaujiet man izvēlēties katru valodu un to skaitu no favorites
tabulas, bet šoreiz grupēt pēc valodas.
Tātad šis bija vēl viens no atslēgvārdiem, ko varam izmantot šajā
saīsinātajā SQL papildu funkciju sarakstā.
Un tas aizņem kādu brīdi, lai apdomātu, bet tas man dos divu kolonnu
pagaidu tabulu, kurā pirmā kolonna ir valoda, bet otrā kolonna ir to
skaits no šīs datu kopas.
Grupēšana pēc valodas nozīmē tikai vienu reizi rādīt man Scratch,
vienreiz rādīt C un Python tikai vienu reizi.
Tas nozīmē, ka visas identiskās vērtības tiek grupētas kopā, taču
sekojiet līdzi, cik daudz to ir.
Un tā tagad, ja es pāreju uz SQLite un nospiežu taustiņu Enter, tagad
man SQL versijā ir tieši tāda pati izvade, kāda man bija no Python,
kas mani aizņēma vēl 15 rindiņas iepriekš.
Tagad mums ir tikai viena , jo SQL — strukturētā vaicājumu valoda —
ir paredzēta , lai izveidotu šādus vaicājumus, lai atbildētu uz
jautājumiem un ātri saņemtu atbildes.
Ja mēs vēlamies to nedaudz sakārtot , jūs jau iepriekš jautājāt par
šķirošanas kārtību.
Nu, mēs arī to varam.
Šeit mēs varam izmantot vēl vienu atslēgas frāzi.
Mēs varam sakārtot pēc šo rindu skaita un pēc tam izpildīt šo
vaicājumu šeit.
Diemžēl tagad tie ir no mazākajiem līdz lielākajiem, taču mēs varam
to mainīt.
Izrādās, un mans vaicājums sāk parādīties šeit.
Es uz brīdi attālināšu.
Ja vēlaties sakārtot pēc skaita, noklusējuma vērtība ir augošā
secībā, saīsināti ASC.
Ja vēlaties mainīt kārtošanu SQL, tā vietā, lai izmantotu apgriezto
vērtību, kā mēs to darījām Python, dilstošā secībā sakiet DESC.
Un tagad mēs iegūstam gandrīz tādu pašu izvadi, bet apgriezti otrādi.
Tāpēc vienreiz atbildēt uz jautājumiem ir daudz ātrāk, protams, ar to
jūs iegūsit atmiņu un komfortu.
Nu, ko vēl es varu darīt?
Ko darīt, ja man rūp tikai populārākā valoda?
Man vienalga otrās vietas vai trešās vietas valodas vai kas cits.
Nu, ļaujiet man šeit pievienot vēl vienu noteikumu .
Ierobežojiet atbildi līdz vienai.
Un neatkarīgi no tā, cik rindu tagad vajadzētu atgriezties, es
iegūstu tikai pirmo valodu no mūsu apkopotās datu kopas ar 270
balsīm.
Jautājumi par šo?
Vai šeit ir kādi jautājumi?
Nē?
Ko darīt, ja mēs sākam ieviest SQL un ir pārāk vēlu, lai to iekļautu
Google Form ?
Izrādās, ka šim arī ir sintakse.
Protams, jūs varat izveidot datus.
Ne tikai tabulas, bet arī tajā esošie dati, un šī ir tipiskā sintakse
datu ievietošanai SQL datu bāzē.
Jūs burtiski, ievietojat tabulas nosaukumā.
Un pēc tam iekavās norādiet vienu vai vairākas kolonnas, kurām ir
vērtības, kuras vēlaties ievietot.
Tas nozīmē, ka jums nav jānorāda vērtības katrai kolonnai attiecīgajā
rindā.
Ja jums ir atbildes tikai uz dažiem no šiem jautājumiem, varat tos
uzskaitīt šādi.
Bet jūsu ievadītās vērtības būs šādas.
Tātad jūs burtiski ievietojat vērtības slēgtajās iekavās .
Un tad otrajā iekavu kopā ar tāda paša garuma un komatu atdalītu
sarakstu jūs norādāt, kuras vērtības vēlaties ievietot.
Tātad tas ir nedaudz daiļrunīgi .
Un, godīgi sakot, ilgtermiņā jūs izmantosit Python kodu, lai
automātiski veiktu šāda veida ievietošanu, taču turpināsim un
izmēģināsim šo.
Šobrīd, ja es izvēlos atsevišķu valodu no izlases, mēs atkal to
redzam.
Tikai šie trīs kandidāti.
Bet tagad mēs esam jums iemācījuši mazliet SQL.
Tāpēc favorites ievietosim kolonnu ar nosaukumu language .
Un zini ko?
Es šeit uzdošu problēmu.
Vērtības, kurām, un ļaujiet man tālināt, būs "SQL" ; un "fiftyville."
. Jūs drīz redzēsit, par ko ir runa.
Semikols.
Šķiet, ka nekas nenotiek, bet tas parasti ir labi.
Un tagad, ja es ritinu atpakaļ savos vaicājumos, programmā SQLite3
varat ritināt uz priekšu un atpakaļ laikā, lai izvairītos no
atkārtotas ierakstīšanas, tagad man šeit vajadzētu redzēt patiešām
četras kandidātvalodas.
Tagad pieņemsim, ka jūs nekad īsti neesat C fans un, iespējams,
vidusskolā vai reālajā pasaulē jūs nedaudz programmējāt un jums
patika C++.
Nu, C ir daudz atbilžu.
Tāpēc select star from favoriteswhere language equals “C” ; Tātad,
šeit ir visi, kas iesniedza atbildi uz C.
Pieņemsim, ka nē, viņi nevēlējās C, viņi gribēja C++, kas nav valoda,
kuru mēs mācām klasē.
Bet es varētu arī tagad to izdarīt.
Varat izmantot atjaunināšanas komandu, lai kolonnai vai kolonnām
iestatītu dažādas vērtības, ja ir izpildīts kāds nosacījums.
Tātad, ja es atjauninu tabulas nosaukuma kopas kolonnas nosaukumu,
kas ir vienāds ar kādu vērtību, filtrējot to, iespējams, pēc tā, kur
kāds nosacījums ir patiess.
Tātad, pieņemsim, ka esmu mainījis savas domas, vai ziniet ko,
turpinām un atjaunināsim izlasi, iestatiet valodu, kas ir vienāda ar
varbūt C++, kur valoda ir vienāda ar C.
Tagad tas ir destruktīvi, tāpēc jūs parasti nevēlaties to darīt, ja
vien jums nav arī datu dublējumkopijas, kas ignorē cilvēku atbildes.
Šķiet, ka tas ir izdevies, jo kļūdu ziņojumu nav.
Un, ja es atkārtoti izpildu iepriekšējo atlasi, kas sniedz man visus
favorites , kur valoda ir vienāda ar C, tagad es patiešām nesaņemu
nevienu.
Bet, ja es meklēju C++, tagad man sanāk daudz.
Un, ja es vispār atbrīvojos no tā, kur klauzulas un tikai paskatīšos
uz savas datu bāzes saturu, tagad jūs redzēsit, ka C++ patiešām ir
papildināts ar visiem pārējiem datiem.
Protams, tas nav tas, ko jūs visi domājāt, tāpēc es varu to atsaukt.
Ļaujiet man turpināt un atsaukt to, ko tikko izdarīju.
Ļaujiet man iestatīt savu iecienītāko valodu uz C, kur valoda ir
vienāda ar C++.
Bet predikāts ir svarīgs.
To es netaisos darīt.
Ko darīt, ja es nejauši izlaidu šo predikātu, the where clause ?
Kā tas varētu sabojāt lietas, jūsuprāt?
Jā, aizmugurē.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tas katras rindas valodu patiešām iestatītu uz C.
Un tas ir bīstami.
Un, ja sākat googlēt, meklējot SQL kļūdas vai tamlīdzīgus
priekšmetus, cilvēki reālajā pasaulē ir nejauši palaiduši šādas
komandas.
Un, nenosaucot vārdus, kāds bijušais mūsu mācībspēks kādā brīdī
nejauši palaida šādu komandu un nomainīja katra studenta vārdu mūsu
datubāzē uz Bobiju, manuprāt, tā bija.
Katrai rindai tāds pats nosaukums, jo viņi vienkārši aizmirsa
predikātu.
Tātad arī šeit ir kodā pastāvošas briesmas, un jums vajadzētu diezgan
ātri pieņemt ieradumu vienmēr, viens, dublēt savus datus, piemēram,
ar CP, piemēram, Linux vai jebkurā citā tehnikā, vai vienkārši
pārliecināties, pirms nospiežat Enter, ka, jā, šis patiešām ir
vaicājums, kuru es vēlos izpildīt.
Un vispārīgi runājot reālajā pasaulē, procesa kontrolei ir jābūt
ieviestai.
Tāpat kā praktikantam nevajadzētu piekļūt ražošanas datu bāzei,
tiešsaistes datu bāzei un tamlīdzīgiem nolūkiem.
Bet tagad ar šiem vaicājumiem jums ir daudz iespēju .
Tāpēc esiet vēl uzmanīgāks, jo ļoti viegli varat izdarīt sliktas
lietas.
Tāpēc ļaujiet man to atsaukt.
Kur valoda ir vienāda ar "C++." ;. Un es tālināšu atpakaļ.
Enter .
Un tagad es domāju, ka esam atpakaļ normālajā stāvoklī .
C ir starp atbildēm.
Jā?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Ko tas būtībā dara beigās?
Mērķauditorija: [NEdzirdams]
DAVID MALAN: Būtībā tas ir atrast un aizstāt.
Jā.
Nespeciālistu izteiksmē tas ir atrast un aizstāt ar SQL.
Un patiesībā Microsoft Word vai Google Docs autori, iespējams,
izmanto tādu valodu kā šī SQL, atverot jauko grafisko, lietotājam
draudzīgo meklēšanas un aizstāšanas lodziņu.
Tas var būt tas, ko viņi dara mums neredzot , vai, protams, viņi var
lietot kādu citu valodu.
Ir vēl viena pēdējā sintakse, ko ir vērts zināt, — dzēst, kas labāk
vai sliktāk ir vēl destruktīvāka, tādējādi ļaujot dzēst rindas no
tabulām.
Tas atšķiras no drop, kas ļauj izdzēst pašas tabulas.
Tā koncentrējas uz rindām.
Pieņemsim, ka jums ļoti, ļoti nepatika, teiksim, Tīdemans bija
nedaudz izaicinošs, ja risinājāt šo ērtāko problēmu.
Tātad, ja jūs patiešām vairs nevēlaties pat domāt par Tīdemenu, tad
kāpēc gan neizdzēšam no izlases, kur problēma ir vienāda, un es to
neizpildīšu pa īstam, Tīdemen.
Tādējādi tiks dzēsta katra rinda, tostarp tajā esošā valoda un
laikspiedols, kurā students atbildēja Tīdemenam.
Sliktāk par šo būtu šis.
Kāpēc tas varētu būt slikti?
Labi, smejos, jo nav predikāta.
Nav filtra, kas burtiski nozīmē, ka tiks izdzēsti visi dati.
Tātad atkal ar lielu spēku šeit nāk liela atbildība.
Tagad šī ir mūsu dinamiski izveidotā datu kopa ar 430 rindām.
Protams, reālajā pasaulē ir dažas patiešām interesantas datu kopas.
Un viena vietne, ko, iespējams, esat dzirdējusi, vai lietotne, ko,
iespējams, esat izmantojuši , ir IMDb, interneta filmu datu bāze, kas
lieliski padara dažus to datus pieejamus lejupielādei kā CSV failus
vai tehniski TSV failus, ar cilnēm atdalītas vērtības.
Bet tas, ko mēs darījām pirms nodarbības, bija daži no šiem datiem
gan televīzijas pārraidēm reālajā pasaulē, gan filmām reālajā
pasaulē.
Un tas, kas ir brīnišķīgs šajā datu kopā, ir ne tikai desmitiem,
simtiem vai pat tūkstošiem rindu.
Ir miljoniem rindu ar interesantiem datiem , TV šovu un filmu, ar
kuriem lielākā daļa cilvēku, iespējams, ir pazīstami, vismaz ar
apakškopu.
Un mēs redzēsim, ka šie dati tagad ir sešu dažādu tabulu veidā, ko
esam jums iesnieguši.
Un šodien aplūkojamās tabulas būs cilvēki TV biznesā, zvaigznes tajā,
šovi, ko cilvēki veido un tamlīdzīgi.
Šis ir attēls, kuru mēs vēlreiz apskatīsim, lai jūs varētu saprast,
kādi ir faktiskie dati.
Šī šķiet laba iespēja uzkodām.
Patiesībā jau pēc brīža vestibilā ir pieejams daudz Rice Krispie
kārumu.
Bet, ja cilvēki varētu atzīt šo mini kāzu torti šeit.
CS50 zona Kārters Zenke šonedēļ apprecas.
Tāpēc apsveicu arī Kārteru.
Apsveicu.
Labi.
[APLAUSI]
Šajā kastītē ir tikai viens kūkas gabals, bet gaitenī ir daudz Rice
Krispie kārumu.
Pavadīsim 10 minūtes, un mēs atgriezīsimies ar interneta filmu
datubāzi pēc 10.
Labi.
Mēs esam atgriezušies.
Tātad, ja jūs nekad neesat bijis, varat doties uz vietni imdb.com
tieši tagad un paspēlēties vai lejupielādēt mobilo lietotni.
Un tā ir tikai liela datu bāze, kurā ir daudz TV šovu un filmu, un
aktieri un tamlīdzīgi.
Bet, kas patiešām ir jauki, jūs varat lejupielādēt dažus no šiem
datiem.
Un tas ir tas, ko es esmu darījis iepriekš.
Mēs esam paveikuši, esam uzraksījuši Python kodu, lai pārveidotu
dažas flat file datu bāzes, kuras tās ļauj lejupielādēt, un mēs to
pārveidojām par SQL datu bāzi ar sešām tabulām.
Tātad ne tikai viens, bet seši, kas galu galā ir šeit.
Un ļaujiet man tikai palīdzēt jums saprast, kas ir šis attēls, kas ir
vienumu attiecību diagramma, kas nozīmē tikai teikt, ka katrs no šiem
ekrāna lodziņiem ir tabula.
Un katra no bultiņām vai malām apzīmē sava veida attiecības starp
tabulām.
Jo līdz šim vienīgie dati, kas mums bija, bija šīs trīs favorites
tabulas kolonnas.
Taču SQL datu bāzēs, tāpat kā Google izklājlapā vai Excel failā,
patiešām ir noderīgas iespējas, ka jums var būt vairākas lapas vai
datu bāzē var būt vairākas tabulas.
Un tāpēc mēs redzēsim, ka TV šovu IMDb datubāzē būs īpaša tabula
visiem televīzijas biznesa darbiniekiem.
Visām TV pārraidēm, kas šobrīd ir viņu datubāzē, tiks izveidota īpaša
tabula.
Būs īpaša tabula šīs nozares rakstniekiem, šovu reitingiem, žanriem,
kuriem šīs pārraides pieder, komēdijas un tamlīdzīgi.
Un visbeidzot, būs šī tabula, kas kaut kādā veidā saista cilvēkus ar
televīzijas šoviem, kuros viņi piedalās, un otrādi.
Un tāpēc vispirms apsvērsim, kā tas izskatās kodā.
Un mēs redzēsim, ka sākumā tas apgrūtinās apzināti, bet es to darīšu.
Es atgriezīšos pie sava termināļa loga.
Un pārtraukumā es lejupielādēju no kursa vietnes failu show.db, kuru
mēs jums iepriekš izveidojām.
Un, ja es ierakstīšu ls, es redzēšu visus savus iecienītākos failus
no iepriekšējiem.
CSV, DB un Python fails.
Bet tagad tie ir show.db.
Tāpēc es turpināšu savā pilnekrāna termināļa logā šeit.
Es neizmantoju faktiskās cilnes vai koda failus.
Tagad es palaidīšu sqlite3 failā show.db.
Un es tikai šeit apskatīšu šīs versijas informāciju.
Ļaujiet man notīrīt ekrānu un palaist vienu komandu, kuru es
izpildīju iepriekš, lai parādītu mums izlases datu bāzes shēmu.
Tagad mēs redzēsim šovu datu bāzes shēmu.
Un šeit notiek daudz kas, bet ļaujiet man ritināt atpakaļ līdz pašai
augšai, sākumam.
Un mēs to redzam šeit.
Tātad, kad es palaižu .schema, mēs patiešām redzam apkopojumu no
visām SQL izveides tabulas komandām, kas tika izpildītas, lai
izveidotu šo datu bāzi.
Un vienu no šīm tabulām sauc par genres , bet citu par people,
ratings, shows, stars un tā tālāk.
Un tajā esošās kolonnas, lai gan tās ir formatētas nedaudz skaistāk
nekā automātiski ģenerētais tabulas izveides priekšraksts izlasei,
kur mums ir viena kolonna katrā izvades rindā šeit, piemēram, tabulā
cilvēki, būs ID kolonna, piemēram, unikāls identifikators, piemēram,
Hārvardas ID, Jēlas ID vai tamlīdzīgi, vārda kolonna, dzimšanas gads
un pēc tam daži citi dati.
Ja es ritinu uz leju līdz pārraidēm, katrai pasaules pārraidei būs
arī unikāls ID, protams, nosaukums, gads, kurā tā debitēja, un
kopējais sēriju skaits datu lejupielādes laikā.
Un kas tad tur vēl ir?
Daži no tiem ir mazāk acīmredzami, piemēram, vērtējumi šeit.
Tātad vērtējumiem nav ID kolonnas, bet tiem ir šova ID kolonna un
vērtējums, piemēram, piecu punktu skalā vai 10 baļļu skalā vai
tamlīdzīgi, un pēc tam kopējais balsu skaits, kas tika savāktas, lai
veicinātu šo vērtējumu.
IMDb ļauj cilvēkiem balsot pozitīvi un negatīvi par šoviem un filmām
un tamlīdzīgi.
Un tad līdzīgi ir žanra struktūra.
Ir šova ID un pēc tam žanrs, kas būs angļu valodas vārds, piemēram,
komēdija, drāma vai kaut kas cits.
Un kas tad vēl?
Paskatīsimies mazliet tālāk par zvaigznēm un rakstniekiem.
Ja mēs šeit ejam līdz pašai apakšai, arī zvaigznes un rakstnieki ir
strukturēti līdzīgi.
Viņiem ir šova ID un personas ID.
Tātad šovs un cilvēks.
Un tad šai rakstītāju tabulai ir šova ID un personas ID.
Un ir vēl daudz citu vārdu, pie kuriem mēs nonāksim pēc brīža.
Bet uz ko šis kods norāda ?
Ja es atgriezīšos pie attēla, kas redzams šeit, jūs redzēsit, ka šajā
attēlā ir atspoguļotas attiecības starp šīm dažādajām tabulām.
Piemēram, ja mēs uz brīdi koncentrējamies uz šoviem , tam atkal ir
unikāls ID, nosaukums, gads, kurā tā debitēja, un kopējais sēriju
skaits.
Ja vēlaties noskaidrot, kādam žanram vai žanriem pieder šovs , jo
daži ir tikai komēdijas, daži ir tikai drāmas, bet daži , iespējams,
ir komēdijas un drāmas atkarībā no epizodes vai tamlīdzīgi.
Tātad jūs varat iedomāties, ka vēlaties ar šovu saistīt divus vai
trīs vai pat vairākus žanrus.
Šī rinda šajā otrajā tabulā ļauj mums to izdarīt.
Katrā žanru tabulas rindā, ko redzēsim, ir divi vienumi — šova ID,
kas attiecas uz šova ID.
Un tāpēc šīs rindas burtiski sakrīt ar konkrēto kolonnas nosaukumu.
Un žanrs, kas būs kā "comedy,", "drama,"vai kaut kas cits.
Tagad, ņemot vērā to, dizaina jautājums.
Kāpēc mēs apzināti neesam vienkārši atbrīvojušies no šīs žanru
tabulas un padarījuši savu dzīvi vienkāršāku, vienkārši pievienojot
šovu tabulai žanra sleju?
Un atkal tabula ir gluži kā lapa ar rindām un kolonnām.
Pašlaik šoviem ir tikai četras kolonnas: ID, nosaukums, gads, sērijas.
Kāpēc gan vienkārši nepievienot piekto kolonnu, ko sauc par žanru, un
tur neielikt šova žanru?
Vai te ir kāda intuīcija?
Kāpēc ne tikai padarīt lietas vienkāršas?
Jā, aizmugurē.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Ja pievienojat šeit piekto kolonnu un saucat to par žanru, jums ir
jāizvēlas žanrs.
Jums ir jāievieto tajā šūnā, domājams, komēdija, drāma, mūzikls vai
kaut kas cits.
Tagad šūnā varētu ierakstīt vairākus vārdus, bet vispārīgi runājot,
tas būtu nevīžīgs , slikts dizains.
katrai šūnai, tāpat kā izklājlapā, patiešām ir jābūt vienai vērtībai.
Tajā var būt vairāki vārdi, taču tam nevajadzētu būt dīvainam ,
komatu atdalītam vairāku lietu sarakstam.
Tādā gadījumā tam vienkārši jāatrodas citā šūnā.
Tātad, ja jūs to izstrādātu tikai ar vienu kolonnu, ko sauc par
žanru, jūs uzspiežat to, ko datorzinātnieks nosauktu par savstarpējām
attiecībām.
Katram šovam ir viens žanrs.
Un tas ne vienmēr ir labi.
Vai strikti runājot, tas būtu daudz pret vienu, jo viens un tas pats
žanrs varētu piederēt vairākiem šoviem , bet katrā šovā tādā gadījumā
varētu būt tikai viens žanrs.
Tas, ko relāciju datu bāze ļauj darīt, un relāciju patiešām ir
noteicošais vārds, tas ļauj izdalīt daļu no jūsu informācijas un pēc
tam šeit, iespējams, vienu šovu vienā rindā, bet tad šajā žanru
tabulā jums varētu būt viena rinda vienam šova žanram, vai arī žanru
tabulā var būt divas rindas komēdijai un drāmai.
Vai arī, ja tam ir trešais žanrs, varat pievienot vēl vienu rindu
šeit.
Tātad jums joprojām ir viena rinda pašam šovam ar visām
interesantajām detaļām, bet mainīgs rindu skaits, izmantojot šo
saikni ar citu tabulu.
Tikmēr reitingi darbojas tāpat, vismaz šajā gadījumā.
Šovam ir ID, nosaukums, gads un sērijas.
Bet, ja vēlaties noskaidrot tā vērtējumu, jums ir jāseko šeit
redzamajai bultiņai, tā sakot, un jāatrod atbilstošais šova ID šajā
tabulā.
Atrodiet šova vērtējumu un kopējo vērtējumu skaitu.
Tātad arī tas ir ņemts vērā, labāk vai sliktāk.
Tagad padomāsim par cilvēkiem.
Cilvēkiem ir tikai trīs kolonnas: ID, vārds un dzimšanas diena.
Taču nav minēts TV šovs, kurā cilvēki ir piedalījušies galvenajās
lomās, vai TV šovi , ko cilvēks ir sarakstījis.
Nu kāpēc tā?
Nu, ja jums šeit būtu ceturtā kolonna ar nosaukumu šovs, jums būtu
jāizlemj, kurā šovā šī persona piedalās.
Un neviens vairs nevarētu darboties citā šovā , jo nav vietas, kur
uzglabāt datus.
Bet, ja kāds, protams, populārs aktieris var filmēties vairākos šovos
, mums, protams, varētu būt viena personas apliecība, viens vārds,
viens dzimšanas gads.
Tāpat kā cilvēku pasaulē ir tikai viens Stīvs Kerels kā aktieris.
Taču Stīva Kerela šajā piemērā viņam ir savs personas ID, lai kāds
būtu viņa Hārvardas ID ekvivalents, Jēlas ID ekvivalents, šajā tabulā
tiktu parādīts vairākās rindās, lai to varētu saistīt ar vairākiem
šoviem .
Un tas ļauj jums izveidot tā sauktās attiecības viens pret daudziem
vai tehniski tās ir divvirzienu attiecības.
Tās ir attiecības ar daudziem pret daudziem.
Kāpēc?
Vienā šovā noteikti var būt vairāki cilvēki un vairāki cilvēki, kas
to raksta, tikai reālajā pasaulē.
Bet otrādi, viens cilvēks noteikti varētu darboties vairākos šovos
vai rakstīt vairākiem šoviem .
Tātad tas ir tas, ko jūs iegūstat ar relāciju datu bāzēm.
Jūs ievietojat savus kanoniskos datus par cilvēkiem vienā vietā, par
šoviem citā vietā un pēc tam izmantojat šīs papildu tabulas, lai
vienu lietu saistītu ar citu.
Tāpēc mēs nekavēsimies pie attēliem.
Tas ir tikai viens no veidiem, kā par to domāt, kā labāk pārdomāt
datu kopu.
Taču atcerieties, ka kods, ko tikko redzējām shēmai, atkal ātri
paplašinājās.
Ir daudz atslēgvārdu, kurus es vēl neesmu pieminējis.
Bet daži no tiem, iespējams, ir pazīstami.
Šeit tie tiek rakstīti ar lielo burtu atšķirīgi.
Bet vesels skaitlis ir šeit sarakstā.
Null ir sarakstā, lai gan tehniski nav nulles.
Tāpēc atdalīsim dažus no šiem atslēgvārdiem un apsvērsim, ko tie
patiesībā dara jūsu datubāzei, jo tagad mēs pētām funkcijas, kas
neeksistē tikai izklājlapu pasaulē.
Tas izrādās SQL datu bāzē, īpaši SQLite, kas ir SQL versija, ko
izmantojam CS50 un ko mūsdienās parasti izmanto, piemēram, mobilajām
lietojumprogrammām.
Tā ir kā viegla SQL versija.
Tas ir tad, kad jūs nemēģināt palaist Twitter un jums noteikti ir
miljardiem un miljardiem rindu.
Jums ir simtiem, tūkstošiem, desmitiem tūkstošu, varbūt pat daži
miljoni, bet ne traki skaitļi, traki datu apjomi.
Īpaši SQLite pasaulē ir šie pieci datu veidi.
Tātad, tāpat kā C, mums bija int un char un tamlīdzīgi.
SQL mums ir tādi.
Blob, kas ir sava veida smieklīgi, bet tas nozīmē tikai binārus
lielus objektus.
Tātad tas ir kā binārs datu tips.
Nulles un vieninieki , kas ne vienmēr iekļaujas citās kategorijās.
Integer , kas, protams, ir vesels skaitlis, kā mēs to zinām.
Numeric , kas ir skaitļu kopums, kas ir īpaši formatēts.
Tātad datums būtu kā year, year, year, year, dash month, month, dash
day, day
Un šī patiesībā ir brīnišķīga lieta.
Atkarībā no valsts, no kuras atrodaties, jūs varētu domāt, ka jūsu
datumu sistēma jūsu valstī ir lieliska vai briesmīga.
ASV sistēma ir šausmīga, jo mums ir mēnesis, diena un pēc tam gads,
ko nav iespējams sakārtot.
Tas ir nepareizs veids, kā objektīvi uzglabāt datus.
Un tomēr šeit mēs to izmantojam lielā mērogā.
Citām valstīm tas ir kļuvis labāk.
Cipari SQL paši standartizē šīs lietas.
Tāpēc nav svarīgi, no kuras valsts jūs esat.
Piemēram, jūs glabājat savus datus šādā konkrētajā veidā.
Laiki ir standartizēti, kā arī cita veida skaitliskie dati.
Real ir plūsmas sinonīms.
Tātad kaut kas ar komatu un kādu ciparu skaitu pēc tam.
Un tad teksts ir tikai virknes un tamlīdzīgi.
Izmantojot citas vēl brīnišķīgākas datu bāzes, piemēram, MySQL,
PostgreSQL, Oracle un citus produktus, par kuriem jūs, iespējams,
esat dzirdējuši, ir vēl vairāk datu tipu, kuros jums ir jāpieņem vēl
precīzāki lēmumi.
Bet SQLite tas patiešām ir diezgan viegls, un jums vai mums vienkārši
ir jāizlemj par datu tipiem katrai tabulas kolonnai.
Taču SQL pasaulē pastāv šie papildu ierobežojumi.
Varat arī teikt, ka šūnas šajā kolonnā var būt vai nebūt nulles.
Tātad, ja vēlaties pasargāt sevi no sevis, lai nesabojātu un
neievietotu nulli, kas ir tukša vērtība, varat skaidri izveidot
tabulu tā, lai tajā būtu kolonna, kas nevar būt nulle.
Un patiesībā pārtraukuma laikā kāds man uzdeva jautājumu par to, ka
esmu manuāli ievietojis SQL mūsu favorites datubāzē "SQL,",;.
Jūs varētu atcerēties, ka es krāpos .
Es tikko ievietoju "SQL" un "fiftyville," — jaunas problēmas
nosaukumu,.
Bet ko es neievietoju datubāzē?
Laika zīmogu .
Un es varētu ievietot .
Es varēju ievietot pašreizējo dienu un laiku pirms dažām minūtēm, bet
es to nedarīju.
Un tas ir labi, ja tas ir pieņemams jums un izstrādājumam, kuru
veidojat.
Bet es to varēju novērst.
Ja mēs būtu definējuši tabulu, lai tajā būtu laikspiedola kolonna,
kas nav tikai teksts, bet arī teksts, kas nav nulle, SQL būtu
sūdzējies un neļautu man pabeigt šo ievietošanu.
Tātad ir šāda veida iebūvēta aizsardzība, ko ne vienmēr varat iegūt,
izmantojot izklājlapu.
Un unikāls nozīmē tieši to.
Ja vēlaties pārliecināties, ka katra rinda šajā kolonnā ir unikāla,
iespējams, e-pasta adresēm vai ASV sociālās apdrošināšanas numuriem
vai jebkam citam, kam vēlaties pārliecināties, ka jums nav divu
versiju, varat norādīt, ka kolonna ir unikāla.
Un ir arī citi šādi ierobežojumi.
Bet atkal šis ir tikai to funkciju saraksts, kuras iegūstat no
pareizas relāciju datu bāzes.
Bet, iespējams, intelektuāli interesantākā un jaudīgākā ir tā, ko
šeit sauc par primāro atslēgu un ārējo atslēgu.
Un ļaujiet man tagad atgriezties pie šīs izvades .
Ja skatāmies uz šoviem , jūs redzēsit, ka šovam i atkal ir ID,
nosaukums, gads un vairākas sērijas.
Un tagad datu tipiem varētu būt jēga.
Izrādās, ka ID, tāpat kā Hārvardas ID, Jēlas ID, būs vesels skaitlis.
Tātad vienkāršs skaitlis.
Virsraksts, protams, būs teksts, bet ne nulle.
Būtu dīvaini, ja televīzijas šovam nebūtu nosaukuma.
Tā nevar būt.
Visa pasaule salūztu vai jūsu TV programma un vēl kas cits.
Tāpēc ir jēga teikt, ka nav nulles.
Gads ir skaitlisks.
Tātad tā ir standartizēta forma.
Epizodes ir vesels skaitlis, piemēram, cik sēriju ir izveidotas.
Un, visbeidzot, ievērojiet šo.
Šova tabulas primārā atslēga acīmredzot ir kolonna ar nosaukumu ID,
kas minēta dažas rindiņas iepriekš.
Tas tikai nozīmē, ka datu bāze izmantos ID kolonnu kā unikālo
identifikatoru.
Tātad tas ir līdzīgs unikālajam atslēgvārdam, taču primārā atslēga
tikai nozīmē, ka arī datu bāze to uzskatīs par īpašu un nodrošinās,
ka tā unikāli identificē jūsu datus.
Bet interesanti ir šis .
Ievērojiet, ja es ritinu atpakaļ līdz cilvēkiem, cilvēki bija līdzīgi
strukturēti, bet ar atšķirīgiem atribūtiem.
Tāpat kā šeit, mums bija personas ID, vārds, dzimšanas gads un ID
primārā atslēga.
Tātad ID atkal ir vesels skaitlis.
Vārds ir teksts, bet ne nulle, jo būtu dīvaini, ja cilvēks bez vārda
teksta ziņā būtu absolūti nekāds.
Dzimšana būs skaitliska.
Taču cilvēku primārā atslēga ir arī ID.
Tātad šīs ir unikālās kolonnas, kuras datu bāze īpaši apstrādās.
Kāpēc?
Nu, mēs tikko skatījāmies šovus .
Mēs vienkārši skatījāmies uz cilvēkiem.
Tagad pievērsīsimies šim, zvaigznes.
Kā noteikt, kurš ir TV šova zvaigzne?
Nu, mums bija divas kolonnas.
Šova ID un personas ID.
Tas ir daudzu daudzu attiecību iemiesojums.
Viens cilvēks varētu piedalīties daudzos šovos .
Vienā šovā noteikti varētu būt daudz cilvēku, kas tajā varētu
piedalīties vai tam rakstīt.
Bet ievērojiet šo.
Šajā tabulā, kurā ir divas kolonnas, šova ID un personas ID, ir tas,
kas tiks saukts par ārējo atslēgu, ko sauc par šova ID, kas atsaucas
uz šova tabulas ID kolonnu un pēc tam uz citu ārējo atslēgu, ko sauc
par personas ID, lai gan es varētu saukt šīs lietas iekavās par jebko
kas attiecas uz personu tabulas ID kolonnu.
Tagad jums nebūs bieži jāraksta šādas komandas.
Atkal, jūs iestatāt datubāzi vienu reizi sākumā, varbūt ar TF
palīdzību, varbūt ar Google vai tamlīdzīgi palīdzību.
Bet, kad jūsu datu bāze ir izveidota, tā tiek atgriezta CRUD.
Create, read, update, delete, the selects, the inserts, the
deletionsun tamlīdzīgi.
Bet ko tas nozīmē?
Šie atslēgvārdi, piemēram, primārā atslēga un ārējā atslēga, ir tie,
kas kodā veic to, ko šis attēls pirms brīža attēloja .
Šīs līnijas šeit ir novilktas burtiski, lai tās atbilstu attiecīgajām
lietām.
Cilvēku ID sakrīt ar personas ID.
Šova ID sakrīt ar šova ID.
Tātad jūs redzat tikai grafisko versiju, koda versiju, grafisko kodu,
kas rada šīs attiecības.
Tagad, ņemot vērā to, redzēsim, kā šīs lietas izskatās.
Tāpēc ļaujiet man atgriezties pie VS Code šeit.
Ļaujiet man notīrīt ekrānu.
Es joprojām esmu SQLite ietvaros ar show.db.
Ļaujiet man turpināt un darīt to, ko es daru ar jebkuru jaunu datu
bāzi.
Ja es kādreiz kaut ko lejupielādēju vai mēģinu apzināties problēmu,
parasti tas nenāk kopā ar skaistu attēlu vai trīs stundu lekciju, lai
izskaidrotu, kas ir datu kopa.
Drīzāk jums vienkārši ir datu kopa jūsu zināšanām par SQL.
Tāpēc ļaujiet man paspēlēties.
Tātad .schema man parāda visas tabulas.
Tas varētu būt sākumpunkts.
Labi, tas ir interesanti.
Es zinu, kas ir cilvēki.
Turpināsim un parādīsim man visus cilvēkus.
Tāpēc izvēlieties zvaigzni no cilvēkiem.
Es tikai cenšos lietotājam draudzīgākā veidā noskaidrot, kā šī datu
kopa izskatās.
Te jau ir daudz cilvēku.
Kā redzat, gadi skrien , televīzijas biznesā ir bijis daudz cilvēku.
Tāpēc šis, iespējams, nebija labākais vaicājums.
Bet tas norāda uz to, cik liela ir šī datu kopa no IMDb.
Ja rodas šaubas un ikreiz, kad zaudējat kontroli pār datoru,
Control C ir jūsu draugs, ar kuru pārtraukt.
Kas būtu bijis labāk, jo es domāju, ka man nav jāzina visi miljoni
cilvēku pasaulē, es varētu ierobežot līdz 10 cilvēkiem.
Un tagad ar to pietiek, lai saprastu, ka Fredam Astēram ir viena
cilvēka identitāti apliecinošs dokuments, kas ir pirmā persona.
Dzimšanas gads 1899.
Lauren Bacall un visi šie citi cilvēki no vakardienas.
Jūs redzat, ka tie ir pirmie 10 cilvēki datu bāzē.
Tātad ir dažu datu piemērs.
Tagad, ja es vēlos apzināties, kas ir šovs , es to zinu tehniski.
Es to zinu pēc attēla .
Bet apskatīsim tikai dažus neapstrādātus datus.
Tā vietā, lai teiktu, ka atlasiet zvaigzni no cilvēkiem, ļaujiet man
select star from shows limit 10.
Un labi, es esmu dzirdējis vai redzējis tikai dažus no tiem, bet tie
ir vecāki šovi.
Bet es redzu, ka katram šovam ir ID, nosaukums, gads, kurā tas
debitēja, un vairākas sērijas.
Bet varbūt visneskaidrākais būs šis.
Izvēlieties zvaigzni no zvaigznēm, kur šī ir tabula, kas saista
cilvēkus ar šoviem.
Vai es šeit redzēsim kādus vārdus vai šovu nosaukumus?
Ne saskaņā ar definīciju, ko mēs redzējām iepriekš.
Ak, man vajadzēja izveidot savas robežas.
Ļaujiet man to pārtraukt.
Ļaujiet man to izdarīt vēlreiz.
Ierobežojums 10.
Nē.
Un šeit jūs noteikti atrodaties programmētāju pasaulē, jo šī būtu
viskaitinošākā izklājlapa, ko jebkad izmantot savā Mac vai
personālajā datorā.
Ja jums tikko būtu lapa ar visiem šiem cipariem, kas saista vienu
lietu ar otru, mans Dievs, kā jūs saprastu, kas tas ir vai kas tas
ir?
Meklējot datus, manuāli jāvada Control F vai Command F.
Bet datubāzei ir vienalga.
Kad esat iepazinies ar SQL, varat šīs lietas atkal savienot.
Tātad tas, ko jūs šeit redzat, ir ārējās atslēgas.
Ārējās atslēgas.
Kāpēc?
Tā kā šova ID atbilst tiem pašiem cipariem no citas tabulas, ko sauc
par šoviem, kam ir pareiza primārā atslēga, ko sauc par ID.
Personas ID šajā kontekstā ir ārējā atslēga, jo tā attiecas uz
cipariem, kas patiešām pieder cilvēku tabulai un tās ID kolonnai.
Tātad tas ir tikai veids, kā tos kaut kā saistīt.
Un tāpēc, ja jūs domājat par to, es vienmēr to domāju savā prātā kā
šo.
Ja šī ir cilvēku tabula, šī ir šovu tabula, un starp tām ir vidējā
tabula, zvaigžņu tabula.
Ir kāds veids, kā šos divus savienot kopā, sakārtojot viena ID ar
otru un iegūstot vairāk datu.
Tāpēc paspēlēsimies ar dažiem no šiem datiem.
Kā būtu, ja mēs sāktu ar to , ko iepriekš uzsvērām, žanrus.
Tāpēc ļaujiet man turpināt un ātri apskatīt visus žanrus šajā
datubāzē.
Tāpēc atlasiet zvaigzni no žanriem.
Zvaigzne parasti būs nedaudz satriecoša, taču tas man tikai ļauj
nojaust, kādi ir dati.
Bet patiesībā paskatīsimies, apskatīsim tos visus.
Labi, tas ir daudz.
Tie visi ir oficiālie IMDb žanri.
Labi, tas nebija baigi ilgi.
Ļaujiet man to filtrēt.
Tātad no žanriem, kur žanrs ir vienāds ar komēdiju, ar lielo C burtu,
pamatojoties uz datiem, ko redzu.
Labi, ko es tagad redzu?
Un patiesībā ļaujiet man to patvaļīgi ierobežot līdz 10, lai gan es
varētu to ierobežot ar visu, ko vēlos.
Šeit ir 10 komēdijas.
Kas tās ir?
Nu, kurš pie velna zina?
Es zinu tikai 10 šovu ID.
Tagad es varētu darīt kaut ko līdzīgu šim.
Kā mēs esam redzējuši iepriekš ar SQL, es varētu darīt, labi, labi,
izdomāsim, kas ir šī pārraides ID.
Atlasiet zvaigzni no pārraidēm, kur meklētās pārraides ID ir vienāds
ar ko?
62614 semikolu.
Tāpēc es varēju to meklēt manuāli, veicot atsauces uz citu tabulu.
Tā bija attiecīgā izrāde, pirmā komēdija datu kopā.
Ļaujiet man uzmeklēt otro.
Tā vietā ievadīsim 63881 Enter.
Labi.
Tā nu lūk, izrāde.
Un izpildisim vēl vienu.
Un pietiks ar to, ka tas vienkārši kļūst nogurdinošs un ātri
neaizsargāts pret kļūdām.
Tas noteikti nevar būt veids, kā to izdarīt.
Patiešām, SQL ļaus mums to darīt nedaudz jaudīgāk.
Darīsim tā.
Tā vietā, lai īslaicīgi iegūtu šo tabulu ar visiem šiem šovu ID un
visiem šiem žanriem, uzlabosim vaicājumu.
Tātad, vienkārši atlasiet izrādes ID no žanru tabulas, kur žanrs ir
vienāds ar "comedy.". Tagad man ir liels šovu ID saraksts, kas visi
ir komēdijas.
Cik daudz?
Nu, es varu apvienot idejas no iepriekšējiem.
Es varu vienkārši saskaitīt visus šos šovu ID vai zvaigznes, ja vēlos
arī to darīt.
Bet es varu saskaitīt visus tos šovu ID.
48 706 komēdijas TV šovu IMDb datubāzē.
Tāpēc šķiet daudz.
Bet kā es varu tagad izmantot šo informāciju un atgūt datubāzē esošo
komēdiju nosaukumus, nedarot to manuāli?
Nu, darīsim tā.
Pirms brīža man ir šis vaicājums.
Atlasiet šova ID no žanriem, kur pašreizējais žanrs ir citāts
“komēdija”. Kā būtu , ja es šos vaicājumus ievietoju iekavās, kā
piemēram, skolas matemātiku?
Ko darīt, ja es to visu apvienoju iekavās?
Un tagad ļaujiet man izvēlēties, ko es patiešām vēlos.
Ļaujiet man izvēlēties, kā būtu ar visu šovu nosaukumiem, kur šova
ideja ir šajā šova ID sarakstā.
Tātad, ja piekrītat, ka šovu tabulā ir ID kolonna, kas citādi tiek
saukta par tās primāro atslēgu, unikālais ID, kas to identificē,
tāpat kā mūsu Hārvardas ID, mūsu Jēlas ID, un jūs piekrītat, ka pirms
brīža šis īsākais vaicājums atdos man tikai visu datubāzē esošo
komēdiju šovu ID, jūs faktiski varat apvienot vai ligzdot šos
vaicājumus.
Tajā tiks ievērota SQLite darbību secība ar iekavām, tāpat kā
pamatskolas matemātika.
Tātad iekavās esošā lieta tiks izpildīta vispirms.
Tādējādi tiek atgriezts ID saraksts, piemēram, 48 000 ID.
Un tad šis vaicājums, ārējais vaicājums, iegūs nosaukumu no visiem
šoviem , kuru šova ID ir lielajā sarakstā ar 48 000.
Tātad, ja es tagad izpildīšu tos kopā, es domāju, ka saraksts
joprojām būs nedaudz garš, bet ļaujiet man izpildīt to kopā.
Tagad es redzu šo garo rezultātu sarakstu.
Nedaudz satriecoši.
Turpināsim un varbūt ierobežosim to līdz 10, kā iepriekš, diskusijas
labad.
Un tagad es redzu 10 komēdijas, kas ir patvaļīgi pasūtītas no datu
bāzes, kuru žanrs patiešām ir komēdija.
Ja es vēlos to darīt nedaudzkārtīgak , es varētu darīt to.
Paskatīsimies.
Kāpēc es nekārtoju pēc nosaukuma augošā secībā, kas ir alfabēta
secībā, vai arī noklusējuma vērtība ir augoša.
Ierobežojums 10.
Tagad es redzu 10 populārākās, ar to domāju dīvaini nosauktas lietas
ar hash simboliem, iespējams, lai iegūtu nosaukumus līdz sākumam, vai
varbūt tās ir atsauces.
Šeit mums ir alfabēta secībā pirmie 10 šovi , kas ir komēdijas.
Vai ir kādi jautājumi par šāda veida vaicājumiem ?
Tas ir diezgan daudz, bet tajā pašā laikā tas ir tāpat kā agrāko
mazāko ideju apkopošana nedaudz noderīgākos vaicājumos.
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Vai ārējām atslēgām ir jānosaka attiecības?
Kad veidojat tabulu, programmētājs vai datu bāzes administrators
izveidos šīs attiecības, izmantojot atslēgvārdus primārā atslēga un
ārējā atslēga, kas parāda datubāzei, kas ir saistīts ar attēla
saturu.
Tātad jūs to darāt vienreiz.
Un tagad, būdams programmētājs, kurš pārzina datu bāzi, es tikai
izmantoju šīs ārējās atslēgas veidā, kas atbilst to dizainam.
Un šeit tas ir noderīgi kādā brīdī, pat ja neviens jums visu
nepaskaidros , lai pārliecinātos, ka jūs saprotat datubāzi, jo tas
burtiski informēs par to, ko ievadāt SQL, lai iegūtu jums svarīgus
datus.
Nu, darīsim kaut ko nedaudz precīzāku.
Kā būtu - ļoti saprātīgs jautājums.
Un, godīgi sakot, tas ir tieši tas, kadēļ imdb.com un app tiek
izmantots .
Ko darīt, ja vēlaties atrast visus šovus , kurās piedalās Stīvs
Kerels?
Samērā saprātīgs vaicājums.
Burtiski kaut kas, ko kāds varētu ierakstīt Google vai, konkrētāk,
IMDb.
Tomēr no pirmā acu uzmetiena nav īsti skaidrs, kā to izdarīt, jo no
manas datu bāzes, ja šīs ir manas sešas tabulas, es diezgan viegli
varu iegūt Stīvu Kerelu no šejienes.
Bet es tiešām varu uzzināt tikai viņa ID numuru, lai kāds tas būtu,
viņa vārdu, kuru es jau zinu, un viņa dzimšanas gadu.
Labi, interesanti, bet tam nav nekāda sakara ar šoviem , kuros viņš
piedalās.
Es varu skatīties šovus šeit, bet tur nav ne vārda par Stīvu Kerelu,
jo šeit nav personas ID .
Kur šīs attiecības tiek īstenotas?
Nu, tas ir ieviests šeit.
Tātad, kā mēs to darām?
Nu, lūk, ideāls piemērs mācībai, ko esam mēģinājuši uzsvērt nedēļām
ilgi, veicot soli pa solim .
Sadaliet lielākas problēmas mazākās un darīsim kaut ko līdzīgu šim.
Iegūsim visu, ko es zinu par Stīvu Kerelu no datu bāzes.
Atlasīsim zvaigzni no cilvēkiem, kur personas vārds ir "Steve
Carell." . Es tikai vēlos redzēt, kādi dati mums ir.
Un lūk, kas mums ir.
Ir tikai viens Stīvs Kerels, kurš dzimis 1962. gadā, un viņa
unikālais ID ir 136797 saskaņā ar IMDb.
Tas pats par sevi nav globāls dalībnieku identifikators.
Labi, kā es varu tagad iegūt visus šovus, kuros piedalās Stīvs Kerels?
Nu, es varētu to izdarīt.
Izvēlieties zvaigzni no zvaigznēm, lai nesajauktu abas.
Viens ir simbols, viens ir tabulas nosaukums.
Ja personas ID ir 136797.
Tāpēc es domāju, ka tas man tagad sniegs visu, sākot no zvaigžņu
tabulas, kas attiecas uz Stīvu Kerelu.
Un jūs redzēsit, ka personas ID ir tas pats, jo es burtiski meklēju
tikai Stīvu Kerelu.
Bet ir apmēram 20 šovu, kuros viņš ir bijis.
Labi, lūk, kur lietas kļūtu garlaicīgas.
Kas tie par šoviem?
Es varētu izvēlēties nosaukumu no šoviem , kur the ID of the show
equals.
Un šeit vienmēr, kad kopējat ielīmēšanu, jūs, iespējams, darāt kaut
ko nepareizi.
Labi, viņš piedalījās Danas Kārvijas šovā.
Pazīstams ar to.
Darīsim vēl vienu.
Mēs to nokopēsim un ielīmēsim.
Kur ID ir vienāds ar šo.
Over The Top .
Cits.
Un, ja mēs turpināsim rakt, mēs, iespējams, atradīsim The Office.
Bet mans Dievs, 20 vaicājumu manuāla veikšana prasīs mūžību .
Tas nav ļoti dinamiski .
Bet ko darīt, ja mēs šos vaicājumus vienkārši ligzdojam nedaudz
dinamiskāk?
Tāpēc ļaujiet man atkal sākt no sākuma.
Ko darīt, ja mēs turpinām atlasīt visu, ko zinām par cilvēkiem, kuru
vārds ir vienāds ar Stīvu Kerelu.
Tas mums sniedza šos datus iepriekš.
Man nav vajadzīgi visi šie dati.
Es zinu viņa vārdu.
Man ir vienalga par viņa dzimšanas gadu.
Mainīsim šo, lai vienkārši iedotu man Stīva Kerela ID.
Un tas man tagad atdod šo mazāko pagaidu datu kopu.
Labi.
Vai tagad varu to izmantot cita vaicājuma ietvaros?
Nu, ļaujiet man ielikt visu iekavās .
Un tagad ļaujiet man teikt, ka zvaigžņu tabulā atlasiet zvaigzni ,
kur personas ID ir vienāds ar šo.
Tāpēc es apzināti neizmantoju, jo pieņemu, ka pasaulē patiešām ir
tikai viens Stīvs Kerels.
Tāpēc es neatgūšu Stīva Kerela sarakstu.
Šajā gadījumā es atgriežu to vienīgo.
Tātad equal ir labi.
In ir tad, kad jums ir vairāki.
Equal ir tad, ja tev tāds ir.
Ļaujiet man turpināt un tagad nospiediet taustiņu Enter.
Labi, ir vairāk datu, nekā man vajag.
Man nevajag 20 Stīva Kerela personas apliecības kopijas.
Tāpēc ļaujiet man uzsist.
Ļaujiet man atgriezties un iegūt šova ID no Stīva Kerela.
Un tagad man ir saraksts ar aptuveni 20 šovu ID, kuros viņš ir bijis.
Labi.
Kā es tagad varu to izmantot?
Nu, ļaujiet man uzsist.
Ļaujiet man visu likt iekavās.
Un tagad ļaujiet man izvēlēties, ko es patiešām vēlos.
Izvēlieties virsrakstu no šoviem , kur.
Un šeit ir pēdējais žests .
Raidījumu tabulā ir ID, nosaukums, gads un sērija.
Un tas, ko es patiešām vēlos, ir pārbaudīt, kurām izrādēm ir kāds ID?
Vai kāds vēlas pabeigt domu?
Es tikai gribu... jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
ID šajā.
Un tas kļūst neglīts.
Un, kad jūs faktiski ierakstāt savus vaicājumus teksta failā, varat
tos labi formatēt un pievienot atkāpi.
Mans fonts tikai kļūst — es nevēlos to padarīt pārāk mazu, lai
ietilptu viss.
Bet tagad mums ir trīs jautājumi.
Viens ir divreiz ligzdotās iekavās, tad ir vidējā, tad ārējā.
Tāpēc šis pēdējais vaicājums ļaus man iegūt nosaukumu no šoviem , kur
šova ID ir šajā lielajā sarakstā, kurā ir apmēram 20 šovu ID, kuros
piedalās Stīvs Kerels.
Un es to zināju, jo es šeit uzmeklēju viņa vārdu.
Un ievērojiet, ko es šoreiz neizdarīju, ka es manuāli neiekodēju viņa
ID numuru.
Nav vajadzības.
Tas būtu slikts veids, kā ieviest tīmekļvietni, ja izmantojat
datubāzi slēptā veidā .
Jūs vēlaties, lai IMDb tiešām meklētu visu, ko cilvēks ir ievadījis,
un neviens nezinātu Stīva Kerela personas ID vai ko citu.
Tāpēc mēs to visu esam paveikuši dinamiski.
Un tagad, ja es nospiedīšu Enter, es domāju, ka es saņemšu visus viņa
šovus.
Turpināsim un sakārtosim to pēc nosaukuma, lai padarītu to kārtīgu.
Un jūs, iespējams, redzēsit vismaz vienu vai vairākus šovus.
Un, iespējams, vispopulārākais ir, dot dot dot, The Office.
Tātad šis ir burtiski tāds vaicājums, kas tiek izpildīts slēpti , kad
apmeklējat tīmekļvietnes vai lietotnes, piemēram, IMDb.
Jūsu teksta vaicājums, iespējams, tiek pievienots garākam SQL
vaicājumam, piemēram, šim, kur kāds programmētājs IMDb, iespējams, ir
uzrakstījis visu šo vaicājumu pirms nedēļām, mēnešiem, gadiem, un
viņi vienkārši kaut kā pievieno vērtību, ko jūs, cilvēks, ievadījāt
meklēšanas lodziņā vai tamlīdzīgi.
Vai jums ir jautājumi par šo vai citu datu atrašanu?
Nē?
Labi.
Tātad, kur vēl mēs varētu iet ar šo?
Nu, padomāsim, kā citādi mēs varētu apvienot datus.
Pieņemsim, ka nākamais jautājums, iespējams, būtu vērsts ne tikai uz
cilvēkiem, šoviem un šīm zvaigznēm, bet gan par to, kā iegūt vairāk
informācijas par pašiem šoviem, piemēram, žanriem, vērtējumiem vai
tamlīdzīgi.
Tātad, koncentrēsimies tikai uz šīm divām tabulām.
Atcerieties, ka katram šovam ir ID, nosaukums, gads un sērijas.
Bet tam var būt arī viena vai vairākas attiecības ar rindām un šo
citu tabulu, ko sauc par žanriem.
Un tas ir tāpēc, lai šovs varētu būt komēdija, var būt drāma, var būt
daudzas citas lietas.
Viena rinda uz.
Tātad jūs atkal un atkal un atkal redzētu vienu un to pašu šova ID ar
citu žanru, kas rakstīts angļu valodā, piemēram, komēdija, drāma vai
tamlīdzīgi.
Nu, kā es varu atjaunot šos datus?
Izrādās, ka ir daži dažādi veidi, kā to izdarīt.
Un ļaujiet man ierosināt šeit ieviest šo atslēgvārdu, join .
Un tas patiešām ir visspēcīgākais no SQL atslēgvārdiem.
Tas nav jāizmanto.
Mēs esam redzējuši, ka ar ligzdotajiem vaicājumiem joprojām varat
atlasīt datus vairākās tabulās, taču šeit ir vēl viens veids.
Tāpēc ļaujiet man to izdarīt.
Ļaujiet man atgriezties savā SQLite datubāzē.
Un ļaujiet man vienā elpas vilcienā atlasīt tieši tos datus, kurus es
vēlos.
Izvēlieties zvaigzni no pārraidēm.
Un sākotnēji ierobežosim to līdz 10, lai redzētu, kā tas izskatās.
Labi.
Tie atkal ir šovu dati.
Izvēlieties zvaigzni no žanriem.
Ierobežosim arī to līdz 10, lai tikai apzinātos to.
Un tagad tas nav tik noderīgi.
Tomēr dati, kas atrodas galējā kreisajā kolonnā, ir primārā atslēga
rādījumu tabulā.
Tie ir tikai unikāli ID.
Dati šeit žanru tabulā, atcerieties , show ID ir ārējā atslēga.
Tātad tie ir tie paši skaitļi, bet tikai iekopēti citā tabulā, lai
mēs varētu izmantot šīs attiecības starp tiem.
Kā es varu sakārtot šos skaitļus ar šiem skaitļiem, lai iegūtu
plašāku tabulu, kurā ir nosaukums un gads, epizodes un žanrs, un, pie
velna, vērtējumi un tas viss arī, ja mēs to vēlamies?
Jūs varat veikt join šīm tabulām, vienkārši norādot datubāzei, kam
pievienoties.
Tāpēc ļaujiet man to izdarīt.
Izvēlieties zvaigzni no pārraidēm.
Join šai tabulai, lai gan žanru tabulā.
Nu, kā jūs vēlaties pievienoties šīm divām tabulām ?
Un atkal divas tabulas no attēla izskatījās šādi.
Kā programmatiski likt SQL vienu no tām novietot blakus otrai ,
sakārtot visu ID, lai jūs vienkārši iegūtu vienu lielāku datu kopu?
Nu, mēs patiešām varam izmantot šo sintaksi, ko sauc par join .
Tātad atpakaļ uz VS kodu šeit.
Un ļaujiet man veikt join šīm divām tabulām.
Atvainojiet, šeit ir drukas kļūda.
Savienojiet žanrus šovu tabulas ID kolonnā, jeb tās primārajā
atslēgā, kas ir līdzvērtīga žanru tabulas šovuID kolonnai, jeb ārējā
atslēga.
Citiem vārdiem sakot, tas izskatās nedaudz noslēpumaini, bet es tikai
saku SQL, kā sakārtot šīs divas tabulas un kādu kolonnu saskaņot ar
otru, lai skaitļi sakristu un es iegūtu būtībā plašāku tabulu.
Ļaujiet man turpināt un nospiest semikolu un taustiņu Enter.
Un tas man tagad sniegs daudz datu.
Mums var nākties to pārtraukt.
Bet jūs varat pamanīt , ka mēs saņemam ID, nosaukumu, gadu, sēriju
skaitu, un atkal lieki ID, taču tas ir sagaidāms, ja veicu join ar
viņiem, un žanru visā ekrānā pa labi.
Ļaujiet man nospiest Control C, lai pārtrauktu.
Ļaujiet man aprobežoties ar The Office .
Tātad, ja virsraksts ir vienāds ar "The Office" ;, lai mēs varētu
koncentrēties tikai uz vienu datu paraugu.
Un šeit, jautri, ir bijis vairāk nekā viens Office .
Iespējams, ka jums visiem patīk šī sērija, kas sākās 2005. gadā ar
188 sērijām.
Tā ID šovu tabulā ir 386676.
Tas ir apstiprināts arī šeit.
Tātad atkal mēs tikko esam pievienojušies divām tabulām .
Kā?
Sarindojot tos laukus.
Bet tagad, kad mēs redzam, ka gandrīz visi The Offices, kas ražoti
gadu desmitiem, ir komēdijas, izņemot šo.
Bija The Office versija, kas tika ražota 2001. gadā un tika uzskatīta
par drāmu.
Neesat pārliecināts, vai tas ir saistīts ar otru.
Kā mēs varam saistīt citus datus?
Nu, turpināsim un sasaistīsim arī reitingos.
Tā vietā, lai pievienotu to ar žanriem, ļaujiet man attīt atpakaļ
šeit un veikt join ar shows on ratings on shows.id equals
ratings.show_ID
Diskusijas labad ierobežosim to ar The Office a, kur nosaukums ir
"The Office" semicolon .
Un tagad jūs varat redzēt, ka starp dažādajiem Offices šoviem šķiet,
ka tas, kuru lielākā daļa no mums droši vien pazīst un mīl, ir
visaugstāk novērtētais ar 9.0, par kuru balsojuši apmēram 585 000
cilvēku, turpretim šie pārējie šovi , šķiet, nav bijuši tik populāri
. .
Un, iespējams, tieši tāpēc jūs redzat mazāk sēriju ar viņiem.
Tātad, lai gan mēs esam ievietojuši datus vairākās vietās, jūs
joprojām varat tos atjaunot, sakārtojot lietas šādā veidā un
atkārtoti savienot tabulas.
Jautājumi tagad par šo?
Šis ir SQL darbības pamatā un relāciju datu bāzes.
Jautājumi?
Labi.
Dažas pēdējās iezīmes.
To nav tik daudz — SQL ir nepieciešama prakse tāpat kā jebkam citam .
Bet, runājot par sintaksi un iespējām, iepazīstināsim jūs ar pāris
pēdējām funkcijām un problēmām, kas rodas, un to, kā tās varētu
atrisināt.
Darīsim arī to.
Tāpēc ļaujiet man atgriezties pie VS Code šeit.
Un vēlreiz uzzināsim Stīva Kerela informāciju.
Iepriekšējā reizē mēs to izdarījām ar šo ligzdoto vaicājumu, iegūstot
viņa ID, pēc tam šova ID un pēc tam šo šovu ID nosaukumus.
Izmantojot join , varat to izdarīt nedaudz savādāk.
Un jebkurš no šiem veidiem ir labs.
Viens var kļūt garīgi vieglāk uztverams nekā cits.
Dosimies uz priekšu un atlasīsim virsrakstus no what .
Personu tabulā atlasīsim nosaukumu.
Un es nospiedīšu Enter.
Un, interaktīvi izmantojot SQLite3, ja kādreiz tiek parādīta uzvedne
, kas saka, ka dot dot dot angle bracket , tas nozīmē, ka jūs
turpināt savu domu uz nākamo rindiņu.
Ja jūs to nedomājāt, dažreiz varat nospiest semikolu, lai vienkārši
beigtu domu, un nospiediet taustiņu Enter, pat ja tas izraisa kļūdu.
Bet tas ir viens no veidiem, kā tagad nedaudz labāk formatēt
vaicājumus.
Es tikai pievienošu atstarpi, lai to būtu vieglāk lasīt.
Ko es vēlos atlasīt?
Es vēlos atlasīt šovu nosaukumus no cilvēku tabulas, kas ir savienota
ar zvaigžņu tabulu cilvēku tabulas ID kolonnā, kas ir vienāda ar
zvaigžņu tabulas personas ID kolonnu.
Citiem vārdiem sakot, ja padomājat par to, kas ir cilvēki un kas ir
zvaigznes, vienam ir ID, citam ir personas ID, es tikai tagad
savienoju šīs divas tabulas.
Es veicu join šiem diviem.
Bet es vēlos to izdarīt arī ar citu tabulu.
Ļaujiet man papildus veikt join .
Tāpēc tagad man ir tikai divas rokas, bet tagad es šeit ievietoju
trešo tabulu , kas ir savienotas kopā.
Join shows on stars.show_id equals shows.id. Pievienojieties šoviem
vietnē stars.show_id un show.id.
Tātad tas tagad savieno trīs tabulas.
Bet man tas rūp tikai viena persona , tāpēc vietā, kur personas vārds
ir vienāds, "Steve Carell." . Protams, tas ir noslēpumaināks, taču
mēs ar šo vaicājumu darām visās trīs tabulās , kas mums ir svarīgas,
un apvienojam tās visas kopā, izmantojot šo jauno join sintaksi, kas
burtiski norāda datubāzei, kuras kolonnas jārindo ar ko.
Un tad mēs filtrējam pašās beigās tāpat kā iepriekš, lai atgrieztos,
ja es nospiežu Enter, atbilde, kuru mēs vēlamies, kas šajā gadījumā
ir nedaudz lēnāka, bet tas pats saraksts ar aptuveni 20 šoviem kuros
viņš ir bijis. .
Ir vēl viens veids, kā to izdarīt.
Un atkal tie visi ir tiešsaistes slaidos.
Tātad jūs varat tos atkārtot, nepierakstot visu, un mēs tos arī
ievietosim piezīmēs.
Bet ir vēl viens veids, kā to izdarīt.
Es varētu izmantot arī netiešu join .
Tātad tā bija skaidra join darbība , jo es burtiski ierakstīju vārdu
join vairākas reizes.
Bet ļaujiet man turpināt un izvēlēties nosaukumu no šīm trim tabulām.
Cilvēki, zvaigznes un šovi.
Un tas varētu būt patīkamāk, jo, ja zināt, no kurām tabulām vēlaties
atlasīt datus, vienkārši uzskaitiet tās, atdalot tās ar komatiem, kas
jums varētu patikt, kur the people ID equals the stars person ID and
the stars show ID equals the shows ID and the name of the person
equals Steve Carell
Tātad šī ir netieša join darbība .
Un godīgi, es pastāvīgi atsaucos uz savām piezīmēm arī par dažām no
šīm lietām.
Tā nav tāda lieta, kas jums šādi sanāks jau pēc vienas dienas.
Bet tas ir tikai atšķirīgs veids, kā izteikt vienu un to pašu.
Es vēlos atlasīt datus no trim dažādām tabulām.
Un, SQL, es vēlos, lai jūs sakārtotu šīs tabulas, lai es varētu iegūt
līdzīgus datus par Stīvu Kerelu.
Un tas galu galā sasniegs tādus pašus rezultātus.
Ļaujiet man nospiest Enter.
Un tur jau tas ir .
Tātad nedaudz lēnāk.
Un veiktspēja var atšķirties atkarībā no datora, pamatojoties uz SQL
ieviešanu, bet es domāju, ka man joprojām ir tādas pašas atbildes.
Tagad pieņemsim, kā es to bieži daru, un man nācās to meklēt vēlreiz
pagājušajā reizē, pieņemsim, ka esat aizmirsis, kā uzrakstīt Stīva
Kerela vārdu.
Vai tie ir divi R, divi L vai tamlīdzīgi?
Nu, es arī varētu kaut ko tādu izdarīt.
Nu, darīsim vienkārši.
Izvēlieties zvaigznīti no cilvēkiem, kuru vārds ir vienāds.
Es apzināti to daru pareizi, lai nepazemotu sevi.
Tas ir Stīvs Kerels, par kuru es turpinu jautāt.
Ja esat aizmirsis, varat mēģināt meklēt tikai Stīvu, bet interesanti,
ka ir daudz Stīvu.
Mēs nezinām, kad viņi ir dzimuši.
Bet tas, iespējams, nav tas Stīvs Kerels, kuru mēs vēlamies, ja mums
nav viņa uzvārda.
Tāpēc es varētu alternatīvi rīkoties, tas ir Stīvs, un tad tas sākas
ar C, manuprāt.
Izrādās, ka ir vēl viena aizstājējzīme, kuru varat izmantot SQL.
Mēs izmantojām zvaigznīti, lai atlasītu visas kolonnas.
Pēdiņās varat izmantot procentu zīmi, lai kaut ko pateiktu C.
Tātad aiz burta C ir 0 vai vairāk rakstzīmju.
Un tagad tas nedarbojas, jo tagad es burtiski kaut ko meklētu Steve
space C.
Bet atcerieties, ka iepriekš es minēju vienu citu atslēgvārdu, kas ir
paredzēts izplūdušākai atbilstības noteikšanai, ja tas nav tieši tas,
ko jūs meklējat, bet tas ir kā tas, ko jūs meklējat.
Ja jūs tā vietā sakāt, kur viņa vārds ir kā Steve space C kaut ko,
tagad mēs atgriezīsim veselu kaudzi Stīvu.
Bet es domāju, ka tagad es droši vien varētu atrast to, ko es
patiesībā meklēju, ja es neatceros viņa vārdu.
Varat izmantot vairākas procentu zīmes.
Ja aizmirstat, kāds ir viņa vārds, varat mainīt secību.
Bet arī tā ir ļoti spēcīga SQL funkcija.
Jautājumi par šiem vaicājumiem šeit?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Atvainojiet?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Kā ar to?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Ak, jā, protams.
Tātad vaicājums, ko izmantoju šeit.
Ir daudz Stīvu, kuru uzvārds sākas ar C.
Hmm, pārāk tālu Pēdējais vaicājums, ko izpildīju, bija šis šeit.
Tātad, ja nosaukums ir kā "Steve C%.";. Tātad tas ir tikai vēl viens
rīks jūsu rīku komplektam.
Bet jūs, iespējams, ievērosit, ka šīs divas — pirms šī vaicājuma
join darbības bija lēnas.
Un, godīgi sakot, šī datu bāze pat nav tik liela.
Tāpat kā jā, tajā ir desmitiem tūkstošu rindu.
Taču reālajā pasaulē un lielākajā daļā lietotņu, kuras jūs un es
daudz lietojam ikdienā vai tīmekļa vietnēs, ir miljoniem, pat
miljardiem datu rindu.
Un, ja man būtu jāgaida pie sava datora vai koda vietas sekundi vai
divas, lai iegūtu datus, tas noteikti nedarbosies miljoniem lietotāju
vai klientu.
Tātad, kā mēs patiesībā varam uzlabot lietas?
Izrādās, ka vēl viena pareizas relāciju datu bāzes priekšrocība ir
tā, ka tā nav tikai izklājlapa, kurā jums ir jāatrod meklētie dati.
Varat arī likt datubāzei indeksēt datus jūsu vietā.
Indekss ir efektīva špikeru lapa ātrai datu atrašanai.
Līdzīgi kā grāmatām reālajā pasaulē bieži vien ir indeksi grāmatas
beigās, kur varat meklēt lietas alfabētiskā secībā un pēc tam varat
uz to atsaukties lapās, kurās tiek parādīta tēma.
Tāda pati ideja datubāzē.
Ja iepriekš paziņojat datubāzei, ka vēlaties bieži meklēt noteiktā
kolonnā, varat likt tai izveidot iedomātu indeksu, kas ļaus ātrāk
meklēt šajā kolonnā.
Pēc noklusējuma šīs kolonnas, visticamāk, tiks meklētas, izmantojot
lineāro meklēšanu.
Pat ne bināro meklēšanu, jo dati var netikt sakārtoti, jo tie bija
jebkurā secībā.
Bet, ja izveidojat indeksu, jūs, iespējams, iegūsit kaut ko tuvāk
logaritmiskam nekā lineāram, un tas kopumā būs liels pluss.
Tāpēc ļaujiet man šeit izdarīt kaut ko vienkāršu.
Vispirms ļaujiet man ieslēgt SQLite specifisku iezīmi , kas vienkārši
aktivizē visus manus vaicājumus, ierakstot .timer on.
Es tikai vēlos izsekot, cik ilgi katra no šīm komandām aizņem.
Šī komanda nav lēna, tāpēc tā būs tikai relatīva.
Bet vienkārši atlasīsim visu no šovu tabulas, kur tās nosaukums ir
The Office .
Apskatīsim, cik ilgu laiku aizņem šis salīdzinoši vienkāršais
vaicājums.
Labi, nemaz nav ļoti ilgi.
Reālā izteiksmē mazāk nekā sekunde, 0,035 sekundes.
Tāpēc nekādā gadījumā nesteidzieties.
Bet, ja jums ir simtiem, tūkstošiem, miljoniem lietotāju, katra no
šīm milisekundēm var ļoti labi summēt.
Tātad, vai mēs varam darīt labāk?
Mēs varam, ja es to darīšu.
Ja es izmantoju šādu sintaksi vienu reizi savas datu bāzes dizaina
sākumā, es izveidoju nevis tabulu, bet gan indeksu ar kādu nosaukumu
uz konkrētas tabulas vienā vai vairākās kolonnās.
Es varu sniegt norādes, mājienu datubāzei jau iepriekš, sakot, lūdzu,
optimizējiet, veicot slepenas mērces meklēšanu vai atlasi šajā
tabulā, lai mana meklēšana būtu ātrāka.
Tāpēc ļaujiet man to izdarīt.
Ļaujiet man atgriezties pie VS Code šeit.
Ļaujiet man izveidot indeksu, ko sauc par title index .
Es to varētu saukt par jebko , ko vēlos, bet es vēlos ātrāk meklēt
nosaukumus.
Tāpēc es to saukšu par title index , kur drīzāk title index tabulā to
sauc par šoviem.
Un tad iekavās ir sintakse.
Kolonna ar nosaukumu title .
Tātad vēlreiz, es tikko aizņēmos šo kanonisko sintaksi un tikko to
pārtulkoju kaut kas raksturīgs televīzijas šovam .
Labi.
Ko tas man darīs?
Kad es nospiedīšu taustiņu Enter, tas datora atmiņā, datu bāzes
atmiņā, izveidos kaut ko, ko sauc par B koku.
Tas nav binārs koks.
B-koks patiesībā ir potenciāli efektīvāka datu struktūra, par kuru
mēs nerunājām dažas nedēļas atpakaļ piektajā nedēļā, bet tas izskatās
nedaudz līdzīgs šim, kas izskatās līdzīgs bināram kokam.
Bet vai kāds pamana, kāpēc šis nav binārs koks?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Binārajam kokam, bi kas nozīmē divus, katrā mezglā ir ne vairāk kā
divi bērni, taču šeit ir lielisks piemērs — viens, divi, trīs.
Un varētu būt četri bērni, pieci bērni vai vairāk.
Bet, ja jums ir ļoti plats koks, tad tas ir ļoti īss.
Tas velk datus augstāk, tuvāk mezglam, saknes mezglam.
Un atcerieties, ka saknes mezgls ir vieta, kur mēs agrāk sākām
meklēšanu, neatkarīgi no tā, vai tas bija BST, Binary Search Tree
binārais meklēšanas koks, pat tri vai citas datu struktūras.
Mēs vienmēr sākām no augšas.
Tātad, jo augstāk jūs varat iegūt datus, pat ja tas padara datu
struktūru ļoti plašu, jūs varēsit veikt vaicājumus , meklēt
vaicājumus vai meklēt datus, iespējams, daudz ātrāk nekā tad, ja tas
būtu vienkārši ļoti garš saraksts, piemēram, kolonna pēc noklusējuma.
Ņemot to vērā, ļaujiet man atgriezties pie VS Code.
Es vēl neesmu izveidojis indeksu.
Ļaujiet man turpināt, nospiediet taustiņu Enter un izveidojiet to.
Labi, pagāja minūte, mirklis.
Tas aizņēma apmēram pussekundi, kas acīmredzami nav tik lēns.
Bet ar vairāk datu tas varēja būt vēl lēnāks.
Bet šobrīd tā ir vienreizēja operācija.
Un tagad ļaujiet man atlasīt tos pašus datus no šoviem , kurās
nosaukums ir vienāds ar The Office .
Pēdējo reizi tikai pirms brīža tas aizņēma 0,035 sekundes.
Nav lēns, bet arī tas palielinās, ja man ir daudz IMDb lietotāju.
Turpināsim tagad un vēlreiz izpildīsim to pašu vaicājumu.
Cik ilgi tas prasīja?
0,001 sekunde tagad.
Es domāju, praktiski nekas.
Un tā tagad ir tāda iespēja.
Ja jums ir daudz datu un jūs patiešām vēlaties paātrināt šo
meklēšanu,, šie , indeksi kas vienkārši izveido jums šīs maģiskās
datu struktūras datu bāzu atmiņā, kas ļauj jums meklēt kolonnās, par
kurām esat diezgan pārliecināts vēlaties veikt efektīvāku meklēšanu
Turpretim tagad, ja kādreiz esat izmantojis Google vai Bing vai kādu
meklētājprogrammu, kurai ir izvērsta meklēšana, daži tekstlodziņi,
kuros varat meklēt precīzāk, varētu darboties lēnāk.
Kāpēc?
Iespējams, jūs nevēlaties kļūt traki un vienkārši indeksēt katru
kolonnu katrā tabulā.
Kāpēc?
Kāda varētu būt intuīcija?
Ja loģiski indeksi paātrina lietas, kāpēc gan neindeksēt visu?
Šeit vienmēr būs kompromiss.
Kas tas varētu būt?
Jā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Jā, tas aizņems daudz vietas.
Šis ir tikai slaids ekrānā.
Bet tam kaut kur ir jānonāk.
Tam ir nepieciešama vieta datora atmiņā vai cietajā diskā vai
tamlīdzīgā veidā.
Un tas ir labi, ja jums ir neierobežota vieta, bet, visticamāk, jums
tā nav.
Un tas kļūs dārgs dažādu iemeslu dēļ.
Tātad, iespējams, vēlaties indeksēt tikai noteiktas kolonnas un
noteiktas tabulas, nevis tās visas.
Jo zini ko?
Pat ja lietotājs patiešām vēlas meklēt, iespējams, izmantojot
izvērsto meklēšanu kādā citā kolonnā vai tabulā, labi.
Ja dažkārt vaicājums ir lēns, mēs, iespējams, gūstam lielāku peļņu,
optimizējot izplatītākos gadījumus — populārākos vaicājumus, kas arī
cilvēkiem rūp.
Labi.
Nonāksim pilnā aplī un atgriezīsimies pie tā, kā mēs patiesībā sākām,
proti, ar kādu Python kodu.
Tātad izrādās, ka tie nav either or lēmumi.
Izrādās, ka reālajā pasaulē izstrādātāji pastāvīgi izmanto vienu,
divas, trīs valodas vienlaikus.
Un patiesībā nākamnedēļ es satricināju HTML, CSS un JavaScript, no
kurām viena ir īsta programmēšanas valoda, taču šīs valodas bieži
tiek izmantotas kopā.
Pilnīgi normāli un ierasti izmantot Python un SQL vai Java un SQL,
vai SWIFT un SQL vai jebkuru dažādu kombināciju skaitu ar datu bāzes
valodu.
Varat izmantot vēlamo programmēšanas valodu Java, Python, C++, lai
izveidotu lietotāja interfeisu un loģiku, kas ievieš pašu programmu.
Bet jūsu datiem SQL ir patiešām labs kandidāts.
Un tiešām, mēs jau esam redzējuši, ka SQL var tikai paātrināt
noteiktas darbības.
Jūs varat mainīt .
Varat sakļaut 15 koda rindiņas tikai vienā un izmantot šīs lietas
kopā.
Tāpēc ļaujiet man atgriezties pie — es pametīšu SQLite.
Es samazināšu savu termināļa logu.
Un šeit ir vieta, kur mēs iepriekš pārtraucām ar favorites.py.
Ar favorites.py viss tika saglabāts failā favorites.csv.
Un atcerieties, ka mēs galu galā importējām šo CSV failu uz
favorites.db automātiski ar .import, lai mēs varētu sākt spēlēties ar
SQL.
Bet tagad mēs varam šos divus savienot kopā.
Un veids, kā to izdarīt, ir šāds.
CS50 ir Python bibliotēka.
Jūs varētu atcerēties, ka ir pieejams get string, get int , get float.
Jums tie nav stingri jāizmanto Python, jo ir daudz vienkāršāk
izmantot ievades funkciju un pēc tam mēģināt, pieņemt un pārvērst
lietas int vai float vai tamlīdzīgi.
Bet ir daudz vairāk darba, lai izmantotu SQL Python bez trešās puses
bibliotēkas.
Daudzas komerciālās iespējas vai populāras atvērtā pirmkoda opcijas
faktiski ir sarežģītas.
Tātad CS50 Python bibliotēkā ir ļoti noderīga funkcija, kas jums ir
jāizmanto un ir jāizmanto problēmu kopai, kas atvieglo Python
izpildi, SQL izpildi Python koda iekšpusē.
Bet tas ir balstīts uz ļoti populāru atvērtā pirmkoda alternatīvu.
Tātad jūs varat to izmantot arī reālajā pasaulē.
Tāpēc dokumentācija ir atrodama šajā vietrādī URL, taču es jums
parādīšu, kas mums ir jāzina šeit, koncentrējoties atpakaļ uz
favorites.py.
Tātad tas, ko es šeit darīšu, ir šāds.
Ļaujiet man izdzēst visu no vietnes favorites.py, izņemot teiksim šo.
No CS50 importēt SQL ar visiem lielajiem burtiem.
Tā ir SQL līdzekļa importēšana no CS50 bibliotēkas, kas ļaus man
atvērt DB failu kodā.
Kā to izdarīt?
Ļaujiet man izveidot mainīgo ar nosaukumu DB datu bāzei, lai gan es
to varētu saukt par visu, ko vien vēlos.
Ļaujiet man izsaukt šo SQL funkciju un izmantot īpašu sintaksi, kas
nav specifiska CS50.
Tā ir nozares lieta.
sqlite:///Atšķirībā no visiem citiem jūsu ievadītajiem URL, šajā
kontekstā šim burtiski ir trīs.
Un tad datu bāzes nosaukums, kas šajā gadījumā ir favorites.db .
Tātad šis ir tikai veids, kā pastāstīt šai SQL bibliotēkai, ko mēs
rakstījām, bet kas darbojas tieši tāpat, kā trešās puses alternatīvas
atver favorites.db, izmantojot SQLite tehnoloģiju, ja vēlaties.
Labi.
Vienkārši uzdosim lietotājam jautājumu.
Dodiet man savu favorite problēmu.
Tāpēc mēs izmantosim ievadi, nevis get string , taču mēs varētu
izmantot get string, taču mūsu mērķiem tie ir gandrīz vienādi.
Pajautāsim lietotājam viņa favorite .
Un tagad Python kodā ļaujiet mums atlasīt no favorites.db visas
rindas, kurās skolēni norāda šo problēmu kā savu favorite .
Tātad tikai SQL tas būtu šāds.
Izvēlieties star from favorites where problem equals , un es darīšu
visu, kas būs mans favorite .
Piemēram, problem equals Mario .
Tātad, ja es izmantotu tikai SQL, es burtiski rakstītu kaut ko
līdzīgu.
Bet tagad esmu .py file .
Man ir jāizmanto Python sintakse.
Bet Python atbalsta virknes.
SQL ir tikai teksts.
Tā ir tikai virkne.
Tāpēc es noteikti varētu vienkārši ievietot savu SQL kodu virknē un
pēc tam nodot to Python funkcijai.
Un šeit ir tilts starp abiem.
Ja jūs vienkārši uztverat SQL kā jebkuru vecu tekstu, mēs varam to
ievietot virknē un izpildīt to.
Tāpēc ļaujiet man to izdarīt.
Ļaujiet man iet uz priekšu un izveidot mainīgo ar nosaukumu rows,
kurā galu galā būs visas rindas no datu bāzes.
Ļaujiet man turpināt un atlasīt db.execute.
Šī ir viena funkcija, kas jums jāzina par CS50 bibliotēku, un tā
burtiski izpilda SQL priekšrakstu.
Un tad pēdiņās jūs burtiski norādiet to, ko vēlaties izpildīt.
Un ļaujiet man turpināt un aizvērt iekavas tur beigās.
Un tagad ļaujiet man vienkārši izmēģināt šo.
Tātad attiecībā uz rindu, rindās atkārtosim visas rindas. Ļaujiet man
turpināt un izdrukāt rindu,.
Un ko es te gribu?
Izdrukāsim šīs personas laika zīmogu .
Labi, ļaujiet man atvērt savu termināļa logu.
Python no favorites.py.
Šeit noteikti sakrustoju pirkstus.
Enter
Te nu tas ir
Favorites .
Es ierakstīšu Mario.
Labi.
Tāpēc es atgriezos — tas nav īpaši interesanti, taču es atguvu visus
to studentu laikspiedolus, kuri ierakstīja Mario un ko mēs importējām
šajā datubāzē.
Man patiešām rūp tas, cik populārs ir Mario.
Tāpēc ļaujiet man to nedaudz mainīt.
Ļaujiet man to mainīt, lai saskaitītu rindu skaitu.
Un ļaujiet man to darīt vienkārši.
Ļaujiet man dot tādu aizstājvārdu, kādu es ierosināju iepriekš,
piemēram, n, kur n ir skaitlis.
Tā ka tagad, šeit,, es faktiski varu to izdarīt.
Izdrukājiet n vērtību.
Labi.
Ļaujiet man atgriezties pie sava termināļa loga.
Run Python vietnē favorites.py.
Ļaujiet man ierakstīt Mario.
Enter
labi, 39.
Tagad tehniski es krāpjos.
Godīgi sakot, ja es izpildu atlasīto skaitu, mēs esam redzējuši
iepriekš, ka tā atgriež tikai vienu rindu, nevis vairākas.
Tāpēc tiešām nav ko atkārtot, taču tas darbojas labi.
Tas atkārtojas tikai vienu reizi, bet man paveicas.
Tātad tehniski tas, kas man, iespējams, būtu jādara, ir tas.
Man, iespējams, vajadzētu dot sev mainīgo ar nosaukumu row, iestatīt
to vienādu ar pašu pirmo rindu un tikai rindu, kas atgriezās, un
tagad izdrukāt šīs rindas un kolonnu.
Ļaujiet man atkārtoti palaist programmu.
Es vēlreiz ierakstīšu Mario.
Enter .
Un es joprojām redzu 39.
Tāpēc, protams, man tas noteikti nav jādara.
Man tiešām nav vajadzīgs mainīgais.
Tā vietā varu izmantot rows bracket 0 .
Bet ļaujiet man koncentrēties uz to, ko šī bibliotēka tagad dara.
Tātad saskaņā ar dokumentāciju ko CS50 izpildes funkcija vienmēr
sniedz jūsu labā, atgriež vārdnīcu sarakstu.
Tātad, ja vaicājumā nekas netiek atgriezts, piemēram, nav nevienas
atbilstības, tiek parādīts tukšs saraksts.
Tāpat kā open bracket, closed bracket , tajā nav nekā.
Neviena cilpa neizpildīs neko noderīgu, jo tajā nav nekā.
Tomēr, ja atgriezīsit vienu rindu, jūs atgriezīsit sarakstu ar
lieluma sarakstu, kura iekšpusē ir viena vārdnīca.
Šai vārdnīcai būs atslēgas, kas atbilst jūsu atlasītajam, neatkarīgi
no tā, vai tās ir kolonnas vai skaits.
Tātad, kad es iepriekš izvēlējos zvaigzni , es būtu ieguvis visas
kolonnas.
Tādā veidā es varēju piekļūt laikspiedolam.
Šeit es tikai atlasu skaitu un nevēlos, lai tas būtu šeit jāraksta.
Tas vienkārši izskatītos šausmīgi.
Tas darbotos, taču izskatītos dīvaini, ja vienkārši turpinātu rakstīt
count paren star close paren.
Tāpēc es tikko izveidoju aizstājvārdu ar nosaukumu n, lai padarītu
savu dzīvi vieglāku šeit.
Lai būtu skaidrs, CS50 izpildes funkcija atgriež vārdnīcu sarakstu,
kad izmantojat Select.
Un tā es tagad varu atgūt pirmo un vienīgo rindu un pēc tam izdrukāt
šīs rindas beigu vērtību.
Tas ir identisks - ļaujiet man to izdarīt.
Ļaujiet man izcelt visu šo teksta rindiņu.
Ļaujiet man savā termināļa logā palaist SQLite3 no favorites.db, kā
mēs to darījām pirms pārtraukuma.
Ļaujiet man vienkārši kopēt un ielīmēt šo vaicājumu.
Enter .
Tā ir tabula, kuru es atgriezu agrāk, kad darbojāmies ar SQL manuāli.
Kad es atgriežu šo tabulu, šeit ir atslēga, šeit ir vērtība, un man
ir tikai viena rinda, tāpēc es tikai akli indeksēju rindu iekavās 0,
jo es zinu, ka tur vienmēr būs atbilde.
Tas būs 0 vai 1 vai vairāk.
Bet es zinu, ka tagad tas šeit tiks saukts par n.
Tātad, ko es tikko izdarīju?
Nu, šeit ir SQL.
Un tas esmu tikai es, piemēram, datu zinātnieks, kurš uzdod
jautājumus par saviem datiem, tikai izmantojot melnbaltus SQL
vaicājumus.
Tagad es esmu Python programmētājs, kurš vēlas runāt ar SQL datu
bāzi, izmantojot Python.
Un tilts, ko mēs izmantojam, ir CS50 bibliotēka.
Bet atkal ir arī trešo pušu bezmaksas bibliotēkas, kuras varat
izmantot.
Mūsu ir ļoti vienkārša .
Patiešām, dokumentācijā tiks paskaidrots, kā izpilde darbojas nedaudz
savādāk ievietojot, atjauninot un dzēšot.
Jūs nesaņemat atpakaļ sarakstu, jo neko neatlasāt, taču jūs saņemat
dažas atgriešanas vērtības.
Jautājumi par šo?
Tas ir pēdējais mūsu Python kods.
Tas visu saista garā.
Jā?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Šis ir šeit?
Jā.
Tātad db.execute pēc definīcijas atgriež rindu sarakstu.
Un katra no šīm rindām ir vārdnīca, jo tā ir ērta.
Atslēgu vērtību pāri.
Ja es atlasu rindu skaitu, es tikai zinu, ka pirms stundas apguvu
SQL, ka tas vienmēr man dos vienu rindu, kuras kolonnu šajā gadījumā
sauc par n.
Tātad, ja es zinu, ka tā ir viena rinda, es varu vienkārši akli,
tāpat kā C, ieiet šajā sarakstā vai masīvā C un doties uz pirmo vietu
un pēc tam uzskatīt to par vienu rindu.
Tas, ko jūs nevēlaties darīt, ir šis .
Pat ja jūs zināt, ka vaicājums atgriež vienu rindu, jūs nevarat
vienkārši maģiski mainīt mainīgā nosaukumu uz vienskaitli un
sagaidīt, ka tam būs tikai viena vērtība.
Jums vienmēr būs saraksts.
Tātad, pat ja tajā ir tikai viena vērtība, jums ir jādara kaut kas
līdzīgs, lai to sasniegtu.
Vai arī, ja vēlaties vairāk kodolīguma, varat veikt rows bracket I
bracket n .
Tas sasniegs to pašu bez mainīgā.
Jā?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Labi.
Tāpēc es visu laiku maldināju un krāpjos, jo tas vienmēr atgriezīs
Mario.
Es ignorēju izlasi, ko cilvēks ierakstīja šeit piektajā rindā.
Tāpēc ļaujiet man to labot.
Un tas mūs novedīs pie dažām problēmām, kas galu galā rodas saistībā
ar SQL.
Pareizais veids, kā atrisināt šo problēmu — ļaujiet man atbrīvoties
no mana termināļa loga šeit.
Pareizais veids, kā atrisināt šo problēmu, ir neizmantot fstring, kā
mēs parasti izmantojām Python, jo SQL vaicājumi, kā mēs pēc brīža
redzēsim, var būt bīstami.
Ja vēlaties pievienot lietotāju datus vaicājumam, kuru lielāko daļu
esat uzrakstījis iepriekš, jums vajadzētu labāk izmantot vietturi,
proti, šajā gadījumā jautājuma zīmi.
Tas zināmā mērā ir raksturīgs CS50 bibliotēkai, taču mēs tikko
izmantojām principu, ko izmanto arī visas citas bibliotēkas.
SQL pasaulē atsevišķas jautājuma zīmes tiek izmantotas kā vietturi.
Un veids, kā jūs to darāt, ir šāds.
Ja vēlaties pievienot vērtību šai jautājuma zīmei, tāpat kā printf
valodā C, kā otro vai trešo vai ceturto argumentu norādiet visas
vērtības, kuras vēlaties pievienot šai vērtībai.
Tātad pirms C nedēļām mēs izmantojām %s.
Tāda pati ideja.
SQL tā ir jautājuma zīme, kuru izmantojat tā vietā.
Ja es tagad atveru atpakaļ savu termināļa logu un palaižu Python no
favorites.py, ierakstiet Mario, man joprojām vajadzētu iegūt 39.
Bet tagad es varu arī ierakstīt Scratch, iespējams, un saņemt 44 par
pašu pirmo vienumu ar 0.
Un tas šeit ir vēl populārāks.
Tātad tas tagad ir pareizi.
Šeit izmantotu fstring un pēc tam pievienotu tādu vērtību kā favorite
šeit.
Bet pēc mirkļa redzēsiet, ka nedariet to.
Uzticoties lietotāja ievadei, jūs pakļausit sevi potenciālam
uzlaušanai vai uzbrukumiem.
Un tāpēc patiesībā pāriesim no tā uz dažiem šāda veida
izaicinājumiem, proti, diviem, pirms mēs beigsim.
Tāpēc SQL pasaulē, it īpaši, ja to plaši izmanto ar Twitter un
pasaules Google, iespējams, datu bāzē vienlaikus nonāk daudz datu, jo
vairāki cilvēki vienlaikus atver savus tālruņus visā pasaulē. .
Viņi noklikšķina uz tām pašām saitēm aptuveni vienā un tajā pašā
laikā visā pasaulē.
Ja jūsu vietni vienlaikus izmanto tūkstošiem cilvēku, darbību secība
būs svarīga.
Bet diemžēl SQL un citos skaitļošanas kontekstos pastāv risks, ka tā
sauktā race condition.
Tā, piemēram, vai kāds to kādreiz ir redzējis vai viņam patika?
Šī ir pasaules rekorda ola.
Vai arī šī lieta bija ļoti populāra kādu laiku atpakaļ.
Tā joprojām ir populāra .
Bet, ja dodaties uz Instagram profilu World Record Egg, mērķis bija
izveidot visu laiku visvairāk ar atzīmi patīk Instagram ierakstu.
Un viņiem veicās diezgan labi.
Tas ir tikai šis.
Tas ir tikai olas attēls.
Tagad, popularitātes kulminācijā, iespējams, simtiem, tūkstošiem,
desmitiem tūkstošu cilvēku gandrīz vienlaicīgi noklikšķināja uz šīs
olas.
Tātad tas faktiski rada potenciālu problēmu ar Instagram datu
integritāti.
Kāpēc?
Ja jums tiek saņemti visi šie pieprasījumi vienlaikus, kā tos visus
izsekot un atjaunināt savu skaitītāju tā, lai tas varētu sekot līdzi
visai šai datu satiksmei ?
Kāpēc?
Nu, pieņemsim tikai spekulēsim , ko Meta, agrāk Facebook, darītu
slepus ar Instagram, ja tas būtu viņu kods.
Tātad diskusiju labad pieņemsim, ka Instagram serveri izmanto Python
un SQL kombinācija .
Iespējams, ka viņi neizmanto CS50 bibliotēku, taču viņi varētu
izmantot šīs divas valodas vai divas citas valodas kopā.
Pieņemsim, ka viņi to dara, lai atjauninātu šīs ziņas ar atzīmju
Patīk skaitu.
Viņi vispirms izpilda SQL vaicājumu, piemēram, atlasa pašreizējo
atzīmju Patīk skaitu no tabulas, ko sauc par posts , kur post ideja
ir vienāda ar unikālo identifikatoru, kas ir konkrētajai olai tabulā.
Un tad viņi saglabā rezultātu šajā rindu mainīgajā, tāpat kā es.
Un tad viņi dara šo .
Viņi izveido mainīgo, ko sauc par likes
Viņi to nosaka vienādu ar rindu iekavu 0.
Tātad pati pirmā rinda rezultātu komplektā.
Un viņi saņem atslēgu likes
Tātad tas ir burtiski tas, ko es tikko izdarīju ar skaitīšanu.
Ļaujiet man izvirzīt hipotēzi, ka Instagram dara kaut ko līdzīgu ar
kopējo atzīmju likes skaitu.
Kāpēc viņi to dara?
Jo viņi pēc tam vēlas izpildīt trešo koda rindiņu, kas izpilda ziņu
tabulas atjaunināšanu.
Iestatiet jauno atzīmju likes skaitu vienādu ar kaut ko tādu, kur
post ideja ir vienāda ar šo citu lietu.
Tagad ievērojiet, tāpat kā printf, ir ar komatu atdalīts vērtību
saraksts.
Viņi vēlas atjaunināt pašreizējo atzīmju likes skaitu no pašreizējās
vērtības uz pašreizējo vērtību plus 1.
Tātad tas ir likes plus 1.
Un tad šim nolūkam pievienojam ID.
Tātad pieņemsim, ka tas ir tas, ko Instagram dara.
Diemžēl ikreiz, kad izpildāt vairākas koda rindiņas neatkarīgi un
esat tik populārs kā Instagram, ka jums ir potenciāli tūkstošiem,
simtiem tūkstošu serveru, ir pilnīgi iespējams, ka tad, ja jūs un es
un visi pārējie telpā noklikšķināsiet uz šīs olas tad statistiski
nebūs tā, ka man tiek izpildītas trīs koda rindiņas, pēc tam trīs
rindiņas tev un tad trīs rindiņas tev.
Viņi, iespējams, tiks sajaukti.
Tas tiek izpildīts man, un tad tas tiek izpildīts jums, un tad viņi
atgriežas pie darba manā vietā un tā tālāk, lai veiktu
daudzuzdevumus, gluži kā cilvēks, taču šeit ir ļoti liels ātrums.
Tomēr problēma ir tāda, ka, ja šīs koda rindas tiek pārtrauktas, kas
varētu noiet greizi?
Pieņemsim, ka mēs ar Kārteru abi noklikšķinām uz olas vienlaikus un
pieņemsim, ka pašreizējais atzīmju like skaits dienā ir 100.
Tas saglabā šajā mainīgajā vērtību 100.
Bet, ja mēs noklikšķināsim tik tuvu laikā, mēs varētu saņemt to pašu
atbildi uz šo atlases vaicājumu.
Tajā brīdī, kad Deivids un Kārters noklikšķināja, tai bija 100
atzīmju like .
Bet tad šī pēdējā koda rindiņa tiek izpildīta man un tad varbūt
Kārteram.
Tā kā šī atbilde, datu bāzes stāvoklis, tika saglabāta šajā
mainīgajā, tad gan Kārters, gan es nodrošināsim, ka šī koda rinda
tiks izpildīta ar tādu pašu vērtību.
Atjauniniet ziņu tabulu, iestatot likes equal to 101 for that post's
ID .
Kāpēc?
Jo atkal, ja katra no šīm koda rindiņām, kas darbojas dažādos
serveros, pārbauda pašreizējā atzīmju like skaita vērtību, bet pēc
tam tiek pārtraukta, jo Kārters arī noklikšķināja un pēc tam atsākot
darbu manā vārdā, mums var būt race condition kur kods ir kā
sacensība, lai pabeigtu, bet to pārtrauc citu lietotāju klikšķi.
Un problēma ar to ir tāda, ka, pārbaudot kāda mainīgā vai šajā
gadījumā datu bāzes šūnas vērtību un, pamatojoties uz to, pieņemat
lēmumu, piemēram, kā to atjaunināt, tagad varat zaudēt datus.
Un Instagram, iespējams, nav piemērots reklāmai, ja viņi zaudē
atzīmes like .
Un tāpēc, iespējams, ir problēma nesaglabāt vērtību 102 un tā vietā
ievietot skaitli 101 divreiz.
Pēc būtības tas ir līdzīgs stāstam, kas tika stāstīts datubāzu kursā,
kuru es pats apmeklēju pirms gadiem, un tas ir nedaudz līdzīgs
izdomātam scenārijam, kas saistīts ar ledusskapi.
Un tā ir vistuvākā lieta ledusskapim, ko mēs varētu dabūt uz skatuves.
Bet iedomājieties, ka arī jūsu kopmītnē jums un jūsu istabas biedram
ir viens no šiem mazajiem kopmītņu ledusskapjiem.
Un varbūt jums abiem, kā man stāstīja, ļoti garšo piens.
Un viens no jums ir nodarbībā , bet otrs pārnāk mājās, atver savu
kopmītnes ledusskapi, un viņam šķiet, ka mums beidzās piens.
Un tāpēc jūs aizverat ledusskapi.
Jūs ejat pāri ielai uz CVS vai kādu citu veikalu un stājaties rindā,
lai nopirktu pienu.
Tikmēr jūsu istabas biedrs iziet no klases.
Viņi atgriežas kopmītnes istabā.
Viņi patiešām ir izslāpuši pēc piena.
Viņi atver ledusskapi.
Viņi saka: ak, mums beidzās piens.
Un tad viņi dodas pa citu maršrutu, iespējams, uz CVS vai kādu citu
veikalu tuvumā, iestājas rindā, lai nopirktu pienu.
Patiniet uz priekšu šajā ļoti izdomātajā stāstā, un kas notiek?
Ak, sasodīts, mēs esam ieguvuši divus galonus piena, un mēs nekādā
gadījumā nevaram tajā ievietot galonus piena, nemaz nerunājot par
diviem no tiem.
Tātad tā ir problēma.
Bet kāda ir saistība ar to šeit?
Nu, mēs abi, jā, ko darījām?
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Mērķauditorija: [NEdzirdams]
DEIVIDS MALANS: Tieši tā.
Tātad, rezumējot, mums abiem bija ļoti līdzīgs domu gājiens, pieņēmām
līdzīgu lēmumu, pamatojoties uz vienu un to pašu informāciju,
neapzinoties, ka informācija, ledusskapis, tiek papildināta.
Un, protams, Instagram pasaulē tas notiek šādi.
Ledusskapju pasaulē tas var aizņemt dažas minūtes.
Bet problēma galu galā ir rezultāts tam, ka esam pieņēmuši lēmumu par
pasaules stāvokli, un pasaules stāvoklis tika atjaunināts.
Vaicājumi i tika sajaukti ar citiem.
Vai arī šajā gadījumā kāds jau bija ceļā uz veikalu.
Tātad, kāds ir risinājums reālajā pasaulē?
Nu, jūs varētu vienkārši izveidot piezīmi un ievietot piezīmi “
aizgāju pēc piena”, lai paziņotu savam istabas biedram, ka viņam
nevajadzētu pārbaudīt šī mainīgā lieluma vērtību un pieņemt lēmumu
par to.
Kāpēc?
Jo tas vēl neatbilst iznākumam, kas drīzumā notiks.
Jūs varētu būt dramatiskāks un faktiski varētu kaut kā aizslēgt
ledusskapi, aplikt tam piekaramo atslēgu vai tamlīdzīgi, lai viņi tur
pat nevarētu iekļūt.
Un tas arī sasniegtu tādu pašu efektu.
Un tas faktiski ir arī šīs problēmas risinājums kodā.
Tas nav droši.
Nepietiek tikai ar trīs koda rindiņu izpildi kā šis.
Drīzāk tas, ko jūs, iespējams, vēlaties darīt, ir izmantot papildu
SQL atslēgvārdus, kuriem mēs netērēsim daudz laika pašā klasē, bet
gan šos.
Šai problēmai ir risinājumi.
Varat sākt tā saukto transakciju un precīzāk apņemties pieņemt
lēmumu, piemēram, atjaunināt datubāzi uz 101 vai 102.
Vai arī, ja saprotat, pagaidiet, Kārtera vaicājums pārtrauc manējo.
Ļaujiet man atgriezties iepriekšējā stāvoklī un vienkārši attīt
atpakaļ.
Ļaujiet man atsaukt.
Control Z , ja vēlaties.
Ir arī vēl viens atslēgvārds, kas SQL vairs netiek tik daudz
izmantots, un tas ir bloķēšana.
Jūs varētu burtiski atgriezties pagātnē .
Bloķējiet visu datu bāzes tabulu, neļaujot nevienam to atjaunināt vai
veikt izmaiņas vai pat lasīt, kamēr kāds cits tai piekļūst.
Tas bija ļoti grūts risinājums, jo tas visu palēnināja.
Īsāk sakot, transakcijas tagad ir SQL funkcija, kas jums nav obligāti
jāizmanto, lai atrisinātu šo problēmu, rīkojoties līdzvērtīgi, sakot
, kamēr tiek atjaunināts Deivida skaitītājs: turiet Kārteru malā
ideālā gadījumā uz īsu laiku un pēc tam ļaujiet iet cauri arī viņa
datiem.
Tas ir arī līdzvērtīgs zīmītes vai slēdzenes uzlikšanai uz
ledusskapja .
Un tiešām, es domāju slēdzeni burtiski.
Tos kādreiz sauca un dažos kontekstos joprojām sauc arī par datu bāzu
bloķēšanu.
Un kods, kuram jūs varētu to darīt, ir gandrīz tāds pats.
Jūs vienkārši iesaiņojat trīs vaicājumus ar transaction paziņojumu un
commit .
Un termins šeit ir tāds, ka tas jūsu izteikumus padara par atomiskiem
nosacījumiem
Tātad atomisks nosacījums nozīmē, ka tie visi ir izpildīti, vai nav
izpildīti vispār.
Tas nozīmē, ka tie visi ir ļoti cieši saistīti bez pārtraukuma.
Transaction atrisina šo problēmu un izvairās no diviem galoniem
piena.
Un pēdējā problēma, kas mūsdienās ir traģiski tik izplatīta reālajā
pasaulē, ir tā sauktais SQL injekcijas uzbrukums.
Un tas ir tas, uz ko es iepriekš minēju ar jautājuma zīmi.
Pieņemsim, ka jums ir ieradums pieteikties Jēlas vietnēs ar savu
tīkla ID vai paroli vai arī Hārvardā ar savu Hārvardas atslēgu un
paroli.
Pieņemsim, ka diskusiju labad cilvēki, kas ieviesa Hārvardas atslēgas
pieteikšanos, ļauj jums ierakstīt savu e-pasta adresi, protams, un
paroli.
Taču pieņemsim, ka viņi izmanto SQL slēpti , lai pārbaudītu jūsu
lietotājvārdu un paroli, lai pārliecinātos, ka esat Deivids Malans
vai Kārters Zenke, vai kāds, par kuru uzdodat sevi.
Es jums vēl neesmu parādījis sintaksi, bet izrādās, ka SQL — tas ir
īpašs veids, kā norādīt komentāru.
Tas nozīmē ignorēt visu pa labi.
Tātad tas ir tāpat kā // C vai hash simbols Python.
-- tikai nozīmē ignorēt visu pa labi.
Un mēs, protams, esam redzējuši atsevišķus citātus.
Tātad viens no veidiem, kā veikt SQL injekcijas uzbrukumu, ir mēģināt
ievadīt ļaunprātīgu SQL kodu kāda cita datu bāzē, viņam to
neapzinoties.
Kā jūs to darāt?
Pieņemsim, ka es pieteicos kā malan@harvard.edu single quote dash,
dash .
Es neko nepārprotami necitēju, un nekas nav pa labi no — vienalga.
Bet šī nelīdzsvarotība būs noderīga.
Kāpēc?
Jo, ja es esmu hakeris un pieņemu, ka kāds no Hārvardas, iespējams,
izmanto vienu pēdiņu, lai iekļautu lietotāja e-pasta adresi un
lietotāja paroli, kā būtu, ja es mēģinātu pabeigt viņu domas un
aizvērt kādu no šīm pēdiņām. ?
Kas var notikt?
Nu, mēs varētu to izdarīt.
Šeit, piemēram, ļaujiet man spekulēt , ka Hārvarda uzrakstīja kodu,
cerams, ka ne slepus .
Tātad viņi izmanto CS50 bibliotēku Python, un viņi izmanto SQL iekšā.
Pieņemsim, ka viņiem ir šāds vaicājums.
Izvēlieties star from users where username equals question mark and
password equals question mark..
Un tad pieņemsim, ka viņi vienkārši pievieno ievadīto lietotājvārdu
un paroli.
Un tad, ja viņi atgriež noteiktu rindu skaitu, viņi pieņem, ka esmu
Dāvids.
Viņi pieņem, ka Kārters ir Kārters, ja datu bāzē ir gan
lietotājvārds, gan parole.
Šeit tikai stāsta beigas.
Tas ir labi.
Tam ir jautājuma zīmes vietturis, kā mēs apspriedām iepriekš.
Bet ko tad, ja jūs to īsti neatceraties?
Jūs to neņemat pie sirds un izmantojat savas jau pazīstamākās
pagājušās nedēļas virknes, ar kurām mēs izmantojam šīs figūriekavas ,
lai pievienotu vērtības.
Ko darīt, ja jūs to darītu tā vietā?
Tātad tā ir gandrīz tāda pati ideja.
Tā joprojām ir db izpilde, bet tagad tā ir select star from users
where username equals
Un tagad ievērojiet, ka es izmantoju vienas pēdiņas, ko pieprasa SQL,
bet es izmantoju fstrings ar figūriekavām .
Un password equals single quote password and then close single quote .
Problēma ir tāda, ka, ja jūs vienkārši akli ielīmējat lietotāja
ievadīto informāciju šajā tīmekļa veidlapā lietotājvārda un paroles
laukā, nekas neliedz ļaunprātīgam lietotājam, studentam, mācībspēkam
vai personālam savā vārdā iekļaut vienu citātu.
Vai varbūt pat labestīgi, ja viņu vārdam ir vienas pēdiņas , kā tas
ir dažiem uzvārdiem
Tāpēc tas ir ļoti trausls.
Kāpēc?
Pieņemsim, ka, ja mēs pievienosim manu ļaunprātīgo malan@harvard.edu
single quote , ievērojiet, kas notiek ar lietotājvārdu šeit.
Lietotājvārda mainīgais figūriekavu iekšpusē tiks aizstāts ar šo.
Un ievērojiet vienas pēdiņas , ko uzrakstīja Hārvardas programmētājs,
malan@harvard.edu single quote , ko uzrakstīju es - ko es uzrakstīju
vienas pēdiņas , ko uzrakstīja Hārvarda, un visu citu, ko viņi vēlas
pēc tam.
Tomēr kādas ir sekas ,dash, dash?
Viss pa labi tiks ignorēts.
Tāpēc šajā gadījumā parole pat nekad netiek pārbaudīta.
Es maldinu serveri ignorēt visu pēc -- bet esmu ļoti gudri, ļoti
ļaunprātīgi izveidojis sintaktiski derīgu vaicājumu.
Kāpēc?
Jo es sniedzu vienu citātu, kas beigs domu par šo pirmo citātu.
Un tagad es zinātu, kā to izdarīt tikai tad, ja redzētu kodu vai ja
es vienkārši nejauši mēģinātu ievietot apostrofus tīmekļa veidlapās
un redzētu, vai kaut kas sabojājas.
Bieži vien pretinieki uzbrūk sistēmām.
Viņi ieraksta potenciāli bīstamas rakstzīmes, nospiež taustiņu Enter.
Ja kaut kas sabojājas, viņi ne vienmēr ir iekļuvuši sistēmā, taču
viņi zina, ka var būt ievainojamība.
Un tad viņi sāk mēģināt metodiskāk šādas lietas.
Tātad tas būs slikti, jo tas faktiski aizkrāso pārējo vaicājumu.
Un šis vaicājums noteikti atgriezīs dažas rindas, pat nezinot manu
paroli.
Un tātad šī loģika dot dot dot nozīmē, ka, ja dati tiek atgriezti no
šī vaicājuma, Hārvarda, iespējams, pieņems, ka Malans ir pieteicies.
Parādiet viņam viņa kontu vai citu, kas šeit tiek aizsargāts.
Īsāk sakot, fstring izmantošana ir slikta.
Izmantojot jebkuru ekvivalentu, piemēram, %s, C, slikti.
Runājot par SQL, to var atrisināt, izmantojot jautājuma zīmes vai
jebkuru citu, ko nosaka trešās puses bibliotēka, piemēram, CS50.
Kāpēc?
Jo tādas bibliotēkas kā mūsējā ir izveidotas tā, lai būtu vismaz
gudras un paranoiskas.
Un tas, ko mēs darīsim, ir tas.
Ja izmantojat jautājuma zīmes un vērtības ir pievienotas, mēs
neizmantosim visas potenciāli bīstamas rakstzīmes šajos vietturos.
Tādējādi vienas pēdiņas vairs netiks uzskatītas par gramatiskām
vienām pēdiņām
Tas būs burtiski lietotājvārda vai paroles rakstzīme.
Tāpēc bibliotēka par to parūpējas jūsu vietā, jo jūs pievienojat
lietotājvārdu un paroli kā atsevišķus argumentus.
Un tad mēs vai trešā puse, kuru izmantojat, faktiski veicam
dezinfekciju.
Tas ir datu tīrīšana un slikto rakstzīmju novēršana.
Tagad šī ir sava veida interneta mēma, kas kādu laiku pastāvēja.
Ja kādreiz esat braucis ar automašīnu vai atradies automašīnā, kurā
ir automātiskie nodevu lasītāji.
Šī persona domāja, ka varētu būt smieklīgi mēģināt darīt ko līdzīgu.
Ko viņi, domājams, dara?
Nav skaidrs, vai tas darbojās vai ne, pieņēmums ir tāds, ka šeit ir
faktiskās numura zīmes beigas, bet šeit ir interesantas vienas
pēdiņas ar semikolu.
Tas ir īpaši slikti, jo tas nozīmē, ka jūs, iespējams, varat izpildīt
otru vaicājumu datu bāzē.
Šeit ir kāds, kurš izklaidējas, mēģinot nomest visu datu bāzes
tabulu, pašvaldībai kas skenē caur kamerām to numura zīmes kodu.
Un es būtu nolaidīgs, ja mēs nebeigtu uz šīs nots
Vismaz datorzinātņu aprindās ir kāds kuru sauc , bez jebkādas
saistības ar TF nosaukumu, ko mēs ievietojām datubāzē agrāk, mazais
Bobijs Tables, kas beidzas ar šo XKCD komiksu.
Un, ja jūs ķiķiniet , ja smejaties, jūs tagad esat pilntiesīgi SQL
programmētāji.
Jauki, jauki.
Katrs CS students zina par mazo Bobiju Table .
Tātad, ja tagad pieminēsiet mazo Bobiju Tables, jūs esat gatavs.
Nu labi, šodienai tas arī viss.
Tiksimies nākamreiz.
[MŪZIKA ATSKAŅOTĀS]