1 00:00:00,000 --> 00:00:02,988 [ SKAN MŪZIKA ] 2 00:01:12,582 --> 00:01:13,540 DEIVIDS MALANS: Labi. 3 00:01:13,540 --> 00:01:17,150 Šis ir CS50, un šī jau ir septītā nedēļa. 4 00:01:17,150 --> 00:01:19,960 Un šī ir nedēļa, kurā mēs turpināsim no vietas, kur mēs beidzām ar 5 00:01:19,960 --> 00:01:22,770 Python, iepazīstinot jūs ar mazliet vairāk valodas sintaksi un 6 00:01:22,770 --> 00:01:25,580 iespējām, lai jūs varētu atrisināt interesantas problēmas. 7 00:01:25,580 --> 00:01:27,380 Taču daudzas no šīm problēmām arvien vairāk kaut kādā veidā ir 8 00:01:27,380 --> 00:01:29,180 saistītas ar datiem. 9 00:01:29,180 --> 00:01:31,767 Galu galā, ja mūsdienās lielākoties domājat par jebkuru vietni vai 10 00:01:31,767 --> 00:01:34,355 mobilo lietotni vai procesu, kas ietver problēmu risināšanu, tas 11 00:01:34,355 --> 00:01:36,942 gandrīz vienmēr ietver noteiktu datu apjomu un bieži vien liela 12 00:01:36,942 --> 00:01:39,530 mēroga datus. 13 00:01:39,530 --> 00:01:40,680 Daudz, daudz datu. 14 00:01:40,680 --> 00:01:42,862 Tātad, ko mēs vispirms redzēsim šodien, ir tas, ka, jā, jūs varat 15 00:01:42,862 --> 00:01:45,045 izmantot Python, lai atrisinātu visas problēmas, kuras esam redzējuši 16 00:01:45,045 --> 00:01:47,227 , kā arī dažas problēmas, kas saistītas ar datiem, taču dažreiz tas 17 00:01:47,227 --> 00:01:49,410 būs kaitinoši. 18 00:01:49,410 --> 00:01:50,420 Tas būs nedaudz sāpīgi. 19 00:01:50,420 --> 00:01:54,060 Lai saņemtu atbildi, būs vairāk darba, nekā jūs vēlētos. 20 00:01:54,060 --> 00:01:56,650 Tāpēc arī šodien mēs jūs iepazīstināsim ar jaunu valodu, ko sauc par 21 00:01:56,650 --> 00:01:59,240 SQL — strukturēto vaicājumu valodu. 22 00:01:59,240 --> 00:02:05,240 Varat būt droši, ka šī valoda ir daudz mazāka nekā C un Python. 23 00:02:05,240 --> 00:02:07,860 Tas it kā dara mazāk, bet ne pārāk labi. 24 00:02:07,860 --> 00:02:10,905 Un tā ir valoda datu bāzu vaicājumu veikšanai, datu glabāšanai tajās, 25 00:02:10,905 --> 00:02:13,950 atjaunināšanai, ievietošanai, dzēšanai un daudz ko citu. 26 00:02:13,950 --> 00:02:16,280 Un tā ir tehnoloģija, kas mūsdienās patiešām tiek izmantota tīmekļa 27 00:02:16,280 --> 00:02:18,610 lietotnēs un mobilajās lietotnēs, datu zinātnē, analīzē un daudz kur 28 00:02:18,610 --> 00:02:20,940 citur . 29 00:02:20,940 --> 00:02:23,600 Tā patiešām labi spēj uzglabāt daudz un daudz datu. 30 00:02:23,600 --> 00:02:25,430 Tagad šī ir vēl viena valoda. 31 00:02:25,430 --> 00:02:29,165 Un ticiet vai nē, bet nākamnedēļ mēs jūs iepazīstināsim ar vēl trim 32 00:02:29,165 --> 00:02:32,900 valodām — HTML un CSS, kas tehniski nav programmēšanas valodas. 33 00:02:32,900 --> 00:02:35,630 Tā ir saistītas ar estētiku un informācijas iezīmēšanu. 34 00:02:35,630 --> 00:02:38,660 Bet arī JavaScript, kas patiesībā ir programmēšanas valoda. 35 00:02:38,660 --> 00:02:44,000 Taču CS50 mērķis patiešām būs dot jums iespēju programmēt vispārīgāk. 36 00:02:44,000 --> 00:02:47,165 Un patiešām, kad pēc dažiem gadiem atrodaties reālajā pasaulē, tur 37 00:02:47,165 --> 00:02:50,330 vienmēr būs kāda jauna cita populāra valoda. 38 00:02:50,330 --> 00:02:53,713 Un, cerams, šonedēļ un nākamnedēļ un pēc tam viens no mērķiem ir ne 39 00:02:53,713 --> 00:02:57,096 tikai iemācīt jums šīs valodas, bet arī tas, kā iemācīt sev nākotnes 40 00:02:57,096 --> 00:03:00,480 valodas, par kurām mēs vēl neesam dzirdējuši. 41 00:03:00,480 --> 00:03:04,220 Tātad, to sakot, sāksim ar sava veida aptauju. 42 00:03:04,220 --> 00:03:08,323 Ja savā tālrunī vai klēpjdatorā apmeklējat šo URL, cs50.ly/favorites, 43 00:03:08,323 --> 00:03:12,426 jūs gaida ļoti vienkārša Google veidlapa, kurā tiks uzdoti daži 44 00:03:12,426 --> 00:03:16,530 jautājumi ar atbilžu variantiem. 45 00:03:16,530 --> 00:03:20,460 Dodieties uz vietni cs50.ly/favorites, un tam vajadzētu novirzīt jūs 46 00:03:20,460 --> 00:03:24,390 uz Google veidlapu, kas izskatās nedaudz līdzīga šai , vispirms jau 47 00:03:24,390 --> 00:03:28,320 septītajā nedēļā vaicājot, kura ir jūsu iecienītākā valoda starp šīm 48 00:03:28,320 --> 00:03:32,250 opcijām. 49 00:03:32,250 --> 00:03:34,220 Un tad zemāk vēl viens jautājums. 50 00:03:34,220 --> 00:03:38,150 Ja atceraties problēmu kopas no 0 līdz 6, kāda bija jūsu iecienītākā 51 00:03:38,150 --> 00:03:42,080 problēmu kopas problēma, ja tāda bija? 52 00:03:42,080 --> 00:03:45,110 Vai tas būtu Scratch, C vai Python versijā. 53 00:03:45,110 --> 00:03:48,650 Tāpēc atbildiet uz šiem diviem jautājumiem. 54 00:03:48,650 --> 00:03:51,810 Pēc brīža es pārslēgšos uz savu ekrānu šeit, kur jūs redzēsit, un 55 00:03:51,810 --> 00:03:54,970 ikviens, kas izmanto Google Forms, zina, izklājlapu , kas tagad 56 00:03:54,970 --> 00:03:58,130 apkopo šos datus. 57 00:03:58,130 --> 00:03:59,595 Microsoft Office 365 var darīt to pašu, ja izmantojat kādu no šīm 58 00:03:59,595 --> 00:04:01,060 veidlapām. 59 00:04:01,060 --> 00:04:03,915 Un tas, ko jūs tagad redzat, ir Google Sheets , izklājlapu kurā ir 60 00:04:03,915 --> 00:04:06,770 uzskaitīti visi auditorijas jautājumi. 61 00:04:06,770 --> 00:04:09,980 Valoda ir kolonnā B, problēma ir kolonnā C, un katra rinda ir viens 62 00:04:09,980 --> 00:04:13,190 skolēns, kurš ir atbildējis. 63 00:04:13,190 --> 00:04:15,275 Daži no jums ļoti vēlējās ierasties uz stundu šodien plkst. 8:33 pēc 64 00:04:15,275 --> 00:04:17,360 austrumu laika. 65 00:04:17,360 --> 00:04:19,040 Labi, tagad mēs ieejam īstajā nodarbību laikā. 66 00:04:21,779 --> 00:04:24,339 Un, ja es ritināšu uz leju, mēs, iespējams, redzēsim dažus desmitus, 67 00:04:24,339 --> 00:04:26,900 pāris simtus atbilžu. 68 00:04:26,900 --> 00:04:29,225 Un jā, tāpēc mēs šeit saņemam ļoti daudz atbilžu. 69 00:04:29,225 --> 00:04:31,707 Un es redzu, ka parādās daži modeļi, bet cilvēka acīm ne vienmēr ir 70 00:04:31,707 --> 00:04:34,190 skaidrs, kas tie ir. 71 00:04:34,190 --> 00:04:36,320 Tagad, protams, varat izmantot Google Spreadsheets . 72 00:04:36,320 --> 00:04:40,143 Varat izcelt datus un maģiski no tiem izveidot diagrammas. 73 00:04:40,143 --> 00:04:42,560 Taču ar datiem varat darīt tikai to, ko Google atļauj. 74 00:04:42,560 --> 00:04:45,350 Un tas pats attiecas uz Microsoft Excel vai Apple Numbers. 75 00:04:45,350 --> 00:04:47,480 Bet vai nebūtu jauki, ja varētu vienkārši manipulēt ar 76 00:04:47,480 --> 00:04:49,610 neapstrādātajiem datiem, lai gan tas ir salīdzinoši vienkārši, lai 77 00:04:49,610 --> 00:04:51,740 tikai atbildētu uz jautājumiem par datiem? 78 00:04:51,740 --> 00:04:54,243 Iespējams, ilgtermiņā izveidojiet savas diagrammas, pielāgojiet tās 79 00:04:54,243 --> 00:04:56,746 tieši tā, kā vēlaties, nevis esat atkarīgi no programmatūras, kas ir 80 00:04:56,746 --> 00:04:59,250 pieejama veikala plauktā. 81 00:04:59,250 --> 00:05:02,130 Nu, kā mēs varētu to darīt? 82 00:05:02,130 --> 00:05:05,460 Ļaujiet man ierosināt šo datu kopu tagad uzskatīt par to, ko mēs 83 00:05:05,460 --> 00:05:08,790 tagad saucam par izplātās datnes datu bāzi. 84 00:05:08,790 --> 00:05:11,995 Šodien mēs redzēsim, ka ir vēl labākas datu bāzes, taču pasaulē 85 00:05:11,995 --> 00:05:15,200 vienkāršākā datu bāze patiešām ir kā .csv fails. 86 00:05:15,200 --> 00:05:18,500 Un mēs to redzējām pirms pāris nedēļām C. 87 00:05:15,200 --> 00:05:19,430 Mēs uzrakstījām mazliet C koda, kas izmantoja fprintf, lai ierakstītu 88 00:05:19,430 --> 00:05:23,660 datus failā, izmantojot komatus kā atdalītāju. 89 00:05:23,660 --> 00:05:26,911 Tomēr tajā laikā mēs nedarījām daudz vairāk ar CSV, jo tas ir 90 00:05:26,911 --> 00:05:30,162 patiešām kaitinoši, sāpīgi, laikietilpīgi, nebija parocīgi izmantot C 91 00:05:30,162 --> 00:05:33,413 kaut kam tamlīdzīgam - malloc, atmiņas un citu lietu dēļ. 92 00:05:33,413 --> 00:05:35,330 Bet ar Python tas būs daudz vieglāk. 93 00:05:35,330 --> 00:05:38,112 Tāpēc ikreiz, kad jums ir piekļuve kādai datu kopai, kur varat to 94 00:05:38,112 --> 00:05:40,895 vienkārši lejupielādēt savā Mac datorā vai personālajā datorā, vai 95 00:05:40,895 --> 00:05:43,677 mākoņa vidē, tagad ir iespējams rakstīt kodu, lai kaut ko darītu ar 96 00:05:43,677 --> 00:05:46,460 datiem. 97 00:05:46,460 --> 00:05:48,120 Varbūt nekavējoties varat analizēt to. 98 00:05:48,120 --> 00:05:51,486 Ja tas ir manuāli importēts, iespējams, jums tas ir jānotīra, veicot 99 00:05:51,486 --> 00:05:54,852 daudz meklēšanas un nomaiņas, bet ne ar tastatūru, bet gan ar kodu. 100 00:05:54,852 --> 00:05:56,310 Un tāpēc ļaujiet man turpināt un darīt to. 101 00:05:56,310 --> 00:05:59,160 Ļaujiet man atgriezties pie manas Google izklājlapas, kurā ir visi 102 00:05:59,160 --> 00:06:02,010 šobrīd saņemtie dati. 103 00:06:02,010 --> 00:06:05,220 Un ļaujiet man iet uz priekšu un lejupielādēt to, izmantojot izvēlni 104 00:06:05,220 --> 00:06:08,430 Fails šeit. 105 00:06:08,430 --> 00:06:09,590 Un paskatīsimies. 106 00:06:09,590 --> 00:06:10,310 Lejupielādēt. 107 00:06:10,310 --> 00:06:12,170 Un jūs varat redzēt veselu virkni iespēju. 108 00:06:12,170 --> 00:06:14,886 Lielākā daļa formātu varētu būt pazīstami, taču šodien mēs 109 00:06:14,886 --> 00:06:17,602 koncentrēsimies tikai uz šo, komatatdalītajām vērtībām vai CSV. 110 00:06:17,602 --> 00:06:19,371 Turpināsim un lejupielādēsim to manā Mac datorā šeit, mapē 111 00:06:19,371 --> 00:06:21,140 Lejupielādes. 112 00:06:21,140 --> 00:06:22,890 Un tagad es turpināšu un darīšu to. 113 00:06:22,890 --> 00:06:25,140 Ļaujiet man turpināt un izvilkt VS Code šeit mākonī. 114 00:06:25,140 --> 00:06:26,640 Un, ja jūs to nekad iepriekš neesat darījis, ir daži veidi, kā to 115 00:06:26,640 --> 00:06:28,140 izdarīt. 116 00:06:28,140 --> 00:06:30,565 Bet vienkāršākais veids, kā augšupielādēt failu savā koda telpā, tā 117 00:06:30,565 --> 00:06:32,990 sakot, ir tikai sava veida vilkšana un nomešana. 118 00:06:32,990 --> 00:06:36,020 Tas maģiski augšupielādēs to tur esošajā serverī. 119 00:06:36,020 --> 00:06:39,950 Un mēs redzēsim, ka, pirmkārt, tam ir ļoti garš faila nosaukums, kuru 120 00:06:39,950 --> 00:06:43,880 es patiesībā iztīrīšu, jo būs ļoti nogurdinoši rakstīt kodu. 121 00:06:43,880 --> 00:06:46,195 Tāpēc es varētu, protams, ar peles labo pogu noklikšķināt šeit, bet 122 00:06:46,195 --> 00:06:48,510 es izmantošu savu Linux komandu. 123 00:06:48,510 --> 00:06:51,625 Pārvietosim šo failu ar nosaukumu CSV 50 2022 un nosauksim to 124 00:06:51,625 --> 00:06:54,740 vienkāršāk, favorites.csv. 125 00:06:54,740 --> 00:06:58,370 Tātad visi mazie burti, bez atstarpēm, sava veida labi pamati. 126 00:06:58,370 --> 00:07:02,960 Un ļaujiet man tagad atvērt šo failu ar kodu favorites.csv. 127 00:07:02,960 --> 00:07:05,270 Es aizvēršu File Explorer pārlūkprogrammu, un mēs redzēsim tieši 128 00:07:05,270 --> 00:07:07,580 tādus pašus datus kā iepriekš, bet ne tik skaisti, kā to dara Google 129 00:07:07,580 --> 00:07:09,890 izklājlapas. 130 00:07:09,890 --> 00:07:12,653 Drīzāk mēs šeit redzam, ka man joprojām ir trīs kolonnas: 131 00:07:12,653 --> 00:07:15,416 laikspiedols, valoda, problēma un visas zemāk esošās vērtības, 132 00:07:15,416 --> 00:07:18,180 tostarp laikspiedoli un atbildes, kurām tie ir paredzēti. 133 00:07:18,180 --> 00:07:20,360 Bet tai nav atbilstošu kolonnu. 134 00:07:20,360 --> 00:07:22,250 Tajā ir tikai komats, kas tos atdala. 135 00:07:22,250 --> 00:07:24,880 Tagad mēs varētu ļoti viegli rakstīt Python kodu tāpat kā mēs 136 00:07:24,880 --> 00:07:27,510 rakstījām C kodu, lai manipulētu ar tādiem failiem kā šis, lai 137 00:07:27,510 --> 00:07:30,140 rakstītu vai lasītu. 138 00:07:30,140 --> 00:07:32,390 Bet tā vietā darīsim kaut ko mazliet patīkamāku, kas patiešām ir 139 00:07:32,390 --> 00:07:34,640 Python formā. 140 00:07:34,640 --> 00:07:38,300 Tātad Python faktiski ir aprīkots ar vietējo CSV failu atbalstu. 141 00:07:38,300 --> 00:07:40,535 Tam patiešām ir pakotne ar nosaukumu CSV, kas ļauj tikai lasīt un 142 00:07:40,535 --> 00:07:42,771 rakstīt, kā arī veikt daudz noderīgu lietu, kad runa ir par CSV 143 00:07:42,771 --> 00:07:45,007 failiem. 144 00:07:45,007 --> 00:07:47,090 Tātad, turpināsim un darīsim kaut ko ar šo failu. 145 00:07:47,090 --> 00:07:49,250 Ļaujiet man atgriezties šeit pie VS Code. 146 00:07:49,250 --> 00:07:51,860 Pagaidām aizvēršu favorites.csv. 147 00:07:51,860 --> 00:07:55,250 Taču atcerieties, ka laikspiedols bija pirmā kolonna, valoda bija 148 00:07:55,250 --> 00:07:58,640 otrā kolonna un problēma bija trešā. 149 00:07:58,640 --> 00:08:00,736 Un ievērojiet, jo mēs izmantojam komatus, tie atkal nesakrīt ideāli, 150 00:08:00,736 --> 00:08:02,832 taču tā nav problēma. 151 00:08:02,832 --> 00:08:05,270 Visticamāk, katrā rindā ir divi komatu. 152 00:08:05,270 --> 00:08:08,810 Un es turpināšu un tagad izveidošu failu kā par favorites.py, lai es 153 00:08:08,810 --> 00:08:12,350 varētu sākt rakstīt kodu, lai manipulētu ar šiem datiem. 154 00:08:12,350 --> 00:08:13,600 Un darīsim kaut ko vienkāršu. 155 00:08:13,600 --> 00:08:16,676 Vienkārši uzrakstīsim vienkāršu programmu Python, kas atver šo failu, 156 00:08:16,676 --> 00:08:19,753 nolasa to un izdrukāsim kaut ko tikai kā drošības pārbaudi, lai es 157 00:08:19,753 --> 00:08:22,830 zinātu, ko daru, lai gan tas nebūs noderīgi. 158 00:08:22,830 --> 00:08:26,780 Tātad Python, ja vēlaties CSV atbalstu, importējiet CSV. 159 00:08:26,780 --> 00:08:30,350 Un tas dod jums piekļuvi visām tā maģiskajām iespējām. 160 00:08:30,350 --> 00:08:33,155 Ļaujiet man tagad iet uz priekšu un izmantot šo paņēmienu, lai 161 00:08:33,155 --> 00:08:35,960 atvērtu failu Python, kas ir līdzīgs C. 162 00:08:35,960 --> 00:08:37,789 Bet ar Python mēs to darīsim. 163 00:08:37,789 --> 00:08:39,020 Atslēgvārds ar. 164 00:08:39,020 --> 00:08:41,450 Es atvēršu failu ar nosaukumu favorites.csv, kas bija īsākais 165 00:08:41,450 --> 00:08:43,880 nosaukums, ko es tam devu. 166 00:08:43,880 --> 00:08:47,800 Tas nav obligāts, taču skaidrības labad es to atvēršu lasīšanas 167 00:08:47,800 --> 00:08:51,720 režīmā, tāpat kā f open izmantoja otru argumentu. 168 00:08:51,720 --> 00:08:53,980 Un es šo failu, kad tas tiks atvērts, nosaukšu pavisam vienkārši , 169 00:08:53,980 --> 00:08:56,240 lai gan es to varētu saukt kā vien vēlos. 170 00:08:56,240 --> 00:08:59,060 Un tagad tas ir tikai atvērts fails. 171 00:08:59,060 --> 00:09:01,655 Cik Python šobrīd zina, tas ir tikai teksts vai vēl labāk, tas ir 172 00:09:01,655 --> 00:09:04,250 tikai nulles un vieninieki. 173 00:09:04,250 --> 00:09:08,375 Ja vēlaties, lai šī Python pakotne ar nosaukumu CSV patiešām darītu 174 00:09:08,375 --> 00:09:12,500 ar to kaut ko noderīgu, jums šis fails ir jāielādē tagad bibliotēkā. 175 00:09:12,500 --> 00:09:15,020 Un vienkāršākais veids, kā to izdarīt, ir piešķirt sev mainīgo, ko 176 00:09:15,020 --> 00:09:17,540 sauc par reader , jo es vēlos lasīt šo failu. 177 00:09:17,540 --> 00:09:19,430 Lai gan arī to es varētu saukt citādi. 178 00:09:19,430 --> 00:09:22,070 Pēc tam es to iestatīšu vienādu ar funkcijas csv.reader atgriešanas 179 00:09:22,070 --> 00:09:24,710 vērtību. 180 00:09:24,710 --> 00:09:28,220 Un es nododu tam atvērto failu saskaņā ar dokumentāciju. 181 00:09:28,220 --> 00:09:29,780 Tātad, pirmais solis, es atveru failu. 182 00:09:29,780 --> 00:09:32,030 Un tas tikai dod man piekļuvi tajā esošajiem baitiem. 183 00:09:32,030 --> 00:09:35,943 Otrais solis tagad ar csv.reader liek Python pakotnei ar nosaukumu 184 00:09:35,943 --> 00:09:39,856 CSV darīt ar to kaut ko noderīgu, sākt analizēt komatus un ļaut man 185 00:09:39,856 --> 00:09:43,770 to tālāk parsēt. 186 00:09:43,770 --> 00:09:45,180 Tāpēc turpinām un darīsim to. 187 00:09:45,180 --> 00:09:49,730 Ļaujiet man turpināt tagad un šajā ciklā teiksim to. 188 00:09:49,730 --> 00:09:52,340 Atvainojiet, šajā atvērtajā failā darīsim to. 189 00:09:52,340 --> 00:09:58,625 Katrai rindai, ja vēlaties, vai rindiņai failā, AKA lasītājs, 190 00:09:58,625 --> 00:10:04,910 izdrukāsim tikai 1. rindas iekavu . 191 00:10:04,910 --> 00:10:06,198 Kas te tagad notiek? 192 00:10:06,198 --> 00:10:09,813 Izrādās, ja lasāt CSV lasītāja funkcijas dokumentāciju, tas, ko tā 193 00:10:09,813 --> 00:10:13,429 jums atdod, būtībā ir šis īpašais objekts, tā sakot, kas ļauj to 194 00:10:13,429 --> 00:10:17,044 uzskatīt tā, it kā tas būtu tikai patiešām liels rindiņu saraksts no 195 00:10:17,044 --> 00:10:20,660 faila , AKA lasītājs. 196 00:10:20,660 --> 00:10:23,894 Tātad,runājot par rindu lasītājā , šis ir kodolīgāks veids, kā 197 00:10:23,894 --> 00:10:27,128 pateikt: dodiet man faila pirmo rindiņu plus plus, dodiet man otro 198 00:10:27,128 --> 00:10:30,362 rindiņu failā plus plus un tā tālāk, lai mēs būtu darījuši daudz 199 00:10:30,362 --> 00:10:33,597 vairāk mehāniski C valodā . 200 00:10:33,597 --> 00:10:37,350 Tas ir tikai daudz draudzīgāks Python un angļu valodai, ja vēlaties. 201 00:10:37,350 --> 00:10:40,225 Tātad katrā šīs cilpas atkārtojumā rindā būs visi dati no pašreizējās 202 00:10:40,225 --> 00:10:43,100 rindas. 203 00:10:43,100 --> 00:10:47,345 Bet vēl labāk, lasītāja funkcija man palīdz, ja tā man katru rindu 204 00:10:47,345 --> 00:10:51,590 nodod ne tikai kā virkni vai STR, vai tekstu programmā Python. 205 00:10:51,590 --> 00:10:56,590 Tas man sniedz to, kas, šķiet, ir balstīts uz sestās rindas sintaksi. 206 00:10:56,590 --> 00:10:57,460 Kāds instinkts? 207 00:10:57,460 --> 00:10:58,030 Jā. 208 00:10:58,030 --> 00:10:58,740 Mērķauditorija: saraksts. 209 00:10:58,740 --> 00:11:00,698 DEIVIDS MALANS: Tas man patiešām atdod sarakstu. 210 00:11:00,698 --> 00:11:02,580 Un es pieņemu, ka vizuālais pavediens jums bija fakts, ka mēs šeit 211 00:11:02,580 --> 00:11:04,463 izmantojam kvadrātiekavas. 212 00:11:04,463 --> 00:11:07,261 Un patiešām, rindas 1. iekava būs nevis pirmais, bet gan otrais 213 00:11:07,261 --> 00:11:10,060 elements šajā sarakstā. 214 00:11:10,060 --> 00:11:11,280 Un tāpēc tikai miniet . 215 00:11:11,280 --> 00:11:14,400 Kad es palaižu šo kodu pēc brīža, kas tiks izdrukāts? 216 00:11:14,400 --> 00:11:16,950 Laika zīmogs, valoda vai problēma? 217 00:11:20,892 --> 00:11:21,392 Jā? 218 00:11:21,392 --> 00:11:22,350 AUDITORIJA: Valoda. 219 00:11:22,350 --> 00:11:25,099 DEIVIDS MALANS: valoda, jo tā ir otrā kolonna, kas failā ir atdalīta 220 00:11:25,099 --> 00:11:27,848 ar šiem komatiem. 221 00:11:27,848 --> 00:11:29,140 Tāpēc ļaujiet man turpināt un darīt to. 222 00:11:29,140 --> 00:11:30,630 Ļaujiet man notīrīt savu termināli šeit. 223 00:11:30,630 --> 00:11:33,570 Ļaujiet man palaist Python no favorites.py un Enter. 224 00:11:33,570 --> 00:11:34,710 Un tur ir viss. 225 00:11:34,710 --> 00:11:35,490 Tas bija super ātri. 226 00:11:35,490 --> 00:11:37,090 Bet šeit ir patiešām garš saraksts. 227 00:11:37,090 --> 00:11:40,090 Un patiesībā, ja es palielināšu sava termināļa izmēru un sākšu 228 00:11:40,090 --> 00:11:43,090 ritināt uz augšu, jūs vienkārši redzēsit visus neapstrādātos datus. 229 00:11:43,090 --> 00:11:44,490 Tagad tas vēl nav tik noderīgi. 230 00:11:44,490 --> 00:11:46,032 Es būtu varējis vienkārši paskatīties uz CSV. 231 00:11:46,032 --> 00:11:49,481 Bet skaidri redzams, ka tagad man ir iespēja atvērt failu, parsēt to, 232 00:11:49,481 --> 00:11:52,930 tā sakot, tas ir, sadalīt to tā sastāvdaļās un kaut ko darīt ar 233 00:11:52,930 --> 00:11:56,380 konkrētām tā daļām. 234 00:11:56,380 --> 00:11:56,880 Labi. 235 00:11:56,880 --> 00:11:59,670 Tātad, ja es vēlos to darīt nedaudz patīkamāk, ļaujiet man to vismaz 236 00:11:59,670 --> 00:12:02,460 semantiski padarīt nedaudz tīrāku. 237 00:12:02,460 --> 00:12:05,650 Un ziniet ko, skaidrības labad ļaujiet man dot sev mainīgo. 238 00:12:05,650 --> 00:12:09,304 Tas nav noteikti nepieciešams, bet es zinu, ka šī ir iecienītākā 239 00:12:09,304 --> 00:12:12,958 valoda, piemēram. 240 00:12:12,958 --> 00:12:14,250 Tāpēc sauksim to tikai par favorite . 241 00:12:14,250 --> 00:12:16,410 Iestatiet to vienādu ar 1. rindas iekavu . 242 00:12:16,410 --> 00:12:19,625 Un tagad, lai manā kodā būtu skaidrāks, lai gan atkal mums nav 243 00:12:19,625 --> 00:12:22,840 vajadzīgs mainīgais pats par sevi, šis kods, protams, darīs to pašu. 244 00:12:22,840 --> 00:12:25,132 Tas vienkārši izmanto papildu mainīgo, ko sauc par favorite . 245 00:12:25,132 --> 00:12:27,706 Ja es pārvietojos šeit šeit, ritinu uz augšu, palaižu programmu 246 00:12:27,706 --> 00:12:30,280 vēlreiz, es atgriežos pie tiem pašiem datiem. 247 00:12:30,280 --> 00:12:34,686 Taču šis ir atspēriena punkts uz kaut ko, kas ir vēl jaudīgāks 248 00:12:34,686 --> 00:12:39,093 saistībā ar Python atbalstu CSV failiem, jo jums nav vienkārši 249 00:12:39,093 --> 00:12:43,500 jāuzskata atgriešanas vērtība kā saraksts ar 0 un 1 un 2. 250 00:12:43,500 --> 00:12:47,546 Tātad, tikai intuitīvi domājot, kāpēc šis varbūt nav labākais 251 00:12:47,546 --> 00:12:51,593 dizains, lai jūs, programmētājs, atgrieztu datus sarakstā, kas ir 252 00:12:51,593 --> 00:12:55,640 skaitliski indeksēts ar 0, 1, 2? 253 00:12:55,640 --> 00:12:59,760 Tas nepārprotami darbojas, taču kritizējiet to. 254 00:12:59,760 --> 00:13:00,890 Kas varētu noiet greizi? 255 00:13:00,890 --> 00:13:03,282 Kas ir nedaudz slikti izstrādāts? 256 00:13:03,282 --> 00:13:04,169 Jā? 257 00:13:04,169 --> 00:13:10,945 kāds ir pasūtījums [NEdzirdams] 258 00:13:10,945 --> 00:13:11,820 DEIVIDS MALANS: Tieši tā. 259 00:13:11,820 --> 00:13:15,090 Tātad, jā, tāpēc jums ir jāatkārto — jums ir jāatceras, kurā kolonnā 260 00:13:15,090 --> 00:13:18,360 dati faktiski atrodas. 261 00:13:18,360 --> 00:13:22,020 Un nedod Dievs, lai jūs sadarbotos ar kādu citu izklājlapā. 262 00:13:22,020 --> 00:13:24,620 Ja esat izmantojis Google izklājlapas, varat pārvietot kolonnas, 263 00:13:24,620 --> 00:13:27,220 iespējams, tikai tāpēc, ka vēlaties vizuāli pārkārtot lietas. 264 00:13:27,220 --> 00:13:29,530 Un, ja jūs to darāt un pēc tam kāds cits lejupielādēs tos pašus 265 00:13:29,530 --> 00:13:31,840 datus, viss viņa kods sabojāsies. 266 00:13:31,840 --> 00:13:33,360 Tātad tas ir tikai ļoti slikts dizains. 267 00:13:33,360 --> 00:13:35,974 Tas ir trausls tikai tāpēc, ka jūs savā veidā izmantojat goda 268 00:13:35,974 --> 00:13:38,588 sistēmu, kas nozīmē datus, kurus vēlaties. 269 00:13:38,588 --> 00:13:41,130 Vai nebūtu jauki, ja tā varētu būt nedaudz skaidrāka ? 270 00:13:41,130 --> 00:13:47,130 Atcerieties, ka šī faila pati pirmā rindiņa patiesībā ir šī. 271 00:13:47,130 --> 00:13:48,930 Un es šoreiz apturēju izvadi, lai mēs pēc izvēles varētu redzēt 272 00:13:48,930 --> 00:13:50,730 vairāk. 273 00:13:50,730 --> 00:13:51,960 Es tikko pārlasīju favorites.py. 274 00:13:51,960 --> 00:13:55,050 Un ievērojiet, ka viena no šīm lietām nav līdzīga otrai. 275 00:13:55,050 --> 00:13:59,070 Katra izvade bija vai nu scratch, vai C, vai Python, izņemot šo pirmo. 276 00:13:59,070 --> 00:14:00,855 Kāpēc es šeit redzu vārdu ‘valoda’? 277 00:14:03,610 --> 00:14:05,860 No kurienes radās valoda? 278 00:14:05,860 --> 00:14:08,230 Jums nebija iespējas manuāli ievadīt. 279 00:14:08,230 --> 00:14:09,372 Nē. 280 00:14:09,372 --> 00:14:10,330 No kurienes tas radās? 281 00:14:10,330 --> 00:14:11,030 Jā. 282 00:14:11,030 --> 00:14:11,850 Mērķauditorija: Tā būtu virsraksts. 283 00:14:11,850 --> 00:14:12,630 DEIVIDS MALANS: Jā, virsraksts. 284 00:14:12,630 --> 00:14:15,243 Pati pirmā rindiņa failā, kas pēc cilvēciskās vienošanās parasti 285 00:14:15,243 --> 00:14:17,856 tikai definē, ko kolonnas attēlo, lai tajā būtu kāda cilvēkiem 286 00:14:17,856 --> 00:14:20,470 noderīga informācija. 287 00:14:20,470 --> 00:14:23,090 Šobrīd tas nav īsti paredzēts kā daļa no mana iznākuma, tāpēc ir 288 00:14:23,090 --> 00:14:25,710 veids, kā to izlaist. 289 00:14:25,710 --> 00:14:27,545 Ja vēlaties izlaist pirmo rindu, faktiski varat darīt kaut ko līdzīgu 290 00:14:27,545 --> 00:14:29,380 šim. 291 00:14:29,380 --> 00:14:32,560 Varat pateikt nākamo rindu, un šī rinda tiks ignorēta. 292 00:14:32,560 --> 00:14:35,520 Tad es tiešām sāku ar katru rindu pēc tam. 293 00:14:35,520 --> 00:14:37,995 Bet ir labāks veids, kā to risināt. 294 00:14:37,995 --> 00:14:41,712 Tas atbrīvos no izvades rindas, taču ļaujiet man izmantot citu CSV 295 00:14:41,712 --> 00:14:45,430 pakotnes līdzekli, kas tikai padarīs to nedaudz kārtīgāku . 296 00:14:45,430 --> 00:14:47,140 Tāpēc ļaujiet man šeit notīrīt termināļa logu. 297 00:14:47,140 --> 00:14:49,830 Ļaujiet man atsaukt šo nākamo lietu, ko tikko pievienoju. 298 00:14:49,830 --> 00:14:53,973 Un tā vietā, lai izmantotu lasītāju, ļaujiet man izmantot vārdnīcas 299 00:14:53,973 --> 00:14:58,116 lasītāju, saīsināti diktātu lasītāju, kas tagad man atgriezīs visu 300 00:14:58,116 --> 00:15:02,260 rindu ekvivalentu pa vienam. 301 00:15:02,260 --> 00:15:04,720 Tāpēc es to joprojām varu saukt par lasītāju tāpat kā iepriekš. 302 00:15:04,720 --> 00:15:08,930 Taču, kā norāda nosaukums, šis lasītājs atgriezīs nevis sarakstu pēc 303 00:15:08,930 --> 00:15:13,140 saraksta pēc saraksta, bet gan vārdnīcu, vārdnīcu, vārdnīcu. 304 00:15:13,140 --> 00:15:16,210 Un atcerieties, ka vārdnīca ir tikai galveno vērtību pāru kolekcija. 305 00:15:16,210 --> 00:15:17,640 Tātad, ko tas nozīmē? 306 00:15:17,640 --> 00:15:18,390 Kas ir atslēgas? 307 00:15:18,390 --> 00:15:19,480 Kādas ir vērtības? 308 00:15:19,480 --> 00:15:24,210 Tagad, kad es izmantoju vārdnīcu lasītāju, es to tiešām varu izdarīt. 309 00:15:24,210 --> 00:15:27,420 Tā vietā, lai goda sistēmā atcerētos, ka vēlos pirmo kolonnu, es 310 00:15:27,420 --> 00:15:30,630 tagad varu uzskatīt rindu nevis kā sarakstu, bet gan kā vārdnīcu. 311 00:15:30,630 --> 00:15:33,390 Un tas nozīmē, ka es varu šeit ieiet un teikt "language." . Un mēs to 312 00:15:33,390 --> 00:15:36,150 redzējām sestajā nedēļā. 313 00:15:36,150 --> 00:15:40,470 Python ļauj indeksēt vārdnīcās, izmantojot kvadrātiekavu notācijas 314 00:15:40,470 --> 00:15:44,790 virknēs vai STR iekšpusē, tāpat kā saraksti pieļauj skaitļus. 315 00:15:44,790 --> 00:15:48,180 Bet tagad es domāju, ka tas būs nedaudz izturīgāks. 316 00:15:48,180 --> 00:15:52,830 Ja es to palaistu vēlreiz, Python no favorites.py darbojās labi. 317 00:15:52,830 --> 00:15:54,705 Un ļaujiet man arī apturēt izvadi, izmantojot šo programmu ar 318 00:15:54,705 --> 00:15:56,580 nosaukumu more. 319 00:15:56,580 --> 00:15:58,600 Tagad es pat neredzu galveni. 320 00:15:58,600 --> 00:16:02,042 Tagad ikviens, kurš strādā ar Python, uzrakstīja šīs pakotnes kodu, 321 00:16:02,042 --> 00:16:05,484 lai tikai analizētu pirmo koda rindiņu, izmantojiet galveni, kā jūs 322 00:16:05,484 --> 00:16:08,926 to tikko nosaucāt, kā atslēgas, un pēc tam katru reizi, kad 323 00:16:08,926 --> 00:16:12,368 atkārtojat šo cilpu, tas atjaunina vērtības, vērtības, vērtības, bet 324 00:16:12,368 --> 00:16:15,810 atslēgas paliek nemainīgas. 325 00:16:15,810 --> 00:16:20,320 Vai ir kādi jautājumi par šo tehniku? 326 00:16:20,320 --> 00:16:24,206 Pietiek pateikt, ka tas būtu sāpīgi C. 327 00:16:20,320 --> 00:16:28,670 Mērķauditorija: [NEdzirdams] 328 00:16:33,395 --> 00:16:34,270 DEIVIDS MALANS: Tieši tā. 329 00:16:34,270 --> 00:16:38,713 Tāpēc atslēgas vienmēr būs "timestamp, language, and problem." . Taču 330 00:16:38,713 --> 00:16:43,156 katrā šīs cilpas atkārtojumā rindā būs cita vērtību rinda, cita 331 00:16:43,156 --> 00:16:47,600 vērtību rinda, atšķirīga vērtību rinda. 332 00:16:47,600 --> 00:16:50,870 Tātad, ja vēlaties, jūs atgūsit vienu vārdnīcu katram skolēnam, kurš 333 00:16:50,870 --> 00:16:54,140 ir iesniedzis Google veidlapu, atkārtojot to tur. 334 00:16:54,140 --> 00:16:54,640 Labi. 335 00:16:54,640 --> 00:16:58,390 Tātad, ja mums ir šī iespēja, kāpēc gan mēs nepārietu uz to, kā 336 00:16:58,390 --> 00:17:02,140 neizmantot tikai vārdnīcas lasītāju, kas padara kodu nedaudz 337 00:17:02,140 --> 00:17:05,890 izturīgāku. 338 00:17:05,890 --> 00:17:08,599 Jo tagad, ja jūs pārvietojat kolonnas, nekas nav liels. 339 00:17:08,599 --> 00:17:11,170 Nav svarīgi, vai skaitliskie indeksi mainās. 340 00:17:11,170 --> 00:17:13,660 Tā vietā joprojām varat izmantot šos atslēgvārdus. 341 00:17:13,660 --> 00:17:15,460 Bet tagad faktiski analizēsim datus. 342 00:17:15,460 --> 00:17:18,619 Es vienkārši runāju , kas nevienam neatrisina problēmas. 343 00:17:18,619 --> 00:17:22,204 Aprēķināsim Scratch, C un Python popularitāti un redzēsim, ko visi 344 00:17:22,204 --> 00:17:25,790 šeit domā. 345 00:17:25,790 --> 00:17:26,290 Labi. 346 00:17:26,290 --> 00:17:27,470 Tātad, kā es to varētu izdarīt? 347 00:17:27,470 --> 00:17:29,890 Ļaujiet man turpināt un darīt to šeit. 348 00:17:29,890 --> 00:17:33,880 Pirms es sāku atkārtot, ļaujiet man dot sev, teiksim, trīs mainīgos. 349 00:17:33,880 --> 00:17:35,500 Un, lai lietas būtu vienkāršas, es pateikšu vienu mainīgo, ko sauc 350 00:17:35,500 --> 00:17:37,120 par Scratch. 351 00:17:37,120 --> 00:17:40,270 Iestatiet to vienādu ar 0; 0 skolēniem līdz šim. 352 00:17:40,270 --> 00:17:44,200 C būs vienāds ar 0 un Python būs vienāds ar 0. 353 00:17:44,200 --> 00:17:46,720 Ir nedaudz skaistāks veids, kā to izdarīt, jo tas ir kā trīs koda 354 00:17:46,720 --> 00:17:49,240 rindiņas, lai paveiktu kaut ko ļoti vienkāršu. 355 00:17:49,240 --> 00:17:53,980 Varat arī izmantot Python, bet ne C , dariet to Scratch comma C comma 356 00:17:53,980 --> 00:17:58,720 Python equals 0 comma 0 357 00:17:58,720 --> 00:18:02,168 Tik nedaudz elegantāks, lai to visu ievietotu vienā rindā. 358 00:18:02,168 --> 00:18:04,210 Bet tagad darīsim kaut ko interesantāku. 359 00:18:04,210 --> 00:18:06,265 Septītajā rindā es joprojām izdomāšu, kas ir šī brīža iecienītākā 360 00:18:06,265 --> 00:18:08,320 valoda. 361 00:18:08,320 --> 00:18:11,740 Un tagad es tikai gatavojos veikt dažas nosacītas pārbaudes. 362 00:18:11,740 --> 00:18:15,865 Kā būtu, ja favorite ir vienāds ar "Scratch," ;, turpināsim un 363 00:18:15,865 --> 00:18:19,990 palielināt Scratch par 1. 364 00:18:19,990 --> 00:18:21,775 Mēs nevaram to izdarīt plus plus Python, bet mēs varam izdarīt plus 365 00:18:21,775 --> 00:18:23,560 vienāds ar 1. 366 00:18:23,560 --> 00:18:27,130 Kā būtu ar elif if favorite equals equals C , tad darīsim C plus 367 00:18:27,130 --> 00:18:30,700 vienāds ar 1. 368 00:18:30,700 --> 00:18:32,063 Mēs varētu darīt else . 369 00:18:32,063 --> 00:18:33,730 Tas patiesībā ir labs dizaina jautājums. 370 00:18:33,730 --> 00:18:34,840 Vai man darīt else ? 371 00:18:34,840 --> 00:18:36,880 Vai man vajadzētu darīt elifu? 372 00:18:36,880 --> 00:18:39,250 Šeit ir kādi instinkti? 373 00:18:39,250 --> 00:18:40,824 Jā. 374 00:18:40,824 --> 00:18:43,259 Mērķauditorija: [NEdzirdams] 375 00:18:46,322 --> 00:18:48,030 DEIVIDS MALANS: Jā, tiešām labi instinkti. 376 00:18:48,030 --> 00:18:51,107 Ja kāds nākamnedēļ pievienos veidlapai citu valodu, jo šodien mēs 377 00:18:51,107 --> 00:18:54,185 acīmredzot ieviesīsim citu valodu, jūs nevēlaties, lai jūsu kods 378 00:18:54,185 --> 00:18:57,262 tagad mākslīgi palielinātu Python punktu skaitu tikai tāpēc, ka jūs 379 00:18:57,262 --> 00:19:00,340 sajaucat vairākas valodas. . 380 00:19:00,340 --> 00:19:04,010 Tāpēc es piekrītu, ka aizsardzības veids un labāks veids, kā rakstīt 381 00:19:04,010 --> 00:19:07,680 šo kodu, būtu elif favorite equals equals Python. 382 00:19:07,680 --> 00:19:10,590 Pēc tam turpināsim un palielināsim Python plus equals 1 383 00:19:10,590 --> 00:19:13,110 Un, ja nākamnedēļ būs jauna valoda, mums acīmredzot būs jāatjaunina 384 00:19:13,110 --> 00:19:15,630 kods, bet vismaz mēs neskaitām nepareizi. 385 00:19:15,630 --> 00:19:17,130 Mums vienkārši trūkst jaunās valodas. 386 00:19:17,130 --> 00:19:19,210 Tāpēc es domāju, ka tas ir nedaudz izturīgāks. 387 00:19:19,210 --> 00:19:21,826 Labi, tagad šīs programmas pašā apakšā un ārpus cilpas, kad esmu 388 00:19:21,826 --> 00:19:24,443 pabeidzis skaitīšanu, ļaujiet man turpināt un izdrukāt, izmantojot 389 00:19:24,443 --> 00:19:27,060 dažas f virknes. 390 00:19:27,060 --> 00:19:31,450 Kā ir ar kopējo to cilvēku skaitu, kuru iecienītākais ir Scratch? 391 00:19:31,450 --> 00:19:34,890 Tātad šī ir tikai sestās nedēļas f virknes sintakse. 392 00:19:34,890 --> 00:19:38,940 Ļaujiet man izdrukāt citu f virkni, kas paredzēta C. 393 00:19:34,890 --> 00:19:39,975 Un es, protams, salieku mainīgos lielumus figūriekavās , kas visi ir 394 00:19:39,975 --> 00:19:45,060 mazie, bet angļu vārdiem es rakstu lielos burtus. 395 00:19:45,060 --> 00:19:48,030 Veicam pēdējo ar f Python kolu un pēc tam figūriekavās Python 396 00:19:48,030 --> 00:19:51,000 nosēdzošās pēdiņas . 397 00:19:51,000 --> 00:19:52,105 Un es domāju, ka esmu pabeidzis. 398 00:19:52,105 --> 00:19:53,980 Tāpēc ļaujiet man uz brīdi paslēpt savu termināli. 399 00:19:53,980 --> 00:19:55,290 Šeit ir visa programma. 400 00:19:55,290 --> 00:19:56,730 Tās pašas lietas, kas iepriekš. 401 00:19:56,730 --> 00:19:58,980 Atveriet favorites.csv . 402 00:19:58,980 --> 00:20:00,930 Atveriet to tālāk ar vārdnīcas lasītāju, lai veiktu apstrādi mūsu 403 00:20:00,930 --> 00:20:02,880 vietā. 404 00:20:02,880 --> 00:20:06,330 Inicializējiet trīs mainīgos uz 0, lai mums būtu ar ko rēķināties. 405 00:20:06,330 --> 00:20:09,300 Un pēc tam atkārtojiet failu rindu pēc rindas. 406 00:20:09,300 --> 00:20:11,855 Un šī ir tikai sava veida nedēļas vienas stila nosacījuma loģika, 407 00:20:11,855 --> 00:20:14,410 kaut arī Python valodā, lietu skaitīšana. 408 00:20:14,410 --> 00:20:14,910 Labi. 409 00:20:14,910 --> 00:20:17,080 Tātad, kā mēs tagad varam to izpildīt? 410 00:20:17,080 --> 00:20:18,450 Ļaujiet man atgriezties savā terminālī. 411 00:20:18,450 --> 00:20:20,610 Python favorites.py. 412 00:20:20,610 --> 00:20:22,050 Un te nu tas ir . 413 00:20:22,050 --> 00:20:26,690 Šobrīd visi, kas ziņo tiešsaistē , izmantojot Google Form , viņu 414 00:20:26,690 --> 00:20:31,330 iecienītākās valodas ir interesantas. 415 00:20:31,330 --> 00:20:34,510 Tas ir diezgan interesanti arī pēc vienas Python nedēļas. 416 00:20:34,510 --> 00:20:36,310 Bet Scratch tur ir veselīgs sāncensis. 417 00:20:36,310 --> 00:20:38,210 Daudz C. 418 00:20:36,310 --> 00:20:39,718 Tātad šeit ir diezgan labs sajaukums.Vai tas būs labākais veids, kā 419 00:20:39,718 --> 00:20:43,127 rakstīt šo programmu ilgtermiņā? 420 00:20:43,127 --> 00:20:45,478 Kā jau atzīmējāt, ja nākamnedēļ būs jauna valoda, šonedēļ mums tā būs 421 00:20:45,478 --> 00:20:47,830 pastāvīgi jāatjaunina. 422 00:20:47,830 --> 00:20:51,610 Un šeit jums vajadzētu ļaut prātam ieskatīties nākotnē 423 00:20:51,610 --> 00:20:55,510 Ja mums ir ceturtā valoda, piektā valoda, sestā, septītā, astotā, 424 00:20:55,510 --> 00:20:59,410 kuriem aspektiem šeit varētu būt kāda koda smarža? 425 00:20:59,410 --> 00:21:04,310 Tas, iespējams, nav labākais dizains, lai mūs sagatavotu nākotnei. 426 00:21:04,310 --> 00:21:07,480 Kas varētu būt labāks par šo? 427 00:21:07,480 --> 00:21:08,417 Jā. 428 00:21:08,417 --> 00:21:09,880 AUDITORIJA: Piektajai rindai jāpievieno valoda. 429 00:21:09,880 --> 00:21:10,330 DEIVIDS MALANS: Jā. 430 00:21:10,330 --> 00:21:12,288 Mums ir jāturpina pievienot valoda piektajai rindai. 431 00:21:12,288 --> 00:21:13,340 Un labi, tas nav nekas liels. 432 00:21:13,340 --> 00:21:16,690 Mēs varētu pievienot SQL šodien un varbūt JavaScript nākamnedēļ. 433 00:21:16,690 --> 00:21:19,070 Bet ikreiz, kad koda rindiņa, loģikas līnija,būs pievienota tā 434 00:21:19,070 --> 00:21:21,450 vienkārši izaugs ārpus kontroles. 435 00:21:21,450 --> 00:21:23,950 Mums ir bijusi šī tērzēšana pāris reizes ar atšķirīgu sintaksi. 436 00:21:23,950 --> 00:21:25,700 Iespējams, ka ir labāks veids. 437 00:21:25,700 --> 00:21:26,440 Tātad darīsim tā. 438 00:21:26,440 --> 00:21:29,480 Tā vietā, lai izmantotu šos atsevišķos mainīgos, mēs varētu izmantot 439 00:21:29,480 --> 00:21:32,520 sarakstu, taču saraksts būtu nedaudz mulsinošs, jo ko nozīmē iekava 440 00:21:32,520 --> 00:21:35,560 0? 441 00:21:35,560 --> 00:21:37,090 Kas ir 1. iekava, 2. iekava? 442 00:21:37,090 --> 00:21:39,603 Bet vārdnīca, atcerieties, ir šis Šveices armijas datu struktūru 443 00:21:39,603 --> 00:21:42,116 nazis, ar kuru jūs varat saistīt jebko ar jebko citu, atslēgas ar 444 00:21:42,116 --> 00:21:44,630 vērtībām. 445 00:21:44,630 --> 00:21:48,057 Tāpēc es uzdrošinos teikt, ka tīrāks veids, kā atrisināt šo problēmu, 446 00:21:48,057 --> 00:21:51,485 kas liek mums mazāk strādāt vai vēlāk apjukt, būtu izveidot jaunu 447 00:21:51,485 --> 00:21:54,912 mainīgo ar nosaukumu counts, ja mēs to darām, saskaitot lietas un 448 00:21:54,912 --> 00:21:58,340 vienkārši iestatīt to vienādu ar tukšu vārdnīca. 449 00:21:58,340 --> 00:22:01,226 Un jūs varat burtiski teikt dict ar atvērtajām iekavām, aizvērtām 450 00:22:01,226 --> 00:22:04,113 iekavām un neko, vai Python valodā vienkārši izmantojiet atvērtas un 451 00:22:04,113 --> 00:22:07,000 aizvērtas figūriekavas , kurās nav nekā. 452 00:22:07,000 --> 00:22:11,320 Tas man dod tukšu vārdnīcu, tāpat kā kvadrātiekavas man dod sarakstu . 453 00:22:11,320 --> 00:22:13,990 Tagad manai loģikai šeit ir nedaudz jāmainās. 454 00:22:13,990 --> 00:22:16,570 Bet patīkami ir tas, ka man nav vajadzīgs viens nosacījums katrai 455 00:22:16,570 --> 00:22:19,150 valodai. 456 00:22:19,150 --> 00:22:21,865 Jo atkal, ja mums ir ceturtā, piektā, sestā, arī šī koda daļa nedaudz 457 00:22:21,865 --> 00:22:24,580 izaugs nekontrolējama. 458 00:22:24,580 --> 00:22:26,570 Tāpēc es varu atbrīvoties no šī šeit. 459 00:22:26,570 --> 00:22:29,180 Un tas, ko es domāju, ka es darīšu, ir pateikt to. 460 00:22:29,180 --> 00:22:33,800 Neatkarīgi no pašreizējās favorite faila rindas, kāpēc mēs 461 00:22:33,800 --> 00:22:38,420 neiedziļināmies mūsu skaita mainīgajā ar šo atslēgu ? 462 00:22:38,420 --> 00:22:40,303 Un atkal favorite ir mainīgais. 463 00:22:40,303 --> 00:22:44,560 Tas nav "favorite." . Tas būs Scratch, C vai Python. 464 00:22:44,560 --> 00:22:48,150 Un kāpēc tad mēs neturpinām un nepalielinām neatkarīgi no šī skaitļa 465 00:22:48,150 --> 00:22:51,740 vērtības, kas ir šajā atslēgā? 466 00:22:51,740 --> 00:22:53,500 Tagad tas ir tehniski kļūdains. 467 00:22:53,500 --> 00:22:57,140 Mēs esam ļoti tuvu, bet ir kļūda. 468 00:22:57,140 --> 00:23:00,350 Vai kāds vēlas uzminēt, kas par kļūdu? 469 00:23:00,350 --> 00:23:00,890 Jā. 470 00:23:00,890 --> 00:23:04,215 Mērķauditorija: [NEdzirdams] 471 00:23:08,490 --> 00:23:11,640 DEIVIDS MALANS: Labs jautājums, kas tomēr atbild uz manu jautājumu. 472 00:23:11,640 --> 00:23:12,685 Tātad nē. 473 00:23:12,685 --> 00:23:14,310 Jūsu aprakstītā maģija nenotiks. 474 00:23:14,310 --> 00:23:19,200 Un, atkārtojot hipotēzi, vai tas automātiski izveidos atslēgu katrai 475 00:23:19,200 --> 00:23:24,090 valodai, kuru mēģināsim iespraust šajās kvadrātiekavās? 476 00:23:24,090 --> 00:23:25,140 Īsā atbilde nē. 477 00:23:25,140 --> 00:23:28,937 Iespējams, ka tas radīs atslēgas kļūdu — vienu no tiem izsekošanas 478 00:23:28,937 --> 00:23:32,735 kļūdu ziņojumiem, ko, iespējams, jau esat redzējis klasē vai problēmu 479 00:23:32,735 --> 00:23:36,532 kopās, un, ja Scratch vārdnīcā iepriekš nav parādījies vai C vai 480 00:23:36,532 --> 00:23:40,330 Python, tad vārdnīcai nav ne jausmas, par ko jūs runājat. 481 00:23:40,330 --> 00:23:43,115 Tāpēc es domāju, ka mums joprojām ir vajadzīga nosacīta loģika, taču 482 00:23:43,115 --> 00:23:45,900 tā ar katru valodu kļūs garāka un garāka. 483 00:23:45,900 --> 00:23:47,860 Es domāju, ka mēs, iespējams, vēlamies to darīt. 484 00:23:47,860 --> 00:23:52,626 Ja pašreizējais favorite ir iekļauts skaitīšanas vārdnīcā un Python 485 00:23:52,626 --> 00:23:57,393 veidā var vienkārši pateikt, vai šajā vārdnīcā ir šī atslēga, tad 486 00:23:57,393 --> 00:24:02,160 droši veiciet counts favorite plus equals 1 487 00:24:02,160 --> 00:24:05,250 Citādi, pēc jūsu pieņēmumiem tagad, ko es vēlos darīt. 488 00:24:05,250 --> 00:24:10,330 Counts favorites equals, jā , 1 489 00:24:10,330 --> 00:24:13,480 Tāpēc inicializējiet pilnīgi jaunu atslēgu, lai iegūtu pilnīgi jaunu 490 00:24:13,480 --> 00:24:16,630 vērtību 1, jo es acīmredzot tikai redzu šo valodu. 491 00:24:16,630 --> 00:24:19,190 Pretējā gadījumā palieliniet atkal un atkal. 492 00:24:19,190 --> 00:24:22,390 Un tagad, šeit , man tikai nedaudz jāpielāgo sava sintakse. 493 00:24:22,390 --> 00:24:26,540 Man nav nepieciešams manuāli izdrukāt visas šīs lietas pa vienai. 494 00:24:26,540 --> 00:24:30,470 Es domāju, ka es tiešām varu aizmukt ar citu cilpu pašā apakšā. 495 00:24:30,470 --> 00:24:31,480 Tātad, kā es to darītu? 496 00:24:31,480 --> 00:24:36,655 Katrai izlasei šajos aprēķinos, un tas atkal ir Python veids, kā 497 00:24:36,655 --> 00:24:41,830 atkārtot visus vārdnīcas taustiņus, izdrukājiet, izmantojot f virkni 498 00:24:41,830 --> 00:24:47,005 neatkarīgi no pašreizējās izlases — Scratch, C vai Python, un pēc tam 499 00:24:47,005 --> 00:24:52,180 kolu un pēc tam noskaidrojiet, kāds ir tā skaits. 500 00:24:52,180 --> 00:24:55,545 To var izdarīt, ieejot skaitīšanas vārdnīcā, apskatot favorite key un 501 00:24:55,545 --> 00:24:58,910 atgūstot tā vērtību. 502 00:24:58,910 --> 00:25:00,190 Tāpēc es aiztaisu figūriekavas . 503 00:25:00,190 --> 00:25:01,060 Es noslēdzu pēdiņas . 504 00:25:01,060 --> 00:25:02,875 Un, lai gan tas šobrīd izskatās neglīts, tagad tas ir daudz 505 00:25:02,875 --> 00:25:04,690 dinamiskāks. 506 00:25:04,690 --> 00:25:07,705 Jo, ja mēs rīt pievienosim SQL CSV failam vai pievienosim JavaScript 507 00:25:07,705 --> 00:25:10,720 nākamnedēļ, tas vienkārši darbosies. 508 00:25:10,720 --> 00:25:12,760 Tagad tas turpinās darboties automātiski. 509 00:25:12,760 --> 00:25:15,140 Viss, ko es mainu, ir Google Form , nevis mans faktiskais kods. 510 00:25:15,140 --> 00:25:15,640 Labi. 511 00:25:15,640 --> 00:25:17,620 Izmēģināsim Python no favorites.py. 512 00:25:17,620 --> 00:25:19,150 Sakrusto pirkstus kā vienmēr. 513 00:25:19,150 --> 00:25:23,020 Un tagad ir pašreizējie dati. 514 00:25:23,020 --> 00:25:25,270 Jautājumi par šo kodu šeit? 515 00:25:25,270 --> 00:25:26,195 Jā. 516 00:25:26,195 --> 00:25:28,093 Mērķauditorija: [NEdzirdams] 517 00:25:28,093 --> 00:25:29,510 DEIVIDS MALANS: Tiešām labs jautājums. 518 00:25:29,510 --> 00:25:33,040 Ko darīt, ja vēlaties to izdrukāt noteiktā secībā? 519 00:25:33,040 --> 00:25:35,530 Es varētu jums piedāvāt dažus risinājumus. 520 00:25:35,530 --> 00:25:40,850 Ja vēlaties to izdrukāt, tas jau ir nejauši alfabēta secībā. 521 00:25:40,850 --> 00:25:43,630 Tātad jūs to saņēmāt bez maksas, lai gan šeit tas ir tikai nejaušība. 522 00:25:43,630 --> 00:25:45,010 Bet ir veids, kā to izdarīt. 523 00:25:45,010 --> 00:25:47,320 Un ļaujiet man ierosināt, lai mēs dotos šeit uz manu cilpu. 524 00:25:47,320 --> 00:25:50,057 Un es skaidri izmantoju funkciju, kuru jūs, iespējams, vēl neesat 525 00:25:50,057 --> 00:25:52,795 redzējis Python, bet to burtiski sauc par , kas aizņem vai nu 526 00:25:52,795 --> 00:25:55,532 sarakstu, vai šajā gadījumā vārdnīcu un pēc noklusējuma kārto to pēc 527 00:25:55,532 --> 00:25:58,270 atslēgas alfabētiskā secībā. 528 00:25:58,270 --> 00:26:00,880 Ja mana intuīcija ir pareiza, tas nemainīs izvadi, jo tas jau ir 529 00:26:00,880 --> 00:26:03,490 alfabētisks. 530 00:26:03,490 --> 00:26:05,660 Bet, ja lasāt sorted function dokumentāciju, iespējams, ir 531 00:26:05,660 --> 00:26:07,830 nepieciešami vairāki parametri, no kuriem daži ir nosaukti par 532 00:26:07,830 --> 00:26:10,000 parametriem. 533 00:26:10,000 --> 00:26:11,870 Un tāpēc jūs patiešām varat to izdarīt. 534 00:26:11,870 --> 00:26:14,944 Ja vēlaties skaitīt, bet vēlaties mainīt secību kāda iemesla dēļ 535 00:26:14,944 --> 00:26:18,018 šeit, lai tā būtu apgrieztā alfabētiskā secībā. 536 00:26:18,018 --> 00:26:19,744 Tagad ļaujiet man turpināt un palaist šo vēlreiz, un es saglabāšu 537 00:26:19,744 --> 00:26:21,470 iepriekšējo izvadi ekrānā. 538 00:26:21,470 --> 00:26:27,000 Enter , un tagad tas ir atpakaļ alfabētiskā secībā, ja vēlaties. 539 00:26:27,000 --> 00:26:29,130 Citi jautājumi par šo šeit? 540 00:26:31,770 --> 00:26:33,830 Nē? 541 00:26:33,830 --> 00:26:39,930 Kā būtu, ja mēs pārejam uz mainīgu šķirošanu pēc vērtības. 542 00:26:39,930 --> 00:26:42,235 Un tas uz īsu brīdi nedaudz ātri saasināsies, bet pēc tam mēs to 543 00:26:42,235 --> 00:26:44,540 atkal mazināsim. 544 00:26:44,540 --> 00:26:47,600 Ņemiet vērā, ka šobrīd tas patiešām tiek kārtots pēc atslēgas. 545 00:26:47,600 --> 00:26:51,363 Ko darīt, ja, it īpaši, ja man ir daudz datu, būtu jauki izveidot 546 00:26:51,363 --> 00:26:55,126 labāko 10 sarakstu vai šajā gadījumā labāko trīs sarakstu un faktiski 547 00:26:55,126 --> 00:26:58,890 redzēt skaitu secībā , kādas ir šīs populārās vērtības. 548 00:26:58,890 --> 00:27:00,620 Tātad tas nav C, Python, Scratch. 549 00:27:00,620 --> 00:27:03,665 Ideālā gadījumā tam vajadzētu būt Python, pēc tam C, pēc tam Scratch 550 00:27:03,665 --> 00:27:06,710 vērtību un lieluma dēļ. 551 00:27:06,710 --> 00:27:08,010 Tātad, kā es varu to izdarīt? 552 00:27:08,010 --> 00:27:12,967 Izrādās, ka ir vēl viena atslēga, vēl viens parametrs, ko varat nodot 553 00:27:12,967 --> 00:27:17,925 sorted function , kas parasti tiek ieviesta kā pati funkcija. 554 00:27:17,925 --> 00:27:19,633 Un tāpēc es turpināšu un darīšu to. 555 00:27:19,633 --> 00:27:21,931 Es uz laiku definēšu funkciju ar nosaukumu get value , lai atvieglotu 556 00:27:21,931 --> 00:27:24,230 savu dzīvi. 557 00:27:24,230 --> 00:27:26,810 Un šai get value funkcijai , es teikšu, būs nepieciešams valodas 558 00:27:26,810 --> 00:27:29,390 parametrs. 559 00:27:29,390 --> 00:27:32,395 Un tad viss, ko es darīšu, ir atgriezt visu uzskaitījumu , kas ir 560 00:27:32,395 --> 00:27:35,400 šajā valodā. 561 00:27:35,400 --> 00:27:39,066 Tātad ārpus konteksta šī ir ļoti vienkārša funkcija, ko varat 562 00:27:39,066 --> 00:27:42,733 izmantot tādā valodā kā Scratch, C vai Python, tā tikai pastāstīs, 563 00:27:42,733 --> 00:27:46,400 kāds ir uzskaitījums tajā vārdnīcā, ko sauc par counts. 564 00:27:46,400 --> 00:27:50,390 Bet ko es varu darīt tagad, šeit, manā nesen ieviestajā call to sort 565 00:27:50,390 --> 00:27:54,380 , es varu pateikt, ko izmantot kā atslēgu. 566 00:27:54,380 --> 00:27:57,710 Tā vietā, lai burtiski izmantotu atslēgu Scratch, C, Python, es varu 567 00:27:57,710 --> 00:28:01,040 ignorēt šo uzvedību un pateikt, vai jūs zināt, ko? 568 00:28:01,040 --> 00:28:04,465 Lai noskaidrotu, pēc kā kārtot, turpiniet un izsauciet šo funkciju ar 569 00:28:04,465 --> 00:28:07,890 nosaukumu get value . 570 00:28:07,890 --> 00:28:11,155 Ņemiet vērā, ka es neesmu ievietojis iekavas aiz get value, jo es 571 00:28:11,155 --> 00:28:14,420 nevēlos izsaukt vērtību get value tieši tad un tur. 572 00:28:14,420 --> 00:28:18,390 Es vēlos nodot get value funkciju kā pašu argumentu sorted function , 573 00:28:18,390 --> 00:28:22,360 lai sorted function , ko pirms gadiem uzrakstīja Python lietotāji, 574 00:28:22,360 --> 00:28:26,330 varētu atkal un atkal un atkal izsaukt manu vērtību iegūšanas 575 00:28:26,330 --> 00:28:30,300 versiju, mēģinot kārtot šos faktiskos datus. 576 00:28:30,300 --> 00:28:33,325 Tāpēc tagad, ja es to pievienošu un atstāju apgriezto vērtību vienāds 577 00:28:33,325 --> 00:28:36,350 ar patiesu, redzēsim, kas notiks. 578 00:28:36,350 --> 00:28:38,240 Python no favorites.py. 579 00:28:38,240 --> 00:28:38,810 Enter . 580 00:28:38,810 --> 00:28:42,410 Un tagad es saņēmu savu top 10 vai šajā gadījumā trīs labāko sarakstu. 581 00:28:42,410 --> 00:28:46,584 Un, ja man būtu sarežģītāki dati ar vairākām kolonnām, kas man 582 00:28:46,584 --> 00:28:50,758 patiešām rūp, es pat varētu kārtot tos efektīvāk. 583 00:28:50,758 --> 00:28:53,508 Bet ļaujiet man to nedaudz iztīrīt, lai jūs to redzētu, lai gan mēs 584 00:28:53,508 --> 00:28:56,259 tos neizmantosim tik bieži CS50 līdz nodarbības beigām, un tie atkal 585 00:28:56,259 --> 00:28:59,010 parādīsies. 586 00:28:59,010 --> 00:29:01,566 Tehniski tas ir nedaudz — šis ne vienmēr ir labākais dizains, lai 587 00:29:01,566 --> 00:29:04,123 visu šo laiku pavadītu, ieviešot funkciju un pēc tam to izmantotu 588 00:29:04,123 --> 00:29:06,680 tikai vienuviet. 589 00:29:06,680 --> 00:29:09,305 Kopumā mēs esam iebilduši, ka jums nav obligāti nepieciešams 590 00:29:09,305 --> 00:29:11,930 mainīgais, ja to izmantosit tikai vienā vietā. 591 00:29:11,930 --> 00:29:14,638 Funkcija īsti nav vajadzīga, ja to izmantosiet tikai vienuviet. 592 00:29:14,638 --> 00:29:17,160 Un šeit mums ir labs kandidāts. 593 00:29:17,160 --> 00:29:20,345 Un tā izrādās Python, ja nevēlaties apgrūtināt sevi ar funkcijas 594 00:29:20,345 --> 00:29:23,530 izveidi, lai to izmantotu vienreiz, varat izveidot tā saukto 595 00:29:23,530 --> 00:29:26,715 anonymous function jeb lambda funkciju, piemēram, pazīstamo lambda 596 00:29:26,715 --> 00:29:29,900 simbolu. 597 00:29:29,900 --> 00:29:32,195 Un lambda funkcijai , sintakse izskatās nedaudz dīvaina, bet jūs 598 00:29:32,195 --> 00:29:34,490 sakāt to. 599 00:29:34,490 --> 00:29:36,080 Jūs burtiski sakāt lambda. 600 00:29:36,080 --> 00:29:39,275 Pēc tam jūs burtiski sakāt argumenta nosaukumu, kuru vēlaties 601 00:29:39,275 --> 00:29:42,470 izmantot, lai šī anonīmā funkcija bez nosaukuma tiktu izmantota. 602 00:29:42,470 --> 00:29:44,430 Tad jums ir kols. 603 00:29:44,430 --> 00:29:47,140 Un tad vienkārši ierakstiet, kādu vēlaties šīs funkcijas atgriešanas 604 00:29:47,140 --> 00:29:49,850 vērtību. 605 00:29:49,850 --> 00:29:51,800 Tu pat nesaki burtiski atgriezties. 606 00:29:51,800 --> 00:29:56,240 Šīs lambda funkcijas ir paredzētas ļoti kodolīgai lietošanai, lai jūs 607 00:29:56,240 --> 00:30:00,680 varētu vienā rindā izteikt kaut ko līdzīgu šim. 608 00:30:00,680 --> 00:30:02,200 Un es atzīstu, ka šī, manuprāt, izskatās noslēpumaināka nekā 609 00:30:02,200 --> 00:30:03,720 iepriekšējā versija. 610 00:30:03,720 --> 00:30:06,710 Bet, kad jūs darbojaties ērtāk ar Python vai citām valodām, kas 611 00:30:06,710 --> 00:30:09,700 atbalsta šo funkciju, tas ļauj jums brīvāk rīkoties ar šādām koda 612 00:30:09,700 --> 00:30:12,690 rindām un tikai nedaudz pievilkt kodu. 613 00:30:12,690 --> 00:30:15,808 Tātad šī rinda šeit, lambda language colon counts language , ir šīs 614 00:30:15,808 --> 00:30:18,927 vienas rindas versija. 615 00:30:18,927 --> 00:30:21,260 Un jums pat nav jāuztraucas, izvēloties tam nosaukumu. 616 00:30:21,260 --> 00:30:23,850 Lambda saka Python, ka es netērēju laiku, domājot par šīs funkcijas 617 00:30:23,850 --> 00:30:26,440 nosaukumu. 618 00:30:26,440 --> 00:30:30,875 Tātad jautājumi par šo Python izmantošanas paņēmienu, lai analizētu 619 00:30:30,875 --> 00:30:35,310 šādus datus? 620 00:30:35,310 --> 00:30:37,900 Vai ir kādi jautājumi? 621 00:30:37,900 --> 00:30:39,860 Ar Python esam gandrīz pabeiguši. 622 00:30:39,860 --> 00:30:42,070 Jautājumi? 623 00:30:42,070 --> 00:30:42,640 Nē? 624 00:30:42,640 --> 00:30:43,390 Labi. 625 00:30:43,390 --> 00:30:45,790 Kāpēc gan nepadarīt lietas nedaudz interesantākas? 626 00:30:45,790 --> 00:30:48,205 Tā kā mums bija daudz interesantāka datu kopa ar problēmām, kuras 627 00:30:48,205 --> 00:30:50,620 esam piešķīruši pēdējo nedēļu laikā. 628 00:30:50,620 --> 00:30:53,955 Kāpēc gan mums neturpināt un, gluži vienkārši, es domāju, ka mēs šeit 629 00:30:53,955 --> 00:30:57,290 uzrakstījām diezgan labu kodu. 630 00:30:57,290 --> 00:31:01,505 Tāpēc es domāju, ka mēs gandrīz varam to nedaudz mainīt, lai teiktu: 631 00:31:01,505 --> 00:31:05,720 paskatīsimies, ja es nevēlos valodu, es gribu uzdevumu . 632 00:31:05,720 --> 00:31:08,115 Un, ja es gribu kārtot nevis pēc valodas, bet pēc uzdevuma , domāju, 633 00:31:08,115 --> 00:31:10,510 ka viss. 634 00:31:10,510 --> 00:31:14,250 Es domāju, ka, ja es šeit kaut ko nepamanītu, vienkārši mainot sleju, 635 00:31:14,250 --> 00:31:17,990 no kuras es lasu datus, un pēc tam konsekventi pārdēvējot savus 636 00:31:17,990 --> 00:31:21,730 mainīgos, lai es zinātu, ko skatos, ko šī programma tagad darīs pēc 637 00:31:21,730 --> 00:31:25,470 šim nelielajām izmaiņām ? 638 00:31:25,470 --> 00:31:26,970 Ko es redzēšu, kad es to vadīšu? 639 00:31:29,693 --> 00:31:31,860 Kas būtu pirmais, ko es redzētu, kad es to palaistu? 640 00:31:34,950 --> 00:31:35,970 Daudziem šodien grūti . 641 00:31:35,970 --> 00:31:36,720 Jā. 642 00:31:36,720 --> 00:31:37,637 AUDITORIJA: Problēma. 643 00:31:37,637 --> 00:31:39,110 DEIVIDS MALANS: Jā. 644 00:31:39,110 --> 00:31:40,330 Galvenā problēma. 645 00:31:40,330 --> 00:31:42,770 Tātad populārākā problēma, par kuru es esmu nedaudz noraizējies, tā 646 00:31:42,770 --> 00:31:45,210 varētu būt hello vai vienkārši Scratch, bet turpināsim un redzēsim. 647 00:31:45,210 --> 00:31:47,700 Tāpēc ļaujiet man turpināt un atvērt termināļa logu. 648 00:31:47,700 --> 00:31:50,670 Es pat palielināšu savu termināļa logu, lai mēs varētu daudz redzēt. 649 00:31:50,670 --> 00:31:54,167 Ļaujiet man turpināt un palaist Python no favorites.py. 650 00:31:54,167 --> 00:31:55,913 Es tagad turpināšu un sakrustoju pirkstus, ka nesajaucu un nospiedīšu 651 00:31:55,913 --> 00:31:57,660 Enter. 652 00:31:57,660 --> 00:31:59,550 Un labi, lieliski. 653 00:31:59,550 --> 00:32:00,480 Mēs sasniedzām maksimumu agri. 654 00:32:00,480 --> 00:32:03,470 Tāpēc Scratch bija vispopulārākā programma saskaņā ar datiem, kad to 655 00:32:03,470 --> 00:32:06,460 lejupielādēju. 656 00:32:06,460 --> 00:32:08,520 Esmu pārliecināts, ka kopš tā laika ir saņemti citi balsojumi. 657 00:32:08,520 --> 00:32:13,080 Filtrs ceturtajā nedēļā bija saistīts arī ar Tīdemenu. 658 00:32:13,080 --> 00:32:16,480 Mario ir tuvu trešajai vietai un tā tālāk. 659 00:32:16,480 --> 00:32:18,760 Tāpēc tas ir noderīgi mums, darbiniekiem, kuri nav tik ļoti mīlēti 660 00:32:18,760 --> 00:32:21,040 šeit, saraksta beigās. 661 00:32:21,040 --> 00:32:23,786 Tāpēc bija jāraksta daudz koda, taču tagad, kad esam to uzrakstījuši 662 00:32:23,786 --> 00:32:26,533 ļoti daudzpusīgā dinamiskā veidā, tas ir diezgan labs, piemēram, datu 663 00:32:26,533 --> 00:32:29,280 apkopošanai un analītikas veikšanai. 664 00:32:29,280 --> 00:32:33,480 Bet tas joprojām ir pienācīgs rindu skaits, kas bija jāraksta manuāli. 665 00:32:33,480 --> 00:32:38,560 Un dažreiz tas ne vienmēr ir īstais rīks darbam, bet gan kandidāts 666 00:32:38,560 --> 00:32:43,640 vispārējai citas valodas lietošanai, it īpaši, ja tā nav tikai 667 00:32:43,640 --> 00:32:48,720 vienreizēja programma, kuru palaižat un vēlaties redzēt atbildi. 668 00:32:48,720 --> 00:32:52,060 Kā rīkoties, ja vēlaties saņemt informāciju no lietotāja un atbildēt 669 00:32:52,060 --> 00:32:55,400 uz jautājumiem dinamiski, kā to darītu mobilā lietotne, piemēram, 670 00:32:55,400 --> 00:32:58,740 vietne,, Microsoft Excel vai Apple Numbers vai Google izklājlapas. 671 00:32:58,740 --> 00:33:01,880 Pagaidām veiksim pēdējās izmaiņas šajā programmas versijā un faktiski 672 00:33:01,880 --> 00:33:05,020 pieņemsim kādu lietotāja ievadi. 673 00:33:05,020 --> 00:33:08,900 Tātad, ne tikai ielādēsim visus datus atmiņā, bet arī turpinām un ne 674 00:33:08,900 --> 00:33:12,780 tikai izdrukāsim labāko 10 sarakstu, ja vēlaties, bet arī liksim 675 00:33:12,780 --> 00:33:16,660 lietotājam izvēlēties savus favorītus. 676 00:33:16,660 --> 00:33:20,326 Es izmantošu Python ievades funkciju un aicināšu viņus ar "favorite," 677 00:33:20,326 --> 00:33:23,993 ;,, piemēram, pastāstiet man, kāda ir jūsu iecienītākā problēma — 678 00:33:23,993 --> 00:33:27,660 kāda problēma jūs drīzāk interesē. 679 00:33:27,660 --> 00:33:31,611 Un tagad ļaujiet man turpināt un pateikt, ja šis favorīts ir 680 00:33:31,611 --> 00:33:35,563 skaitīšanas mainīgajā, tāpēc jūs neievadījāt kaut ko nejaušu, ko mēs 681 00:33:35,563 --> 00:33:39,515 patiesībā nepiešķīrām kā problēmu, tad ļaujiet man turpināt un 682 00:33:39,515 --> 00:33:43,466 izdrukāt ar formāta virkni neatkarīgi no tā kāds iecienītākais ir 683 00:33:43,466 --> 00:33:47,418 jūsu un parādīt tā faktisko popularitāti, indeksējot to skaitu, 684 00:33:47,418 --> 00:33:51,370 izmantojot šo favorite atslēgu, un izdrukājot to. 685 00:33:51,370 --> 00:33:52,620 Tātad tagad tā ir dinamiska programma. 686 00:33:52,620 --> 00:33:55,170 Tā neizlādē visus datus un visus summāros datus. 687 00:33:55,170 --> 00:33:59,100 Drīzāk tā ļaus man redzēt, kāda ir mana iecienītākā izvēle. 688 00:33:59,100 --> 00:34:03,940 Un es turpināšu un teikšu: paskatīsimies, es šeit fanoju par Mario. 689 00:34:03,940 --> 00:34:04,950 Tātad Enter . 690 00:34:04,950 --> 00:34:06,915 Un patiešām, mēs redzam to pašu vērtību, ko redzējām pirms brīža, bet 691 00:34:06,915 --> 00:34:08,880 tikai Mario. 692 00:34:08,880 --> 00:34:11,880 Bet tagad būtība ir tāda, ka, viens, tas viss ir iespējams. 693 00:34:11,880 --> 00:34:15,630 Otrkārt, ir daudz vieglāk un patīkamāk, nekā tas būtu bijis C. 694 00:34:15,630 --> 00:34:17,280 Tās joprojām ir tikai 15 koda rindiņas. 695 00:34:17,280 --> 00:34:19,238 Un C valodā atkal ir atmiņas pārvaldība. 696 00:34:19,238 --> 00:34:21,947 Mēģinot atrast komatus, notiek virkņu atkārtošana. 697 00:34:21,947 --> 00:34:23,190 Vienkārši ir daudz vairāk darba. 698 00:34:23,190 --> 00:34:25,510 Taču, godīgi sakot, pat tad, ja vēlaties vienkārši atbildēt uz šādu 699 00:34:25,510 --> 00:34:27,830 jautājumu programmā Excel un Apple Numbers, Google izklājlapās, 700 00:34:27,830 --> 00:34:30,150 parasti varat vienkārši izcelt lietas. 701 00:34:30,150 --> 00:34:33,029 Varat noklikšķināt uz pogas un pēkšņi , jūs saņemsiet atbildi uz 702 00:34:33,029 --> 00:34:35,909 summēšanu vai maksimālo vai minimālo, vai jebkuru no šiem pamatiem. 703 00:34:35,909 --> 00:34:39,394 Vai nebūtu jauki, ja mēs kā programmētāji nespertu soli atpakaļ un 704 00:34:39,394 --> 00:34:42,880 nebūtu spēcīgāki, taču tagad mums ir jādara vairāk darba? 705 00:34:42,880 --> 00:34:45,625 Tāpēc varbūt dažreiz Python vai kāda valoda nav labākais rīks šim 706 00:34:45,625 --> 00:34:48,370 darbam. 707 00:34:48,370 --> 00:34:51,020 Un tas tagad ļaus mums vispārīgāk ieviest kaut ko, ko sauc par 708 00:34:51,020 --> 00:34:53,670 relāciju datu bāzi. 709 00:34:53,670 --> 00:34:55,970 Pārejot no vienkāršām failu datu bāzēm, piemēram, teksta failiem vai 710 00:34:55,970 --> 00:34:58,270 binārajiem failiem, kuros visi jūsu dati tiek glabāti, kaut ko 711 00:34:58,270 --> 00:35:00,570 piemērotāku. 712 00:35:00,570 --> 00:35:02,566 Bet vispirms jautājumi. 713 00:35:02,566 --> 00:35:08,518 Mērķauditorija: [NEdzirdams] 714 00:35:12,943 --> 00:35:14,360 DEIVIDS MALANS: Tiešām labs jautājums. 715 00:35:14,360 --> 00:35:16,015 Ja es gribētu atkārtot, vai šis ir jutīgs pret lielajiem un mazajiem 716 00:35:16,015 --> 00:35:17,670 burtiem ? 717 00:35:17,670 --> 00:35:20,560 Tātad, ja es rakstītu Mario ar mazajiem burtiem un nospiestu taustiņu 718 00:35:20,560 --> 00:35:23,450 Enter, es faktiski nesaņemu šādu atbildi. 719 00:35:23,450 --> 00:35:26,720 Tagad tas varētu būt pieņemami, jo problēma tehniski ir lielais M. 720 00:35:26,720 --> 00:35:30,840 Bet tas ir mazliet smieklīgi būt tik pedantiskam attiecībā uz ievadi. 721 00:35:30,840 --> 00:35:34,250 Tātad, kā mēs to varētu atrisināt? 722 00:35:34,250 --> 00:35:37,010 Vai ir kādi padomi, kā to padarīt nedaudz izturīgāku? 723 00:35:37,010 --> 00:35:38,378 Jā. 724 00:35:38,378 --> 00:35:42,290 Mērķauditorija: [NEdzirdams] 725 00:35:45,848 --> 00:35:46,765 DEIVIDS MALANS: Labi, jā. 726 00:35:49,400 --> 00:35:49,900 Jā. 727 00:35:49,900 --> 00:35:52,022 Tāpēc mēs varētu izmantot dažas dažādas funkcijas, no kurām viena 728 00:35:52,022 --> 00:35:54,145 tiek saukta par title , kas mainīs to uz virsraksta reģistru, kur, 729 00:35:54,145 --> 00:35:56,267 tāpat kā lielākajā daļā angļu teikumu, šī teikuma pirmais burts tiek 730 00:35:56,267 --> 00:35:58,390 rakstīts ar lielo burtu. 731 00:35:58,390 --> 00:35:59,740 Mēs varētu izmantot capitalize . 732 00:35:59,740 --> 00:36:00,940 Mēs varētu izmantot upper . 733 00:36:00,940 --> 00:36:01,990 Mēs varētu izmantot lower 734 00:36:01,990 --> 00:36:04,212 Bet patiešām mēs varētu vienkārši izlemt, kā mēs vēlamies 735 00:36:04,212 --> 00:36:06,435 standartizēt lielo burtu lietojumu. 736 00:36:06,435 --> 00:36:08,810 Lielie, mazie burti vai to kombinācija. 737 00:36:08,810 --> 00:36:11,770 Un vienkārši pārliecinieties, ka esat mainījis pašus counts . 738 00:36:11,770 --> 00:36:15,581 Pārliecinieties, ka rīkojaties tāpat ar favorite un, iespējams, 739 00:36:15,581 --> 00:36:19,393 saglabājat datu dublējumu, ja vēlaties parādīt sākotnējo versiju, kas 740 00:36:19,393 --> 00:36:23,205 iegūta no CSV, neuzskatot, ka visu lietojat tikai ar lielo burtu. 741 00:36:23,205 --> 00:36:25,330 Bet tiešām, tas būtu visizplatītākais scenārijs. 742 00:36:25,330 --> 00:36:26,935 Veicot šos salīdzinājumus , jūs vienkārši padarāt lietas nejutīgas 743 00:36:26,935 --> 00:36:28,540 pret lielajiem un mazajiem burtiem. 744 00:36:28,540 --> 00:36:36,910 Citi jautājumi par Python, pirms mēs to atstājam uz nākamo nedēļu? 745 00:36:36,910 --> 00:36:39,880 Labi, tad ieviesīsim šīs relāciju datu bāzes. 746 00:36:39,880 --> 00:36:42,726 Tātad relāciju datu bāze ir tas, ko ikviens — tas ir ļoti populārs 747 00:36:42,726 --> 00:36:45,572 veids, kā uzglabāt daudz datu. 748 00:36:45,572 --> 00:36:48,981 To izmanto pasaules Twitter, pasaules Google un pasaules Meta , lai 749 00:36:48,981 --> 00:36:52,390 glabātu dažus savus datus plašā mērogā. 750 00:36:52,390 --> 00:36:55,492 Relāciju datu bāzēm ir alternatīvas. 751 00:36:55,492 --> 00:36:57,700 Patiešām, šodien mēs runāsim par valodu, ko sauc par SQL. 752 00:36:57,700 --> 00:37:00,015 Ir arī kustība, ja vēlaties, vai alternatīva, ko parasti sauc par 753 00:37:00,015 --> 00:37:02,330 NoSQL, kas ir tieši pretēja. 754 00:37:02,330 --> 00:37:03,280 Jūs neizmantojat SQL. 755 00:37:03,280 --> 00:37:06,020 Ir lietas, ko sauc par objektorientētām datubāzēm un tamlīdzīgi. 756 00:37:06,020 --> 00:37:10,296 Bet, ja esat kādreiz dzirdējis par MySQL vai PostgreSQL, Microsoft 757 00:37:10,296 --> 00:37:14,573 SQL Server, Oracle vai MariaDB vai daudziem citiem produktiem, gan 758 00:37:14,573 --> 00:37:18,850 bezmaksas, gan komerciāliem, viņi runā par to. 759 00:37:18,850 --> 00:37:21,560 Datu bāzes, kas paredzētas daudzu datu glabāšanai. 760 00:37:21,560 --> 00:37:24,306 Relāciju datu bāzēs patīkami ir tas, ka tās patiešām ir līdzīgas 761 00:37:24,306 --> 00:37:27,053 izklājlapām, ar kurām jūs, domājams, bijāt pazīstamas ilgi pirms 762 00:37:27,053 --> 00:37:29,800 šodienas nodarbības. 763 00:37:29,800 --> 00:37:32,626 Tātad relāciju datu bāze, kā jūs redzēsit, visus datus glabās rindās 764 00:37:32,626 --> 00:37:35,452 un kolonnās. 765 00:37:35,452 --> 00:37:37,910 terminoloģija pēc tam būs nedaudz atšķirīga. 766 00:37:37,910 --> 00:37:40,570 Tā vietā, lai būtu izklājlapas , jums būs tabulas . 767 00:37:40,570 --> 00:37:43,240 Bet šajās tabulās joprojām būs rindas un kolonnas. 768 00:37:43,240 --> 00:37:48,145 Un jums būs vēl lielāka kontrole pār savu datu veiktspēju, kad sāksit 769 00:37:48,145 --> 00:37:53,050 tiem piekļūt, izmantojot šo strukturēto vaicājumu valodu vai SQL. 770 00:37:53,050 --> 00:37:54,745 Šī ir valoda, kuru varat izmantot tīmekļa lietotnēm un mobilajām 771 00:37:54,745 --> 00:37:56,440 lietotnēm. 772 00:37:56,440 --> 00:37:59,125 Daudzi analītiķi apsēstos pie sava Mac vai PC un faktiski uzdotu 773 00:37:59,125 --> 00:38:01,810 jautājumus par datiem, lai saņemtu atbildi. 774 00:38:01,810 --> 00:38:04,690 Un brīnišķīgi, lai gan šodien būs jauna sintakse, SQL patiešām veic 775 00:38:04,690 --> 00:38:07,570 tikai četras pamata lietas. 776 00:38:07,570 --> 00:38:10,030 CRUD šeit ir sava veida akronīms. 777 00:38:10,030 --> 00:38:13,483 CRUD ir veids, kā atcerēties, ka relāciju datu bāze galu galā 778 00:38:13,483 --> 00:38:16,936 atbalsta datu izveidi, datu nolasīšanu, datu atjaunināšanu un datu 779 00:38:16,936 --> 00:38:20,390 dzēšanu. 780 00:38:20,390 --> 00:38:23,896 Tātad, pat ja jums liekas, oho, šeit ir daudz jaunas sintakses, kas 781 00:38:23,896 --> 00:38:27,403 nav saistīta ar mūsu pagātnes valodām, vienīgais, ko jūs darāt, ir 782 00:38:27,403 --> 00:38:30,910 datu izveide, datu lasīšana, atjaunināšana un dzēšana ,tas pats. 783 00:38:30,910 --> 00:38:36,030 Tagad nedaudz mulsinoši SQL, atbilstošās funkcijas vai komandas, kas 784 00:38:36,030 --> 00:38:41,150 ir saistītas ar CRUD, patiesībā ir šīs. 785 00:38:41,150 --> 00:38:42,720 Tātad tā joprojām ir izveidot funkcija , bet ir vēl viena , ko sauc 786 00:38:42,720 --> 00:38:44,290 par ievietošanu. 787 00:38:44,290 --> 00:38:46,320 Tas ir nevis lasīt , kas ir vairāk datorzinātnieku veids, kā to 788 00:38:46,320 --> 00:38:48,350 pateikt, bet gan atlasīt, kas ir nedaudz skaidrāks veids kā 789 00:38:48,350 --> 00:38:50,380 izteikties . 790 00:38:50,380 --> 00:38:52,030 Tāpat kā atlasīt datus, kas jums rūp. 791 00:38:52,030 --> 00:38:53,320 Atjauninājums joprojām ir tas pats atjauninājums . 792 00:38:53,320 --> 00:38:54,310 Dzēst joprojām ir dzēst. 793 00:38:54,310 --> 00:38:57,120 Bet ir vēl viena komanda ar nosaukumu drop, kas ļauj nomest, tas ir, 794 00:38:57,120 --> 00:38:59,930 dzēst, arī veselas tabulas. 795 00:38:59,930 --> 00:39:02,705 Tātad jūs varat izveidot tabulas, izmantojot sintaksi, kas parasti 796 00:39:02,705 --> 00:39:05,480 izskatīsies šādi. 797 00:39:05,480 --> 00:39:06,910 Jūs izveidosiet tabulu. 798 00:39:06,910 --> 00:39:09,360 Jūs norādīsiet tabulas nosaukumu, kuru varat saukt par visu, ko 799 00:39:09,360 --> 00:39:11,810 vēlaties, taču parasti vislabāk ir izmantot mazos burtus, bez 800 00:39:11,810 --> 00:39:14,260 atstarpēm. 801 00:39:14,260 --> 00:39:17,460 Pēc tam iekavās varat norādīt ar komatu atdalītu kolonnu sarakstu, 802 00:39:17,460 --> 00:39:20,660 kuras varētu būt vajadzīgas šajā tabulā. 803 00:39:20,660 --> 00:39:24,040 Tātad šis ir koda ekvivalents SQL valodā, manuāli atverot Google 804 00:39:24,040 --> 00:39:27,420 izklājlapas vai Excel vai Numbers un noklikšķinot augšējā kreisajā 805 00:39:27,420 --> 00:39:30,800 šūnā un, piemēram, ierakstot laikspiedolu, un pēc tam nākamajā 806 00:39:30,800 --> 00:39:34,180 ierakstot valodu un pēc tam trešā ierakstot problēmu . 807 00:39:34,180 --> 00:39:38,500 Tas ir veids, kā izklājlapā noteikt, kas ir jūsu galvenes. 808 00:39:38,500 --> 00:39:39,790 Bet tagad to sauc partabulu . 809 00:39:39,790 --> 00:39:42,100 Tagad mēs vispirms neizmantosim šo komandu manuāli. 810 00:39:42,100 --> 00:39:44,050 Darīsim kaut ko nedaudz vienkāršāku. 811 00:39:44,050 --> 00:39:47,590 Mēs sāksim ar šo datu importēšanu . 812 00:39:47,590 --> 00:39:49,340 Un es turpināšu un darīšu to. 813 00:39:49,340 --> 00:39:51,160 Ļaujiet man atgriezties pie VS Code šeit. 814 00:39:51,160 --> 00:39:54,130 Pagaidām es atstāšu favorites .py, jo tagad mēs pāriesim uz šo citu 815 00:39:54,130 --> 00:39:57,100 valodu, ko sauc par SQL. 816 00:39:57,100 --> 00:40:02,680 Un, lai to izdarītu, es izveidošu jaunu datu bāzes failu. 817 00:40:02,680 --> 00:40:07,395 Un es to darīšu, izmantojot komandu sauktu par sqlite3, kas ir tikai 818 00:40:07,395 --> 00:40:12,110 tās trešā versija, un es došu datubāzei nosaukumu favorites.db. 819 00:40:12,110 --> 00:40:14,860 Ir dažādas konvencijas, taču šī ir viena no visizplatītākajām. 820 00:40:14,860 --> 00:40:17,600 Nospiežot taustiņu Enter, man tiks izveidota jauna tukša datu bāze, 821 00:40:17,600 --> 00:40:20,340 tāpat kā beznosaukuma izklājlapas atvēršana programmā Excel, Google 822 00:40:20,340 --> 00:40:23,080 Sheets vai Apple Numbers. 823 00:40:23,080 --> 00:40:25,720 Man tiek prasīts, vai es vēlos izveidot favorites.db . 824 00:40:25,720 --> 00:40:26,890 Es nospiedīšu Y, lai izvēlētos Jā. 825 00:40:26,890 --> 00:40:28,562 Labi, mēs esam gatavi. 826 00:40:28,562 --> 00:40:30,520 Tagad jūs pamanīsit citu uzvedni. 827 00:40:30,520 --> 00:40:34,360 Es neesmu savā Linux uzvednē per se, kas vienmēr ir dolāra zīme. 828 00:40:34,360 --> 00:40:37,090 Tagad esmu programmā SQLite. 829 00:40:37,090 --> 00:40:40,135 Un mēs izmantosim SQLite, SQLite3, kā tikai interaktīvu veidu, kā 830 00:40:40,135 --> 00:40:43,180 spēlēt ar SQL kodu. 831 00:40:43,180 --> 00:40:46,510 Šodienas beigās mēs jums parādīsim, kā jūs varat izmantot SQL Python 832 00:40:46,510 --> 00:40:49,840 kodā, lai jūs joprojām rakstītu Python kodu, lai darītu visu, ko 833 00:40:49,840 --> 00:40:53,170 vēlaties, bet jūs varat runāt ar datu bāzēm, izmantojot Python. 834 00:40:53,170 --> 00:40:55,630 Un tieši tā darbojas tīmekļa lietotnes un mobilās lietotnes. 835 00:40:55,630 --> 00:40:58,613 Piemēram, operētājsistēmā iOS, iPhone, iPad vai līdzīgās ierīcēs, ja 836 00:40:58,613 --> 00:41:01,596 vēlaties saglabāt datus, tie ļoti bieži tiek saglabāti SQL datu bāzē, 837 00:41:01,596 --> 00:41:04,580 kā mēs to gatavojamies darīt. 838 00:41:04,580 --> 00:41:07,398 Bet jūs varat izmantot valodu, ko sauc par SWIFT vai Objective C. 839 00:41:07,398 --> 00:41:10,114 Un tas pats pastāv Android pasaulē, izmantojot Java vai Kotlin vai 840 00:41:10,114 --> 00:41:12,830 kaut ko citu, lai vaicātu datu bāzē. 841 00:41:12,830 --> 00:41:15,180 Tāpēc mēs pašlaik skatīsim SQL atsevišķi, piemēram, analītiķi varētu 842 00:41:15,180 --> 00:41:17,530 to izmantot kopā ar savu Mac vai personālo datoru, taču mēs to 843 00:41:17,530 --> 00:41:19,880 sasaistīsim kopā līdz dienas beigām. 844 00:41:19,880 --> 00:41:24,030 Tāpēc šajā terminālī SQLite ļaujiet man turpināt un vispirms izpildīt 845 00:41:24,030 --> 00:41:28,180 šo komandu. 846 00:41:28,180 --> 00:41:30,190 Vispirms es pārlikšu SQLite CSV režīmā, jo sākotnēji es mēģināšu iet 847 00:41:30,190 --> 00:41:32,200 pa īsāko ceļu . 848 00:41:32,200 --> 00:41:35,270 Un es tikai automātiski importēšu visus datus, kas tika iesniegti, 849 00:41:35,270 --> 00:41:38,340 izmantojot Google Form , ko eksportēju kā CSV un augšupielādēju savā 850 00:41:38,340 --> 00:41:41,410 koda vietā. 851 00:41:41,410 --> 00:41:45,585 Un es tikai automātiski pārvērtīšu šo CSV failu par SQL datu bāzi, 852 00:41:45,585 --> 00:41:49,760 lai man nebūtu jāizdomā, kas ir tās izveides tabulas komandas. 853 00:41:49,760 --> 00:41:53,805 Lai to izdarītu, es teikšu mode csv, lai SQLite zinātu, ka šī ir 854 00:41:53,805 --> 00:41:57,850 komanda, zinātu, ka tas ir CSV fails. 855 00:41:57,850 --> 00:41:59,290 Tas ir burtiski .mode . 856 00:41:59,290 --> 00:42:01,480 Tātad punkts ir pirms atslēgvārda. 857 00:42:01,480 --> 00:42:04,750 Un tagad es teikšu .import un pēc tam faila nosaukumu, kuru vēlos 858 00:42:04,750 --> 00:42:08,020 importēt, kas ir favorites.csv. 859 00:42:08,020 --> 00:42:10,327 Un tagad tās tabulas nosaukumu , kuru es vēlos izveidot ar šiem 860 00:42:10,327 --> 00:42:12,635 datiem. 861 00:42:12,635 --> 00:42:15,010 Un konsekvences labad es to nosaukšu par favorites . 862 00:42:15,010 --> 00:42:18,530 Es varētu šīs lietas pārveidot par jebko, ko vēlos, bet es to darīšu. 863 00:42:18,530 --> 00:42:20,860 Un voila, šķiet, ka nekas nav noticis. 864 00:42:20,860 --> 00:42:23,265 Bet tāpat kā C un Python un Linux, kad šķiet, ka nekas nenotiek, tas 865 00:42:23,265 --> 00:42:25,670 parasti ir labi. 866 00:42:25,670 --> 00:42:27,590 Tas nozīmē, ka es nesajaucu. 867 00:42:27,590 --> 00:42:31,120 Tātad, ja es gribu redzēt, kas tikko notika, ir šī cita komanda. 868 00:42:31,120 --> 00:42:34,405 Un šīs komandas, kas sākas ar punktiem, ir specifiskas SQLite, kas 869 00:42:34,405 --> 00:42:37,690 patiešām ir viegla SQL versija. 870 00:42:37,690 --> 00:42:39,010 Tās nav SQL,pašas par sevi. 871 00:42:39,010 --> 00:42:41,072 Tātad, ja izmantojat Oracle vai kaut ko līdzīgu, jūs neizmantosit šīs 872 00:42:41,072 --> 00:42:43,135 precīzās komandas. 873 00:42:43,135 --> 00:42:45,160 Pēc brīža jūs redzēsiet tās , kuras mēs izmantojam. 874 00:42:45,160 --> 00:42:46,660 Un šeit ir pirmais. 875 00:42:46,660 --> 00:42:51,230 Kad es ierakstu .schema, datu bāzes shēma ir datu bāzes dizains. 876 00:42:51,230 --> 00:42:52,120 Kādas ir tabulas? 877 00:42:52,120 --> 00:42:53,900 Kas ir kolonnas un tas viss? 878 00:42:53,900 --> 00:42:57,166 Tātad, kad es ierakstu .schema, šajā gadījumā man tiek parādīta 879 00:42:57,166 --> 00:43:00,433 tabulas izveides komanda, kas man tika automātiski uzzīmēta, 880 00:43:00,433 --> 00:43:03,700 vienkārši izpildot šo importēšanas rindiņu. 881 00:43:03,700 --> 00:43:06,630 Kad sāku strādāt ar SQL, es varētu burtiski to ierakstīt pats vai 882 00:43:06,630 --> 00:43:09,560 izmantot kādu programmu, lai to ģenerētu. 883 00:43:09,560 --> 00:43:11,290 Bet tas, ko tas man rada, ir šis. 884 00:43:11,290 --> 00:43:15,580 Izveidojiet tabulu, ja tā neeksistē, lai gan tā ir kodolīgāka. 885 00:43:15,580 --> 00:43:18,130 Es vēlos izveidot tabulu, ko sauc par favorites . 886 00:43:18,130 --> 00:43:23,335 Un tad šīs tabulas kolonnas būs laikspiedols, kas būs teksts, komats, 887 00:43:23,335 --> 00:43:28,540 valoda, kas arī būs teksts, komats, problēma, kas arī būs teksts. 888 00:43:28,540 --> 00:43:32,490 To ļoti triviāli secināja komanda .import, lai saprastu, ka jā, 889 00:43:32,490 --> 00:43:36,440 vienkārši iedodiet man trīs kolonnu datu bāzes tabulu, kuras pamatā 890 00:43:36,440 --> 00:43:40,390 ir Google veidlapa. 891 00:43:40,390 --> 00:43:41,740 Jautājumi par šo? 892 00:43:41,740 --> 00:43:44,140 Šīs ir komandas, kuras izpildāt vienreiz, lai sāktu darbu. 893 00:43:44,140 --> 00:43:49,280 Šīs komandas nepalaižat bieži, taču tās ir slaidā tikai uzziņai. 894 00:43:49,280 --> 00:43:49,780 Labi. 895 00:43:49,780 --> 00:43:52,010 Tāpēc tagad darīsim kaut ko nedaudz interesantāku. 896 00:43:52,010 --> 00:43:55,330 Es šeit notīrīšu savu SQLite termināli, bet joprojām esmu SQLite. 897 00:43:55,330 --> 00:43:58,885 Es tagad izmantošu dažas no savām pirmajām SQL komandām, kuras ja 898 00:43:58,885 --> 00:44:02,440 atceraties select bija starp tām. 899 00:44:02,440 --> 00:44:05,522 Tātad CRUD, CRUD. 900 00:44:02,440 --> 00:44:05,575 R bija select . Iespējams, šī ir visizplatītākā, visnoderīgākā un 901 00:44:05,575 --> 00:44:08,710 jaudīgākā lieta, ko izmantot SQL datu bāzē, atlasot datus, lai 902 00:44:08,710 --> 00:44:11,845 atbildētu uz jautājumiem, kas ir līdzīgi tiem, uz kuriem mēģinājām 903 00:44:11,845 --> 00:44:14,980 atbildēt ar Python. 904 00:44:14,980 --> 00:44:16,270 Šī ir vispārējā sintakse. 905 00:44:16,270 --> 00:44:18,085 Ikreiz, kad vēlaties atlasīt datus no SQL datu bāzes, jūs burtiski 906 00:44:18,085 --> 00:44:19,900 sakāt:select . 907 00:44:19,900 --> 00:44:22,315 Pēc tam norādiet kolonnu vai kolonnas, no kurām vēlaties atlasīt 908 00:44:22,315 --> 00:44:24,730 datus. 909 00:44:24,730 --> 00:44:28,450 Jūs burtiski ierakstāt vārdu no un pēc tam norādāt tabulas nosaukumu. 910 00:44:28,450 --> 00:44:32,030 Šajā gadījumā vēlaties iegūt šos datus no semikola. 911 00:44:32,030 --> 00:44:35,200 Viss, kas šeit ir rakstīts ar lielajiem burtiem, ir SQL atslēgvārds. 912 00:44:35,200 --> 00:44:37,675 Stingri sakot, lietas nav jāraksta ar lielo burtu, taču mēs iesakām 913 00:44:37,675 --> 00:44:40,150 to darīt stilistiski. 914 00:44:40,150 --> 00:44:43,253 Un jo īpaši mācoties un pat rakstot, tas tikai palīdz atšķirt SQL no 915 00:44:43,253 --> 00:44:46,356 jūsu izvēlētajiem vārdiem, piemēram, kolonnu nosaukumiem un tajā 916 00:44:46,356 --> 00:44:49,460 esošajiem datiem. 917 00:44:49,460 --> 00:44:52,700 Tāpēc pieņemiet šo paradumu agri. 918 00:44:52,700 --> 00:44:56,240 Tāpēc ļaujiet man atgriezties pie manas koda vietas šeit. 919 00:44:56,240 --> 00:44:59,012 Es darbinu savu termināļa logu ar SQLite3 tajā . 920 00:44:59,012 --> 00:45:01,866 Pieņemsim, ka es vienkārši vēlos iegūt visus datus no izlases 921 00:45:01,866 --> 00:45:04,720 tabulas, kas tika automātiski importēta. 922 00:45:04,720 --> 00:45:05,480 Darīsim tā. 923 00:45:05,480 --> 00:45:06,220 Izvēlieties. 924 00:45:06,220 --> 00:45:07,630 Es gribu visu. 925 00:45:07,630 --> 00:45:13,090 Nu, es varu veikt timestamp comma language comma problem 926 00:45:13,090 --> 00:45:13,840 Bet zini ko? 927 00:45:13,840 --> 00:45:15,850 Šeit jau ir ērtības. 928 00:45:15,850 --> 00:45:18,940 Ja vēlaties visu, SQL ir tas, ko sauc par wild card character , kas 929 00:45:18,940 --> 00:45:22,030 ir tikai zvaigzne, zvaigznīte, kas nozīmē, dodiet man katru kolonnu, 930 00:45:22,030 --> 00:45:25,120 man pat nezinot, kā tās sauc. 931 00:45:25,120 --> 00:45:28,400 Ļaujiet man turpināt t no favorites semikola. 932 00:45:28,400 --> 00:45:32,400 Un tas ir SQL veids, kā atvērt datubāzi, atkārtojot katru tajā esošo 933 00:45:32,400 --> 00:45:36,400 rindu, izdrukājot katru rindu tajā, un tas ir izdarīts. 934 00:45:36,400 --> 00:45:39,550 Tātad šie trīs soļi, kas bija kā deviņas Python koda rindiņas, kas 935 00:45:39,550 --> 00:45:42,700 tiek dotas vai ņemtas agrāk, tagad ir viena SQL rinda. 936 00:45:42,700 --> 00:45:43,990 Nospiedu Enter. 937 00:45:43,990 --> 00:45:46,370 Ir visi dati. 938 00:45:46,370 --> 00:45:48,130 Tāpēc es tagad redzu visus datus. 939 00:45:48,130 --> 00:45:50,230 Vienkārši izvadiet to šeit kā CSV. 940 00:45:50,230 --> 00:45:51,940 Bet tas nav CSV fails. 941 00:45:51,940 --> 00:45:53,210 Tagad tā faktiski ir tabula . 942 00:45:53,210 --> 00:45:55,950 Un patiesībā ļaujiet man to izdarīt, jo nākamajā reizē, kad atvērsim 943 00:45:55,950 --> 00:45:58,690 failu, jūs redzēsit darbību nedaudz savādāk. 944 00:45:58,690 --> 00:46:00,730 Es tikko izgāju no SQLite3. 945 00:46:00,730 --> 00:46:03,325 Es grasos to palaist atkārtoti, bet es negrasos atkārtoti importēt 946 00:46:03,325 --> 00:46:05,920 datus vai darīt kaut ko tamlīdzīgu, jo mans fails tagad pastāv. 947 00:46:05,920 --> 00:46:07,790 Patiesībā ļaujiet man spert soli atpakaļ. 948 00:46:07,790 --> 00:46:09,810 Ja es ierakstu ls savā Linux uzvednē, tur ir mans favorites.py no 949 00:46:09,810 --> 00:46:11,830 iepriekš. 950 00:46:11,830 --> 00:46:13,870 Tur ir mans favorites.csv no iepriekš. 951 00:46:13,870 --> 00:46:16,780 Un šeit ir trešais fails, ko es izveidoju pirms brīža, kad pirmo 952 00:46:16,780 --> 00:46:19,690 reizi palaižu SQLite3. 953 00:46:19,690 --> 00:46:21,130 Tātad dati ir noturīgi. 954 00:46:21,130 --> 00:46:23,050 Tas neizmanto RAM vai atmiņu. 955 00:46:23,050 --> 00:46:24,950 Viss, ko es tagad daru, tiek saglabāts. 956 00:46:24,950 --> 00:46:27,653 Tātad, turpināsim un atkārtoti palaidīsim SQLite3 ar to pašu failu. 957 00:46:27,653 --> 00:46:29,391 Bet es netaisos... Man nav viss atkārtoti jāimportē, jo fails jau 958 00:46:29,391 --> 00:46:31,130 pastāv. 959 00:46:31,130 --> 00:46:32,800 Ļaujiet man tagad atkārtot to pašu. 960 00:46:32,800 --> 00:46:36,460 Izvēlieties zvaigznīti no favorites , lai iegūtu visus datus. 961 00:46:36,460 --> 00:46:38,225 Un tas, ko jūs redzēsit tagad, ir tie paši dati, taču tagad tie ir 962 00:46:38,225 --> 00:46:39,990 nedaudz skaistāki. 963 00:46:39,990 --> 00:46:44,400 Tā kā es to palaidu vēlreiz , šoreiz es faktiski atspējoju CSV režīmu. 964 00:46:44,400 --> 00:46:47,910 Un tas, ko es tagad redzu, ir viss šīs datu bāzes tabulas saturs, ko 965 00:46:47,910 --> 00:46:51,420 sauc par favorites . 966 00:46:51,420 --> 00:46:54,704 Tagad šeit nav nekā jauna, taču jūs vienkārši redzat visus tos pašus 967 00:46:54,704 --> 00:46:57,988 datus no šīs datu bāzes ASCII vai Unikoda versiju. 968 00:46:57,988 --> 00:47:00,030 Pieņemsim, ka es vēlos iegūt datu apakškopu. 969 00:47:00,030 --> 00:47:01,238 Ļaujiet man notīrīt ekrānu. 970 00:47:01,238 --> 00:47:02,884 Un tāpat kā operētājsistēmā Linux, es varu Control L tikai notīrīt 971 00:47:02,884 --> 00:47:04,530 lietas estētiski. 972 00:47:04,530 --> 00:47:06,580 Pieņemsim, ka es vēlos iegūt tikai valodas. 973 00:47:06,580 --> 00:47:09,540 Tāpēc es varētu izvēlēties valodu no izlases. 974 00:47:09,540 --> 00:47:13,410 Un tagad tiks atlasītas nevis visas trīs kolonnas, jeb zvaigznīte, 975 00:47:13,410 --> 00:47:17,280 bet tiks atlasīta tikai valodas kolonna un visi tajā esošie dati. 976 00:47:17,280 --> 00:47:19,020 Ja es nospiedīšu Enter, voila. 977 00:47:19,020 --> 00:47:21,150 Tagad es tikai tos tur redzu. 978 00:47:21,150 --> 00:47:22,990 Nav laika zīmogu, nav problēmu. 979 00:47:22,990 --> 00:47:25,470 Tā ir tikai tabulas daļa , ja vēlaties. 980 00:47:25,470 --> 00:47:30,010 Labi, joprojām nav tik interesanti, jo tā ir tikai liela datu kolonna. 981 00:47:30,010 --> 00:47:31,900 Bet tagad lietas kļūst interesantākas. 982 00:47:31,900 --> 00:47:34,910 SQL izrādās, ka ir funkcijas, kas nāk ar šo valodu, tāpat kā C, tāpat 983 00:47:34,910 --> 00:47:37,920 kā Python. 984 00:47:37,920 --> 00:47:42,630 SQL, daās no noderīgākajām , dažas no visvienkāršākājām , ir šīs . 985 00:47:42,630 --> 00:47:45,390 Average, count, distinct, lower, max, min, upper , kas gandrīz 986 00:47:45,390 --> 00:47:48,150 atbilst tam, ko saka. 987 00:47:48,150 --> 00:47:50,533 Un count ir īpaši noderīga. 988 00:47:50,533 --> 00:47:51,450 Sāksim ar to. 989 00:47:51,450 --> 00:47:54,986 Tas ir pamatots jautājums, kas tiek uzdots, cik cilvēku ir iesnieguši 990 00:47:54,986 --> 00:47:58,523 Google Form līdz brīdim, kad es faktiski lejupielādēju CSV. 991 00:47:58,523 --> 00:48:00,190 Kāpēc gan mums to nedarīt? 992 00:48:00,190 --> 00:48:02,850 Ļaujiet man atgriezties pie VS Code šeit manā termināļa logā. 993 00:48:02,850 --> 00:48:06,900 Ļaujiet man izvēlēties nevis zvaigzni, bet zvaigžņu count . 994 00:48:06,900 --> 00:48:10,545 Tāpēc norādiet to rindu skaitu, kuras tiek atgrieztas no datu bāzes, 995 00:48:10,545 --> 00:48:14,190 ko sauc par datu bāzes tabulu, ko sauc par favorites . 996 00:48:14,190 --> 00:48:16,648 Tagad, nospiežot taustiņu Enter, es nesaņemšu visus datus. 997 00:48:16,648 --> 00:48:18,630 Es vienkārši iegūšu skaitli. 998 00:48:18,630 --> 00:48:21,480 430 rindas atgriezās. 999 00:48:21,480 --> 00:48:22,740 Tātad tas ir diezgan labi. 1000 00:48:22,740 --> 00:48:24,580 Tagad es zinu, cik daudz datu tur ir. 1001 00:48:24,580 --> 00:48:26,350 Nu, kādas valodas tur bija? 1002 00:48:26,350 --> 00:48:29,810 Es varētu izvēlēties valodu no izlases tāpat kā iepriekš, taču tas 1003 00:48:29,810 --> 00:48:33,270 nav tik noderīgi, it īpaši, ja es mantoju datus. 1004 00:48:33,270 --> 00:48:35,355 It kā es esmu analītiķis, kuram mans priekšnieks ir iedevis datu 1005 00:48:35,355 --> 00:48:37,440 kopu, un viņi vēlas, lai es izskaitļotu dažus skaitļus. 1006 00:48:37,440 --> 00:48:39,810 Labi, es varētu ielādēt to programmā Excel. 1007 00:48:39,810 --> 00:48:40,770 Es varētu to sakārtot. 1008 00:48:40,770 --> 00:48:42,585 Bet tagad varat izmantot SQL, lai atbildētu arī uz diezgan 1009 00:48:42,585 --> 00:48:44,400 vienkāršiem jautājumiem. 1010 00:48:44,400 --> 00:48:48,540 Ja vēlaties atlasīt atsevišķas valodas datu kopā, jo jums nebija 1011 00:48:48,540 --> 00:48:52,680 piekļuves Google Form , ļaujiet man izvēlēties tikai atsevišķās 1012 00:48:52,680 --> 00:48:56,820 valodas no favorites tabulas. 1013 00:48:56,820 --> 00:49:00,330 Un tagad es nospiežu Enter un saņemu daudz kodolīgāku atbildi. 1014 00:49:00,330 --> 00:49:02,220 Tikai trīs attiecīgās valodas. 1015 00:49:02,220 --> 00:49:05,543 Nav īsti noderīgs, jo es izveidoju Google Form , taču, protams, ja 1016 00:49:05,543 --> 00:49:08,866 mantojat datus no kāda cita, jūs tikko lejupielādējāt datu kopu, 1017 00:49:08,866 --> 00:49:12,190 vismaz tagad es domāju, par notiekošo. 1018 00:49:12,190 --> 00:49:14,330 Tagad tas nav nepieciešams tik mazai datu kopai, bet es varu apvienot 1019 00:49:14,330 --> 00:49:16,470 šīs lietas. 1020 00:49:16,470 --> 00:49:19,305 Veiciet select par atšķirīgo valodu skaitu šajā datu kopā, ko sauc 1021 00:49:19,305 --> 00:49:22,140 par favorites . 1022 00:49:22,140 --> 00:49:25,220 Un tagad man vajadzētu saņemt atbildi? 1023 00:49:25,220 --> 00:49:27,378 Tāpēc, cerams, patiešām atbilde sauca trīs. 1024 00:49:27,378 --> 00:49:29,779 Un tas, ko jūs atkal pamanāt arī estētiski, ir kā neliels pagaidu 1025 00:49:29,779 --> 00:49:32,180 tabula . 1026 00:49:32,180 --> 00:49:35,900 Kad es prasīju tikai atsevišķas valodas, SQL man atdod šo pagaidu 1027 00:49:35,900 --> 00:49:39,620 tabulu atmiņā, kurā ir viena kolonna ar nosaukumu valoda un pēc tam 1028 00:49:39,620 --> 00:49:43,340 trīs rindas. 1029 00:49:43,340 --> 00:49:45,210 Tagad tas nekur nav saglabāts. 1030 00:49:45,210 --> 00:49:47,450 Tas ir vienkārši izpildīts īslaicīgi šādi. 1031 00:49:47,450 --> 00:49:49,580 Bet tāpēc tas ir attēlots šādā veidā. 1032 00:49:49,580 --> 00:49:51,995 Tas, ko jūs saņemat, ir jūsu datu apakškopas, mazākas tabulas, kurās 1033 00:49:51,995 --> 00:49:54,410 ir daži jūsu dati. 1034 00:49:54,410 --> 00:49:55,550 Un tas pats šeit . 1035 00:49:55,550 --> 00:49:58,400 Šis ir traki garš kolonnas nosaukums. 1036 00:49:58,400 --> 00:50:00,480 Ja patiešām vēlaties, varat to pārdēvēt. 1037 00:50:00,480 --> 00:50:02,900 Bet tas ir viss, ko mēs tur redzam. 1038 00:50:02,900 --> 00:50:05,000 Un patiesībā, ja tas ir nedaudz neglīti, mēs varam šīs lietas saukt 1039 00:50:05,000 --> 00:50:07,100 par aizstājējiem. 1040 00:50:07,100 --> 00:50:12,090 N ir parasts mainīgā, skaitļa nosaukums jebkurā programmēšanas valodā. 1041 00:50:12,090 --> 00:50:15,200 Tāpēc es faktiski varu to nosaukt par kolonnu ar nosaukumu n. 1042 00:50:15,200 --> 00:50:16,160 Nospiediet Enter. 1043 00:50:16,160 --> 00:50:19,720 Un tagad es saņemu mazu, niecīgu tabulu, kuras kolonna tiek saukta 1044 00:50:19,720 --> 00:50:23,280 par n un kurā ir tikai viena vērtība. 1045 00:50:23,280 --> 00:50:28,500 Labi, jautājumi par šo funkciju lietošanu šeit? 1046 00:50:31,950 --> 00:50:33,152 Jautājumi, jā. 1047 00:50:33,152 --> 00:50:35,000 Mērķauditorija: [NEdzirdams] 1048 00:50:35,000 --> 00:50:36,400 DEIVIDS MALANS: Sakiet mazliet skaļāk. 1049 00:50:36,400 --> 00:50:37,280 Mērķauditorija: AS. 1050 00:50:37,280 --> 00:50:38,475 DEIVIDS MALANS: Ak, AS. 1051 00:50:37,280 --> 00:50:39,350 Kā burtiski angļu valodā. 1052 00:50:39,350 --> 00:50:42,650 Tātad pārdēvējiet šo kolonnu par šo. 1053 00:50:42,650 --> 00:50:45,317 Tehniski tas kolonnai izveido aizstājvārdu. 1054 00:50:45,317 --> 00:50:45,900 Tātad tas arī viss. 1055 00:50:45,900 --> 00:50:46,818 Jā? 1056 00:50:46,818 --> 00:50:49,955 Mērķauditorija: [NEdzirdams] 1057 00:50:49,955 --> 00:50:50,830 DEIVIDS MALANS: Tieši tā. 1058 00:50:50,830 --> 00:50:54,145 Distinct darbosies ar visu, ko iekavās ievietosiet, un atbrīvosies no 1059 00:50:54,145 --> 00:50:57,460 visiem dublikātiem, atdodot tikai unikālos. 1060 00:50:57,460 --> 00:50:58,360 Pareizi. 1061 00:50:58,360 --> 00:50:59,780 Citi jautājumi šeit? 1062 00:50:59,780 --> 00:51:00,524 Jā. 1063 00:51:00,524 --> 00:51:02,944 Mērķauditorija: [NEdzirdams] 1064 00:51:06,935 --> 00:51:08,060 DEIVIDS MALANS: Labs jautājums. 1065 00:51:08,060 --> 00:51:10,145 Ja definējat aizstājvārdu, piemēram, n, ko es tikko izdarīju, vai tas 1066 00:51:10,145 --> 00:51:12,230 kļūst kā mainīgais, ko varat izmantot atkārtoti? 1067 00:51:12,230 --> 00:51:14,405 Īsa atbilde, šajā gadījumā nē, taču varat to izmantot atkārtoti savā 1068 00:51:14,405 --> 00:51:16,580 vaicājumā. 1069 00:51:16,580 --> 00:51:19,750 Lai gan šie vaicājumi kļūst nedaudz garāki, protams, paziņojumi, ka 1070 00:51:19,750 --> 00:51:22,920 tie tādi ir, jūs faktiski varat atkārtoti izmantot n vēl garākā 1071 00:51:22,920 --> 00:51:26,090 vaicājumā. 1072 00:51:26,090 --> 00:51:27,440 Tātad vēlāk jūsu vaicājumā. 1073 00:51:27,440 --> 00:51:30,380 Un mēs redzēsim dažus, kas sāks augt garumā. 1074 00:51:30,380 --> 00:51:32,785 Tāpēc tas ir jauks veids, kā nosaukt lietas, lai vaicājums būtu 1075 00:51:32,785 --> 00:51:35,190 nedaudz precīzāks. 1076 00:51:35,190 --> 00:51:38,910 Tāpēc mēs varam pāriet uz dažiem no šiem sarežģītākajiem vaicājumiem, 1077 00:51:38,910 --> 00:51:42,630 jo izrādās, ka ir arī dažas citas metodes, kuras varam ieviest. 1078 00:51:42,630 --> 00:51:44,660 Šeit ir daži citi SQL atslēgvārdi. 1079 00:51:44,660 --> 00:51:46,895 Un atkal, lai gan šis ir vēl viens lietu saraksts, mēs darām tikai 1080 00:51:46,895 --> 00:51:49,130 četras lietas. 1081 00:51:49,130 --> 00:51:51,600 Creating, reading, updating, un deleting data. 1082 00:51:51,600 --> 00:51:55,580 Tie tikai ļauj mums precīzi noregulēt, kā mēs to darām. 1083 00:51:55,580 --> 00:51:59,210 Tātad, kur mēs varēsim filtrēt datus, kā mēs to darīsim pēc brīža. 1084 00:51:59,210 --> 00:52:03,440 Piemēram, atlasiet datus, kur šis nosacījums ir patiess. 1085 00:52:03,440 --> 00:52:06,260 Piemēram, būs alternatīva vienādības zīmei. 1086 00:52:06,260 --> 00:52:10,180 Tā vietā, lai meklētu tieši Scratch vai Python vai tieši C, varat 1087 00:52:10,180 --> 00:52:14,100 meklēt kaut ko līdzīgu dot dot dot, un tas var būt nedaudz 1088 00:52:14,100 --> 00:52:18,020 izplūdušāks rezultāts , ja vēlaties, arī ar citām rakstzīmēm. 1089 00:52:18,020 --> 00:52:19,790 Order by nodarbosies ar šķirošanu. 1090 00:52:19,790 --> 00:52:23,110 Limit tikai ļaus man ierobežot kopējo rindu skaitu, kas tiek 1091 00:52:23,110 --> 00:52:26,430 atgrieztas līdz 1 vai 10, vai ierobežotu, ja nevēlos redzēt visas 1092 00:52:26,430 --> 00:52:29,750 400 plus rindas vienlaikus, jo es tikai cenšos to saprast . . 1093 00:52:29,750 --> 00:52:32,207 Un group by vislabāk parāda piemērs. 1094 00:52:32,207 --> 00:52:34,290 Tātad, padarbosimies arī tikai ar pāris no tiem. 1095 00:52:34,290 --> 00:52:36,080 Ļaujiet man atgriezties pie VS Code šeit. 1096 00:52:36,080 --> 00:52:37,170 Es notīrīšu ekrānu. 1097 00:52:37,170 --> 00:52:39,530 Es joprojām esmu tajā pašā SQLite piemērā . 1098 00:52:39,530 --> 00:52:41,785 Un saskaitīsim, cik daudziem no jums patika C, nerakstot Python kodu 1099 00:52:41,785 --> 00:52:44,040 kā iepriekš. 1100 00:52:44,040 --> 00:52:49,285 Tāpēc ļaujiet man turpināt un atlasīt to rindu skaitu no izlases, kur 1101 00:52:49,285 --> 00:52:54,530 valoda katrā rindā ir vienāda ar C. 1102 00:52:54,530 --> 00:52:57,577 Un SQLite parasti izmanto vienas pēdiņas jebkurā laikā, kad ieskauj 1103 00:52:57,577 --> 00:53:00,625 virkni, kas ir paredzēta, lai attēlotu burtisku teksta daļu, nevis C, 1104 00:53:00,625 --> 00:53:03,672 kas bija dubultpēdiņas, vai Python, kas bija vai nu dubultpēdiņas vai 1105 00:53:03,672 --> 00:53:06,720 vienas pēdiņas . 1106 00:53:06,720 --> 00:53:10,225 Tātad tiek atlasīts rindu skaits no izlases tabulas, kur attiecīgā 1107 00:53:10,225 --> 00:53:13,730 valoda ir C. 1108 00:53:11,090 --> 00:53:15,410 EnterAnd , un tas man dod 98. 1109 00:53:15,410 --> 00:53:19,630 Tomēr ņemiet vērā, ka, ja es izlaidīšu šo predikātu, kā mēs to 1110 00:53:19,630 --> 00:53:23,850 darījām iepriekš, jūs atgūsit kopējo tabulā esošo rindu skaitu. 1111 00:53:23,850 --> 00:53:26,276 Tātad, kur ir tas, ko sauc par predikātu, kas ļauj man filtrēt lietas 1112 00:53:26,276 --> 00:53:28,703 tāpat kā nosacījumu ja vai tamlīdzīgi valodā, ko esam redzējuši 1113 00:53:28,703 --> 00:53:31,130 iepriekš. 1114 00:53:31,130 --> 00:53:35,000 Varat pateikt nedaudz precīzāk, piemēram, cik daudziem cilvēkiem 1115 00:53:35,000 --> 00:53:38,870 patiešām patika C un tieši Mario problēma? 1116 00:53:38,870 --> 00:53:40,440 Nu, darīsim tā. 1117 00:53:40,440 --> 00:53:45,040 Turpināsim un favorites tabulā atlasiet rindu skaitu, kur valoda ir C 1118 00:53:45,040 --> 00:53:49,640 un. 1119 00:53:49,640 --> 00:53:53,735 Tātad tas joprojām ir burtiski vārds ands un or , tāpat kā Python, 1120 00:53:53,735 --> 00:53:57,830 bet ne kā C. 1121 00:53:52,880 --> 00:53:57,200 Un problēma ir vienāda ar Mario. Redzēsim, vai ir kāds C un Mario 1122 00:53:57,200 --> 00:54:01,520 problēmas cienītājs. 1123 00:54:01,520 --> 00:54:05,638 Un šajā gadījumā mums trim ļoti patīk šīs divas lietas kopā. 1124 00:54:05,638 --> 00:54:06,930 Labi, ko mēs vēl varam darīt? 1125 00:54:06,930 --> 00:54:10,255 Pārliecinošāk varētu būt noskaidrot, kāda bija tās popularitāte 1126 00:54:10,255 --> 00:54:13,580 katrai valodai, līdzīgi kā Python? 1127 00:54:13,580 --> 00:54:16,190 Un šobrīd mums nav īsti iespēju to izdarīt, izņemot Python, kur mums 1128 00:54:16,190 --> 00:54:18,800 bija cilpa, un mums bija šie mainīgie un vārdnīca, kas to visu 1129 00:54:18,800 --> 00:54:21,410 izdarīja mūsu vietā. 1130 00:54:21,410 --> 00:54:23,060 Pilnīgi izpildāms, taču nogurdinošs, it īpaši, ja jūsu uzdevums ir 1131 00:54:23,060 --> 00:54:24,710 analizēt datus. 1132 00:54:24,710 --> 00:54:27,050 Mans Dievs, pat uzrakstīt 15 koda rindiņas, lai atbildētu uz 1133 00:54:27,050 --> 00:54:29,390 vienkāršiem jautājumiem, ir smieklīgi. 1134 00:54:29,390 --> 00:54:31,560 SQL var mums palīdzēt. 1135 00:54:31,560 --> 00:54:33,630 Tāpēc ļaujiet man turpināt un darīt to. 1136 00:54:33,630 --> 00:54:39,640 Ļaujiet man izvēlēties katru valodu un to skaitu no favorites 1137 00:54:39,640 --> 00:54:45,650 tabulas, bet šoreiz grupēt pēc valodas. 1138 00:54:45,650 --> 00:54:49,055 Tātad šis bija vēl viens no atslēgvārdiem, ko varam izmantot šajā 1139 00:54:49,055 --> 00:54:52,460 saīsinātajā SQL papildu funkciju sarakstā. 1140 00:54:52,460 --> 00:54:56,750 Un tas aizņem kādu brīdi, lai apdomātu, bet tas man dos divu kolonnu 1141 00:54:56,750 --> 00:55:01,040 pagaidu tabulu, kurā pirmā kolonna ir valoda, bet otrā kolonna ir to 1142 00:55:01,040 --> 00:55:05,330 skaits no šīs datu kopas. 1143 00:55:05,330 --> 00:55:08,840 Grupēšana pēc valodas nozīmē tikai vienu reizi rādīt man Scratch, 1144 00:55:08,840 --> 00:55:12,350 vienreiz rādīt C un Python tikai vienu reizi. 1145 00:55:12,350 --> 00:55:15,805 Tas nozīmē, ka visas identiskās vērtības tiek grupētas kopā, taču 1146 00:55:15,805 --> 00:55:19,260 sekojiet līdzi, cik daudz to ir. 1147 00:55:19,260 --> 00:55:23,546 Un tā tagad, ja es pāreju uz SQLite un nospiežu taustiņu Enter, tagad 1148 00:55:23,546 --> 00:55:27,833 man SQL versijā ir tieši tāda pati izvade, kāda man bija no Python, 1149 00:55:27,833 --> 00:55:32,120 kas mani aizņēma vēl 15 rindiņas iepriekš. 1150 00:55:32,120 --> 00:55:35,130 Tagad mums ir tikai viena , jo SQL — strukturētā vaicājumu valoda — 1151 00:55:35,130 --> 00:55:38,141 ir paredzēta , lai izveidotu šādus vaicājumus, lai atbildētu uz 1152 00:55:38,141 --> 00:55:41,152 jautājumiem un ātri saņemtu atbildes. 1153 00:55:41,152 --> 00:55:43,056 Ja mēs vēlamies to nedaudz sakārtot , jūs jau iepriekš jautājāt par 1154 00:55:43,056 --> 00:55:44,960 šķirošanas kārtību. 1155 00:55:44,960 --> 00:55:46,200 Nu, mēs arī to varam. 1156 00:55:46,200 --> 00:55:48,930 Šeit mēs varam izmantot vēl vienu atslēgas frāzi. 1157 00:55:48,930 --> 00:55:52,005 Mēs varam sakārtot pēc šo rindu skaita un pēc tam izpildīt šo 1158 00:55:52,005 --> 00:55:55,080 vaicājumu šeit. 1159 00:55:55,080 --> 00:55:56,877 Diemžēl tagad tie ir no mazākajiem līdz lielākajiem, taču mēs varam 1160 00:55:56,877 --> 00:55:58,675 to mainīt. 1161 00:55:58,675 --> 00:56:00,800 Izrādās, un mans vaicājums sāk parādīties šeit. 1162 00:56:00,800 --> 00:56:02,360 Es uz brīdi attālināšu. 1163 00:56:02,360 --> 00:56:06,670 Ja vēlaties sakārtot pēc skaita, noklusējuma vērtība ir augošā 1164 00:56:06,670 --> 00:56:10,980 secībā, saīsināti ASC. 1165 00:56:07,050 --> 00:56:11,715 Ja vēlaties mainīt kārtošanu SQL, tā vietā, lai izmantotu apgriezto 1166 00:56:11,715 --> 00:56:16,380 vērtību, kā mēs to darījām Python, dilstošā secībā sakiet DESC. 1167 00:56:16,380 --> 00:56:19,557 Un tagad mēs iegūstam gandrīz tādu pašu izvadi, bet apgriezti otrādi. 1168 00:56:19,557 --> 00:56:22,108 Tāpēc vienreiz atbildēt uz jautājumiem ir daudz ātrāk, protams, ar to 1169 00:56:22,108 --> 00:56:24,660 jūs iegūsit atmiņu un komfortu. 1170 00:56:24,660 --> 00:56:26,280 Nu, ko vēl es varu darīt? 1171 00:56:26,280 --> 00:56:28,890 Ko darīt, ja man rūp tikai populārākā valoda? 1172 00:56:28,890 --> 00:56:32,460 Man vienalga otrās vietas vai trešās vietas valodas vai kas cits. 1173 00:56:32,460 --> 00:56:34,830 Nu, ļaujiet man šeit pievienot vēl vienu noteikumu . 1174 00:56:34,830 --> 00:56:36,750 Ierobežojiet atbildi līdz vienai. 1175 00:56:36,750 --> 00:56:40,456 Un neatkarīgi no tā, cik rindu tagad vajadzētu atgriezties, es 1176 00:56:40,456 --> 00:56:44,163 iegūstu tikai pirmo valodu no mūsu apkopotās datu kopas ar 270 1177 00:56:44,163 --> 00:56:47,870 balsīm. 1178 00:56:47,870 --> 00:56:52,060 Jautājumi par šo? 1179 00:56:52,060 --> 00:56:55,260 Vai šeit ir kādi jautājumi? 1180 00:56:55,260 --> 00:56:55,800 Nē? 1181 00:56:55,800 --> 00:56:59,025 Ko darīt, ja mēs sākam ieviest SQL un ir pārāk vēlu, lai to iekļautu 1182 00:56:59,025 --> 00:57:02,250 Google Form ? 1183 00:57:02,250 --> 00:57:04,260 Izrādās, ka šim arī ir sintakse. 1184 00:57:04,260 --> 00:57:05,670 Protams, jūs varat izveidot datus. 1185 00:57:05,670 --> 00:57:08,655 Ne tikai tabulas, bet arī tajā esošie dati, un šī ir tipiskā sintakse 1186 00:57:08,655 --> 00:57:11,640 datu ievietošanai SQL datu bāzē. 1187 00:57:11,640 --> 00:57:14,850 Jūs burtiski, ievietojat tabulas nosaukumā. 1188 00:57:14,850 --> 00:57:17,895 Un pēc tam iekavās norādiet vienu vai vairākas kolonnas, kurām ir 1189 00:57:17,895 --> 00:57:20,940 vērtības, kuras vēlaties ievietot. 1190 00:57:20,940 --> 00:57:23,295 Tas nozīmē, ka jums nav jānorāda vērtības katrai kolonnai attiecīgajā 1191 00:57:23,295 --> 00:57:25,650 rindā. 1192 00:57:25,650 --> 00:57:27,795 Ja jums ir atbildes tikai uz dažiem no šiem jautājumiem, varat tos 1193 00:57:27,795 --> 00:57:29,940 uzskaitīt šādi. 1194 00:57:29,940 --> 00:57:32,010 Bet jūsu ievadītās vērtības būs šādas. 1195 00:57:32,010 --> 00:57:35,500 Tātad jūs burtiski ievietojat vērtības slēgtajās iekavās . 1196 00:57:35,500 --> 00:57:38,935 Un tad otrajā iekavu kopā ar tāda paša garuma un komatu atdalītu 1197 00:57:38,935 --> 00:57:42,370 sarakstu jūs norādāt, kuras vērtības vēlaties ievietot. 1198 00:57:42,370 --> 00:57:43,710 Tātad tas ir nedaudz daiļrunīgi . 1199 00:57:43,710 --> 00:57:45,810 Un, godīgi sakot, ilgtermiņā jūs izmantosit Python kodu, lai 1200 00:57:45,810 --> 00:57:47,910 automātiski veiktu šāda veida ievietošanu, taču turpināsim un 1201 00:57:47,910 --> 00:57:50,010 izmēģināsim šo. 1202 00:57:50,010 --> 00:57:54,421 Šobrīd, ja es izvēlos atsevišķu valodu no izlases, mēs atkal to 1203 00:57:54,421 --> 00:57:58,833 redzam. 1204 00:57:58,833 --> 00:58:00,000 Tikai šie trīs kandidāti. 1205 00:58:00,000 --> 00:58:01,870 Bet tagad mēs esam jums iemācījuši mazliet SQL. 1206 00:58:01,870 --> 00:58:09,120 Tāpēc favorites ievietosim kolonnu ar nosaukumu language . 1207 00:58:09,120 --> 00:58:10,620 Un zini ko? 1208 00:58:10,620 --> 00:58:12,150 Es šeit uzdošu problēmu. 1209 00:58:12,150 --> 00:58:16,140 Vērtības, kurām, un ļaujiet man tālināt, būs "SQL" ; un "fiftyville." 1210 00:58:16,140 --> 00:58:20,130 . Jūs drīz redzēsit, par ko ir runa. 1211 00:58:20,130 --> 00:58:21,240 Semikols. 1212 00:58:21,240 --> 00:58:24,580 Šķiet, ka nekas nenotiek, bet tas parasti ir labi. 1213 00:58:24,580 --> 00:58:27,285 Un tagad, ja es ritinu atpakaļ savos vaicājumos, programmā SQLite3 1214 00:58:27,285 --> 00:58:29,990 varat ritināt uz priekšu un atpakaļ laikā, lai izvairītos no 1215 00:58:29,990 --> 00:58:32,695 atkārtotas ierakstīšanas, tagad man šeit vajadzētu redzēt patiešām 1216 00:58:32,695 --> 00:58:35,400 četras kandidātvalodas. 1217 00:58:35,400 --> 00:58:37,930 Tagad pieņemsim, ka jūs nekad īsti neesat C fans un, iespējams, 1218 00:58:37,930 --> 00:58:40,460 vidusskolā vai reālajā pasaulē jūs nedaudz programmējāt un jums 1219 00:58:40,460 --> 00:58:42,990 patika C++. 1220 00:58:42,990 --> 00:58:50,010 Nu, C ir daudz atbilžu. 1221 00:58:42,990 --> 00:58:50,505 Tāpēc select star from favoriteswhere language equals “C” ; Tātad, 1222 00:58:50,505 --> 00:58:58,020 šeit ir visi, kas iesniedza atbildi uz C. 1223 00:58:53,430 --> 00:58:57,598 Pieņemsim, ka nē, viņi nevēlējās C, viņi gribēja C++, kas nav valoda, 1224 00:58:57,598 --> 00:59:01,767 kuru mēs mācām klasē. 1225 00:59:01,767 --> 00:59:03,910 Bet es varētu arī tagad to izdarīt. 1226 00:59:03,910 --> 00:59:07,060 Varat izmantot atjaunināšanas komandu, lai kolonnai vai kolonnām 1227 00:59:07,060 --> 00:59:10,210 iestatītu dažādas vērtības, ja ir izpildīts kāds nosacījums. 1228 00:59:10,210 --> 00:59:13,250 Tātad, ja es atjauninu tabulas nosaukuma kopas kolonnas nosaukumu, 1229 00:59:13,250 --> 00:59:16,290 kas ir vienāds ar kādu vērtību, filtrējot to, iespējams, pēc tā, kur 1230 00:59:16,290 --> 00:59:19,330 kāds nosacījums ir patiess. 1231 00:59:19,330 --> 00:59:24,176 Tātad, pieņemsim, ka esmu mainījis savas domas, vai ziniet ko, 1232 00:59:24,176 --> 00:59:29,023 turpinām un atjaunināsim izlasi, iestatiet valodu, kas ir vienāda ar 1233 00:59:29,023 --> 00:59:33,870 varbūt C++, kur valoda ir vienāda ar C. 1234 00:59:33,870 --> 00:59:37,020 Tagad tas ir destruktīvi, tāpēc jūs parasti nevēlaties to darīt, ja 1235 00:59:37,020 --> 00:59:40,170 vien jums nav arī datu dublējumkopijas, kas ignorē cilvēku atbildes. 1236 00:59:40,170 --> 00:59:42,753 Šķiet, ka tas ir izdevies, jo kļūdu ziņojumu nav. 1237 00:59:42,753 --> 00:59:44,972 Un, ja es atkārtoti izpildu iepriekšējo atlasi, kas sniedz man visus 1238 00:59:44,972 --> 00:59:47,191 favorites , kur valoda ir vienāda ar C, tagad es patiešām nesaņemu 1239 00:59:47,191 --> 00:59:49,410 nevienu. 1240 00:59:49,410 --> 00:59:53,127 Bet, ja es meklēju C++, tagad man sanāk daudz. 1241 00:59:53,127 --> 00:59:55,798 Un, ja es vispār atbrīvojos no tā, kur klauzulas un tikai paskatīšos 1242 00:59:55,798 --> 00:59:58,469 uz savas datu bāzes saturu, tagad jūs redzēsit, ka C++ patiešām ir 1243 00:59:58,469 --> 01:00:01,140 papildināts ar visiem pārējiem datiem. 1244 01:00:01,140 --> 01:00:04,270 Protams, tas nav tas, ko jūs visi domājāt, tāpēc es varu to atsaukt. 1245 01:00:04,270 --> 01:00:06,150 Ļaujiet man turpināt un atsaukt to, ko tikko izdarīju. 1246 01:00:06,150 --> 01:00:09,360 Ļaujiet man iestatīt savu iecienītāko valodu uz C, kur valoda ir 1247 01:00:09,360 --> 01:00:12,570 vienāda ar C++. 1248 01:00:12,570 --> 01:00:14,460 Bet predikāts ir svarīgs. 1249 01:00:14,460 --> 01:00:16,230 To es netaisos darīt. 1250 01:00:16,230 --> 01:00:20,190 Ko darīt, ja es nejauši izlaidu šo predikātu, the where clause ? 1251 01:00:20,190 --> 01:00:22,545 Kā tas varētu sabojāt lietas, jūsuprāt? 1252 01:00:26,160 --> 01:00:26,970 Jā, aizmugurē. 1253 01:00:26,970 --> 01:00:29,110 Mērķauditorija: [NEdzirdams] 1254 01:00:29,110 --> 01:00:32,590 DEIVIDS MALANS: Tas katras rindas valodu patiešām iestatītu uz C. 1255 01:00:32,590 --> 01:00:34,060 Un tas ir bīstami. 1256 01:00:34,060 --> 01:00:36,570 Un, ja sākat googlēt, meklējot SQL kļūdas vai tamlīdzīgus 1257 01:00:36,570 --> 01:00:39,080 priekšmetus, cilvēki reālajā pasaulē ir nejauši palaiduši šādas 1258 01:00:39,080 --> 01:00:41,590 komandas. 1259 01:00:41,590 --> 01:00:44,930 Un, nenosaucot vārdus, kāds bijušais mūsu mācībspēks kādā brīdī 1260 01:00:44,930 --> 01:00:48,270 nejauši palaida šādu komandu un nomainīja katra studenta vārdu mūsu 1261 01:00:48,270 --> 01:00:51,610 datubāzē uz Bobiju, manuprāt, tā bija. 1262 01:00:51,610 --> 01:00:53,365 Katrai rindai tāds pats nosaukums, jo viņi vienkārši aizmirsa 1263 01:00:53,365 --> 01:00:55,120 predikātu. 1264 01:00:55,120 --> 01:00:58,360 Tātad arī šeit ir kodā pastāvošas briesmas, un jums vajadzētu diezgan 1265 01:00:58,360 --> 01:01:01,600 ātri pieņemt ieradumu vienmēr, viens, dublēt savus datus, piemēram, 1266 01:01:01,600 --> 01:01:04,841 ar CP, piemēram, Linux vai jebkurā citā tehnikā, vai vienkārši 1267 01:01:04,841 --> 01:01:08,081 pārliecināties, pirms nospiežat Enter, ka, jā, šis patiešām ir 1268 01:01:08,081 --> 01:01:11,322 vaicājums, kuru es vēlos izpildīt. 1269 01:01:11,322 --> 01:01:13,106 Un vispārīgi runājot reālajā pasaulē, procesa kontrolei ir jābūt 1270 01:01:13,106 --> 01:01:14,890 ieviestai. 1271 01:01:14,890 --> 01:01:17,230 Tāpat kā praktikantam nevajadzētu piekļūt ražošanas datu bāzei, 1272 01:01:17,230 --> 01:01:19,570 tiešsaistes datu bāzei un tamlīdzīgiem nolūkiem. 1273 01:01:19,570 --> 01:01:21,860 Bet tagad ar šiem vaicājumiem jums ir daudz iespēju . 1274 01:01:21,860 --> 01:01:23,690 Tāpēc esiet vēl uzmanīgāks, jo ļoti viegli varat izdarīt sliktas 1275 01:01:23,690 --> 01:01:25,520 lietas. 1276 01:01:25,520 --> 01:01:26,660 Tāpēc ļaujiet man to atsaukt. 1277 01:01:26,660 --> 01:01:31,840 Kur valoda ir vienāda ar "C++." ;. Un es tālināšu atpakaļ. 1278 01:01:31,840 --> 01:01:32,470 Enter . 1279 01:01:32,470 --> 01:01:34,480 Un tagad es domāju, ka esam atpakaļ normālajā stāvoklī . 1280 01:01:34,480 --> 01:01:36,100 C ir starp atbildēm. 1281 01:01:36,100 --> 01:01:37,520 Jā? 1282 01:01:37,520 --> 01:01:40,340 Mērķauditorija: [NEdzirdams] 1283 01:01:42,293 --> 01:01:44,460 DEIVIDS MALANS: Ko tas būtībā dara beigās? 1284 01:01:44,460 --> 01:01:45,270 Mērķauditorija: [NEdzirdams] 1285 01:01:45,270 --> 01:01:46,680 DAVID MALAN: Būtībā tas ir atrast un aizstāt. 1286 01:01:46,680 --> 01:01:47,180 Jā. 1287 01:01:47,180 --> 01:01:51,060 Nespeciālistu izteiksmē tas ir atrast un aizstāt ar SQL. 1288 01:01:51,060 --> 01:01:54,610 Un patiesībā Microsoft Word vai Google Docs autori, iespējams, 1289 01:01:54,610 --> 01:01:58,160 izmanto tādu valodu kā šī SQL, atverot jauko grafisko, lietotājam 1290 01:01:58,160 --> 01:02:01,710 draudzīgo meklēšanas un aizstāšanas lodziņu. 1291 01:02:01,710 --> 01:02:04,740 Tas var būt tas, ko viņi dara mums neredzot , vai, protams, viņi var 1292 01:02:04,740 --> 01:02:07,770 lietot kādu citu valodu. 1293 01:02:07,770 --> 01:02:10,710 Ir vēl viena pēdējā sintakse, ko ir vērts zināt, — dzēst, kas labāk 1294 01:02:10,710 --> 01:02:13,650 vai sliktāk ir vēl destruktīvāka, tādējādi ļaujot dzēst rindas no 1295 01:02:13,650 --> 01:02:16,590 tabulām. 1296 01:02:16,590 --> 01:02:20,130 Tas atšķiras no drop, kas ļauj izdzēst pašas tabulas. 1297 01:02:20,130 --> 01:02:21,630 Tā koncentrējas uz rindām. 1298 01:02:21,630 --> 01:02:26,735 Pieņemsim, ka jums ļoti, ļoti nepatika, teiksim, Tīdemans bija 1299 01:02:26,735 --> 01:02:31,840 nedaudz izaicinošs, ja risinājāt šo ērtāko problēmu. 1300 01:02:31,840 --> 01:02:35,306 Tātad, ja jūs patiešām vairs nevēlaties pat domāt par Tīdemenu, tad 1301 01:02:35,306 --> 01:02:38,773 kāpēc gan neizdzēšam no izlases, kur problēma ir vienāda, un es to 1302 01:02:38,773 --> 01:02:42,240 neizpildīšu pa īstam, Tīdemen. 1303 01:02:42,240 --> 01:02:46,125 Tādējādi tiks dzēsta katra rinda, tostarp tajā esošā valoda un 1304 01:02:46,125 --> 01:02:50,010 laikspiedols, kurā students atbildēja Tīdemenam. 1305 01:02:50,010 --> 01:02:53,910 Sliktāk par šo būtu šis. 1306 01:02:53,910 --> 01:02:55,125 Kāpēc tas varētu būt slikti? 1307 01:02:58,560 --> 01:03:00,930 Labi, smejos, jo nav predikāta. 1308 01:03:00,930 --> 01:03:04,960 Nav filtra, kas burtiski nozīmē, ka tiks izdzēsti visi dati. 1309 01:03:04,960 --> 01:03:07,740 Tātad atkal ar lielu spēku šeit nāk liela atbildība. 1310 01:03:07,740 --> 01:03:12,390 Tagad šī ir mūsu dinamiski izveidotā datu kopa ar 430 rindām. 1311 01:03:12,390 --> 01:03:15,240 Protams, reālajā pasaulē ir dažas patiešām interesantas datu kopas. 1312 01:03:15,240 --> 01:03:18,285 Un viena vietne, ko, iespējams, esat dzirdējusi, vai lietotne, ko, 1313 01:03:18,285 --> 01:03:21,330 iespējams, esat izmantojuši , ir IMDb, interneta filmu datu bāze, kas 1314 01:03:21,330 --> 01:03:24,375 lieliski padara dažus to datus pieejamus lejupielādei kā CSV failus 1315 01:03:24,375 --> 01:03:27,420 vai tehniski TSV failus, ar cilnēm atdalītas vērtības. 1316 01:03:27,420 --> 01:03:29,670 Bet tas, ko mēs darījām pirms nodarbības, bija daži no šiem datiem 1317 01:03:29,670 --> 01:03:31,920 gan televīzijas pārraidēm reālajā pasaulē, gan filmām reālajā 1318 01:03:31,920 --> 01:03:34,170 pasaulē. 1319 01:03:34,170 --> 01:03:36,900 Un tas, kas ir brīnišķīgs šajā datu kopā, ir ne tikai desmitiem, 1320 01:03:36,900 --> 01:03:39,630 simtiem vai pat tūkstošiem rindu. 1321 01:03:39,630 --> 01:03:42,150 Ir miljoniem rindu ar interesantiem datiem , TV šovu un filmu, ar 1322 01:03:42,150 --> 01:03:44,670 kuriem lielākā daļa cilvēku, iespējams, ir pazīstami, vismaz ar 1323 01:03:44,670 --> 01:03:47,190 apakškopu. 1324 01:03:47,190 --> 01:03:50,895 Un mēs redzēsim, ka šie dati tagad ir sešu dažādu tabulu veidā, ko 1325 01:03:50,895 --> 01:03:54,600 esam jums iesnieguši. 1326 01:03:54,600 --> 01:03:58,230 Un šodien aplūkojamās tabulas būs cilvēki TV biznesā, zvaigznes tajā, 1327 01:03:58,230 --> 01:04:01,860 šovi, ko cilvēki veido un tamlīdzīgi. 1328 01:04:01,860 --> 01:04:04,485 Šis ir attēls, kuru mēs vēlreiz apskatīsim, lai jūs varētu saprast, 1329 01:04:04,485 --> 01:04:07,110 kādi ir faktiskie dati. 1330 01:04:07,110 --> 01:04:09,948 Šī šķiet laba iespēja uzkodām. 1331 01:04:09,948 --> 01:04:11,819 Patiesībā jau pēc brīža vestibilā ir pieejams daudz Rice Krispie 1332 01:04:11,819 --> 01:04:13,690 kārumu. 1333 01:04:13,690 --> 01:04:18,630 Bet, ja cilvēki varētu atzīt šo mini kāzu torti šeit. 1334 01:04:18,630 --> 01:04:21,640 CS50 zona Kārters Zenke šonedēļ apprecas. 1335 01:04:21,640 --> 01:04:28,880 Tāpēc apsveicu arī Kārteru. 1336 01:04:28,880 --> 01:04:30,550 Apsveicu. 1337 01:04:30,550 --> 01:04:31,940 Labi. 1338 01:04:31,940 --> 01:04:34,440 [APLAUSI] 1339 01:04:38,115 --> 01:04:40,012 Šajā kastītē ir tikai viens kūkas gabals, bet gaitenī ir daudz Rice 1340 01:04:40,012 --> 01:04:41,910 Krispie kārumu. 1341 01:04:41,910 --> 01:04:43,665 Pavadīsim 10 minūtes, un mēs atgriezīsimies ar interneta filmu 1342 01:04:43,665 --> 01:04:45,420 datubāzi pēc 10. 1343 01:04:45,420 --> 01:04:46,470 Labi. 1344 01:04:46,470 --> 01:04:47,320 Mēs esam atgriezušies. 1345 01:04:47,320 --> 01:04:50,170 Tātad, ja jūs nekad neesat bijis, varat doties uz vietni imdb.com 1346 01:04:50,170 --> 01:04:53,020 tieši tagad un paspēlēties vai lejupielādēt mobilo lietotni. 1347 01:04:53,020 --> 01:04:55,555 Un tā ir tikai liela datu bāze, kurā ir daudz TV šovu un filmu, un 1348 01:04:55,555 --> 01:04:58,090 aktieri un tamlīdzīgi. 1349 01:04:58,090 --> 01:04:59,459 Bet, kas patiešām ir jauki, jūs varat lejupielādēt dažus no šiem 1350 01:04:59,459 --> 01:05:00,828 datiem. 1351 01:05:00,828 --> 01:05:02,370 Un tas ir tas, ko es esmu darījis iepriekš. 1352 01:05:02,370 --> 01:05:06,210 Mēs esam paveikuši, esam uzraksījuši Python kodu, lai pārveidotu 1353 01:05:06,210 --> 01:05:10,050 dažas flat file datu bāzes, kuras tās ļauj lejupielādēt, un mēs to 1354 01:05:10,050 --> 01:05:13,890 pārveidojām par SQL datu bāzi ar sešām tabulām. 1355 01:05:13,890 --> 01:05:17,940 Tātad ne tikai viens, bet seši, kas galu galā ir šeit. 1356 01:05:17,940 --> 01:05:20,990 Un ļaujiet man tikai palīdzēt jums saprast, kas ir šis attēls, kas ir 1357 01:05:20,990 --> 01:05:24,040 vienumu attiecību diagramma, kas nozīmē tikai teikt, ka katrs no šiem 1358 01:05:24,040 --> 01:05:27,090 ekrāna lodziņiem ir tabula. 1359 01:05:27,090 --> 01:05:29,595 Un katra no bultiņām vai malām apzīmē sava veida attiecības starp 1360 01:05:29,595 --> 01:05:32,100 tabulām. 1361 01:05:32,100 --> 01:05:34,185 Jo līdz šim vienīgie dati, kas mums bija, bija šīs trīs favorites 1362 01:05:34,185 --> 01:05:36,270 tabulas kolonnas. 1363 01:05:36,270 --> 01:05:39,280 Taču SQL datu bāzēs, tāpat kā Google izklājlapā vai Excel failā, 1364 01:05:39,280 --> 01:05:42,290 patiešām ir noderīgas iespējas, ka jums var būt vairākas lapas vai 1365 01:05:42,290 --> 01:05:45,300 datu bāzē var būt vairākas tabulas. 1366 01:05:45,300 --> 01:05:49,560 Un tāpēc mēs redzēsim, ka TV šovu IMDb datubāzē būs īpaša tabula 1367 01:05:49,560 --> 01:05:53,820 visiem televīzijas biznesa darbiniekiem. 1368 01:05:53,820 --> 01:05:56,475 Visām TV pārraidēm, kas šobrīd ir viņu datubāzē, tiks izveidota īpaša 1369 01:05:56,475 --> 01:05:59,130 tabula. 1370 01:05:59,130 --> 01:06:04,415 Būs īpaša tabula šīs nozares rakstniekiem, šovu reitingiem, žanriem, 1371 01:06:04,415 --> 01:06:09,700 kuriem šīs pārraides pieder, komēdijas un tamlīdzīgi. 1372 01:06:09,700 --> 01:06:14,365 Un visbeidzot, būs šī tabula, kas kaut kādā veidā saista cilvēkus ar 1373 01:06:14,365 --> 01:06:19,030 televīzijas šoviem, kuros viņi piedalās, un otrādi. 1374 01:06:19,030 --> 01:06:22,290 Un tāpēc vispirms apsvērsim, kā tas izskatās kodā. 1375 01:06:22,290 --> 01:06:26,200 Un mēs redzēsim, ka sākumā tas apgrūtinās apzināti, bet es to darīšu. 1376 01:06:26,200 --> 01:06:27,690 Es atgriezīšos pie sava termināļa loga. 1377 01:06:27,690 --> 01:06:30,825 Un pārtraukumā es lejupielādēju no kursa vietnes failu show.db, kuru 1378 01:06:30,825 --> 01:06:33,960 mēs jums iepriekš izveidojām. 1379 01:06:33,960 --> 01:06:35,700 Un, ja es ierakstīšu ls, es redzēšu visus savus iecienītākos failus 1380 01:06:35,700 --> 01:06:37,440 no iepriekšējiem. 1381 01:06:37,440 --> 01:06:40,020 CSV, DB un Python fails. 1382 01:06:40,020 --> 01:06:42,390 Bet tagad tie ir show.db. 1383 01:06:42,390 --> 01:06:45,540 Tāpēc es turpināšu savā pilnekrāna termināļa logā šeit. 1384 01:06:45,540 --> 01:06:47,850 Es neizmantoju faktiskās cilnes vai koda failus. 1385 01:06:47,850 --> 01:06:52,380 Tagad es palaidīšu sqlite3 failā show.db. 1386 01:06:52,380 --> 01:06:54,900 Un es tikai šeit apskatīšu šīs versijas informāciju. 1387 01:06:54,900 --> 01:06:58,035 Ļaujiet man notīrīt ekrānu un palaist vienu komandu, kuru es 1388 01:06:58,035 --> 01:07:01,170 izpildīju iepriekš, lai parādītu mums izlases datu bāzes shēmu. 1389 01:07:01,170 --> 01:07:03,947 Tagad mēs redzēsim šovu datu bāzes shēmu. 1390 01:07:03,947 --> 01:07:06,008 Un šeit notiek daudz kas, bet ļaujiet man ritināt atpakaļ līdz pašai 1391 01:07:06,008 --> 01:07:08,070 augšai, sākumam. 1392 01:07:08,070 --> 01:07:10,570 Un mēs to redzam šeit. 1393 01:07:10,570 --> 01:07:14,156 Tātad, kad es palaižu .schema, mēs patiešām redzam apkopojumu no 1394 01:07:14,156 --> 01:07:17,743 visām SQL izveides tabulas komandām, kas tika izpildītas, lai 1395 01:07:17,743 --> 01:07:21,330 izveidotu šo datu bāzi. 1396 01:07:21,330 --> 01:07:24,350 Un vienu no šīm tabulām sauc par genres , bet citu par people, 1397 01:07:24,350 --> 01:07:27,370 ratings, shows, stars un tā tālāk. 1398 01:07:27,370 --> 01:07:31,263 Un tajā esošās kolonnas, lai gan tās ir formatētas nedaudz skaistāk 1399 01:07:31,263 --> 01:07:35,156 nekā automātiski ģenerētais tabulas izveides priekšraksts izlasei, 1400 01:07:35,156 --> 01:07:39,049 kur mums ir viena kolonna katrā izvades rindā šeit, piemēram, tabulā 1401 01:07:39,049 --> 01:07:42,943 cilvēki, būs ID kolonna, piemēram, unikāls identifikators, piemēram, 1402 01:07:42,943 --> 01:07:46,836 Hārvardas ID, Jēlas ID vai tamlīdzīgi, vārda kolonna, dzimšanas gads 1403 01:07:46,836 --> 01:07:50,730 un pēc tam daži citi dati. 1404 01:07:50,730 --> 01:07:54,610 Ja es ritinu uz leju līdz pārraidēm, katrai pasaules pārraidei būs 1405 01:07:54,610 --> 01:07:58,490 arī unikāls ID, protams, nosaukums, gads, kurā tā debitēja, un 1406 01:07:58,490 --> 01:08:02,370 kopējais sēriju skaits datu lejupielādes laikā. 1407 01:08:02,370 --> 01:08:04,080 Un kas tad tur vēl ir? 1408 01:08:04,080 --> 01:08:08,170 Daži no tiem ir mazāk acīmredzami, piemēram, vērtējumi šeit. 1409 01:08:08,170 --> 01:08:10,957 Tātad vērtējumiem nav ID kolonnas, bet tiem ir šova  ID kolonna un 1410 01:08:10,957 --> 01:08:13,744 vērtējums, piemēram, piecu punktu skalā vai 10 baļļu skalā vai 1411 01:08:13,744 --> 01:08:16,531 tamlīdzīgi, un pēc tam kopējais balsu skaits, kas tika savāktas, lai 1412 01:08:16,531 --> 01:08:19,319 veicinātu šo vērtējumu. 1413 01:08:19,319 --> 01:08:21,499 IMDb ļauj cilvēkiem balsot pozitīvi un negatīvi par šoviem un filmām 1414 01:08:21,499 --> 01:08:23,680 un tamlīdzīgi. 1415 01:08:23,680 --> 01:08:26,380 Un tad līdzīgi ir žanra struktūra. 1416 01:08:26,380 --> 01:08:29,875 Ir šova ID un pēc tam žanrs, kas būs angļu valodas vārds, piemēram, 1417 01:08:29,875 --> 01:08:33,370 komēdija, drāma vai kaut kas cits. 1418 01:08:33,370 --> 01:08:34,200 Un kas tad vēl? 1419 01:08:34,200 --> 01:08:38,609 Paskatīsimies mazliet tālāk par zvaigznēm un rakstniekiem. 1420 01:08:38,609 --> 01:08:41,039 Ja mēs šeit ejam līdz pašai apakšai, arī zvaigznes un rakstnieki ir 1421 01:08:41,039 --> 01:08:43,470 strukturēti līdzīgi. 1422 01:08:43,470 --> 01:08:46,890 Viņiem ir šova ID un personas ID. 1423 01:08:46,890 --> 01:08:48,540 Tātad šovs un cilvēks. 1424 01:08:48,540 --> 01:08:52,470 Un tad šai rakstītāju tabulai ir šova ID un personas ID. 1425 01:08:52,470 --> 01:08:56,340 Un ir vēl daudz citu vārdu, pie kuriem mēs nonāksim pēc brīža. 1426 01:08:56,340 --> 01:08:58,330 Bet uz ko šis kods norāda ? 1427 01:08:58,330 --> 01:09:02,675 Ja es atgriezīšos pie attēla, kas redzams šeit, jūs redzēsit, ka šajā 1428 01:09:02,675 --> 01:09:07,020 attēlā ir atspoguļotas attiecības starp šīm dažādajām tabulām. 1429 01:09:07,020 --> 01:09:10,299 Piemēram, ja mēs uz brīdi koncentrējamies uz šoviem , tam atkal ir 1430 01:09:10,299 --> 01:09:13,579 unikāls ID, nosaukums, gads, kurā tā debitēja, un kopējais sēriju 1431 01:09:13,579 --> 01:09:16,859 skaits. 1432 01:09:16,859 --> 01:09:21,472 Ja vēlaties noskaidrot, kādam žanram vai žanriem pieder šovs , jo 1433 01:09:21,472 --> 01:09:26,086 daži ir tikai komēdijas, daži ir tikai drāmas, bet daži , iespējams, 1434 01:09:26,086 --> 01:09:30,700 ir komēdijas un drāmas atkarībā no epizodes vai tamlīdzīgi. 1435 01:09:30,700 --> 01:09:33,170 Tātad jūs varat iedomāties, ka vēlaties ar šovu saistīt divus vai 1436 01:09:33,170 --> 01:09:35,640 trīs vai pat vairākus žanrus. 1437 01:09:35,640 --> 01:09:39,830 Šī rinda šajā otrajā tabulā ļauj mums to izdarīt. 1438 01:09:39,830 --> 01:09:44,540 Katrā žanru tabulas rindā, ko redzēsim, ir divi vienumi — šova  ID, 1439 01:09:44,540 --> 01:09:49,250 kas attiecas uz šova ID. 1440 01:09:49,250 --> 01:09:54,350 Un tāpēc šīs rindas burtiski sakrīt ar konkrēto kolonnas nosaukumu. 1441 01:09:54,350 --> 01:09:59,250 Un žanrs, kas būs kā "comedy,", "drama,"vai kaut kas cits. 1442 01:09:59,250 --> 01:10:02,180 Tagad, ņemot vērā to, dizaina jautājums. 1443 01:10:02,180 --> 01:10:06,000 Kāpēc mēs apzināti neesam vienkārši atbrīvojušies no šīs žanru 1444 01:10:06,000 --> 01:10:09,820 tabulas un padarījuši savu dzīvi vienkāršāku, vienkārši pievienojot 1445 01:10:09,820 --> 01:10:13,640 šovu tabulai žanra sleju? 1446 01:10:13,640 --> 01:10:17,150 Un atkal tabula ir gluži kā lapa ar rindām un kolonnām. 1447 01:10:17,150 --> 01:10:21,140 Pašlaik šoviem ir tikai četras kolonnas: ID, nosaukums, gads, sērijas. 1448 01:10:21,140 --> 01:10:25,060 Kāpēc gan vienkārši nepievienot piekto kolonnu, ko sauc par žanru, un 1449 01:10:25,060 --> 01:10:28,980 tur neielikt šova žanru? 1450 01:10:28,980 --> 01:10:32,200 Vai te ir kāda intuīcija? 1451 01:10:32,200 --> 01:10:34,960 Kāpēc ne tikai padarīt lietas vienkāršas? 1452 01:10:34,960 --> 01:10:36,286 Jā, aizmugurē. 1453 01:10:36,286 --> 01:10:42,035 Mērķauditorija: [NEdzirdams] 1454 01:10:42,035 --> 01:10:42,910 DEIVIDS MALANS: Tieši tā. 1455 01:10:42,910 --> 01:10:46,405 Ja pievienojat šeit piekto kolonnu un saucat to par žanru, jums ir 1456 01:10:46,405 --> 01:10:49,900 jāizvēlas žanrs. 1457 01:10:49,900 --> 01:10:53,190 Jums ir jāievieto tajā šūnā, domājams, komēdija, drāma, mūzikls vai 1458 01:10:53,190 --> 01:10:56,480 kaut kas cits. 1459 01:10:56,480 --> 01:10:58,562 Tagad šūnā varētu ierakstīt vairākus vārdus, bet vispārīgi runājot, 1460 01:10:58,562 --> 01:11:00,645 tas būtu nevīžīgs , slikts dizains. 1461 01:11:00,645 --> 01:11:03,700 katrai šūnai, tāpat kā izklājlapā, patiešām ir jābūt vienai vērtībai. 1462 01:11:03,700 --> 01:11:06,115 Tajā var būt vairāki vārdi, taču tam nevajadzētu būt dīvainam , 1463 01:11:06,115 --> 01:11:08,530 komatu atdalītam vairāku lietu sarakstam. 1464 01:11:08,530 --> 01:11:10,655 Tādā gadījumā tam vienkārši jāatrodas citā šūnā. 1465 01:11:10,655 --> 01:11:13,596 Tātad, ja jūs to izstrādātu tikai ar vienu kolonnu, ko sauc par 1466 01:11:13,596 --> 01:11:16,538 žanru, jūs uzspiežat to, ko datorzinātnieks nosauktu par savstarpējām 1467 01:11:16,538 --> 01:11:19,480 attiecībām. 1468 01:11:19,480 --> 01:11:21,580 Katram šovam ir viens žanrs. 1469 01:11:21,580 --> 01:11:23,800 Un tas ne vienmēr ir labi. 1470 01:11:23,800 --> 01:11:26,453 Vai strikti runājot, tas būtu daudz pret vienu, jo viens un tas pats 1471 01:11:26,453 --> 01:11:29,106 žanrs varētu piederēt vairākiem šoviem , bet katrā šovā tādā gadījumā 1472 01:11:29,106 --> 01:11:31,760 varētu būt tikai viens žanrs. 1473 01:11:31,760 --> 01:11:35,898 Tas, ko relāciju datu bāze ļauj darīt, un relāciju patiešām ir 1474 01:11:35,898 --> 01:11:40,036 noteicošais vārds, tas ļauj izdalīt daļu no jūsu informācijas un pēc 1475 01:11:40,036 --> 01:11:44,174 tam šeit, iespējams, vienu šovu vienā rindā, bet tad šajā žanru 1476 01:11:44,174 --> 01:11:48,312 tabulā jums varētu būt viena rinda vienam šova žanram, vai arī žanru 1477 01:11:48,312 --> 01:11:52,450 tabulā var būt divas rindas komēdijai un drāmai. 1478 01:11:52,450 --> 01:11:53,970 Vai arī, ja tam ir trešais žanrs, varat pievienot vēl vienu rindu 1479 01:11:53,970 --> 01:11:55,490 šeit. 1480 01:11:55,490 --> 01:11:58,976 Tātad jums joprojām ir viena rinda pašam šovam ar visām 1481 01:11:58,976 --> 01:12:02,463 interesantajām detaļām, bet mainīgs rindu skaits, izmantojot šo 1482 01:12:02,463 --> 01:12:05,950 saikni ar citu tabulu. 1483 01:12:05,950 --> 01:12:10,000 Tikmēr reitingi darbojas tāpat, vismaz šajā gadījumā. 1484 01:12:10,000 --> 01:12:12,882 Šovam ir ID, nosaukums, gads un sērijas. 1485 01:12:12,882 --> 01:12:15,261 Bet, ja vēlaties noskaidrot tā vērtējumu, jums ir jāseko šeit 1486 01:12:15,261 --> 01:12:17,640 redzamajai bultiņai, tā sakot, un jāatrod atbilstošais šova ID šajā 1487 01:12:17,640 --> 01:12:20,020 tabulā. 1488 01:12:20,020 --> 01:12:23,750 Atrodiet šova vērtējumu un kopējo vērtējumu skaitu. 1489 01:12:23,750 --> 01:12:26,470 Tātad arī tas ir ņemts vērā, labāk vai sliktāk. 1490 01:12:26,470 --> 01:12:28,600 Tagad padomāsim par cilvēkiem. 1491 01:12:28,600 --> 01:12:32,050 Cilvēkiem ir tikai trīs kolonnas: ID, vārds un dzimšanas diena. 1492 01:12:32,050 --> 01:12:35,095 Taču nav minēts TV šovs, kurā cilvēki ir piedalījušies galvenajās 1493 01:12:35,095 --> 01:12:38,140 lomās, vai TV šovi , ko cilvēks ir sarakstījis. 1494 01:12:38,140 --> 01:12:39,200 Nu kāpēc tā? 1495 01:12:39,200 --> 01:12:42,380 Nu, ja jums šeit būtu ceturtā kolonna ar nosaukumu šovs, jums būtu 1496 01:12:42,380 --> 01:12:45,560 jāizlemj, kurā šovā šī persona piedalās. 1497 01:12:45,560 --> 01:12:47,435 Un neviens vairs nevarētu darboties citā šovā , jo nav vietas, kur 1498 01:12:47,435 --> 01:12:49,310 uzglabāt datus. 1499 01:12:49,310 --> 01:12:52,326 Bet, ja kāds, protams, populārs aktieris var filmēties vairākos šovos 1500 01:12:52,326 --> 01:12:55,343 , mums, protams, varētu būt viena personas apliecība, viens vārds, 1501 01:12:55,343 --> 01:12:58,360 viens dzimšanas gads. 1502 01:12:58,360 --> 01:13:02,230 Tāpat kā cilvēku pasaulē ir tikai viens Stīvs Kerels kā aktieris. 1503 01:13:02,230 --> 01:13:05,290 Taču Stīva Kerela šajā piemērā viņam ir savs personas ID, lai kāds 1504 01:13:05,290 --> 01:13:08,350 būtu viņa Hārvardas ID ekvivalents, Jēlas ID ekvivalents, šajā tabulā 1505 01:13:08,350 --> 01:13:11,410 tiktu parādīts vairākās rindās, lai to varētu saistīt ar vairākiem 1506 01:13:11,410 --> 01:13:14,470 šoviem . 1507 01:13:14,470 --> 01:13:17,485 Un tas ļauj jums izveidot tā sauktās attiecības viens pret daudziem 1508 01:13:17,485 --> 01:13:20,500 vai tehniski tās ir divvirzienu attiecības. 1509 01:13:20,500 --> 01:13:22,450 Tās ir attiecības ar daudziem pret daudziem. 1510 01:13:22,450 --> 01:13:23,120 Kāpēc? 1511 01:13:23,120 --> 01:13:26,105 Vienā šovā noteikti var būt vairāki cilvēki un vairāki cilvēki, kas 1512 01:13:26,105 --> 01:13:29,090 to raksta, tikai reālajā pasaulē. 1513 01:13:29,090 --> 01:13:32,210 Bet otrādi, viens cilvēks noteikti varētu darboties vairākos šovos 1514 01:13:32,210 --> 01:13:35,330 vai rakstīt vairākiem šoviem . 1515 01:13:35,330 --> 01:13:38,380 Tātad tas ir tas, ko jūs iegūstat ar relāciju datu bāzēm. 1516 01:13:38,380 --> 01:13:41,917 Jūs ievietojat savus kanoniskos datus par cilvēkiem vienā vietā, par 1517 01:13:41,917 --> 01:13:45,455 šoviem citā vietā un pēc tam izmantojat šīs papildu tabulas, lai 1518 01:13:45,455 --> 01:13:48,993 vienu lietu saistītu ar citu. 1519 01:13:48,993 --> 01:13:50,410 Tāpēc mēs nekavēsimies pie attēliem. 1520 01:13:50,410 --> 01:13:53,140 Tas ir tikai viens no veidiem, kā par to domāt, kā labāk pārdomāt 1521 01:13:53,140 --> 01:13:55,870 datu kopu. 1522 01:13:55,870 --> 01:13:58,023 Taču atcerieties, ka kods, ko tikko redzējām shēmai, atkal ātri 1523 01:13:58,023 --> 01:14:00,177 paplašinājās. 1524 01:14:00,177 --> 01:14:02,260 Ir daudz atslēgvārdu, kurus es vēl neesmu pieminējis. 1525 01:14:02,260 --> 01:14:04,360 Bet daži no tiem, iespējams, ir pazīstami. 1526 01:14:04,360 --> 01:14:06,130 Šeit tie tiek rakstīti ar lielo burtu atšķirīgi. 1527 01:14:06,130 --> 01:14:08,140 Bet vesels skaitlis ir šeit sarakstā. 1528 01:14:08,140 --> 01:14:10,790 Null ir sarakstā, lai gan tehniski nav nulles. 1529 01:14:10,790 --> 01:14:14,186 Tāpēc atdalīsim dažus no šiem atslēgvārdiem un apsvērsim, ko tie 1530 01:14:14,186 --> 01:14:17,583 patiesībā dara jūsu datubāzei, jo tagad mēs pētām funkcijas, kas 1531 01:14:17,583 --> 01:14:20,980 neeksistē tikai izklājlapu pasaulē. 1532 01:14:20,980 --> 01:14:24,290 Tas izrādās SQL datu bāzē, īpaši SQLite, kas ir SQL versija, ko 1533 01:14:24,290 --> 01:14:27,600 izmantojam CS50 un ko mūsdienās parasti izmanto, piemēram, mobilajām 1534 01:14:27,600 --> 01:14:30,910 lietojumprogrammām. 1535 01:14:30,910 --> 01:14:32,560 Tā ir kā viegla SQL versija. 1536 01:14:32,560 --> 01:14:34,855 Tas ir tad, kad jūs nemēģināt palaist Twitter un jums noteikti ir 1537 01:14:34,855 --> 01:14:37,150 miljardiem un miljardiem rindu. 1538 01:14:37,150 --> 01:14:40,870 Jums ir simtiem, tūkstošiem, desmitiem tūkstošu, varbūt pat daži 1539 01:14:40,870 --> 01:14:44,590 miljoni, bet ne traki skaitļi, traki datu apjomi. 1540 01:14:44,590 --> 01:14:49,250 Īpaši SQLite pasaulē ir šie pieci datu veidi. 1541 01:14:49,250 --> 01:14:52,390 Tātad, tāpat kā C, mums bija int un char un tamlīdzīgi. 1542 01:14:52,390 --> 01:14:54,190 SQL mums ir tādi. 1543 01:14:54,190 --> 01:14:55,818 Blob, kas ir sava veida smieklīgi, bet tas nozīmē tikai binārus 1544 01:14:55,818 --> 01:14:57,447 lielus objektus. 1545 01:14:57,447 --> 01:14:58,780 Tātad tas ir kā binārs datu tips. 1546 01:14:58,780 --> 01:15:02,830 Nulles un vieninieki , kas ne vienmēr iekļaujas citās kategorijās. 1547 01:15:02,830 --> 01:15:05,290 Integer , kas, protams, ir vesels skaitlis, kā mēs to zinām. 1548 01:15:05,290 --> 01:15:09,940 Numeric , kas ir skaitļu kopums, kas ir īpaši formatēts. 1549 01:15:09,940 --> 01:15:13,165 Tātad datums būtu kā year, year, year, year, dash month, month, dash 1550 01:15:13,165 --> 01:15:16,390 day, day 1551 01:15:16,390 --> 01:15:18,015 Un šī patiesībā ir brīnišķīga lieta. 1552 01:15:18,015 --> 01:15:20,367 Atkarībā no valsts, no kuras atrodaties, jūs varētu domāt, ka jūsu 1553 01:15:20,367 --> 01:15:22,720 datumu sistēma jūsu valstī ir lieliska vai briesmīga. 1554 01:15:22,720 --> 01:15:26,035 ASV sistēma ir šausmīga, jo mums ir mēnesis, diena un pēc tam gads, 1555 01:15:26,035 --> 01:15:29,350 ko nav iespējams sakārtot. 1556 01:15:29,350 --> 01:15:31,930 Tas ir nepareizs veids, kā objektīvi uzglabāt datus. 1557 01:15:31,930 --> 01:15:33,803 Un tomēr šeit mēs to izmantojam lielā mērogā. 1558 01:15:33,803 --> 01:15:35,470 Citām valstīm tas ir kļuvis labāk. 1559 01:15:35,470 --> 01:15:38,383 Cipari SQL paši standartizē šīs lietas. 1560 01:15:38,383 --> 01:15:40,300 Tāpēc nav svarīgi, no kuras valsts jūs esat. 1561 01:15:40,300 --> 01:15:43,200 Piemēram, jūs glabājat savus datus šādā konkrētajā veidā. 1562 01:15:43,200 --> 01:15:46,560 Laiki ir standartizēti, kā arī cita veida skaitliskie dati. 1563 01:15:46,560 --> 01:15:48,630 Real ir plūsmas sinonīms. 1564 01:15:48,630 --> 01:15:52,410 Tātad kaut kas ar komatu un kādu ciparu skaitu pēc tam. 1565 01:15:52,410 --> 01:15:55,530 Un tad teksts ir tikai virknes un tamlīdzīgi. 1566 01:15:55,530 --> 01:15:58,075 Izmantojot citas vēl brīnišķīgākas datu bāzes, piemēram, MySQL, 1567 01:15:58,075 --> 01:16:00,621 PostgreSQL, Oracle un citus produktus, par kuriem jūs, iespējams, 1568 01:16:00,621 --> 01:16:03,166 esat dzirdējuši, ir vēl vairāk datu tipu, kuros jums ir jāpieņem vēl 1569 01:16:03,166 --> 01:16:05,712 precīzāki lēmumi. 1570 01:16:05,712 --> 01:16:08,916 Bet SQLite tas patiešām ir diezgan viegls, un jums vai mums vienkārši 1571 01:16:08,916 --> 01:16:12,120 ir jāizlemj par datu tipiem katrai tabulas kolonnai. 1572 01:16:12,120 --> 01:16:15,000 Taču SQL pasaulē pastāv šie papildu ierobežojumi. 1573 01:16:15,000 --> 01:16:21,400 Varat arī teikt, ka šūnas šajā kolonnā var būt vai nebūt nulles. 1574 01:16:21,400 --> 01:16:24,630 Tātad, ja vēlaties pasargāt sevi no sevis, lai nesabojātu un 1575 01:16:24,630 --> 01:16:27,860 neievietotu nulli, kas ir tukša vērtība, varat skaidri izveidot 1576 01:16:27,860 --> 01:16:31,090 tabulu tā, lai tajā būtu kolonna, kas nevar būt nulle. 1577 01:16:31,090 --> 01:16:35,006 Un patiesībā pārtraukuma laikā kāds man uzdeva jautājumu par to, ka 1578 01:16:35,006 --> 01:16:38,923 esmu manuāli ievietojis SQL mūsu favorites datubāzē "SQL,",;. 1579 01:16:38,923 --> 01:16:40,590 Jūs varētu atcerēties, ka es krāpos . 1580 01:16:40,590 --> 01:16:43,320 Es tikko ievietoju "SQL" un "fiftyville," — jaunas problēmas 1581 01:16:43,320 --> 01:16:46,050 nosaukumu,. 1582 01:16:46,050 --> 01:16:49,170 Bet ko es neievietoju datubāzē? 1583 01:16:49,170 --> 01:16:50,100 Laika zīmogu . 1584 01:16:50,100 --> 01:16:50,880 Un es varētu ievietot . 1585 01:16:50,880 --> 01:16:52,560 Es varēju ievietot pašreizējo dienu un laiku pirms dažām minūtēm, bet 1586 01:16:52,560 --> 01:16:54,240 es to nedarīju. 1587 01:16:54,240 --> 01:16:56,415 Un tas ir labi, ja tas ir pieņemams jums un izstrādājumam, kuru 1588 01:16:56,415 --> 01:16:58,590 veidojat. 1589 01:16:58,590 --> 01:17:00,300 Bet es to varēju novērst. 1590 01:17:00,300 --> 01:17:03,750 Ja mēs būtu definējuši tabulu, lai tajā būtu laikspiedola kolonna, 1591 01:17:03,750 --> 01:17:07,200 kas nav tikai teksts, bet arī teksts, kas nav nulle, SQL būtu 1592 01:17:07,200 --> 01:17:10,650 sūdzējies un neļautu man pabeigt šo ievietošanu. 1593 01:17:10,650 --> 01:17:12,915 Tātad ir šāda veida iebūvēta aizsardzība, ko ne vienmēr varat iegūt, 1594 01:17:12,915 --> 01:17:15,180 izmantojot izklājlapu. 1595 01:17:15,180 --> 01:17:17,170 Un unikāls nozīmē tieši to. 1596 01:17:17,170 --> 01:17:20,460 Ja vēlaties pārliecināties, ka katra rinda šajā kolonnā ir unikāla, 1597 01:17:20,460 --> 01:17:23,750 iespējams, e-pasta adresēm vai ASV sociālās apdrošināšanas numuriem 1598 01:17:23,750 --> 01:17:27,040 vai jebkam citam, kam vēlaties pārliecināties, ka jums nav divu 1599 01:17:27,040 --> 01:17:30,330 versiju, varat norādīt, ka kolonna ir unikāla. 1600 01:17:30,330 --> 01:17:32,170 Un ir arī citi šādi ierobežojumi. 1601 01:17:32,170 --> 01:17:34,670 Bet atkal šis ir tikai to funkciju saraksts, kuras iegūstat no 1602 01:17:34,670 --> 01:17:37,170 pareizas relāciju datu bāzes. 1603 01:17:37,170 --> 01:17:41,085 Bet, iespējams, intelektuāli interesantākā un jaudīgākā ir tā, ko 1604 01:17:41,085 --> 01:17:45,000 šeit sauc par primāro atslēgu un ārējo atslēgu. 1605 01:17:45,000 --> 01:17:47,640 Un ļaujiet man tagad atgriezties pie šīs izvades . 1606 01:17:47,640 --> 01:17:51,480 Ja skatāmies uz šoviem , jūs redzēsit, ka šovam i atkal ir ID, 1607 01:17:51,480 --> 01:17:55,320 nosaukums, gads un vairākas sērijas. 1608 01:17:55,320 --> 01:17:57,120 Un tagad datu tipiem varētu būt jēga. 1609 01:17:57,120 --> 01:18:01,150 Izrādās, ka ID, tāpat kā Hārvardas ID, Jēlas ID, būs vesels skaitlis. 1610 01:18:01,150 --> 01:18:02,220 Tātad vienkāršs skaitlis. 1611 01:18:02,220 --> 01:18:04,680 Virsraksts, protams, būs teksts, bet ne nulle. 1612 01:18:04,680 --> 01:18:07,470 Būtu dīvaini, ja televīzijas šovam nebūtu nosaukuma. 1613 01:18:07,470 --> 01:18:08,615 Tā nevar būt. 1614 01:18:08,615 --> 01:18:10,990 Visa pasaule salūztu vai jūsu TV programma un vēl kas cits. 1615 01:18:10,990 --> 01:18:13,590 Tāpēc ir jēga teikt, ka nav nulles. 1616 01:18:13,590 --> 01:18:14,670 Gads ir skaitlisks. 1617 01:18:14,670 --> 01:18:15,990 Tātad tā ir standartizēta forma. 1618 01:18:15,990 --> 01:18:19,140 Epizodes ir vesels skaitlis, piemēram, cik sēriju ir izveidotas. 1619 01:18:19,140 --> 01:18:20,790 Un, visbeidzot, ievērojiet šo. 1620 01:18:20,790 --> 01:18:24,335 Šova tabulas primārā atslēga acīmredzot ir kolonna ar nosaukumu ID, 1621 01:18:24,335 --> 01:18:27,880 kas minēta dažas rindiņas iepriekš. 1622 01:18:27,880 --> 01:18:31,310 Tas tikai nozīmē, ka datu bāze izmantos ID kolonnu kā unikālo 1623 01:18:31,310 --> 01:18:34,740 identifikatoru. 1624 01:18:34,740 --> 01:18:37,620 Tātad tas ir līdzīgs unikālajam atslēgvārdam, taču primārā atslēga 1625 01:18:37,620 --> 01:18:40,500 tikai nozīmē, ka arī datu bāze to uzskatīs par īpašu un nodrošinās, 1626 01:18:40,500 --> 01:18:43,380 ka tā unikāli identificē jūsu datus. 1627 01:18:43,380 --> 01:18:45,300 Bet interesanti ir šis . 1628 01:18:45,300 --> 01:18:48,390 Ievērojiet, ja es ritinu atpakaļ līdz cilvēkiem, cilvēki bija līdzīgi 1629 01:18:48,390 --> 01:18:51,480 strukturēti, bet ar atšķirīgiem atribūtiem. 1630 01:18:51,480 --> 01:18:55,140 Tāpat kā šeit, mums bija personas ID, vārds, dzimšanas gads un ID 1631 01:18:55,140 --> 01:18:58,800 primārā atslēga. 1632 01:18:58,800 --> 01:19:01,080 Tātad ID atkal ir vesels skaitlis. 1633 01:19:01,080 --> 01:19:03,750 Vārds ir teksts, bet ne nulle, jo būtu dīvaini, ja cilvēks bez vārda 1634 01:19:03,750 --> 01:19:06,420 teksta ziņā būtu absolūti nekāds. 1635 01:19:06,420 --> 01:19:07,860 Dzimšana būs skaitliska. 1636 01:19:07,860 --> 01:19:11,590 Taču cilvēku primārā atslēga ir arī ID. 1637 01:19:11,590 --> 01:19:15,150 Tātad šīs ir unikālās kolonnas, kuras datu bāze īpaši apstrādās. 1638 01:19:15,150 --> 01:19:15,810 Kāpēc? 1639 01:19:15,810 --> 01:19:17,310 Nu, mēs tikko skatījāmies šovus . 1640 01:19:17,310 --> 01:19:18,900 Mēs vienkārši skatījāmies uz cilvēkiem. 1641 01:19:18,900 --> 01:19:22,380 Tagad pievērsīsimies šim, zvaigznes. 1642 01:19:22,380 --> 01:19:25,260 Kā noteikt, kurš ir TV šova zvaigzne? 1643 01:19:25,260 --> 01:19:26,370 Nu, mums bija divas kolonnas. 1644 01:19:26,370 --> 01:19:28,320 Šova ID un personas ID. 1645 01:19:28,320 --> 01:19:31,080 Tas ir daudzu daudzu attiecību iemiesojums. 1646 01:19:31,080 --> 01:19:32,550 Viens cilvēks varētu piedalīties daudzos šovos . 1647 01:19:32,550 --> 01:19:34,130 Vienā šovā noteikti varētu būt daudz cilvēku, kas tajā varētu 1648 01:19:34,130 --> 01:19:35,710 piedalīties vai tam rakstīt. 1649 01:19:35,710 --> 01:19:37,250 Bet ievērojiet šo. 1650 01:19:37,250 --> 01:19:41,299 Šajā tabulā, kurā ir divas kolonnas, šova ID un personas ID, ir tas, 1651 01:19:41,299 --> 01:19:45,348 kas tiks saukts par ārējo atslēgu, ko sauc par šova  ID, kas atsaucas 1652 01:19:45,348 --> 01:19:49,397 uz šova tabulas ID kolonnu un pēc tam uz citu ārējo atslēgu, ko sauc 1653 01:19:49,397 --> 01:19:53,446 par personas ID, lai gan es varētu saukt šīs lietas iekavās par jebko 1654 01:19:53,446 --> 01:19:57,495 kas attiecas uz personu tabulas ID kolonnu. 1655 01:19:57,495 --> 01:20:00,120 Tagad jums nebūs bieži jāraksta šādas komandas. 1656 01:20:00,120 --> 01:20:03,165 Atkal, jūs iestatāt datubāzi vienu reizi sākumā, varbūt ar TF 1657 01:20:03,165 --> 01:20:06,210 palīdzību, varbūt ar Google vai tamlīdzīgi palīdzību. 1658 01:20:06,210 --> 01:20:09,203 Bet, kad jūsu datu bāze ir izveidota, tā tiek atgriezta CRUD. 1659 01:20:09,203 --> 01:20:10,946 Create, read, update, delete, the selects, the inserts, the 1660 01:20:10,946 --> 01:20:12,690 deletionsun tamlīdzīgi. 1661 01:20:12,690 --> 01:20:14,310 Bet ko tas nozīmē? 1662 01:20:14,310 --> 01:20:18,705 Šie atslēgvārdi, piemēram, primārā atslēga un ārējā atslēga, ir tie, 1663 01:20:18,705 --> 01:20:23,100 kas kodā veic to, ko šis attēls pirms brīža attēloja . 1664 01:20:23,100 --> 01:20:25,335 Šīs līnijas šeit ir novilktas burtiski, lai tās atbilstu attiecīgajām 1665 01:20:25,335 --> 01:20:27,570 lietām. 1666 01:20:27,570 --> 01:20:30,660 Cilvēku ID sakrīt ar personas ID. 1667 01:20:30,660 --> 01:20:34,410 Šova ID sakrīt ar šova ID. 1668 01:20:34,410 --> 01:20:37,635 Tātad jūs redzat tikai grafisko versiju, koda versiju, grafisko kodu, 1669 01:20:37,635 --> 01:20:40,860 kas rada šīs attiecības. 1670 01:20:40,860 --> 01:20:45,190 Tagad, ņemot vērā to, redzēsim, kā šīs lietas izskatās. 1671 01:20:45,190 --> 01:20:47,160 Tāpēc ļaujiet man atgriezties pie VS Code šeit. 1672 01:20:47,160 --> 01:20:48,400 Ļaujiet man notīrīt ekrānu. 1673 01:20:48,400 --> 01:20:51,000 Es joprojām esmu SQLite ietvaros ar show.db. 1674 01:20:51,000 --> 01:20:52,240 Ļaujiet man turpināt un darīt to, ko es daru ar jebkuru jaunu datu 1675 01:20:52,240 --> 01:20:53,480 bāzi. 1676 01:20:53,480 --> 01:20:56,543 Ja es kādreiz kaut ko lejupielādēju vai mēģinu apzināties problēmu, 1677 01:20:56,543 --> 01:20:59,606 parasti tas nenāk kopā ar skaistu attēlu vai trīs stundu lekciju, lai 1678 01:20:59,606 --> 01:21:02,670 izskaidrotu, kas ir datu kopa. 1679 01:21:02,670 --> 01:21:06,190 Drīzāk jums vienkārši ir datu kopa jūsu zināšanām par SQL. 1680 01:21:06,190 --> 01:21:07,440 Tāpēc ļaujiet man paspēlēties. 1681 01:21:07,440 --> 01:21:09,608 Tātad .schema man parāda visas tabulas. 1682 01:21:09,608 --> 01:21:10,900 Tas varētu būt sākumpunkts. 1683 01:21:10,900 --> 01:21:11,900 Labi, tas ir interesanti. 1684 01:21:11,900 --> 01:21:13,560 Es zinu, kas ir cilvēki. 1685 01:21:13,560 --> 01:21:16,530 Turpināsim un parādīsim man visus cilvēkus. 1686 01:21:16,530 --> 01:21:18,595 Tāpēc izvēlieties zvaigzni no cilvēkiem. 1687 01:21:18,595 --> 01:21:21,462 Es tikai cenšos lietotājam draudzīgākā veidā noskaidrot, kā šī datu 1688 01:21:21,462 --> 01:21:24,330 kopa izskatās. 1689 01:21:24,330 --> 01:21:26,607 Te jau ir daudz cilvēku. 1690 01:21:26,607 --> 01:21:31,170 Kā redzat, gadi skrien , televīzijas biznesā ir bijis daudz cilvēku. 1691 01:21:31,170 --> 01:21:33,540 Tāpēc šis, iespējams, nebija labākais vaicājums. 1692 01:21:33,540 --> 01:21:39,300 Bet tas norāda uz to, cik liela ir šī datu kopa no IMDb. 1693 01:21:39,300 --> 01:21:42,120 Ja rodas šaubas un ikreiz, kad zaudējat kontroli pār datoru, 1694 01:21:42,120 --> 01:21:44,940 Control C ir jūsu draugs, ar kuru pārtraukt. 1695 01:21:44,940 --> 01:21:48,705 Kas būtu bijis labāk, jo es domāju, ka man nav jāzina visi miljoni 1696 01:21:48,705 --> 01:21:52,470 cilvēku pasaulē, es varētu ierobežot līdz 10 cilvēkiem. 1697 01:21:52,470 --> 01:21:55,695 Un tagad ar to pietiek, lai saprastu, ka Fredam Astēram ir viena 1698 01:21:55,695 --> 01:21:58,920 cilvēka identitāti apliecinošs dokuments, kas ir pirmā persona. 1699 01:21:58,920 --> 01:22:00,660 Dzimšanas gads 1899. 1700 01:22:00,660 --> 01:22:04,740 Lauren Bacall un visi šie citi cilvēki no vakardienas. 1701 01:22:04,740 --> 01:22:07,410 Jūs redzat, ka tie ir pirmie 10 cilvēki datu bāzē. 1702 01:22:07,410 --> 01:22:09,160 Tātad ir dažu datu piemērs. 1703 01:22:09,160 --> 01:22:12,540 Tagad, ja es vēlos apzināties, kas ir šovs , es to zinu tehniski. 1704 01:22:12,540 --> 01:22:13,800 Es to zinu pēc attēla . 1705 01:22:13,800 --> 01:22:15,400 Bet apskatīsim tikai dažus neapstrādātus datus. 1706 01:22:15,400 --> 01:22:18,440 Tā vietā, lai teiktu, ka atlasiet zvaigzni no cilvēkiem, ļaujiet man 1707 01:22:18,440 --> 01:22:21,480 select star from shows limit 10. 1708 01:22:21,480 --> 01:22:24,725 Un labi, es esmu dzirdējis vai redzējis tikai dažus no tiem, bet tie 1709 01:22:24,725 --> 01:22:27,970 ir vecāki šovi. 1710 01:22:27,970 --> 01:22:30,440 Bet es redzu, ka katram šovam ir ID, nosaukums, gads, kurā tas 1711 01:22:30,440 --> 01:22:32,910 debitēja, un vairākas sērijas. 1712 01:22:32,910 --> 01:22:35,340 Bet varbūt visneskaidrākais būs šis. 1713 01:22:35,340 --> 01:22:38,835 Izvēlieties zvaigzni no zvaigznēm, kur šī ir tabula, kas saista 1714 01:22:38,835 --> 01:22:42,330 cilvēkus ar šoviem. 1715 01:22:42,330 --> 01:22:46,950 Vai es šeit redzēsim kādus vārdus vai šovu nosaukumus? 1716 01:22:46,950 --> 01:22:49,127 Ne saskaņā ar definīciju, ko mēs redzējām iepriekš. 1717 01:22:49,127 --> 01:22:50,460 Ak, man vajadzēja izveidot savas robežas. 1718 01:22:50,460 --> 01:22:51,660 Ļaujiet man to pārtraukt. 1719 01:22:51,660 --> 01:22:52,620 Ļaujiet man to izdarīt vēlreiz. 1720 01:22:52,620 --> 01:22:54,180 Ierobežojums 10. 1721 01:22:54,180 --> 01:22:55,050 Nē. 1722 01:22:55,050 --> 01:22:57,460 Un šeit jūs noteikti atrodaties programmētāju pasaulē, jo šī būtu 1723 01:22:57,460 --> 01:22:59,870 viskaitinošākā izklājlapa, ko jebkad izmantot savā Mac vai 1724 01:22:59,870 --> 01:23:02,280 personālajā datorā. 1725 01:23:02,280 --> 01:23:04,490 Ja jums tikko būtu lapa ar visiem šiem cipariem, kas saista vienu 1726 01:23:04,490 --> 01:23:06,700 lietu ar otru, mans Dievs, kā jūs saprastu, kas tas ir vai kas tas 1727 01:23:06,700 --> 01:23:08,910 ir? 1728 01:23:08,910 --> 01:23:12,780 Meklējot datus, manuāli jāvada Control F vai Command F. 1729 01:23:12,780 --> 01:23:14,310 Bet datubāzei ir vienalga. 1730 01:23:14,310 --> 01:23:18,160 Kad esat iepazinies ar SQL, varat šīs lietas atkal savienot. 1731 01:23:18,160 --> 01:23:21,360 Tātad tas, ko jūs šeit redzat, ir ārējās atslēgas. 1732 01:23:21,360 --> 01:23:22,150 Ārējās atslēgas. 1733 01:23:22,150 --> 01:23:22,650 Kāpēc? 1734 01:23:22,650 --> 01:23:26,820 Tā kā šova ID atbilst tiem pašiem cipariem no citas tabulas, ko sauc 1735 01:23:26,820 --> 01:23:30,990 par šoviem, kam ir pareiza primārā atslēga, ko sauc par ID. 1736 01:23:30,990 --> 01:23:35,055 Personas ID šajā kontekstā ir ārējā atslēga, jo tā attiecas uz 1737 01:23:35,055 --> 01:23:39,120 cipariem, kas patiešām pieder cilvēku tabulai un tās ID kolonnai. 1738 01:23:39,120 --> 01:23:41,037 Tātad tas ir tikai veids, kā tos kaut kā saistīt. 1739 01:23:41,037 --> 01:23:42,568 Un tāpēc, ja jūs domājat par to, es vienmēr to domāju savā prātā kā 1740 01:23:42,568 --> 01:23:44,100 šo. 1741 01:23:44,100 --> 01:23:47,895 Ja šī ir cilvēku tabula, šī ir šovu tabula, un starp tām ir vidējā 1742 01:23:47,895 --> 01:23:51,690 tabula, zvaigžņu tabula. 1743 01:23:51,690 --> 01:23:55,280 Ir kāds veids, kā šos divus savienot kopā, sakārtojot viena ID ar 1744 01:23:55,280 --> 01:23:58,870 otru un iegūstot vairāk datu. 1745 01:23:58,870 --> 01:24:01,690 Tāpēc paspēlēsimies ar dažiem no šiem datiem. 1746 01:24:01,690 --> 01:24:05,148 Kā būtu, ja mēs sāktu ar to , ko iepriekš uzsvērām, žanrus. 1747 01:24:05,148 --> 01:24:06,794 Tāpēc ļaujiet man turpināt un ātri apskatīt visus žanrus šajā 1748 01:24:06,794 --> 01:24:08,440 datubāzē. 1749 01:24:08,440 --> 01:24:10,500 Tāpēc atlasiet zvaigzni no žanriem. 1750 01:24:10,500 --> 01:24:12,870 Zvaigzne parasti būs nedaudz satriecoša, taču tas man tikai ļauj 1751 01:24:12,870 --> 01:24:15,240 nojaust, kādi ir dati. 1752 01:24:15,240 --> 01:24:19,440 Bet patiesībā paskatīsimies, apskatīsim tos visus. 1753 01:24:19,440 --> 01:24:20,850 Labi, tas ir daudz. 1754 01:24:20,850 --> 01:24:24,210 Tie visi ir oficiālie IMDb žanri. 1755 01:24:24,210 --> 01:24:27,030 Labi, tas nebija baigi ilgi. 1756 01:24:27,030 --> 01:24:28,350 Ļaujiet man to filtrēt. 1757 01:24:28,350 --> 01:24:32,175 Tātad no žanriem, kur žanrs ir vienāds ar komēdiju, ar lielo C burtu, 1758 01:24:32,175 --> 01:24:36,000 pamatojoties uz datiem, ko redzu. 1759 01:24:36,000 --> 01:24:38,220 Labi, ko es tagad redzu? 1760 01:24:38,220 --> 01:24:40,425 Un patiesībā ļaujiet man to patvaļīgi ierobežot līdz 10, lai gan es 1761 01:24:40,425 --> 01:24:42,630 varētu to ierobežot ar visu, ko vēlos. 1762 01:24:42,630 --> 01:24:45,060 Šeit ir 10 komēdijas. 1763 01:24:45,060 --> 01:24:46,080 Kas tās ir? 1764 01:24:46,080 --> 01:24:47,490 Nu, kurš pie velna zina? 1765 01:24:47,490 --> 01:24:49,590 Es zinu tikai 10 šovu ID. 1766 01:24:49,590 --> 01:24:51,180 Tagad es varētu darīt kaut ko līdzīgu šim. 1767 01:24:51,180 --> 01:24:53,400 Kā mēs esam redzējuši iepriekš ar SQL, es varētu darīt, labi, labi, 1768 01:24:53,400 --> 01:24:55,620 izdomāsim, kas ir šī pārraides ID. 1769 01:24:55,620 --> 01:24:59,685 Atlasiet zvaigzni no pārraidēm, kur meklētās pārraides ID ir vienāds 1770 01:24:59,685 --> 01:25:03,750 ar ko? 1771 01:25:03,750 --> 01:25:06,910 62614 semikolu. 1772 01:25:06,910 --> 01:25:11,200 Tāpēc es varēju to meklēt manuāli, veicot atsauces uz citu tabulu. 1773 01:25:11,200 --> 01:25:14,860 Tā bija attiecīgā izrāde, pirmā komēdija datu kopā. 1774 01:25:14,860 --> 01:25:16,200 Ļaujiet man uzmeklēt otro. 1775 01:25:16,200 --> 01:25:20,610 Tā vietā ievadīsim 63881 Enter. 1776 01:25:20,610 --> 01:25:21,150 Labi. 1777 01:25:21,150 --> 01:25:22,410 Tā nu lūk, izrāde. 1778 01:25:22,410 --> 01:25:23,640 Un izpildisim vēl vienu. 1779 01:25:23,640 --> 01:25:26,580 Un pietiks ar to, ka tas vienkārši kļūst nogurdinošs un ātri 1780 01:25:26,580 --> 01:25:29,520 neaizsargāts pret kļūdām. 1781 01:25:29,520 --> 01:25:31,710 Tas noteikti nevar būt veids, kā to izdarīt. 1782 01:25:31,710 --> 01:25:35,280 Patiešām, SQL ļaus mums to darīt nedaudz jaudīgāk. 1783 01:25:35,280 --> 01:25:36,790 Darīsim tā. 1784 01:25:36,790 --> 01:25:39,715 Tā vietā, lai īslaicīgi iegūtu šo tabulu ar visiem šiem šovu ID un 1785 01:25:39,715 --> 01:25:42,640 visiem šiem žanriem, uzlabosim vaicājumu. 1786 01:25:42,640 --> 01:25:47,316 Tātad, vienkārši atlasiet izrādes ID no žanru tabulas, kur žanrs ir 1787 01:25:47,316 --> 01:25:51,993 vienāds ar "comedy.". Tagad man ir liels šovu ID saraksts, kas visi 1788 01:25:51,993 --> 01:25:56,670 ir komēdijas. 1789 01:25:56,670 --> 01:25:57,205 Cik daudz? 1790 01:25:57,205 --> 01:25:58,830 Nu, es varu apvienot idejas no iepriekšējiem. 1791 01:25:58,830 --> 01:26:01,206 Es varu vienkārši saskaitīt visus šos šovu ID vai zvaigznes, ja vēlos 1792 01:26:01,206 --> 01:26:03,582 arī to darīt. 1793 01:26:03,582 --> 01:26:05,040 Bet es varu saskaitīt visus tos šovu ID. 1794 01:26:05,040 --> 01:26:09,880 48 706 komēdijas TV šovu IMDb datubāzē. 1795 01:26:09,880 --> 01:26:11,140 Tāpēc šķiet daudz. 1796 01:26:11,140 --> 01:26:14,620 Bet kā es varu tagad izmantot šo informāciju un atgūt datubāzē esošo 1797 01:26:14,620 --> 01:26:18,100 komēdiju nosaukumus, nedarot to manuāli? 1798 01:26:18,100 --> 01:26:19,720 Nu, darīsim tā. 1799 01:26:19,720 --> 01:26:21,270 Pirms brīža man ir šis vaicājums. 1800 01:26:21,270 --> 01:26:25,190 Atlasiet šova  ID no žanriem, kur pašreizējais žanrs ir citāts 1801 01:26:25,190 --> 01:26:29,110 “komēdija”. Kā būtu , ja es šos vaicājumus ievietoju iekavās, kā 1802 01:26:29,110 --> 01:26:33,030 piemēram, skolas matemātiku? 1803 01:26:33,030 --> 01:26:35,940 Ko darīt, ja es to visu apvienoju iekavās? 1804 01:26:35,940 --> 01:26:38,040 Un tagad ļaujiet man izvēlēties, ko es patiešām vēlos. 1805 01:26:38,040 --> 01:26:45,230 Ļaujiet man izvēlēties, kā būtu ar visu šovu nosaukumiem, kur šova 1806 01:26:45,230 --> 01:26:52,420 ideja ir šajā šova ID sarakstā. 1807 01:26:52,420 --> 01:26:56,635 Tātad, ja piekrītat, ka šovu tabulā ir ID kolonna, kas citādi tiek 1808 01:26:56,635 --> 01:27:00,850 saukta par tās primāro atslēgu, unikālais ID, kas to identificē, 1809 01:27:00,850 --> 01:27:05,065 tāpat kā mūsu Hārvardas ID, mūsu Jēlas ID, un jūs piekrītat, ka pirms 1810 01:27:05,065 --> 01:27:09,280 brīža šis īsākais vaicājums atdos man tikai visu datubāzē esošo 1811 01:27:09,280 --> 01:27:13,495 komēdiju šovu  ID, jūs faktiski varat apvienot vai ligzdot šos 1812 01:27:13,495 --> 01:27:17,710 vaicājumus. 1813 01:27:17,710 --> 01:27:19,735 Tajā tiks ievērota SQLite darbību secība ar iekavām, tāpat kā 1814 01:27:19,735 --> 01:27:21,760 pamatskolas matemātika. 1815 01:27:21,760 --> 01:27:24,070 Tātad iekavās esošā lieta tiks izpildīta vispirms. 1816 01:27:24,070 --> 01:27:27,340 Tādējādi tiek atgriezts ID saraksts, piemēram, 48 000 ID. 1817 01:27:27,340 --> 01:27:31,810 Un tad šis vaicājums, ārējais vaicājums, iegūs nosaukumu no visiem 1818 01:27:31,810 --> 01:27:36,280 šoviem , kuru šova ID ir lielajā sarakstā ar 48 000. 1819 01:27:36,280 --> 01:27:39,340 Tātad, ja es tagad izpildīšu tos kopā, es domāju, ka saraksts 1820 01:27:39,340 --> 01:27:42,400 joprojām būs nedaudz garš, bet ļaujiet man izpildīt to kopā. 1821 01:27:42,400 --> 01:27:45,880 Tagad es redzu šo garo rezultātu sarakstu. 1822 01:27:45,880 --> 01:27:46,900 Nedaudz satriecoši. 1823 01:27:46,900 --> 01:27:49,680 Turpināsim un varbūt ierobežosim to līdz 10, kā iepriekš, diskusijas 1824 01:27:49,680 --> 01:27:52,460 labad. 1825 01:27:52,460 --> 01:27:56,940 Un tagad es redzu 10 komēdijas, kas ir patvaļīgi pasūtītas no datu 1826 01:27:56,940 --> 01:28:01,420 bāzes, kuru žanrs patiešām ir komēdija. 1827 01:28:01,420 --> 01:28:04,310 Ja es vēlos to darīt nedaudzkārtīgak , es varētu darīt to. 1828 01:28:04,310 --> 01:28:05,260 Paskatīsimies. 1829 01:28:05,260 --> 01:28:08,725 Kāpēc es nekārtoju pēc nosaukuma augošā secībā, kas ir alfabēta 1830 01:28:08,725 --> 01:28:12,190 secībā, vai arī noklusējuma vērtība ir augoša. 1831 01:28:12,190 --> 01:28:13,240 Ierobežojums 10. 1832 01:28:13,240 --> 01:28:16,280 Tagad es redzu 10 populārākās, ar to domāju dīvaini nosauktas lietas 1833 01:28:16,280 --> 01:28:19,320 ar hash simboliem, iespējams, lai iegūtu nosaukumus līdz sākumam, vai 1834 01:28:19,320 --> 01:28:22,360 varbūt tās ir atsauces. 1835 01:28:22,360 --> 01:28:27,550 Šeit mums ir alfabēta secībā pirmie 10 šovi , kas ir komēdijas. 1836 01:28:27,550 --> 01:28:31,705 Vai ir kādi jautājumi par šāda veida vaicājumiem ? 1837 01:28:31,705 --> 01:28:35,762 Tas ir diezgan daudz, bet tajā pašā laikā tas ir tāpat kā agrāko 1838 01:28:35,762 --> 01:28:39,820 mazāko ideju apkopošana nedaudz noderīgākos vaicājumos. 1839 01:28:39,820 --> 01:28:40,360 Jā. 1840 01:28:40,360 --> 01:28:43,348 Mērķauditorija: [NEdzirdams] 1841 01:28:46,343 --> 01:28:48,760 DEIVIDS MALANS: Vai ārējām atslēgām ir jānosaka attiecības? 1842 01:28:48,760 --> 01:28:51,902 Kad veidojat tabulu, programmētājs vai datu bāzes administrators 1843 01:28:51,902 --> 01:28:55,045 izveidos šīs attiecības, izmantojot atslēgvārdus primārā atslēga un 1844 01:28:55,045 --> 01:28:58,187 ārējā atslēga, kas parāda datubāzei, kas ir saistīts ar attēla 1845 01:28:58,187 --> 01:29:01,330 saturu. 1846 01:29:01,330 --> 01:29:02,530 Tātad jūs to darāt vienreiz. 1847 01:29:02,530 --> 01:29:08,140 Un tagad, būdams programmētājs, kurš pārzina datu bāzi, es tikai 1848 01:29:08,140 --> 01:29:13,750 izmantoju šīs ārējās atslēgas veidā, kas atbilst to dizainam. 1849 01:29:13,750 --> 01:29:16,247 Un šeit tas ir noderīgi kādā brīdī, pat ja neviens jums visu 1850 01:29:16,247 --> 01:29:18,745 nepaskaidros , lai pārliecinātos, ka jūs saprotat datubāzi, jo tas 1851 01:29:18,745 --> 01:29:21,242 burtiski informēs par to, ko ievadāt SQL, lai iegūtu jums svarīgus 1852 01:29:21,242 --> 01:29:23,740 datus. 1853 01:29:23,740 --> 01:29:26,060 Nu, darīsim kaut ko nedaudz precīzāku. 1854 01:29:26,060 --> 01:29:27,860 Kā būtu - ļoti saprātīgs jautājums. 1855 01:29:27,860 --> 01:29:29,415 Un, godīgi sakot, tas ir tieši tas, kadēļ imdb.com un app tiek 1856 01:29:29,415 --> 01:29:30,970 izmantots . 1857 01:29:30,970 --> 01:29:32,785 Ko darīt, ja vēlaties atrast visus šovus , kurās piedalās Stīvs 1858 01:29:32,785 --> 01:29:34,600 Kerels? 1859 01:29:34,600 --> 01:29:36,160 Samērā saprātīgs vaicājums. 1860 01:29:36,160 --> 01:29:38,155 Burtiski kaut kas, ko kāds varētu ierakstīt Google vai, konkrētāk, 1861 01:29:38,155 --> 01:29:40,150 IMDb. 1862 01:29:40,150 --> 01:29:42,920 Tomēr no pirmā acu uzmetiena nav īsti skaidrs, kā to izdarīt, jo no 1863 01:29:42,920 --> 01:29:45,690 manas datu bāzes, ja šīs ir manas sešas tabulas, es diezgan viegli 1864 01:29:45,690 --> 01:29:48,460 varu iegūt Stīvu Kerelu no šejienes. 1865 01:29:48,460 --> 01:29:50,845 Bet es tiešām varu uzzināt tikai viņa ID numuru, lai kāds tas būtu, 1866 01:29:50,845 --> 01:29:53,230 viņa vārdu, kuru es jau zinu, un viņa dzimšanas gadu. 1867 01:29:53,230 --> 01:29:54,715 Labi, interesanti, bet tam nav nekāda sakara ar šoviem , kuros viņš 1868 01:29:54,715 --> 01:29:56,200 piedalās. 1869 01:29:56,200 --> 01:29:59,455 Es varu skatīties šovus šeit, bet tur nav ne vārda par Stīvu Kerelu, 1870 01:29:59,455 --> 01:30:02,710 jo šeit nav personas ID . 1871 01:30:02,710 --> 01:30:04,660 Kur šīs attiecības tiek īstenotas? 1872 01:30:04,660 --> 01:30:06,590 Nu, tas ir ieviests šeit. 1873 01:30:06,590 --> 01:30:07,910 Tātad, kā mēs to darām? 1874 01:30:07,910 --> 01:30:10,680 Nu, lūk, ideāls piemērs mācībai, ko esam mēģinājuši uzsvērt nedēļām 1875 01:30:10,680 --> 01:30:13,450 ilgi, veicot soli pa solim . 1876 01:30:13,450 --> 01:30:17,750 Sadaliet lielākas problēmas mazākās un darīsim kaut ko līdzīgu šim. 1877 01:30:17,750 --> 01:30:20,740 Iegūsim visu, ko es zinu par Stīvu Kerelu no datu bāzes. 1878 01:30:20,740 --> 01:30:24,685 Atlasīsim zvaigzni no cilvēkiem, kur personas vārds ir "Steve 1879 01:30:24,685 --> 01:30:28,630 Carell." . Es tikai vēlos redzēt, kādi dati mums ir. 1880 01:30:28,630 --> 01:30:30,640 Un lūk, kas mums ir. 1881 01:30:30,640 --> 01:30:33,895 Ir tikai viens Stīvs Kerels, kurš dzimis 1962. gadā, un viņa 1882 01:30:33,895 --> 01:30:37,150 unikālais ID ir 136797 saskaņā ar IMDb. 1883 01:30:37,150 --> 01:30:40,930 Tas pats par sevi nav globāls dalībnieku identifikators. 1884 01:30:40,930 --> 01:30:45,010 Labi, kā es varu tagad iegūt visus šovus, kuros piedalās Stīvs Kerels? 1885 01:30:45,010 --> 01:30:46,130 Nu, es varētu to izdarīt. 1886 01:30:46,130 --> 01:30:51,190 Izvēlieties zvaigzni no zvaigznēm, lai nesajauktu abas. 1887 01:30:51,190 --> 01:30:53,500 Viens ir simbols, viens ir tabulas nosaukums. 1888 01:30:53,500 --> 01:30:58,690 Ja personas ID ir 136797. 1889 01:30:58,690 --> 01:31:01,816 Tāpēc es domāju, ka tas man tagad sniegs visu, sākot no zvaigžņu 1890 01:31:01,816 --> 01:31:04,943 tabulas, kas attiecas uz Stīvu Kerelu. 1891 01:31:04,943 --> 01:31:06,818 Un jūs redzēsit, ka personas ID ir tas pats, jo es burtiski meklēju 1892 01:31:06,818 --> 01:31:08,693 tikai Stīvu Kerelu. 1893 01:31:08,693 --> 01:31:12,200 Bet ir apmēram 20 šovu, kuros viņš ir bijis. 1894 01:31:12,200 --> 01:31:14,450 Labi, lūk, kur lietas kļūtu garlaicīgas. 1895 01:31:14,450 --> 01:31:15,340 Kas tie par šoviem? 1896 01:31:15,340 --> 01:31:18,400 Es varētu izvēlēties nosaukumu no šoviem , kur the ID of the show 1897 01:31:18,400 --> 01:31:21,460 equals. 1898 01:31:21,460 --> 01:31:23,565 Un šeit vienmēr, kad kopējat ielīmēšanu, jūs, iespējams, darāt kaut 1899 01:31:23,565 --> 01:31:25,670 ko nepareizi. 1900 01:31:25,670 --> 01:31:27,890 Labi, viņš piedalījās Danas Kārvijas šovā. 1901 01:31:27,890 --> 01:31:28,715 Pazīstams ar to. 1902 01:31:28,715 --> 01:31:29,590 Darīsim vēl vienu. 1903 01:31:29,590 --> 01:31:31,460 Mēs to nokopēsim un ielīmēsim. 1904 01:31:31,460 --> 01:31:34,090 Kur ID ir vienāds ar šo. 1905 01:31:34,090 --> 01:31:34,890 Over The Top . 1906 01:31:34,890 --> 01:31:35,390 Cits. 1907 01:31:35,390 --> 01:31:37,000 Un, ja mēs turpināsim rakt, mēs, iespējams, atradīsim The Office. 1908 01:31:37,000 --> 01:31:40,240 Bet mans Dievs, 20 vaicājumu manuāla veikšana prasīs mūžību . 1909 01:31:40,240 --> 01:31:41,252 Tas nav ļoti dinamiski . 1910 01:31:41,252 --> 01:31:42,606 Bet ko darīt, ja mēs šos vaicājumus vienkārši ligzdojam nedaudz 1911 01:31:42,606 --> 01:31:43,960 dinamiskāk? 1912 01:31:43,960 --> 01:31:45,830 Tāpēc ļaujiet man atkal sākt no sākuma. 1913 01:31:45,830 --> 01:31:51,120 Ko darīt, ja mēs turpinām atlasīt visu, ko zinām par cilvēkiem, kuru 1914 01:31:51,120 --> 01:31:56,410 vārds ir vienāds ar Stīvu Kerelu. 1915 01:31:56,410 --> 01:31:58,220 Tas mums sniedza šos datus iepriekš. 1916 01:31:58,220 --> 01:31:59,470 Man nav vajadzīgi visi šie dati. 1917 01:31:59,470 --> 01:32:00,100 Es zinu viņa vārdu. 1918 01:32:00,100 --> 01:32:01,517 Man ir vienalga par viņa dzimšanas gadu. 1919 01:32:01,517 --> 01:32:05,140 Mainīsim šo, lai vienkārši iedotu man Stīva Kerela ID. 1920 01:32:05,140 --> 01:32:08,390 Un tas man tagad atdod šo mazāko pagaidu datu kopu. 1921 01:32:08,390 --> 01:32:08,890 Labi. 1922 01:32:08,890 --> 01:32:12,195 Vai tagad varu to izmantot cita vaicājuma ietvaros? 1923 01:32:12,195 --> 01:32:14,320 Nu, ļaujiet man ielikt visu iekavās . 1924 01:32:14,320 --> 01:32:18,398 Un tagad ļaujiet man teikt, ka zvaigžņu tabulā atlasiet zvaigzni , 1925 01:32:18,398 --> 01:32:22,477 kur personas ID ir vienāds ar šo. 1926 01:32:22,477 --> 01:32:24,628 Tāpēc es apzināti neizmantoju, jo pieņemu, ka pasaulē patiešām ir 1927 01:32:24,628 --> 01:32:26,780 tikai viens Stīvs Kerels. 1928 01:32:26,780 --> 01:32:28,480 Tāpēc es neatgūšu Stīva Kerela sarakstu. 1929 01:32:28,480 --> 01:32:30,640 Šajā gadījumā es atgriežu to vienīgo. 1930 01:32:30,640 --> 01:32:31,810 Tātad equal ir labi. 1931 01:32:31,810 --> 01:32:33,310 In ir tad, kad jums ir vairāki. 1932 01:32:33,310 --> 01:32:34,840 Equal ir tad, ja tev tāds ir. 1933 01:32:34,840 --> 01:32:36,375 Ļaujiet man turpināt un tagad nospiediet taustiņu Enter. 1934 01:32:36,375 --> 01:32:37,750 Labi, ir vairāk datu, nekā man vajag. 1935 01:32:37,750 --> 01:32:40,430 Man nevajag 20 Stīva Kerela personas apliecības kopijas. 1936 01:32:40,430 --> 01:32:41,380 Tāpēc ļaujiet man uzsist. 1937 01:32:41,380 --> 01:32:46,420 Ļaujiet man atgriezties un iegūt šova ID no Stīva Kerela. 1938 01:32:46,420 --> 01:32:52,070 Un tagad man ir saraksts ar aptuveni 20 šovu ID, kuros viņš ir bijis. 1939 01:32:52,070 --> 01:32:52,570 Labi. 1940 01:32:52,570 --> 01:32:53,597 Kā es tagad varu to izmantot? 1941 01:32:53,597 --> 01:32:54,430 Nu, ļaujiet man uzsist. 1942 01:32:54,430 --> 01:32:57,040 Ļaujiet man visu likt iekavās. 1943 01:32:57,040 --> 01:32:58,960 Un tagad ļaujiet man izvēlēties, ko es patiešām vēlos. 1944 01:32:58,960 --> 01:33:03,340 Izvēlieties virsrakstu no šoviem , kur. 1945 01:33:03,340 --> 01:33:05,020 Un šeit ir pēdējais žests . 1946 01:33:05,020 --> 01:33:11,350 Raidījumu tabulā ir ID, nosaukums, gads un sērija. 1947 01:33:11,350 --> 01:33:21,610 Un tas, ko es patiešām vēlos, ir pārbaudīt, kurām izrādēm ir kāds ID? 1948 01:33:21,610 --> 01:33:24,510 Vai kāds vēlas pabeigt domu? 1949 01:33:24,510 --> 01:33:25,860 Es tikai gribu... jā. 1950 01:33:25,860 --> 01:33:28,435 Mērķauditorija: [NEdzirdams] 1951 01:33:28,435 --> 01:33:29,310 DEIVIDS MALANS: Tieši tā. 1952 01:33:29,310 --> 01:33:30,570 ID šajā. 1953 01:33:30,570 --> 01:33:31,690 Un tas kļūst neglīts. 1954 01:33:31,690 --> 01:33:33,710 Un, kad jūs faktiski ierakstāt savus vaicājumus teksta failā, varat 1955 01:33:33,710 --> 01:33:35,730 tos labi formatēt un pievienot atkāpi. 1956 01:33:35,730 --> 01:33:37,334 Mans fonts tikai kļūst — es nevēlos to padarīt pārāk mazu, lai 1957 01:33:37,334 --> 01:33:38,938 ietilptu viss. 1958 01:33:38,938 --> 01:33:40,230 Bet tagad mums ir trīs jautājumi. 1959 01:33:40,230 --> 01:33:44,550 Viens ir divreiz ligzdotās iekavās, tad ir vidējā, tad ārējā. 1960 01:33:44,550 --> 01:33:47,170 Tāpēc šis pēdējais vaicājums ļaus man iegūt nosaukumu no šoviem , kur 1961 01:33:47,170 --> 01:33:49,790 šova ID ir šajā lielajā sarakstā, kurā ir apmēram 20 šovu ID, kuros 1962 01:33:49,790 --> 01:33:52,410 piedalās Stīvs Kerels. 1963 01:33:52,410 --> 01:33:54,812 Un es to zināju, jo es šeit uzmeklēju viņa vārdu. 1964 01:33:54,812 --> 01:33:56,716 Un ievērojiet, ko es šoreiz neizdarīju, ka es manuāli neiekodēju viņa 1965 01:33:56,716 --> 01:33:58,620 ID numuru. 1966 01:33:58,620 --> 01:33:59,430 Nav vajadzības. 1967 01:33:59,430 --> 01:34:01,740 Tas būtu slikts veids, kā ieviest tīmekļvietni, ja izmantojat 1968 01:34:01,740 --> 01:34:04,050 datubāzi slēptā veidā . 1969 01:34:04,050 --> 01:34:08,060 Jūs vēlaties, lai IMDb tiešām meklētu visu, ko cilvēks ir ievadījis, 1970 01:34:08,060 --> 01:34:12,070 un neviens nezinātu Stīva Kerela personas ID vai ko citu. 1971 01:34:12,070 --> 01:34:14,580 Tāpēc mēs to visu esam paveikuši dinamiski. 1972 01:34:14,580 --> 01:34:16,635 Un tagad, ja es nospiedīšu Enter, es domāju, ka es saņemšu visus viņa 1973 01:34:16,635 --> 01:34:18,690 šovus. 1974 01:34:18,690 --> 01:34:21,840 Turpināsim un sakārtosim to pēc nosaukuma, lai padarītu to kārtīgu. 1975 01:34:21,840 --> 01:34:24,810 Un jūs, iespējams, redzēsit vismaz vienu vai vairākus šovus. 1976 01:34:24,810 --> 01:34:29,520 Un, iespējams, vispopulārākais ir, dot dot dot, The Office. 1977 01:34:29,520 --> 01:34:33,360 Tātad šis ir burtiski tāds vaicājums, kas tiek izpildīts slēpti , kad 1978 01:34:33,360 --> 01:34:37,200 apmeklējat tīmekļvietnes vai lietotnes, piemēram, IMDb. 1979 01:34:37,200 --> 01:34:40,870 Jūsu teksta vaicājums, iespējams, tiek pievienots garākam SQL 1980 01:34:40,870 --> 01:34:44,540 vaicājumam, piemēram, šim, kur kāds programmētājs IMDb, iespējams, ir 1981 01:34:44,540 --> 01:34:48,210 uzrakstījis visu šo vaicājumu pirms nedēļām, mēnešiem, gadiem, un 1982 01:34:48,210 --> 01:34:51,880 viņi vienkārši kaut kā pievieno vērtību, ko jūs, cilvēks, ievadījāt 1983 01:34:51,880 --> 01:34:55,550 meklēšanas lodziņā vai tamlīdzīgi. 1984 01:34:55,550 --> 01:35:03,010 Vai jums ir jautājumi par šo vai citu datu atrašanu? 1985 01:35:03,010 --> 01:35:03,890 Nē? 1986 01:35:03,890 --> 01:35:04,390 Labi. 1987 01:35:04,390 --> 01:35:06,980 Tātad, kur vēl mēs varētu iet ar šo? 1988 01:35:06,980 --> 01:35:12,700 Nu, padomāsim, kā citādi mēs varētu apvienot datus. 1989 01:35:12,700 --> 01:35:15,882 Pieņemsim, ka nākamais jautājums, iespējams, būtu vērsts ne tikai uz 1990 01:35:15,882 --> 01:35:19,065 cilvēkiem, šoviem un šīm zvaigznēm, bet gan par to, kā iegūt vairāk 1991 01:35:19,065 --> 01:35:22,247 informācijas par pašiem šoviem, piemēram, žanriem, vērtējumiem vai 1992 01:35:22,247 --> 01:35:25,430 tamlīdzīgi. 1993 01:35:25,430 --> 01:35:28,030 Tātad, koncentrēsimies tikai uz šīm divām tabulām. 1994 01:35:28,030 --> 01:35:31,640 Atcerieties, ka katram šovam ir ID, nosaukums, gads un sērijas. 1995 01:35:31,640 --> 01:35:33,960 Bet tam var būt arī viena vai vairākas attiecības ar rindām un šo 1996 01:35:33,960 --> 01:35:36,280 citu tabulu, ko sauc par žanriem. 1997 01:35:36,280 --> 01:35:38,620 Un tas ir tāpēc, lai šovs varētu būt komēdija, var būt drāma, var būt 1998 01:35:38,620 --> 01:35:40,960 daudzas citas lietas. 1999 01:35:40,960 --> 01:35:42,400 Viena rinda uz. 2000 01:35:42,400 --> 01:35:45,290 Tātad jūs atkal un atkal un atkal redzētu vienu un to pašu šova ID ar 2001 01:35:45,290 --> 01:35:48,180 citu žanru, kas rakstīts angļu valodā, piemēram, komēdija, drāma vai 2002 01:35:48,180 --> 01:35:51,070 tamlīdzīgi. 2003 01:35:51,070 --> 01:35:53,890 Nu, kā es varu atjaunot šos datus? 2004 01:35:53,890 --> 01:35:56,710 Izrādās, ka ir daži dažādi veidi, kā to izdarīt. 2005 01:35:56,710 --> 01:36:00,610 Un ļaujiet man ierosināt šeit ieviest šo atslēgvārdu, join . 2006 01:36:00,610 --> 01:36:05,525 Un tas patiešām ir visspēcīgākais no SQL atslēgvārdiem. 2007 01:36:05,525 --> 01:36:06,650 Tas nav jāizmanto. 2008 01:36:06,650 --> 01:36:10,070 Mēs esam redzējuši, ka ar ligzdotajiem vaicājumiem joprojām varat 2009 01:36:10,070 --> 01:36:13,490 atlasīt datus vairākās tabulās, taču šeit ir vēl viens veids. 2010 01:36:13,490 --> 01:36:14,660 Tāpēc ļaujiet man to izdarīt. 2011 01:36:14,660 --> 01:36:17,710 Ļaujiet man atgriezties savā SQLite datubāzē. 2012 01:36:17,710 --> 01:36:20,695 Un ļaujiet man vienā elpas vilcienā atlasīt tieši tos datus, kurus es 2013 01:36:20,695 --> 01:36:23,680 vēlos. 2014 01:36:23,680 --> 01:36:26,980 Izvēlieties zvaigzni no pārraidēm. 2015 01:36:26,980 --> 01:36:30,500 Un sākotnēji ierobežosim to līdz 10, lai redzētu, kā tas izskatās. 2016 01:36:30,500 --> 01:36:31,000 Labi. 2017 01:36:31,000 --> 01:36:32,250 Tie atkal ir šovu dati. 2018 01:36:32,250 --> 01:36:34,690 Izvēlieties zvaigzni no žanriem. 2019 01:36:34,690 --> 01:36:37,760 Ierobežosim arī to līdz 10, lai tikai apzinātos to. 2020 01:36:37,760 --> 01:36:39,730 Un tagad tas nav tik noderīgi. 2021 01:36:39,730 --> 01:36:42,610 Tomēr dati, kas atrodas galējā kreisajā kolonnā, ir primārā atslēga 2022 01:36:42,610 --> 01:36:45,490 rādījumu tabulā. 2023 01:36:45,490 --> 01:36:46,870 Tie ir tikai unikāli ID. 2024 01:36:46,870 --> 01:36:51,530 Dati šeit žanru tabulā, atcerieties , show ID ir ārējā atslēga. 2025 01:36:51,530 --> 01:36:54,090 Tātad tie ir tie paši skaitļi, bet tikai iekopēti citā tabulā, lai 2026 01:36:54,090 --> 01:36:56,650 mēs varētu izmantot šīs attiecības starp tiem. 2027 01:36:56,650 --> 01:37:00,750 Kā es varu sakārtot šos skaitļus ar šiem skaitļiem, lai iegūtu 2028 01:37:00,750 --> 01:37:04,850 plašāku tabulu, kurā ir nosaukums un gads, epizodes un žanrs, un, pie 2029 01:37:04,850 --> 01:37:08,950 velna, vērtējumi un tas viss arī, ja mēs to vēlamies? 2030 01:37:08,950 --> 01:37:10,920 Jūs varat veikt join šīm tabulām, vienkārši norādot datubāzei, kam 2031 01:37:10,920 --> 01:37:12,890 pievienoties. 2032 01:37:12,890 --> 01:37:13,940 Tāpēc ļaujiet man to izdarīt. 2033 01:37:13,940 --> 01:37:17,110 Izvēlieties zvaigzni no pārraidēm. 2034 01:37:17,110 --> 01:37:21,760 Join šai tabulai, lai gan žanru tabulā. 2035 01:37:21,760 --> 01:37:24,160 Nu, kā jūs vēlaties pievienoties šīm divām tabulām ? 2036 01:37:24,160 --> 01:37:26,860 Un atkal divas tabulas no attēla izskatījās šādi. 2037 01:37:26,860 --> 01:37:30,840 Kā programmatiski likt SQL vienu no tām novietot blakus otrai , 2038 01:37:30,840 --> 01:37:34,820 sakārtot visu ID, lai jūs vienkārši iegūtu vienu lielāku datu kopu? 2039 01:37:34,820 --> 01:37:39,160 Nu, mēs patiešām varam izmantot šo sintaksi, ko sauc par join . 2040 01:37:39,160 --> 01:37:41,140 Tātad atpakaļ uz VS kodu šeit. 2041 01:37:41,140 --> 01:37:44,380 Un ļaujiet man veikt join šīm divām tabulām. 2042 01:37:44,380 --> 01:37:45,970 Atvainojiet, šeit ir drukas kļūda. 2043 01:37:45,970 --> 01:37:50,383 Savienojiet žanrus šovu tabulas ID kolonnā, jeb tās primārajā 2044 01:37:50,383 --> 01:37:54,796 atslēgā, kas ir līdzvērtīga žanru tabulas šovuID kolonnai, jeb ārējā 2045 01:37:54,796 --> 01:37:59,210 atslēga. 2046 01:37:59,210 --> 01:38:03,010 Citiem vārdiem sakot, tas izskatās nedaudz noslēpumaini, bet es tikai 2047 01:38:03,010 --> 01:38:06,810 saku SQL, kā sakārtot šīs divas tabulas un kādu kolonnu saskaņot ar 2048 01:38:06,810 --> 01:38:10,610 otru, lai skaitļi sakristu un es iegūtu būtībā plašāku tabulu. 2049 01:38:10,610 --> 01:38:14,930 Ļaujiet man turpināt un nospiest semikolu un taustiņu Enter. 2050 01:38:14,930 --> 01:38:17,330 Un tas man tagad sniegs daudz datu. 2051 01:38:17,330 --> 01:38:18,600 Mums var nākties to pārtraukt. 2052 01:38:18,600 --> 01:38:22,186 Bet jūs varat pamanīt , ka mēs saņemam ID, nosaukumu, gadu, sēriju 2053 01:38:22,186 --> 01:38:25,773 skaitu, un atkal lieki ID, taču tas ir sagaidāms, ja veicu join ar 2054 01:38:25,773 --> 01:38:29,360 viņiem, un žanru visā ekrānā pa labi. 2055 01:38:29,360 --> 01:38:31,740 Ļaujiet man nospiest Control C, lai pārtrauktu. 2056 01:38:31,740 --> 01:38:33,890 Ļaujiet man aprobežoties ar The Office . 2057 01:38:33,890 --> 01:38:36,785 Tātad, ja virsraksts ir vienāds ar "The Office" ;, lai mēs varētu 2058 01:38:36,785 --> 01:38:39,680 koncentrēties tikai uz vienu datu paraugu. 2059 01:38:39,680 --> 01:38:43,490 Un šeit, jautri, ir bijis vairāk nekā viens Office . 2060 01:38:43,490 --> 01:38:46,370 Iespējams, ka jums visiem patīk šī sērija, kas sākās 2005. gadā ar 2061 01:38:46,370 --> 01:38:49,250 188 sērijām. 2062 01:38:49,250 --> 01:38:53,060 Tā ID šovu tabulā ir 386676. 2063 01:38:53,060 --> 01:38:54,710 Tas ir apstiprināts arī šeit. 2064 01:38:54,710 --> 01:38:56,850 Tātad atkal mēs tikko esam pievienojušies divām tabulām . 2065 01:38:56,850 --> 01:38:57,350 Kā? 2066 01:38:57,350 --> 01:38:58,730 Sarindojot tos laukus. 2067 01:38:58,730 --> 01:39:01,715 Bet tagad, kad mēs redzam, ka gandrīz visi The Offices, kas ražoti 2068 01:39:01,715 --> 01:39:04,700 gadu desmitiem, ir komēdijas, izņemot šo. 2069 01:39:04,700 --> 01:39:07,430 Bija The Office versija, kas tika ražota 2001. gadā un tika uzskatīta 2070 01:39:07,430 --> 01:39:10,160 par drāmu. 2071 01:39:10,160 --> 01:39:11,940 Neesat pārliecināts, vai tas ir saistīts ar otru. 2072 01:39:11,940 --> 01:39:13,640 Kā mēs varam saistīt citus datus? 2073 01:39:13,640 --> 01:39:16,920 Nu, turpināsim un sasaistīsim arī reitingos. 2074 01:39:16,920 --> 01:39:20,796 Tā vietā, lai pievienotu to ar žanriem, ļaujiet man attīt atpakaļ 2075 01:39:20,796 --> 01:39:24,673 šeit un veikt join ar shows on ratings on shows.id equals 2076 01:39:24,673 --> 01:39:28,550 ratings.show_ID 2077 01:39:28,550 --> 01:39:32,185 Diskusijas labad ierobežosim to ar The Office a, kur nosaukums ir 2078 01:39:32,185 --> 01:39:35,820 "The Office" semicolon . 2079 01:39:35,820 --> 01:39:39,112 Un tagad jūs varat redzēt, ka starp dažādajiem Offices šoviem šķiet, 2080 01:39:39,112 --> 01:39:42,404 ka tas, kuru lielākā daļa no mums droši vien pazīst un mīl, ir 2081 01:39:42,404 --> 01:39:45,696 visaugstāk novērtētais ar 9.0, par kuru balsojuši apmēram 585 000 2082 01:39:45,696 --> 01:39:48,988 cilvēku, turpretim šie pārējie šovi , šķiet, nav bijuši tik populāri 2083 01:39:48,988 --> 01:39:52,280 . . 2084 01:39:52,280 --> 01:39:56,370 Un, iespējams, tieši tāpēc jūs redzat mazāk sēriju ar viņiem. 2085 01:39:56,370 --> 01:39:59,236 Tātad, lai gan mēs esam ievietojuši datus vairākās vietās, jūs 2086 01:39:59,236 --> 01:40:02,103 joprojām varat tos atjaunot, sakārtojot lietas šādā veidā un 2087 01:40:02,103 --> 01:40:04,970 atkārtoti savienot tabulas. 2088 01:40:04,970 --> 01:40:09,140 Jautājumi tagad par šo? 2089 01:40:09,140 --> 01:40:16,540 Šis ir SQL darbības pamatā un relāciju datu bāzes. 2090 01:40:16,540 --> 01:40:18,100 Jautājumi? 2091 01:40:18,100 --> 01:40:18,610 Labi. 2092 01:40:18,610 --> 01:40:20,470 Dažas pēdējās iezīmes. 2093 01:40:20,470 --> 01:40:24,320 To nav tik daudz — SQL ir nepieciešama prakse tāpat kā jebkam citam . 2094 01:40:24,320 --> 01:40:26,950 Bet, runājot par sintaksi un iespējām, iepazīstināsim jūs ar pāris 2095 01:40:26,950 --> 01:40:29,580 pēdējām funkcijām un problēmām, kas rodas, un to, kā tās varētu 2096 01:40:29,580 --> 01:40:32,210 atrisināt. 2097 01:40:32,210 --> 01:40:34,640 Darīsim arī to. 2098 01:40:34,640 --> 01:40:36,980 Tāpēc ļaujiet man atgriezties pie VS Code šeit. 2099 01:40:36,980 --> 01:40:40,900 Un vēlreiz uzzināsim Stīva Kerela informāciju. 2100 01:40:40,900 --> 01:40:44,201 Iepriekšējā reizē mēs to izdarījām ar šo ligzdoto vaicājumu, iegūstot 2101 01:40:44,201 --> 01:40:47,503 viņa ID, pēc tam šova  ID un pēc tam šo šovu  ID nosaukumus. 2102 01:40:47,503 --> 01:40:49,420 Izmantojot join , varat to izdarīt nedaudz savādāk. 2103 01:40:49,420 --> 01:40:50,950 Un jebkurš no šiem veidiem ir labs. 2104 01:40:50,950 --> 01:40:53,740 Viens var kļūt garīgi vieglāk uztverams nekā cits. 2105 01:40:53,740 --> 01:40:57,040 Dosimies uz priekšu un atlasīsim virsrakstus no what . 2106 01:40:57,040 --> 01:41:02,095 Personu tabulā atlasīsim nosaukumu. 2107 01:41:02,095 --> 01:41:03,220 Un es nospiedīšu Enter. 2108 01:41:03,220 --> 01:41:06,169 Un, interaktīvi izmantojot SQLite3, ja kādreiz tiek parādīta uzvedne 2109 01:41:06,169 --> 01:41:09,118 , kas saka, ka dot dot dot angle bracket , tas nozīmē, ka jūs 2110 01:41:09,118 --> 01:41:12,067 turpināt savu domu uz nākamo rindiņu. 2111 01:41:12,067 --> 01:41:15,263 Ja jūs to nedomājāt, dažreiz varat nospiest semikolu, lai vienkārši 2112 01:41:15,263 --> 01:41:18,460 beigtu domu, un nospiediet taustiņu Enter, pat ja tas izraisa kļūdu. 2113 01:41:18,460 --> 01:41:19,945 Bet tas ir viens no veidiem, kā tagad nedaudz labāk formatēt 2114 01:41:19,945 --> 01:41:21,430 vaicājumus. 2115 01:41:21,430 --> 01:41:24,597 Es tikai pievienošu atstarpi, lai to būtu vieglāk lasīt. 2116 01:41:24,597 --> 01:41:25,720 Ko es vēlos atlasīt? 2117 01:41:25,720 --> 01:41:30,653 Es vēlos atlasīt šovu nosaukumus no cilvēku tabulas, kas ir savienota 2118 01:41:30,653 --> 01:41:35,586 ar zvaigžņu tabulu cilvēku tabulas ID kolonnā, kas ir vienāda ar 2119 01:41:35,586 --> 01:41:40,520 zvaigžņu tabulas personas ID kolonnu. 2120 01:41:40,520 --> 01:41:43,096 Citiem vārdiem sakot, ja padomājat par to, kas ir cilvēki un kas ir 2121 01:41:43,096 --> 01:41:45,673 zvaigznes, vienam ir ID, citam ir personas ID, es tikai tagad 2122 01:41:45,673 --> 01:41:48,250 savienoju šīs divas tabulas. 2123 01:41:48,250 --> 01:41:49,450 Es veicu join šiem diviem. 2124 01:41:49,450 --> 01:41:53,350 Bet es vēlos to izdarīt arī ar citu tabulu. 2125 01:41:53,350 --> 01:41:54,938 Ļaujiet man papildus veikt join . 2126 01:41:54,938 --> 01:41:57,129 Tāpēc tagad man ir tikai divas rokas, bet tagad es šeit ievietoju 2127 01:41:57,129 --> 01:41:59,320 trešo tabulu , kas ir savienotas kopā. 2128 01:41:59,320 --> 01:42:02,640 Join shows on stars.show_id equals shows.id. Pievienojieties šoviem 2129 01:42:02,640 --> 01:42:05,960 vietnē stars.show_id un show.id. 2130 01:42:05,960 --> 01:42:08,500 Tātad tas tagad savieno trīs tabulas. 2131 01:42:08,500 --> 01:42:12,604 Bet man tas rūp tikai viena persona , tāpēc vietā, kur personas vārds 2132 01:42:12,604 --> 01:42:16,708 ir vienāds, "Steve Carell." . Protams, tas ir noslēpumaināks, taču 2133 01:42:16,708 --> 01:42:20,812 mēs ar šo vaicājumu darām visās trīs tabulās , kas mums ir svarīgas, 2134 01:42:20,812 --> 01:42:24,916 un apvienojam tās visas kopā, izmantojot šo jauno join sintaksi, kas 2135 01:42:24,916 --> 01:42:29,020 burtiski norāda datubāzei, kuras kolonnas jārindo ar ko. 2136 01:42:29,020 --> 01:42:32,102 Un tad mēs filtrējam pašās beigās tāpat kā iepriekš, lai atgrieztos, 2137 01:42:32,102 --> 01:42:35,185 ja es nospiežu Enter, atbilde, kuru mēs vēlamies, kas šajā gadījumā 2138 01:42:35,185 --> 01:42:38,267 ir nedaudz lēnāka, bet tas pats saraksts ar aptuveni 20 šoviem kuros 2139 01:42:38,267 --> 01:42:41,350 viņš ir bijis. . 2140 01:42:41,350 --> 01:42:42,920 Ir vēl viens veids, kā to izdarīt. 2141 01:42:42,920 --> 01:42:45,250 Un atkal tie visi ir tiešsaistes slaidos. 2142 01:42:45,250 --> 01:42:47,035 Tātad jūs varat tos atkārtot, nepierakstot visu, un mēs tos arī 2143 01:42:47,035 --> 01:42:48,820 ievietosim piezīmēs. 2144 01:42:48,820 --> 01:42:50,450 Bet ir vēl viens veids, kā to izdarīt. 2145 01:42:50,450 --> 01:42:52,780 Es varētu izmantot arī netiešu join . 2146 01:42:52,780 --> 01:42:55,000 Tātad tā bija skaidra join darbība , jo es burtiski ierakstīju vārdu 2147 01:42:55,000 --> 01:42:57,220 join vairākas reizes. 2148 01:42:57,220 --> 01:43:00,880 Bet ļaujiet man turpināt un izvēlēties nosaukumu no šīm trim tabulām. 2149 01:43:00,880 --> 01:43:02,628 Cilvēki, zvaigznes un šovi. 2150 01:43:02,628 --> 01:43:07,192 Un tas varētu būt patīkamāk, jo, ja zināt, no kurām tabulām vēlaties 2151 01:43:07,192 --> 01:43:11,756 atlasīt datus, vienkārši uzskaitiet tās, atdalot tās ar komatiem, kas 2152 01:43:11,756 --> 01:43:16,321 jums varētu patikt, kur the people ID equals the stars person ID and 2153 01:43:16,321 --> 01:43:20,885 the stars show ID equals the shows ID and the name of the person 2154 01:43:20,885 --> 01:43:25,450 equals Steve Carell 2155 01:43:25,450 --> 01:43:26,788 Tātad šī ir netieša join darbība . 2156 01:43:26,788 --> 01:43:28,309 Un godīgi, es pastāvīgi atsaucos uz savām piezīmēm arī par dažām no 2157 01:43:28,309 --> 01:43:29,830 šīm lietām. 2158 01:43:29,830 --> 01:43:32,740 Tā nav tāda lieta, kas jums šādi sanāks jau pēc vienas dienas. 2159 01:43:32,740 --> 01:43:35,560 Bet tas ir tikai atšķirīgs veids, kā izteikt vienu un to pašu. 2160 01:43:35,560 --> 01:43:37,720 Es vēlos atlasīt datus no trim dažādām tabulām. 2161 01:43:37,720 --> 01:43:41,680 Un, SQL, es vēlos, lai jūs sakārtotu šīs tabulas, lai es varētu iegūt 2162 01:43:41,680 --> 01:43:45,640 līdzīgus datus par Stīvu Kerelu. 2163 01:43:45,640 --> 01:43:49,450 Un tas galu galā sasniegs tādus pašus rezultātus. 2164 01:43:49,450 --> 01:43:50,260 Ļaujiet man nospiest Enter. 2165 01:43:54,040 --> 01:43:54,920 Un tur jau tas ir . 2166 01:43:54,920 --> 01:43:55,750 Tātad nedaudz lēnāk. 2167 01:43:55,750 --> 01:43:58,510 Un veiktspēja var atšķirties atkarībā no datora, pamatojoties uz SQL 2168 01:43:58,510 --> 01:44:01,270 ieviešanu, bet es domāju, ka man joprojām ir tādas pašas atbildes. 2169 01:44:01,270 --> 01:44:03,630 Tagad pieņemsim, kā es to bieži daru, un man nācās to meklēt vēlreiz 2170 01:44:03,630 --> 01:44:05,990 pagājušajā reizē, pieņemsim, ka esat aizmirsis, kā uzrakstīt Stīva 2171 01:44:05,990 --> 01:44:08,350 Kerela vārdu. 2172 01:44:08,350 --> 01:44:10,240 Vai tie ir divi R, divi L vai tamlīdzīgi? 2173 01:44:10,240 --> 01:44:12,903 Nu, es arī varētu kaut ko tādu izdarīt. 2174 01:44:12,903 --> 01:44:14,320 Nu, darīsim vienkārši. 2175 01:44:14,320 --> 01:44:17,103 Izvēlieties zvaigznīti no cilvēkiem, kuru vārds ir vienāds. 2176 01:44:17,103 --> 01:44:20,020 Es apzināti to daru pareizi, lai nepazemotu sevi. 2177 01:44:20,020 --> 01:44:22,000 Tas ir Stīvs Kerels, par kuru es turpinu jautāt. 2178 01:44:22,000 --> 01:44:25,225 Ja esat aizmirsis, varat mēģināt meklēt tikai Stīvu, bet interesanti, 2179 01:44:25,225 --> 01:44:28,450 ka ir daudz Stīvu. 2180 01:44:28,450 --> 01:44:30,070 Mēs nezinām, kad viņi ir dzimuši. 2181 01:44:30,070 --> 01:44:32,715 Bet tas, iespējams, nav tas Stīvs Kerels, kuru mēs vēlamies, ja mums 2182 01:44:32,715 --> 01:44:35,360 nav viņa uzvārda. 2183 01:44:35,360 --> 01:44:37,410 Tāpēc es varētu alternatīvi rīkoties, tas ir Stīvs, un tad tas sākas 2184 01:44:37,410 --> 01:44:39,460 ar C, manuprāt. 2185 01:44:39,460 --> 01:44:42,700 Izrādās, ka ir vēl viena aizstājējzīme, kuru varat izmantot SQL. 2186 01:44:42,700 --> 01:44:46,060 Mēs izmantojām zvaigznīti, lai atlasītu visas kolonnas. 2187 01:44:46,060 --> 01:44:50,800 Pēdiņās varat izmantot procentu zīmi, lai kaut ko pateiktu C. 2188 01:44:50,800 --> 01:44:54,370 Tātad aiz burta C ir 0 vai vairāk rakstzīmju. 2189 01:44:54,370 --> 01:44:58,030 Un tagad tas nedarbojas, jo tagad es burtiski kaut ko meklētu Steve 2190 01:44:58,030 --> 01:45:01,690 space C. 2191 01:45:01,690 --> 01:45:04,670 Bet atcerieties, ka iepriekš es minēju vienu citu atslēgvārdu, kas ir 2192 01:45:04,670 --> 01:45:07,650 paredzēts izplūdušākai atbilstības noteikšanai, ja tas nav tieši tas, 2193 01:45:07,650 --> 01:45:10,630 ko jūs meklējat, bet tas ir kā tas, ko jūs meklējat. 2194 01:45:10,630 --> 01:45:13,845 Ja jūs tā vietā sakāt, kur viņa vārds ir kā Steve space C kaut ko, 2195 01:45:13,845 --> 01:45:17,060 tagad mēs atgriezīsim veselu kaudzi Stīvu. 2196 01:45:17,060 --> 01:45:18,990 Bet es domāju, ka tagad es droši vien varētu atrast to, ko es 2197 01:45:18,990 --> 01:45:20,920 patiesībā meklēju, ja es neatceros viņa vārdu. 2198 01:45:20,920 --> 01:45:22,510 Varat izmantot vairākas procentu zīmes. 2199 01:45:22,510 --> 01:45:25,260 Ja aizmirstat, kāds ir viņa vārds, varat mainīt secību. 2200 01:45:25,260 --> 01:45:29,940 Bet arī tā ir ļoti spēcīga SQL funkcija. 2201 01:45:29,940 --> 01:45:32,670 Jautājumi par šiem vaicājumiem šeit? 2202 01:45:32,670 --> 01:45:33,708 Jā. 2203 01:45:33,708 --> 01:45:35,448 Mērķauditorija: [NEdzirdams] 2204 01:45:35,448 --> 01:45:36,240 DEIVIDS MALANS: Atvainojiet? 2205 01:45:36,240 --> 01:45:38,730 Mērķauditorija: [NEdzirdams] 2206 01:45:38,730 --> 01:45:40,003 DEIVIDS MALANS: Kā ar to? 2207 01:45:40,003 --> 01:45:40,990 Mērķauditorija: [NEdzirdams] 2208 01:45:40,990 --> 01:45:42,400 DEIVIDS MALANS: Ak, jā, protams. 2209 01:45:42,400 --> 01:45:44,500 Tātad vaicājums, ko izmantoju šeit. 2210 01:45:44,500 --> 01:45:49,810 Ir daudz Stīvu, kuru uzvārds sākas ar C. 2211 01:45:44,500 --> 01:45:52,760 Hmm, pārāk tālu Pēdējais vaicājums, ko izpildīju, bija šis šeit. 2212 01:45:52,760 --> 01:45:56,355 Tātad, ja nosaukums ir kā "Steve C%.";. Tātad tas ir tikai vēl viens 2213 01:45:56,355 --> 01:45:59,950 rīks jūsu rīku komplektam. 2214 01:45:59,950 --> 01:46:02,665 Bet jūs, iespējams, ievērosit, ka šīs divas  — pirms šī vaicājuma 2215 01:46:02,665 --> 01:46:05,380 join darbības bija lēnas. 2216 01:46:05,380 --> 01:46:07,480 Un, godīgi sakot, šī datu bāze pat nav tik liela. 2217 01:46:07,480 --> 01:46:10,120 Tāpat kā jā, tajā ir desmitiem tūkstošu rindu. 2218 01:46:10,120 --> 01:46:12,440 Taču reālajā pasaulē un lielākajā daļā lietotņu, kuras jūs un es 2219 01:46:12,440 --> 01:46:14,760 daudz lietojam ikdienā vai tīmekļa vietnēs, ir miljoniem, pat 2220 01:46:14,760 --> 01:46:17,080 miljardiem datu rindu. 2221 01:46:17,080 --> 01:46:20,280 Un, ja man būtu jāgaida pie sava datora vai koda vietas sekundi vai 2222 01:46:20,280 --> 01:46:23,480 divas, lai iegūtu datus, tas noteikti nedarbosies miljoniem lietotāju 2223 01:46:23,480 --> 01:46:26,680 vai klientu. 2224 01:46:26,680 --> 01:46:29,020 Tātad, kā mēs patiesībā varam uzlabot lietas? 2225 01:46:29,020 --> 01:46:34,570 Izrādās, ka vēl viena pareizas relāciju datu bāzes priekšrocība ir 2226 01:46:34,570 --> 01:46:40,120 tā, ka tā nav tikai izklājlapa, kurā jums ir jāatrod meklētie dati. 2227 01:46:40,120 --> 01:46:43,780 Varat arī likt datubāzei indeksēt datus jūsu vietā. 2228 01:46:43,780 --> 01:46:48,670 Indekss ir efektīva špikeru lapa ātrai datu atrašanai. 2229 01:46:48,670 --> 01:46:51,710 Līdzīgi kā grāmatām reālajā pasaulē bieži vien ir indeksi grāmatas 2230 01:46:51,710 --> 01:46:54,750 beigās, kur varat meklēt lietas alfabētiskā secībā un pēc tam varat 2231 01:46:54,750 --> 01:46:57,790 uz to atsaukties lapās, kurās tiek parādīta tēma. 2232 01:46:57,790 --> 01:46:59,110 Tāda pati ideja datubāzē. 2233 01:46:59,110 --> 01:47:02,330 Ja iepriekš paziņojat datubāzei, ka vēlaties bieži meklēt noteiktā 2234 01:47:02,330 --> 01:47:05,550 kolonnā, varat likt tai izveidot iedomātu indeksu, kas ļaus ātrāk 2235 01:47:05,550 --> 01:47:08,770 meklēt šajā kolonnā. 2236 01:47:08,770 --> 01:47:10,983 Pēc noklusējuma šīs kolonnas, visticamāk, tiks meklētas, izmantojot 2237 01:47:10,983 --> 01:47:13,197 lineāro meklēšanu. 2238 01:47:13,197 --> 01:47:15,293 Pat ne bināro meklēšanu, jo dati var netikt sakārtoti, jo tie bija 2239 01:47:15,293 --> 01:47:17,390 jebkurā secībā. 2240 01:47:17,390 --> 01:47:21,141 Bet, ja izveidojat indeksu, jūs, iespējams, iegūsit kaut ko tuvāk 2241 01:47:21,141 --> 01:47:24,892 logaritmiskam nekā lineāram, un tas kopumā būs liels pluss. 2242 01:47:24,892 --> 01:47:26,350 Tāpēc ļaujiet man šeit izdarīt kaut ko vienkāršu. 2243 01:47:26,350 --> 01:47:29,770 Vispirms ļaujiet man ieslēgt SQLite specifisku iezīmi , kas vienkārši 2244 01:47:29,770 --> 01:47:33,190 aktivizē visus manus vaicājumus, ierakstot .timer on. 2245 01:47:33,190 --> 01:47:37,515 Es tikai vēlos izsekot, cik ilgi katra no šīm komandām aizņem. 2246 01:47:37,515 --> 01:47:40,390 Šī komanda nav lēna, tāpēc tā būs tikai relatīva. 2247 01:47:40,390 --> 01:47:43,180 Bet vienkārši atlasīsim visu no šovu tabulas, kur tās nosaukums ir 2248 01:47:43,180 --> 01:47:45,970 The Office . 2249 01:47:45,970 --> 01:47:47,455 Apskatīsim, cik ilgu laiku aizņem šis salīdzinoši vienkāršais 2250 01:47:47,455 --> 01:47:48,940 vaicājums. 2251 01:47:48,940 --> 01:47:50,980 Labi, nemaz nav ļoti ilgi. 2252 01:47:50,980 --> 01:47:54,850 Reālā izteiksmē mazāk nekā sekunde, 0,035 sekundes. 2253 01:47:54,850 --> 01:47:57,070 Tāpēc nekādā gadījumā nesteidzieties. 2254 01:47:57,070 --> 01:48:00,055 Bet, ja jums ir simtiem, tūkstošiem, miljoniem lietotāju, katra no 2255 01:48:00,055 --> 01:48:03,040 šīm milisekundēm var ļoti labi summēt. 2256 01:48:03,040 --> 01:48:04,640 Tātad, vai mēs varam darīt labāk? 2257 01:48:04,640 --> 01:48:06,440 Mēs varam, ja es to darīšu. 2258 01:48:06,440 --> 01:48:10,566 Ja es izmantoju šādu sintaksi vienu reizi savas datu bāzes dizaina 2259 01:48:10,566 --> 01:48:14,693 sākumā, es izveidoju nevis tabulu, bet gan indeksu ar kādu nosaukumu 2260 01:48:14,693 --> 01:48:18,820 uz konkrētas tabulas vienā vai vairākās kolonnās. 2261 01:48:18,820 --> 01:48:22,460 Es varu sniegt norādes, mājienu datubāzei jau iepriekš, sakot, lūdzu, 2262 01:48:22,460 --> 01:48:26,100 optimizējiet, veicot slepenas mērces meklēšanu vai atlasi šajā 2263 01:48:26,100 --> 01:48:29,740 tabulā, lai mana meklēšana būtu ātrāka. 2264 01:48:29,740 --> 01:48:30,860 Tāpēc ļaujiet man to izdarīt. 2265 01:48:30,860 --> 01:48:32,590 Ļaujiet man atgriezties pie VS Code šeit. 2266 01:48:32,590 --> 01:48:36,460 Ļaujiet man izveidot indeksu, ko sauc par title index . 2267 01:48:36,460 --> 01:48:38,350 Es to varētu saukt par jebko , ko vēlos, bet es vēlos ātrāk meklēt 2268 01:48:38,350 --> 01:48:40,240 nosaukumus. 2269 01:48:40,240 --> 01:48:43,570 Tāpēc es to saukšu par title index , kur drīzāk title index tabulā to 2270 01:48:43,570 --> 01:48:46,900 sauc par šoviem. 2271 01:48:46,900 --> 01:48:49,150 Un tad iekavās ir sintakse. 2272 01:48:49,150 --> 01:48:50,620 Kolonna ar nosaukumu title . 2273 01:48:50,620 --> 01:48:54,105 Tātad vēlreiz, es tikko aizņēmos šo kanonisko sintaksi un tikko to 2274 01:48:54,105 --> 01:48:57,590 pārtulkoju kaut kas raksturīgs televīzijas šovam . 2275 01:48:57,590 --> 01:48:58,090 Labi. 2276 01:48:58,090 --> 01:49:00,040 Ko tas man darīs? 2277 01:49:00,040 --> 01:49:02,950 Kad es nospiedīšu taustiņu Enter, tas datora atmiņā, datu bāzes 2278 01:49:02,950 --> 01:49:05,860 atmiņā, izveidos kaut ko, ko sauc par B koku. 2279 01:49:05,860 --> 01:49:07,330 Tas nav binārs koks. 2280 01:49:07,330 --> 01:49:10,780 B-koks patiesībā ir potenciāli efektīvāka datu struktūra, par kuru 2281 01:49:10,780 --> 01:49:14,230 mēs nerunājām dažas nedēļas atpakaļ piektajā nedēļā, bet tas izskatās 2282 01:49:14,230 --> 01:49:17,680 nedaudz līdzīgs šim, kas izskatās līdzīgs bināram kokam. 2283 01:49:17,680 --> 01:49:21,847 Bet vai kāds pamana, kāpēc šis nav binārs koks? 2284 01:49:21,847 --> 01:49:26,405 Mērķauditorija: [NEdzirdams] 2285 01:49:26,405 --> 01:49:27,280 DEIVIDS MALANS: Tieši tā. 2286 01:49:27,280 --> 01:49:30,430 Binārajam kokam, bi kas nozīmē divus, katrā mezglā ir ne vairāk kā 2287 01:49:30,430 --> 01:49:33,580 divi bērni, taču šeit ir lielisks piemērs — viens, divi, trīs. 2288 01:49:33,580 --> 01:49:35,990 Un varētu būt četri bērni, pieci bērni vai vairāk. 2289 01:49:35,990 --> 01:49:40,780 Bet, ja jums ir ļoti plats koks, tad tas ir ļoti īss. 2290 01:49:40,780 --> 01:49:44,560 Tas velk datus augstāk, tuvāk mezglam, saknes mezglam. 2291 01:49:44,560 --> 01:49:47,080 Un atcerieties, ka saknes mezgls ir vieta, kur mēs agrāk sākām 2292 01:49:47,080 --> 01:49:49,600 meklēšanu, neatkarīgi no tā, vai tas bija BST, Binary Search Tree 2293 01:49:49,600 --> 01:49:52,120 binārais meklēšanas koks, pat tri vai citas datu struktūras. 2294 01:49:52,120 --> 01:49:53,380 Mēs vienmēr sākām no augšas. 2295 01:49:53,380 --> 01:49:56,682 Tātad, jo augstāk jūs varat iegūt datus, pat ja tas padara datu 2296 01:49:56,682 --> 01:49:59,985 struktūru ļoti plašu, jūs varēsit veikt vaicājumus , meklēt 2297 01:49:59,985 --> 01:50:03,287 vaicājumus vai meklēt datus, iespējams, daudz ātrāk nekā tad, ja tas 2298 01:50:03,287 --> 01:50:06,590 būtu vienkārši ļoti garš saraksts, piemēram, kolonna pēc noklusējuma. 2299 01:50:06,590 --> 01:50:09,970 Ņemot to vērā, ļaujiet man atgriezties pie VS Code. 2300 01:50:09,970 --> 01:50:11,380 Es vēl neesmu izveidojis indeksu. 2301 01:50:11,380 --> 01:50:13,277 Ļaujiet man turpināt, nospiediet taustiņu Enter un izveidojiet to. 2302 01:50:13,277 --> 01:50:14,860 Labi, pagāja minūte, mirklis. 2303 01:50:14,860 --> 01:50:17,920 Tas aizņēma apmēram pussekundi, kas acīmredzami nav tik lēns. 2304 01:50:17,920 --> 01:50:20,380 Bet ar vairāk datu tas varēja būt vēl lēnāks. 2305 01:50:20,380 --> 01:50:22,600 Bet šobrīd tā ir vienreizēja operācija. 2306 01:50:22,600 --> 01:50:25,975 Un tagad ļaujiet man atlasīt tos pašus datus no šoviem , kurās 2307 01:50:25,975 --> 01:50:29,350 nosaukums ir vienāds ar The Office . 2308 01:50:29,350 --> 01:50:34,360 Pēdējo reizi tikai pirms brīža tas aizņēma 0,035 sekundes. 2309 01:50:34,360 --> 01:50:38,920 Nav lēns, bet arī tas palielinās, ja man ir daudz IMDb lietotāju. 2310 01:50:38,920 --> 01:50:42,040 Turpināsim tagad un vēlreiz izpildīsim to pašu vaicājumu. 2311 01:50:42,040 --> 01:50:44,700 Cik ilgi tas prasīja? 2312 01:50:44,700 --> 01:50:47,010 0,001 sekunde tagad. 2313 01:50:47,010 --> 01:50:48,720 Es domāju, praktiski nekas. 2314 01:50:48,720 --> 01:50:50,970 Un tā tagad ir tāda iespēja. 2315 01:50:50,970 --> 01:50:54,265 Ja jums ir daudz datu un jūs patiešām vēlaties paātrināt šo 2316 01:50:54,265 --> 01:50:57,560 meklēšanu,, šie , indeksi kas vienkārši izveido jums šīs maģiskās 2317 01:50:57,560 --> 01:51:00,855 datu struktūras datu bāzu atmiņā, kas ļauj jums meklēt kolonnās, par 2318 01:51:00,855 --> 01:51:04,150 kurām esat diezgan pārliecināts vēlaties veikt efektīvāku meklēšanu 2319 01:51:04,150 --> 01:51:07,256 Turpretim tagad, ja kādreiz esat izmantojis Google vai Bing vai kādu 2320 01:51:07,256 --> 01:51:10,363 meklētājprogrammu, kurai ir izvērsta meklēšana, daži tekstlodziņi, 2321 01:51:10,363 --> 01:51:13,470 kuros varat meklēt precīzāk, varētu darboties lēnāk. 2322 01:51:13,470 --> 01:51:14,190 Kāpēc? 2323 01:51:14,190 --> 01:51:16,785 Iespējams, jūs nevēlaties kļūt traki un vienkārši indeksēt katru 2324 01:51:16,785 --> 01:51:19,380 kolonnu katrā tabulā. 2325 01:51:19,380 --> 01:51:21,020 Kāpēc? 2326 01:51:21,020 --> 01:51:25,070 Kāda varētu būt intuīcija? 2327 01:51:25,070 --> 01:51:28,490 Ja loģiski indeksi paātrina lietas, kāpēc gan neindeksēt visu? 2328 01:51:28,490 --> 01:51:30,710 Šeit vienmēr būs kompromiss. 2329 01:51:30,710 --> 01:51:33,040 Kas tas varētu būt? 2330 01:51:33,040 --> 01:51:34,000 Jā. 2331 01:51:34,000 --> 01:51:34,875 Mērķauditorija: [NEdzirdams] 2332 01:51:34,875 --> 01:51:37,167 DEIVIDS MALANS: Jā, tas aizņems daudz vietas. 2333 01:51:37,167 --> 01:51:38,960 Šis ir tikai slaids ekrānā. 2334 01:51:38,960 --> 01:51:41,020 Bet tam kaut kur ir jānonāk. 2335 01:51:41,020 --> 01:51:42,880 Tam ir nepieciešama vieta datora atmiņā vai cietajā diskā vai 2336 01:51:42,880 --> 01:51:44,740 tamlīdzīgā veidā. 2337 01:51:44,740 --> 01:51:46,758 Un tas ir labi, ja jums ir neierobežota vieta, bet, visticamāk, jums 2338 01:51:46,758 --> 01:51:48,777 tā nav. 2339 01:51:48,777 --> 01:51:51,110 Un tas kļūs dārgs dažādu iemeslu dēļ. 2340 01:51:51,110 --> 01:51:53,985 Tātad, iespējams, vēlaties indeksēt tikai noteiktas kolonnas un 2341 01:51:53,985 --> 01:51:56,860 noteiktas tabulas, nevis tās visas. 2342 01:51:56,860 --> 01:51:57,777 Jo zini ko? 2343 01:51:57,777 --> 01:52:01,398 Pat ja lietotājs patiešām vēlas meklēt, iespējams, izmantojot 2344 01:52:01,398 --> 01:52:05,020 izvērsto meklēšanu kādā citā kolonnā vai tabulā, labi. 2345 01:52:05,020 --> 01:52:08,690 Ja dažkārt vaicājums ir lēns, mēs, iespējams, gūstam lielāku peļņu, 2346 01:52:08,690 --> 01:52:12,360 optimizējot izplatītākos gadījumus — populārākos vaicājumus, kas arī 2347 01:52:12,360 --> 01:52:16,030 cilvēkiem rūp. 2348 01:52:16,030 --> 01:52:16,640 Labi. 2349 01:52:16,640 --> 01:52:20,835 Nonāksim pilnā aplī un atgriezīsimies pie tā, kā mēs patiesībā sākām, 2350 01:52:20,835 --> 01:52:25,030 proti, ar kādu Python kodu. 2351 01:52:25,030 --> 01:52:27,550 Tātad izrādās, ka tie nav either or lēmumi. 2352 01:52:27,550 --> 01:52:30,435 Izrādās, ka reālajā pasaulē izstrādātāji pastāvīgi izmanto vienu, 2353 01:52:30,435 --> 01:52:33,320 divas, trīs valodas vienlaikus. 2354 01:52:33,320 --> 01:52:35,716 Un patiesībā nākamnedēļ es satricināju HTML, CSS un JavaScript, no 2355 01:52:35,716 --> 01:52:38,113 kurām viena ir īsta programmēšanas valoda, taču šīs valodas bieži 2356 01:52:38,113 --> 01:52:40,510 tiek izmantotas kopā. 2357 01:52:40,510 --> 01:52:43,910 Pilnīgi normāli un ierasti izmantot Python un SQL vai Java un SQL, 2358 01:52:43,910 --> 01:52:47,310 vai SWIFT un SQL vai jebkuru dažādu kombināciju skaitu ar datu bāzes 2359 01:52:47,310 --> 01:52:50,710 valodu. 2360 01:52:50,710 --> 01:52:56,020 Varat izmantot vēlamo programmēšanas valodu Java, Python, C++, lai 2361 01:52:56,020 --> 01:53:01,330 izveidotu lietotāja interfeisu un loģiku, kas ievieš pašu programmu. 2362 01:53:01,330 --> 01:53:04,092 Bet jūsu datiem SQL ir patiešām labs kandidāts. 2363 01:53:04,092 --> 01:53:05,696 Un tiešām, mēs jau esam redzējuši, ka SQL var tikai paātrināt 2364 01:53:05,696 --> 01:53:07,300 noteiktas darbības. 2365 01:53:07,300 --> 01:53:08,140 Jūs varat mainīt . 2366 01:53:08,140 --> 01:53:10,785 Varat sakļaut 15 koda rindiņas tikai vienā un izmantot šīs lietas 2367 01:53:10,785 --> 01:53:13,430 kopā. 2368 01:53:13,430 --> 01:53:16,720 Tāpēc ļaujiet man atgriezties pie — es pametīšu SQLite. 2369 01:53:16,720 --> 01:53:18,580 Es samazināšu savu termināļa logu. 2370 01:53:18,580 --> 01:53:22,030 Un šeit ir vieta, kur mēs iepriekš pārtraucām ar favorites.py. 2371 01:53:22,030 --> 01:53:27,430 Ar favorites.py viss tika saglabāts failā favorites.csv. 2372 01:53:27,430 --> 01:53:30,260 Un atcerieties, ka mēs galu galā importējām šo CSV failu uz 2373 01:53:30,260 --> 01:53:33,090 favorites.db automātiski ar .import, lai mēs varētu sākt spēlēties ar 2374 01:53:33,090 --> 01:53:35,920 SQL. 2375 01:53:35,920 --> 01:53:37,990 Bet tagad mēs varam šos divus savienot kopā. 2376 01:53:37,990 --> 01:53:40,690 Un veids, kā to izdarīt, ir šāds. 2377 01:53:40,690 --> 01:53:42,700 CS50 ir Python bibliotēka. 2378 01:53:42,700 --> 01:53:47,350 Jūs varētu atcerēties, ka ir pieejams get string, get int , get float. 2379 01:53:47,350 --> 01:53:50,090 Jums tie nav stingri jāizmanto Python, jo ir daudz vienkāršāk 2380 01:53:50,090 --> 01:53:52,830 izmantot ievades funkciju un pēc tam mēģināt, pieņemt un pārvērst 2381 01:53:52,830 --> 01:53:55,570 lietas int vai float vai tamlīdzīgi. 2382 01:53:55,570 --> 01:53:58,045 Bet ir daudz vairāk darba, lai izmantotu SQL Python bez trešās puses 2383 01:53:58,045 --> 01:54:00,520 bibliotēkas. 2384 01:54:00,520 --> 01:54:02,860 Daudzas komerciālās iespējas vai populāras atvērtā pirmkoda opcijas 2385 01:54:02,860 --> 01:54:05,200 faktiski ir sarežģītas. 2386 01:54:05,200 --> 01:54:09,500 Tātad CS50 Python bibliotēkā ir ļoti noderīga funkcija, kas jums ir 2387 01:54:09,500 --> 01:54:13,800 jāizmanto un ir jāizmanto problēmu kopai, kas atvieglo Python 2388 01:54:13,800 --> 01:54:18,100 izpildi, SQL izpildi Python koda iekšpusē. 2389 01:54:18,100 --> 01:54:22,360 Bet tas ir balstīts uz ļoti populāru atvērtā pirmkoda alternatīvu. 2390 01:54:22,360 --> 01:54:24,350 Tātad jūs varat to izmantot arī reālajā pasaulē. 2391 01:54:24,350 --> 01:54:26,546 Tāpēc dokumentācija ir atrodama šajā vietrādī URL, taču es jums 2392 01:54:26,546 --> 01:54:28,743 parādīšu, kas mums ir jāzina šeit, koncentrējoties atpakaļ uz 2393 01:54:28,743 --> 01:54:30,940 favorites.py. 2394 01:54:30,940 --> 01:54:35,540 Tātad tas, ko es šeit darīšu, ir šāds. 2395 01:54:35,540 --> 01:54:42,550 Ļaujiet man izdzēst visu no vietnes favorites.py, izņemot teiksim šo. 2396 01:54:42,550 --> 01:54:45,970 No CS50 importēt SQL ar visiem lielajiem burtiem. 2397 01:54:45,970 --> 01:54:49,585 Tā ir SQL līdzekļa importēšana no CS50 bibliotēkas, kas ļaus man 2398 01:54:49,585 --> 01:54:53,200 atvērt DB failu kodā. 2399 01:54:53,200 --> 01:54:54,380 Kā to izdarīt? 2400 01:54:54,380 --> 01:54:56,327 Ļaujiet man izveidot mainīgo ar nosaukumu DB datu bāzei, lai gan es 2401 01:54:56,327 --> 01:54:58,275 to varētu saukt par visu, ko vien vēlos. 2402 01:54:58,275 --> 01:55:00,957 Ļaujiet man izsaukt šo SQL funkciju un izmantot īpašu sintaksi, kas 2403 01:55:00,957 --> 01:55:03,640 nav specifiska CS50. 2404 01:55:03,640 --> 01:55:09,640 Tā ir nozares lieta. 2405 01:55:03,640 --> 01:55:09,390 sqlite:///Atšķirībā no visiem citiem jūsu ievadītajiem URL, šajā 2406 01:55:09,390 --> 01:55:15,140 kontekstā šim burtiski ir trīs. 2407 01:55:15,140 --> 01:55:18,340 Un tad datu bāzes nosaukums, kas šajā gadījumā ir favorites.db . 2408 01:55:18,340 --> 01:55:22,353 Tātad šis ir tikai veids, kā pastāstīt šai SQL bibliotēkai, ko mēs 2409 01:55:22,353 --> 01:55:26,366 rakstījām, bet kas darbojas tieši tāpat, kā trešās puses alternatīvas 2410 01:55:26,366 --> 01:55:30,380 atver favorites.db, izmantojot SQLite tehnoloģiju, ja vēlaties. 2411 01:55:30,380 --> 01:55:30,880 Labi. 2412 01:55:30,880 --> 01:55:32,338 Vienkārši uzdosim lietotājam jautājumu. 2413 01:55:32,338 --> 01:55:36,057 Dodiet man savu favorite problēmu. 2414 01:55:36,057 --> 01:55:38,753 Tāpēc mēs izmantosim ievadi, nevis get string , taču mēs varētu 2415 01:55:38,753 --> 01:55:41,450 izmantot get string, taču mūsu mērķiem tie ir gandrīz vienādi. 2416 01:55:41,450 --> 01:55:43,150 Pajautāsim lietotājam viņa favorite . 2417 01:55:43,150 --> 01:55:49,300 Un tagad Python kodā ļaujiet mums atlasīt no favorites.db visas 2418 01:55:49,300 --> 01:55:55,450 rindas, kurās skolēni norāda šo problēmu kā savu favorite . 2419 01:55:55,450 --> 01:55:57,610 Tātad tikai SQL tas būtu šāds. 2420 01:55:57,610 --> 01:56:02,890 Izvēlieties star from favorites where problem equals , un es darīšu 2421 01:56:02,890 --> 01:56:08,170 visu, kas būs mans favorite . 2422 01:56:08,170 --> 01:56:10,288 Piemēram, problem equals Mario . 2423 01:56:10,288 --> 01:56:11,809 Tātad, ja es izmantotu tikai SQL, es burtiski rakstītu kaut ko 2424 01:56:11,809 --> 01:56:13,330 līdzīgu. 2425 01:56:13,330 --> 01:56:15,130 Bet tagad esmu .py file . 2426 01:56:15,130 --> 01:56:16,870 Man ir jāizmanto Python sintakse. 2427 01:56:16,870 --> 01:56:18,550 Bet Python atbalsta virknes. 2428 01:56:18,550 --> 01:56:20,090 SQL ir tikai teksts. 2429 01:56:20,090 --> 01:56:20,990 Tā ir tikai virkne. 2430 01:56:20,990 --> 01:56:23,895 Tāpēc es noteikti varētu vienkārši ievietot savu SQL kodu virknē un 2431 01:56:23,895 --> 01:56:26,800 pēc tam nodot to Python funkcijai. 2432 01:56:26,800 --> 01:56:28,780 Un šeit ir tilts starp abiem. 2433 01:56:28,780 --> 01:56:30,810 Ja jūs vienkārši uztverat SQL kā jebkuru vecu tekstu, mēs varam to 2434 01:56:30,810 --> 01:56:32,840 ievietot virknē un izpildīt to. 2435 01:56:32,840 --> 01:56:34,837 Tāpēc ļaujiet man to izdarīt. 2436 01:56:34,837 --> 01:56:37,483 Ļaujiet man iet uz priekšu un izveidot mainīgo ar nosaukumu rows, 2437 01:56:37,483 --> 01:56:40,130 kurā galu galā būs visas rindas no datu bāzes. 2438 01:56:40,130 --> 01:56:45,790 Ļaujiet man turpināt un atlasīt db.execute. 2439 01:56:45,790 --> 01:56:48,550 Šī ir viena funkcija, kas jums jāzina par CS50 bibliotēku, un tā 2440 01:56:48,550 --> 01:56:51,310 burtiski izpilda SQL priekšrakstu. 2441 01:56:51,310 --> 01:56:56,140 Un tad pēdiņās jūs burtiski norādiet to, ko vēlaties izpildīt. 2442 01:56:56,140 --> 01:56:58,990 Un ļaujiet man turpināt un aizvērt iekavas tur beigās. 2443 01:56:58,990 --> 01:57:00,740 Un tagad ļaujiet man vienkārši izmēģināt šo. 2444 01:57:00,740 --> 01:57:06,555 Tātad attiecībā uz rindu, rindās atkārtosim visas rindas. Ļaujiet man 2445 01:57:06,555 --> 01:57:12,370 turpināt un izdrukāt rindu,. 2446 01:57:12,370 --> 01:57:15,700 Un ko es te gribu? 2447 01:57:15,700 --> 01:57:20,020 Izdrukāsim šīs personas laika zīmogu . 2448 01:57:20,020 --> 01:57:22,120 Labi, ļaujiet man atvērt savu termināļa logu. 2449 01:57:22,120 --> 01:57:23,890 Python no favorites.py. 2450 01:57:23,890 --> 01:57:27,490 Šeit noteikti sakrustoju pirkstus. 2451 01:57:27,490 --> 01:57:27,990 Enter 2452 01:57:31,200 --> 01:57:31,770 Te nu tas ir 2453 01:57:31,770 --> 01:57:32,280 Favorites . 2454 01:57:32,280 --> 01:57:34,500 Es ierakstīšu Mario. 2455 01:57:34,500 --> 01:57:35,070 Labi. 2456 01:57:35,070 --> 01:57:37,490 Tāpēc es atgriezos — tas nav īpaši interesanti, taču es atguvu visus 2457 01:57:37,490 --> 01:57:39,910 to studentu laikspiedolus, kuri ierakstīja Mario un ko mēs importējām 2458 01:57:39,910 --> 01:57:42,330 šajā datubāzē. 2459 01:57:42,330 --> 01:57:45,360 Man patiešām rūp tas, cik populārs ir Mario. 2460 01:57:45,360 --> 01:57:46,830 Tāpēc ļaujiet man to nedaudz mainīt. 2461 01:57:46,830 --> 01:57:50,490 Ļaujiet man to mainīt, lai saskaitītu rindu skaitu. 2462 01:57:50,490 --> 01:57:52,080 Un ļaujiet man to darīt vienkārši. 2463 01:57:52,080 --> 01:57:54,170 Ļaujiet man dot tādu aizstājvārdu, kādu es ierosināju iepriekš, 2464 01:57:54,170 --> 01:57:56,260 piemēram, n, kur n ir skaitlis. 2465 01:57:56,260 --> 01:58:00,090 Tā ka tagad, šeit,, es faktiski varu to izdarīt. 2466 01:58:00,090 --> 01:58:02,230 Izdrukājiet n vērtību. 2467 01:58:02,230 --> 01:58:02,730 Labi. 2468 01:58:02,730 --> 01:58:04,450 Ļaujiet man atgriezties pie sava termināļa loga. 2469 01:58:04,450 --> 01:58:05,910 Run Python vietnē favorites.py. 2470 01:58:05,910 --> 01:58:07,140 Ļaujiet man ierakstīt Mario. 2471 01:58:07,140 --> 01:58:08,070 Enter 2472 01:58:08,070 --> 01:58:09,660 labi, 39. 2473 01:58:09,660 --> 01:58:11,790 Tagad tehniski es krāpjos. 2474 01:58:11,790 --> 01:58:14,771 Godīgi sakot, ja es izpildu atlasīto skaitu, mēs esam redzējuši 2475 01:58:14,771 --> 01:58:17,752 iepriekš, ka tā atgriež tikai vienu rindu, nevis vairākas. 2476 01:58:17,752 --> 01:58:20,460 Tāpēc tiešām nav ko atkārtot, taču tas darbojas labi. 2477 01:58:20,460 --> 01:58:22,560 Tas atkārtojas tikai vienu reizi, bet man paveicas. 2478 01:58:22,560 --> 01:58:26,100 Tātad tehniski tas, kas man, iespējams, būtu jādara, ir tas. 2479 01:58:26,100 --> 01:58:30,570 Man, iespējams, vajadzētu dot sev mainīgo ar nosaukumu row, iestatīt 2480 01:58:30,570 --> 01:58:35,040 to vienādu ar pašu pirmo rindu un tikai rindu, kas atgriezās, un 2481 01:58:35,040 --> 01:58:39,510 tagad izdrukāt šīs rindas un kolonnu. 2482 01:58:39,510 --> 01:58:40,890 Ļaujiet man atkārtoti palaist programmu. 2483 01:58:40,890 --> 01:58:42,130 Es vēlreiz ierakstīšu Mario. 2484 01:58:42,130 --> 01:58:42,660 Enter . 2485 01:58:42,660 --> 01:58:44,980 Un es joprojām redzu 39. 2486 01:58:44,980 --> 01:58:48,328 Tāpēc, protams, man tas noteikti nav jādara. 2487 01:58:48,328 --> 01:58:49,620 Man tiešām nav vajadzīgs mainīgais. 2488 01:58:49,620 --> 01:58:52,590 Tā vietā varu izmantot rows bracket 0 . 2489 01:58:52,590 --> 01:58:54,840 Bet ļaujiet man koncentrēties uz to, ko šī bibliotēka tagad dara. 2490 01:58:54,840 --> 01:59:00,230 Tātad saskaņā ar dokumentāciju ko CS50 izpildes funkcija vienmēr 2491 01:59:00,230 --> 01:59:05,620 sniedz jūsu labā, atgriež vārdnīcu sarakstu. 2492 01:59:05,620 --> 01:59:08,089 Tātad, ja vaicājumā nekas netiek atgriezts, piemēram, nav nevienas 2493 01:59:08,089 --> 01:59:10,558 atbilstības, tiek parādīts tukšs saraksts. 2494 01:59:10,558 --> 01:59:12,600 Tāpat kā open bracket, closed bracket , tajā nav nekā. 2495 01:59:12,600 --> 01:59:15,770 Neviena cilpa neizpildīs neko noderīgu, jo tajā nav nekā. 2496 01:59:15,770 --> 01:59:19,255 Tomēr, ja atgriezīsit vienu rindu, jūs atgriezīsit sarakstu ar 2497 01:59:19,255 --> 01:59:22,740 lieluma sarakstu, kura iekšpusē ir viena vārdnīca. 2498 01:59:22,740 --> 01:59:25,970 Šai vārdnīcai būs atslēgas, kas atbilst jūsu atlasītajam, neatkarīgi 2499 01:59:25,970 --> 01:59:29,200 no tā, vai tās ir kolonnas vai skaits. 2500 01:59:29,200 --> 01:59:31,040 Tātad, kad es iepriekš izvēlējos zvaigzni , es būtu ieguvis visas 2501 01:59:31,040 --> 01:59:32,880 kolonnas. 2502 01:59:32,880 --> 01:59:34,950 Tādā veidā es varēju piekļūt laikspiedolam. 2503 01:59:34,950 --> 01:59:38,910 Šeit es tikai atlasu skaitu un nevēlos, lai tas būtu šeit jāraksta. 2504 01:59:38,910 --> 01:59:40,230 Tas vienkārši izskatītos šausmīgi. 2505 01:59:40,230 --> 01:59:42,435 Tas darbotos, taču izskatītos dīvaini, ja vienkārši turpinātu rakstīt 2506 01:59:42,435 --> 01:59:44,640 count paren star close paren. 2507 01:59:44,640 --> 01:59:47,510 Tāpēc es tikko izveidoju aizstājvārdu ar nosaukumu n, lai padarītu 2508 01:59:47,510 --> 01:59:50,380 savu dzīvi vieglāku šeit. 2509 01:59:50,380 --> 01:59:53,870 Lai būtu skaidrs, CS50 izpildes funkcija atgriež vārdnīcu sarakstu, 2510 01:59:53,870 --> 01:59:57,360 kad izmantojat Select. 2511 01:59:57,360 --> 02:00:01,110 Un tā es tagad varu atgūt pirmo un vienīgo rindu un pēc tam izdrukāt 2512 02:00:01,110 --> 02:00:04,860 šīs rindas beigu vērtību. 2513 02:00:04,860 --> 02:00:08,650 Tas ir identisks - ļaujiet man to izdarīt. 2514 02:00:08,650 --> 02:00:11,610 Ļaujiet man izcelt visu šo teksta rindiņu. 2515 02:00:11,610 --> 02:00:14,040 Ļaujiet man savā termināļa logā palaist SQLite3 no favorites.db, kā 2516 02:00:14,040 --> 02:00:16,470 mēs to darījām pirms pārtraukuma. 2517 02:00:16,470 --> 02:00:19,170 Ļaujiet man vienkārši kopēt un ielīmēt šo vaicājumu. 2518 02:00:19,170 --> 02:00:20,040 Enter . 2519 02:00:20,040 --> 02:00:24,550 Tā ir tabula, kuru es atgriezu agrāk, kad darbojāmies ar SQL manuāli. 2520 02:00:24,550 --> 02:00:28,115 Kad es atgriežu šo tabulu, šeit ir atslēga, šeit ir vērtība, un man 2521 02:00:28,115 --> 02:00:31,681 ir tikai viena rinda, tāpēc es tikai akli indeksēju rindu iekavās 0, 2522 02:00:31,681 --> 02:00:35,247 jo es zinu, ka tur vienmēr būs atbilde. 2523 02:00:35,247 --> 02:00:36,690 Tas būs 0 vai 1 vai vairāk. 2524 02:00:36,690 --> 02:00:40,360 Bet es zinu, ka tagad tas šeit tiks saukts par n. 2525 02:00:40,360 --> 02:00:41,580 Tātad, ko es tikko izdarīju? 2526 02:00:41,580 --> 02:00:43,113 Nu, šeit ir SQL. 2527 02:00:43,113 --> 02:00:44,955 Un tas esmu tikai es, piemēram, datu zinātnieks, kurš uzdod 2528 02:00:44,955 --> 02:00:46,797 jautājumus par saviem datiem, tikai izmantojot melnbaltus SQL 2529 02:00:46,797 --> 02:00:48,640 vaicājumus. 2530 02:00:48,640 --> 02:00:51,170 Tagad es esmu Python programmētājs, kurš vēlas runāt ar SQL datu 2531 02:00:51,170 --> 02:00:53,700 bāzi, izmantojot Python. 2532 02:00:53,700 --> 02:00:56,820 Un tilts, ko mēs izmantojam, ir CS50 bibliotēka. 2533 02:00:56,820 --> 02:00:58,380 Bet atkal ir arī trešo pušu bezmaksas bibliotēkas, kuras varat 2534 02:00:58,380 --> 02:00:59,940 izmantot. 2535 02:00:59,940 --> 02:01:01,710 Mūsu ir ļoti vienkārša . 2536 02:01:01,710 --> 02:01:04,411 Patiešām, dokumentācijā tiks paskaidrots, kā izpilde darbojas nedaudz 2537 02:01:04,411 --> 02:01:07,113 savādāk ievietojot, atjauninot un dzēšot. 2538 02:01:07,113 --> 02:01:10,081 Jūs nesaņemat atpakaļ sarakstu, jo neko neatlasāt, taču jūs saņemat 2539 02:01:10,081 --> 02:01:13,050 dažas atgriešanas vērtības. 2540 02:01:13,050 --> 02:01:15,990 Jautājumi par šo? 2541 02:01:15,990 --> 02:01:18,030 Tas ir pēdējais mūsu Python kods. 2542 02:01:18,030 --> 02:01:23,320 Tas visu saista garā. 2543 02:01:23,320 --> 02:01:24,768 Jā? 2544 02:01:24,768 --> 02:01:29,460 Mērķauditorija: [NEdzirdams] 2545 02:01:29,460 --> 02:01:31,810 DEIVIDS MALANS: Šis ir šeit? 2546 02:01:31,810 --> 02:01:32,320 Jā. 2547 02:01:32,320 --> 02:01:37,558 Tātad db.execute pēc definīcijas atgriež rindu sarakstu. 2548 02:01:37,558 --> 02:01:40,600 Un katra no šīm rindām ir vārdnīca, jo tā ir ērta. 2549 02:01:40,600 --> 02:01:42,100 Atslēgu vērtību pāri. 2550 02:01:42,100 --> 02:01:45,580 Ja es atlasu rindu skaitu, es tikai zinu, ka pirms stundas apguvu 2551 02:01:45,580 --> 02:01:49,060 SQL, ka tas vienmēr man dos vienu rindu, kuras kolonnu šajā gadījumā 2552 02:01:49,060 --> 02:01:52,540 sauc par n. 2553 02:01:52,540 --> 02:01:55,890 Tātad, ja es zinu, ka tā ir viena rinda, es varu vienkārši akli, 2554 02:01:55,890 --> 02:01:59,240 tāpat kā C, ieiet šajā sarakstā vai masīvā C un doties uz pirmo vietu 2555 02:01:59,240 --> 02:02:02,590 un pēc tam uzskatīt to par vienu rindu. 2556 02:02:02,590 --> 02:02:04,330 Tas, ko jūs nevēlaties darīt, ir šis . 2557 02:02:04,330 --> 02:02:07,310 Pat ja jūs zināt, ka vaicājums atgriež vienu rindu, jūs nevarat 2558 02:02:07,310 --> 02:02:10,290 vienkārši maģiski mainīt mainīgā nosaukumu uz vienskaitli un 2559 02:02:10,290 --> 02:02:13,270 sagaidīt, ka tam būs tikai viena vērtība. 2560 02:02:13,270 --> 02:02:14,960 Jums vienmēr būs saraksts. 2561 02:02:14,960 --> 02:02:17,370 Tātad, pat ja tajā ir tikai viena vērtība, jums ir jādara kaut kas 2562 02:02:17,370 --> 02:02:19,780 līdzīgs, lai to sasniegtu. 2563 02:02:19,780 --> 02:02:21,925 Vai arī, ja vēlaties vairāk kodolīguma, varat veikt rows bracket I 2564 02:02:21,925 --> 02:02:24,070 bracket n . 2565 02:02:24,070 --> 02:02:27,220 Tas sasniegs to pašu bez mainīgā. 2566 02:02:27,220 --> 02:02:29,095 Jā? 2567 02:02:29,095 --> 02:02:33,970 Mērķauditorija: [NEdzirdams] 2568 02:02:33,970 --> 02:02:34,720 DEIVIDS MALANS: Labi. 2569 02:02:34,720 --> 02:02:37,705 Tāpēc es visu laiku maldināju un krāpjos, jo tas vienmēr atgriezīs 2570 02:02:37,705 --> 02:02:40,690 Mario. 2571 02:02:40,690 --> 02:02:44,530 Es ignorēju izlasi, ko cilvēks ierakstīja šeit piektajā rindā. 2572 02:02:44,530 --> 02:02:45,770 Tāpēc ļaujiet man to labot. 2573 02:02:45,770 --> 02:02:47,775 Un tas mūs novedīs pie dažām problēmām, kas galu galā rodas saistībā 2574 02:02:47,775 --> 02:02:49,780 ar SQL. 2575 02:02:49,780 --> 02:02:51,835 Pareizais veids, kā atrisināt šo problēmu — ļaujiet man atbrīvoties 2576 02:02:51,835 --> 02:02:53,890 no mana termināļa loga šeit. 2577 02:02:53,890 --> 02:02:56,820 Pareizais veids, kā atrisināt šo problēmu, ir neizmantot fstring, kā 2578 02:02:56,820 --> 02:02:59,750 mēs parasti izmantojām Python, jo SQL vaicājumi, kā mēs pēc brīža 2579 02:02:59,750 --> 02:03:02,680 redzēsim, var būt bīstami. 2580 02:03:02,680 --> 02:03:07,000 Ja vēlaties pievienot lietotāju datus vaicājumam, kuru lielāko daļu 2581 02:03:07,000 --> 02:03:11,320 esat uzrakstījis iepriekš, jums vajadzētu labāk izmantot vietturi, 2582 02:03:11,320 --> 02:03:15,640 proti, šajā gadījumā jautājuma zīmi. 2583 02:03:15,640 --> 02:03:18,775 Tas zināmā mērā ir raksturīgs CS50 bibliotēkai, taču mēs tikko 2584 02:03:18,775 --> 02:03:21,910 izmantojām principu, ko izmanto arī visas citas bibliotēkas. 2585 02:03:21,910 --> 02:03:25,660 SQL pasaulē atsevišķas jautājuma zīmes tiek izmantotas kā vietturi. 2586 02:03:25,660 --> 02:03:28,190 Un veids, kā jūs to darāt, ir šāds. 2587 02:03:28,190 --> 02:03:31,900 Ja vēlaties pievienot vērtību šai jautājuma zīmei, tāpat kā printf 2588 02:03:31,900 --> 02:03:35,610 valodā C, kā otro vai trešo vai ceturto argumentu norādiet visas 2589 02:03:35,610 --> 02:03:39,320 vērtības, kuras vēlaties pievienot šai vērtībai. 2590 02:03:39,320 --> 02:03:42,280 Tātad pirms C nedēļām mēs izmantojām %s. 2591 02:03:42,280 --> 02:03:43,810 Tāda pati ideja. 2592 02:03:43,810 --> 02:03:46,810 SQL tā ir jautājuma zīme, kuru izmantojat tā vietā. 2593 02:03:46,810 --> 02:03:50,965 Ja es tagad atveru atpakaļ savu termināļa logu un palaižu Python no 2594 02:03:50,965 --> 02:03:55,120 favorites.py, ierakstiet Mario, man joprojām vajadzētu iegūt 39. 2595 02:03:55,120 --> 02:03:57,820 Bet tagad es varu arī ierakstīt Scratch, iespējams, un saņemt 44 par 2596 02:03:57,820 --> 02:04:00,520 pašu pirmo vienumu ar 0. 2597 02:04:00,520 --> 02:04:02,900 Un tas šeit ir vēl populārāks. 2598 02:04:02,900 --> 02:04:04,150 Tātad tas tagad ir pareizi. 2599 02:04:04,150 --> 02:04:07,105 Šeit izmantotu fstring un pēc tam pievienotu tādu vērtību kā favorite 2600 02:04:07,105 --> 02:04:10,060 šeit. 2601 02:04:10,060 --> 02:04:11,977 Bet pēc mirkļa redzēsiet, ka nedariet to. 2602 02:04:11,977 --> 02:04:14,943 Uzticoties lietotāja ievadei, jūs pakļausit sevi potenciālam 2603 02:04:14,943 --> 02:04:17,910 uzlaušanai vai uzbrukumiem. 2604 02:04:17,910 --> 02:04:20,965 Un tāpēc patiesībā pāriesim no tā uz dažiem šāda veida 2605 02:04:20,965 --> 02:04:24,020 izaicinājumiem, proti, diviem, pirms mēs beigsim. 2606 02:04:24,020 --> 02:04:28,036 Tāpēc SQL pasaulē, it īpaši, ja to plaši izmanto ar Twitter un 2607 02:04:28,036 --> 02:04:32,053 pasaules Google, iespējams, datu bāzē vienlaikus nonāk daudz datu, jo 2608 02:04:32,053 --> 02:04:36,070 vairāki cilvēki vienlaikus atver savus tālruņus visā pasaulē. . 2609 02:04:36,070 --> 02:04:37,588 Viņi noklikšķina uz tām pašām saitēm aptuveni vienā un tajā pašā 2610 02:04:37,588 --> 02:04:39,107 laikā visā pasaulē. 2611 02:04:39,107 --> 02:04:41,608 Ja jūsu vietni vienlaikus izmanto tūkstošiem cilvēku, darbību secība 2612 02:04:41,608 --> 02:04:44,110 būs svarīga. 2613 02:04:44,110 --> 02:04:47,130 Bet diemžēl SQL un citos skaitļošanas kontekstos pastāv risks, ka tā 2614 02:04:47,130 --> 02:04:50,150 sauktā race condition. 2615 02:04:50,150 --> 02:04:53,710 Tā, piemēram, vai kāds to kādreiz ir redzējis vai viņam patika? 2616 02:04:53,710 --> 02:04:55,780 Šī ir pasaules rekorda ola. 2617 02:04:55,780 --> 02:04:58,467 Vai arī šī lieta bija ļoti populāra kādu laiku atpakaļ. 2618 02:04:58,467 --> 02:04:59,800 Tā joprojām ir populāra . 2619 02:04:59,800 --> 02:05:03,205 Bet, ja dodaties uz Instagram profilu World Record Egg, mērķis bija 2620 02:05:03,205 --> 02:05:06,610 izveidot visu laiku visvairāk ar atzīmi patīk Instagram ierakstu. 2621 02:05:06,610 --> 02:05:08,000 Un viņiem veicās diezgan labi. 2622 02:05:08,000 --> 02:05:09,170 Tas ir tikai šis. 2623 02:05:09,170 --> 02:05:10,790 Tas ir tikai olas attēls. 2624 02:05:10,790 --> 02:05:13,366 Tagad, popularitātes kulminācijā, iespējams, simtiem, tūkstošiem, 2625 02:05:13,366 --> 02:05:15,943 desmitiem tūkstošu cilvēku gandrīz vienlaicīgi noklikšķināja uz šīs 2626 02:05:15,943 --> 02:05:18,520 olas. 2627 02:05:18,520 --> 02:05:20,995 Tātad tas faktiski rada potenciālu problēmu ar Instagram datu 2628 02:05:20,995 --> 02:05:23,470 integritāti. 2629 02:05:23,470 --> 02:05:24,010 Kāpēc? 2630 02:05:24,010 --> 02:05:26,623 Ja jums tiek saņemti visi šie pieprasījumi vienlaikus, kā tos visus 2631 02:05:26,623 --> 02:05:29,236 izsekot un atjaunināt savu skaitītāju tā, lai tas varētu sekot līdzi 2632 02:05:29,236 --> 02:05:31,850 visai šai datu satiksmei ? 2633 02:05:31,850 --> 02:05:32,350 Kāpēc? 2634 02:05:32,350 --> 02:05:35,605 Nu, pieņemsim tikai spekulēsim , ko Meta, agrāk Facebook, darītu 2635 02:05:35,605 --> 02:05:38,860 slepus ar Instagram, ja tas būtu viņu kods. 2636 02:05:38,860 --> 02:05:41,738 Tātad diskusiju labad pieņemsim, ka Instagram serveri izmanto Python 2637 02:05:41,738 --> 02:05:44,617 un SQL kombinācija . 2638 02:05:44,617 --> 02:05:47,648 Iespējams, ka viņi neizmanto CS50 bibliotēku, taču viņi varētu 2639 02:05:47,648 --> 02:05:50,680 izmantot šīs divas valodas vai divas citas valodas kopā. 2640 02:05:50,680 --> 02:05:52,975 Pieņemsim, ka viņi to dara, lai atjauninātu šīs ziņas ar atzīmju 2641 02:05:52,975 --> 02:05:55,270 Patīk skaitu. 2642 02:05:55,270 --> 02:05:59,690 Viņi vispirms izpilda SQL vaicājumu, piemēram, atlasa pašreizējo 2643 02:05:59,690 --> 02:06:04,110 atzīmju Patīk skaitu no tabulas, ko sauc par posts , kur post ideja 2644 02:06:04,110 --> 02:06:08,530 ir vienāda ar unikālo identifikatoru, kas ir konkrētajai olai tabulā. 2645 02:06:08,530 --> 02:06:12,460 Un tad viņi saglabā rezultātu šajā rindu mainīgajā, tāpat kā es. 2646 02:06:12,460 --> 02:06:14,830 Un tad viņi dara šo . 2647 02:06:14,830 --> 02:06:16,420 Viņi izveido mainīgo, ko sauc par likes 2648 02:06:16,420 --> 02:06:18,700 Viņi to nosaka vienādu ar rindu iekavu 0. 2649 02:06:18,700 --> 02:06:21,280 Tātad pati pirmā rinda rezultātu komplektā. 2650 02:06:21,280 --> 02:06:22,450 Un viņi saņem atslēgu likes 2651 02:06:22,450 --> 02:06:25,030 Tātad tas ir burtiski tas, ko es tikko izdarīju ar skaitīšanu. 2652 02:06:25,030 --> 02:06:27,180 Ļaujiet man izvirzīt hipotēzi, ka Instagram dara kaut ko līdzīgu ar 2653 02:06:27,180 --> 02:06:29,330 kopējo atzīmju likes skaitu. 2654 02:06:29,330 --> 02:06:30,370 Kāpēc viņi to dara? 2655 02:06:30,370 --> 02:06:33,400 Jo viņi pēc tam vēlas izpildīt trešo koda rindiņu, kas izpilda ziņu 2656 02:06:33,400 --> 02:06:36,430 tabulas atjaunināšanu. 2657 02:06:36,430 --> 02:06:39,880 Iestatiet jauno atzīmju likes skaitu vienādu ar kaut ko tādu, kur 2658 02:06:39,880 --> 02:06:43,330 post ideja ir vienāda ar šo citu lietu. 2659 02:06:43,330 --> 02:06:45,100 Tagad ievērojiet, tāpat kā printf, ir ar komatu atdalīts vērtību 2660 02:06:45,100 --> 02:06:46,870 saraksts. 2661 02:06:46,870 --> 02:06:49,420 Viņi vēlas atjaunināt pašreizējo atzīmju likes skaitu no pašreizējās 2662 02:06:49,420 --> 02:06:51,970 vērtības uz pašreizējo vērtību plus 1. 2663 02:06:51,970 --> 02:06:53,350 Tātad tas ir likes plus 1. 2664 02:06:53,350 --> 02:06:55,640 Un tad šim nolūkam pievienojam ID. 2665 02:06:55,640 --> 02:06:57,760 Tātad pieņemsim, ka tas ir tas, ko Instagram dara. 2666 02:06:57,760 --> 02:07:01,385 Diemžēl ikreiz, kad izpildāt vairākas koda rindiņas neatkarīgi un 2667 02:07:01,385 --> 02:07:05,010 esat tik populārs kā Instagram, ka jums ir potenciāli tūkstošiem, 2668 02:07:05,010 --> 02:07:08,635 simtiem tūkstošu serveru, ir pilnīgi iespējams, ka tad, ja jūs un es 2669 02:07:08,635 --> 02:07:12,260 un visi pārējie telpā noklikšķināsiet uz šīs olas tad statistiski 2670 02:07:12,260 --> 02:07:15,885 nebūs tā, ka man tiek izpildītas trīs koda rindiņas, pēc tam trīs 2671 02:07:15,885 --> 02:07:19,510 rindiņas tev un tad trīs rindiņas tev. 2672 02:07:19,510 --> 02:07:21,490 Viņi, iespējams, tiks sajaukti. 2673 02:07:21,490 --> 02:07:24,600 Tas tiek izpildīts man, un tad tas tiek izpildīts jums, un tad viņi 2674 02:07:24,600 --> 02:07:27,710 atgriežas pie darba manā vietā un tā tālāk, lai veiktu 2675 02:07:27,710 --> 02:07:30,820 daudzuzdevumus, gluži kā cilvēks, taču šeit ir ļoti liels ātrums. 2676 02:07:30,820 --> 02:07:33,329 Tomēr problēma ir tāda, ka, ja šīs koda rindas tiek pārtrauktas, kas 2677 02:07:33,329 --> 02:07:35,838 varētu noiet greizi? 2678 02:07:35,838 --> 02:07:38,809 Pieņemsim, ka mēs ar Kārteru abi noklikšķinām uz olas vienlaikus un 2679 02:07:38,809 --> 02:07:41,780 pieņemsim, ka pašreizējais atzīmju like skaits dienā ir 100. 2680 02:07:41,780 --> 02:07:45,150 Tas saglabā šajā mainīgajā vērtību 100. 2681 02:07:45,150 --> 02:07:47,725 Bet, ja mēs noklikšķināsim tik tuvu laikā, mēs varētu saņemt to pašu 2682 02:07:47,725 --> 02:07:50,300 atbildi uz šo atlases vaicājumu. 2683 02:07:50,300 --> 02:07:52,340 Tajā brīdī, kad Deivids un Kārters noklikšķināja, tai bija 100 2684 02:07:52,340 --> 02:07:54,380 atzīmju like . 2685 02:07:54,380 --> 02:07:56,300 Bet tad šī pēdējā koda rindiņa tiek izpildīta man un tad varbūt 2686 02:07:56,300 --> 02:07:58,220 Kārteram. 2687 02:07:58,220 --> 02:08:02,350 Tā kā šī atbilde, datu bāzes stāvoklis, tika saglabāta šajā 2688 02:08:02,350 --> 02:08:06,480 mainīgajā, tad gan Kārters, gan es nodrošināsim, ka šī koda rinda 2689 02:08:06,480 --> 02:08:10,610 tiks izpildīta ar tādu pašu vērtību. 2690 02:08:10,610 --> 02:08:14,045 Atjauniniet ziņu tabulu, iestatot likes equal to 101 for that post's 2691 02:08:14,045 --> 02:08:17,480 ID . 2692 02:08:17,480 --> 02:08:18,080 Kāpēc? 2693 02:08:18,080 --> 02:08:21,728 Jo atkal, ja katra no šīm koda rindiņām, kas darbojas dažādos 2694 02:08:21,728 --> 02:08:25,376 serveros, pārbauda pašreizējā atzīmju like skaita vērtību, bet pēc 2695 02:08:25,376 --> 02:08:29,024 tam tiek pārtraukta, jo Kārters arī noklikšķināja un pēc tam atsākot 2696 02:08:29,024 --> 02:08:32,672 darbu manā vārdā, mums var būt race condition kur kods ir kā 2697 02:08:32,672 --> 02:08:36,320 sacensība, lai pabeigtu, bet to pārtrauc citu lietotāju klikšķi. 2698 02:08:36,320 --> 02:08:39,878 Un problēma ar to ir tāda, ka, pārbaudot kāda mainīgā vai šajā 2699 02:08:39,878 --> 02:08:43,436 gadījumā datu bāzes šūnas vērtību un, pamatojoties uz to, pieņemat 2700 02:08:43,436 --> 02:08:46,995 lēmumu, piemēram, kā to atjaunināt, tagad varat zaudēt datus. 2701 02:08:46,995 --> 02:08:48,557 Un Instagram, iespējams, nav piemērots reklāmai, ja viņi zaudē 2702 02:08:48,557 --> 02:08:50,120 atzīmes like . 2703 02:08:50,120 --> 02:08:53,675 Un tāpēc, iespējams, ir problēma nesaglabāt vērtību 102 un tā vietā 2704 02:08:53,675 --> 02:08:57,230 ievietot skaitli 101 divreiz. 2705 02:08:57,230 --> 02:09:01,510 Pēc būtības tas ir līdzīgs stāstam, kas tika stāstīts datubāzu kursā, 2706 02:09:01,510 --> 02:09:05,790 kuru es pats apmeklēju pirms gadiem, un tas ir nedaudz līdzīgs 2707 02:09:05,790 --> 02:09:10,070 izdomātam scenārijam, kas saistīts ar ledusskapi. 2708 02:09:10,070 --> 02:09:12,380 Un tā ir vistuvākā lieta ledusskapim, ko mēs varētu dabūt uz skatuves. 2709 02:09:12,380 --> 02:09:14,210 Bet iedomājieties, ka arī jūsu kopmītnē jums un jūsu istabas biedram 2710 02:09:14,210 --> 02:09:16,040 ir viens no šiem mazajiem kopmītņu ledusskapjiem. 2711 02:09:16,040 --> 02:09:19,102 Un varbūt jums abiem, kā man stāstīja, ļoti garšo piens. 2712 02:09:19,102 --> 02:09:22,301 Un viens no jums ir nodarbībā , bet otrs pārnāk mājās, atver savu 2713 02:09:22,301 --> 02:09:25,500 kopmītnes ledusskapi, un viņam šķiet, ka mums beidzās piens. 2714 02:09:25,500 --> 02:09:27,020 Un tāpēc jūs aizverat ledusskapi. 2715 02:09:27,020 --> 02:09:29,255 Jūs ejat pāri ielai uz CVS vai kādu citu veikalu un stājaties rindā, 2716 02:09:29,255 --> 02:09:31,490 lai nopirktu pienu. 2717 02:09:31,490 --> 02:09:33,020 Tikmēr jūsu istabas biedrs iziet no klases. 2718 02:09:33,020 --> 02:09:34,160 Viņi atgriežas kopmītnes istabā. 2719 02:09:34,160 --> 02:09:35,702 Viņi patiešām ir izslāpuši pēc piena. 2720 02:09:35,702 --> 02:09:37,010 Viņi atver ledusskapi. 2721 02:09:37,010 --> 02:09:38,510 Viņi saka: ak, mums beidzās piens. 2722 02:09:38,510 --> 02:09:41,405 Un tad viņi dodas pa citu maršrutu, iespējams, uz CVS vai kādu citu 2723 02:09:41,405 --> 02:09:44,300 veikalu tuvumā, iestājas rindā, lai nopirktu pienu. 2724 02:09:44,300 --> 02:09:48,260 Patiniet uz priekšu šajā ļoti izdomātajā stāstā, un kas notiek? 2725 02:09:48,260 --> 02:09:50,333 Ak, sasodīts, mēs esam ieguvuši divus galonus piena, un mēs nekādā 2726 02:09:50,333 --> 02:09:52,406 gadījumā nevaram tajā ievietot galonus piena, nemaz nerunājot par 2727 02:09:52,406 --> 02:09:54,480 diviem no tiem. 2728 02:09:54,480 --> 02:09:56,000 Tātad tā ir problēma. 2729 02:09:56,000 --> 02:10:00,000 Bet kāda ir saistība ar to šeit? 2730 02:10:00,000 --> 02:10:02,693 Nu, mēs abi, jā, ko darījām? 2731 02:10:02,693 --> 02:10:07,523 Mērķauditorija: [NEdzirdams] 2732 02:10:16,685 --> 02:10:17,560 DEIVIDS MALANS: Tieši tā. 2733 02:10:17,560 --> 02:10:19,925 Mērķauditorija: [NEdzirdams] 2734 02:10:22,965 --> 02:10:23,840 DEIVIDS MALANS: Tieši tā. 2735 02:10:23,840 --> 02:10:27,426 Tātad, rezumējot, mums abiem bija ļoti līdzīgs domu gājiens, pieņēmām 2736 02:10:27,426 --> 02:10:31,013 līdzīgu lēmumu, pamatojoties uz vienu un to pašu informāciju, 2737 02:10:31,013 --> 02:10:34,600 neapzinoties, ka informācija, ledusskapis, tiek papildināta. 2738 02:10:34,600 --> 02:10:37,100 Un, protams, Instagram pasaulē tas notiek šādi. 2739 02:10:37,100 --> 02:10:39,300 Ledusskapju pasaulē tas var aizņemt dažas minūtes. 2740 02:10:39,300 --> 02:10:43,950 Bet problēma galu galā ir rezultāts tam, ka esam pieņēmuši lēmumu par 2741 02:10:43,950 --> 02:10:48,600 pasaules stāvokli, un pasaules stāvoklis tika atjaunināts. 2742 02:10:48,600 --> 02:10:50,333 Vaicājumi i tika sajaukti ar citiem. 2743 02:10:50,333 --> 02:10:53,000 Vai arī šajā gadījumā kāds jau bija ceļā uz veikalu. 2744 02:10:53,000 --> 02:10:54,960 Tātad, kāds ir risinājums reālajā pasaulē? 2745 02:10:54,960 --> 02:10:57,375 Nu, jūs varētu vienkārši izveidot piezīmi un ievietot piezīmi “ 2746 02:10:57,375 --> 02:10:59,790 aizgāju pēc piena”, lai paziņotu savam istabas biedram, ka viņam 2747 02:10:59,790 --> 02:11:02,205 nevajadzētu pārbaudīt šī mainīgā lieluma vērtību un pieņemt lēmumu 2748 02:11:02,205 --> 02:11:04,620 par to. 2749 02:11:04,620 --> 02:11:05,120 Kāpēc? 2750 02:11:05,120 --> 02:11:08,958 Jo tas vēl neatbilst iznākumam, kas drīzumā notiks. 2751 02:11:08,958 --> 02:11:11,128 Jūs varētu būt dramatiskāks un faktiski varētu kaut kā aizslēgt 2752 02:11:11,128 --> 02:11:13,299 ledusskapi, aplikt tam piekaramo atslēgu vai tamlīdzīgi, lai viņi tur 2753 02:11:13,299 --> 02:11:15,470 pat nevarētu iekļūt. 2754 02:11:15,470 --> 02:11:18,510 Un tas arī sasniegtu tādu pašu efektu. 2755 02:11:18,510 --> 02:11:22,400 Un tas faktiski ir arī šīs problēmas risinājums kodā. 2756 02:11:22,400 --> 02:11:23,370 Tas nav droši. 2757 02:11:23,370 --> 02:11:27,110 Nepietiek tikai ar trīs koda rindiņu izpildi kā šis. 2758 02:11:27,110 --> 02:11:29,830 Drīzāk tas, ko jūs, iespējams, vēlaties darīt, ir izmantot papildu 2759 02:11:29,830 --> 02:11:32,550 SQL atslēgvārdus, kuriem mēs netērēsim daudz laika pašā klasē, bet 2760 02:11:32,550 --> 02:11:35,270 gan šos. 2761 02:11:35,270 --> 02:11:37,160 Šai problēmai ir risinājumi. 2762 02:11:37,160 --> 02:11:41,630 Varat sākt tā saukto transakciju un precīzāk apņemties pieņemt 2763 02:11:41,630 --> 02:11:46,100 lēmumu, piemēram, atjaunināt datubāzi uz 101 vai 102. 2764 02:11:46,100 --> 02:11:50,120 Vai arī, ja saprotat, pagaidiet, Kārtera vaicājums pārtrauc manējo. 2765 02:11:50,120 --> 02:11:51,830 Ļaujiet man atgriezties iepriekšējā stāvoklī un vienkārši attīt 2766 02:11:51,830 --> 02:11:53,540 atpakaļ. 2767 02:11:53,540 --> 02:11:54,290 Ļaujiet man atsaukt. 2768 02:11:54,290 --> 02:11:55,840 Control Z , ja vēlaties. 2769 02:11:55,840 --> 02:11:57,720 Ir arī vēl viens atslēgvārds, kas SQL vairs netiek tik daudz 2770 02:11:57,720 --> 02:11:59,600 izmantots, un tas ir bloķēšana. 2771 02:11:59,600 --> 02:12:01,170 Jūs varētu burtiski atgriezties pagātnē . 2772 02:12:01,170 --> 02:12:05,245 Bloķējiet visu datu bāzes tabulu, neļaujot nevienam to atjaunināt vai 2773 02:12:05,245 --> 02:12:09,320 veikt izmaiņas vai pat lasīt, kamēr kāds cits tai piekļūst. 2774 02:12:09,320 --> 02:12:12,320 Tas bija ļoti grūts risinājums, jo tas visu palēnināja. 2775 02:12:12,320 --> 02:12:15,758 Īsāk sakot, transakcijas tagad ir SQL funkcija, kas jums nav obligāti 2776 02:12:15,758 --> 02:12:19,196 jāizmanto, lai atrisinātu šo problēmu, rīkojoties līdzvērtīgi, sakot 2777 02:12:19,196 --> 02:12:22,634 , kamēr tiek atjaunināts Deivida skaitītājs: turiet Kārteru malā 2778 02:12:22,634 --> 02:12:26,072 ideālā gadījumā uz īsu laiku un pēc tam ļaujiet iet cauri arī viņa 2779 02:12:26,072 --> 02:12:29,510 datiem. 2780 02:12:29,510 --> 02:12:30,875 Tas ir arī līdzvērtīgs zīmītes vai slēdzenes uzlikšanai uz 2781 02:12:30,875 --> 02:12:32,240 ledusskapja . 2782 02:12:32,240 --> 02:12:33,920 Un tiešām, es domāju slēdzeni burtiski. 2783 02:12:33,920 --> 02:12:37,700 Tos kādreiz sauca un dažos kontekstos joprojām sauc arī par datu bāzu 2784 02:12:37,700 --> 02:12:41,480 bloķēšanu. 2785 02:12:41,480 --> 02:12:44,730 Un kods, kuram jūs varētu to darīt, ir gandrīz tāds pats. 2786 02:12:44,730 --> 02:12:48,295 Jūs vienkārši iesaiņojat trīs vaicājumus ar transaction paziņojumu un 2787 02:12:48,295 --> 02:12:51,860 commit . 2788 02:12:51,860 --> 02:12:54,830 Un termins šeit ir tāds, ka tas jūsu izteikumus padara par atomiskiem 2789 02:12:54,830 --> 02:12:57,800 nosacījumiem 2790 02:12:57,800 --> 02:12:59,515 Tātad atomisks nosacījums nozīmē, ka tie visi ir izpildīti, vai nav 2791 02:12:59,515 --> 02:13:01,230 izpildīti vispār. 2792 02:13:01,230 --> 02:13:04,340 Tas nozīmē, ka tie visi ir ļoti cieši saistīti bez pārtraukuma. 2793 02:13:04,340 --> 02:13:06,410 Transaction atrisina šo problēmu un izvairās no diviem galoniem 2794 02:13:06,410 --> 02:13:08,480 piena. 2795 02:13:08,480 --> 02:13:12,326 Un pēdējā problēma, kas mūsdienās ir traģiski tik izplatīta reālajā 2796 02:13:12,326 --> 02:13:16,173 pasaulē, ir tā sauktais SQL injekcijas uzbrukums. 2797 02:13:16,173 --> 02:13:18,590 Un tas ir tas, uz ko es iepriekš minēju ar jautājuma zīmi. 2798 02:13:18,590 --> 02:13:21,043 Pieņemsim, ka jums ir ieradums pieteikties Jēlas vietnēs ar savu 2799 02:13:21,043 --> 02:13:23,496 tīkla ID vai paroli vai arī Hārvardā ar savu Hārvardas atslēgu un 2800 02:13:23,496 --> 02:13:25,950 paroli. 2801 02:13:25,950 --> 02:13:28,526 Pieņemsim, ka diskusiju labad cilvēki, kas ieviesa Hārvardas atslēgas 2802 02:13:28,526 --> 02:13:31,103 pieteikšanos, ļauj jums ierakstīt savu e-pasta adresi, protams, un 2803 02:13:31,103 --> 02:13:33,680 paroli. 2804 02:13:33,680 --> 02:13:36,920 Taču pieņemsim, ka viņi izmanto SQL slēpti , lai pārbaudītu jūsu 2805 02:13:36,920 --> 02:13:40,160 lietotājvārdu un paroli, lai pārliecinātos, ka esat Deivids Malans 2806 02:13:40,160 --> 02:13:43,400 vai Kārters Zenke, vai kāds, par kuru uzdodat sevi. 2807 02:13:43,400 --> 02:13:47,405 Es jums vēl neesmu parādījis sintaksi, bet izrādās, ka SQL — tas ir 2808 02:13:47,405 --> 02:13:51,410 īpašs veids, kā norādīt komentāru. 2809 02:13:51,410 --> 02:13:53,100 Tas nozīmē ignorēt visu pa labi. 2810 02:13:53,100 --> 02:13:57,080 Tātad tas ir tāpat kā // C vai hash simbols Python. 2811 02:13:57,080 --> 02:13:59,430 -- tikai nozīmē ignorēt visu pa labi. 2812 02:13:59,430 --> 02:14:01,440 Un mēs, protams, esam redzējuši atsevišķus citātus. 2813 02:14:01,440 --> 02:14:04,366 Tātad viens no veidiem, kā veikt SQL injekcijas uzbrukumu, ir mēģināt 2814 02:14:04,366 --> 02:14:07,293 ievadīt ļaunprātīgu SQL kodu kāda cita datu bāzē, viņam to 2815 02:14:07,293 --> 02:14:10,220 neapzinoties. 2816 02:14:10,220 --> 02:14:11,220 Kā jūs to darāt? 2817 02:14:11,220 --> 02:14:13,768 Pieņemsim, ka es pieteicos kā malan@harvard.edu single quote dash, 2818 02:14:13,768 --> 02:14:16,316 dash . 2819 02:14:16,316 --> 02:14:23,150 Es neko nepārprotami necitēju, un nekas nav pa labi no — vienalga. 2820 02:14:23,150 --> 02:14:25,500 Bet šī nelīdzsvarotība būs noderīga. 2821 02:14:25,500 --> 02:14:26,000 Kāpēc? 2822 02:14:26,000 --> 02:14:29,592 Jo, ja es esmu hakeris un pieņemu, ka kāds no Hārvardas, iespējams, 2823 02:14:29,592 --> 02:14:33,185 izmanto vienu pēdiņu, lai iekļautu lietotāja e-pasta adresi un 2824 02:14:33,185 --> 02:14:36,777 lietotāja paroli, kā būtu, ja es mēģinātu pabeigt viņu domas un 2825 02:14:36,777 --> 02:14:40,370 aizvērt kādu no šīm pēdiņām. ? 2826 02:14:40,370 --> 02:14:41,850 Kas var notikt? 2827 02:14:41,850 --> 02:14:43,220 Nu, mēs varētu to izdarīt. 2828 02:14:43,220 --> 02:14:45,635 Šeit, piemēram, ļaujiet man spekulēt , ka Hārvarda uzrakstīja kodu, 2829 02:14:45,635 --> 02:14:48,050 cerams, ka ne slepus . 2830 02:14:48,050 --> 02:14:51,500 Tātad viņi izmanto CS50 bibliotēku Python, un viņi izmanto SQL iekšā. 2831 02:14:51,500 --> 02:14:54,350 Pieņemsim, ka viņiem ir šāds vaicājums. 2832 02:14:54,350 --> 02:14:57,832 Izvēlieties star from users where username equals question mark and 2833 02:14:57,832 --> 02:15:01,315 password equals question mark.. 2834 02:15:01,315 --> 02:15:03,192 Un tad pieņemsim, ka viņi vienkārši pievieno ievadīto lietotājvārdu 2835 02:15:03,192 --> 02:15:05,070 un paroli. 2836 02:15:05,070 --> 02:15:07,240 Un tad, ja viņi atgriež noteiktu rindu skaitu, viņi pieņem, ka esmu 2837 02:15:07,240 --> 02:15:09,410 Dāvids. 2838 02:15:09,410 --> 02:15:11,150 Viņi pieņem, ka Kārters ir Kārters, ja datu bāzē ir gan 2839 02:15:11,150 --> 02:15:12,890 lietotājvārds, gan parole. 2840 02:15:12,890 --> 02:15:14,480 Šeit tikai stāsta beigas. 2841 02:15:14,480 --> 02:15:15,680 Tas ir labi. 2842 02:15:15,680 --> 02:15:18,750 Tam ir jautājuma zīmes vietturis, kā mēs apspriedām iepriekš. 2843 02:15:18,750 --> 02:15:21,140 Bet ko tad, ja jūs to īsti neatceraties? 2844 02:15:21,140 --> 02:15:23,656 Jūs to neņemat pie sirds un izmantojat savas jau pazīstamākās 2845 02:15:23,656 --> 02:15:26,173 pagājušās nedēļas virknes, ar kurām mēs izmantojam šīs figūriekavas , 2846 02:15:26,173 --> 02:15:28,690 lai pievienotu vērtības. 2847 02:15:28,690 --> 02:15:30,280 Ko darīt, ja jūs to darītu tā vietā? 2848 02:15:30,280 --> 02:15:31,900 Tātad tā ir gandrīz tāda pati ideja. 2849 02:15:31,900 --> 02:15:34,010 Tā joprojām ir db izpilde, bet tagad tā ir select star from users 2850 02:15:34,010 --> 02:15:36,120 where username equals 2851 02:15:36,120 --> 02:15:38,985 Un tagad ievērojiet, ka es izmantoju vienas pēdiņas, ko pieprasa SQL, 2852 02:15:38,985 --> 02:15:41,850 bet es izmantoju fstrings ar figūriekavām . 2853 02:15:41,850 --> 02:15:46,530 Un password equals single quote password and then close single quote . 2854 02:15:46,530 --> 02:15:50,670 Problēma ir tāda, ka, ja jūs vienkārši akli ielīmējat lietotāja 2855 02:15:50,670 --> 02:15:54,810 ievadīto informāciju šajā tīmekļa veidlapā lietotājvārda un paroles 2856 02:15:54,810 --> 02:15:58,950 laukā, nekas neliedz ļaunprātīgam lietotājam, studentam, mācībspēkam 2857 02:15:58,950 --> 02:16:03,090 vai personālam savā vārdā iekļaut vienu citātu. 2858 02:16:03,090 --> 02:16:06,765 Vai varbūt pat labestīgi, ja viņu vārdam ir vienas pēdiņas , kā tas 2859 02:16:06,765 --> 02:16:10,440 ir dažiem uzvārdiem 2860 02:16:10,440 --> 02:16:12,230 Tāpēc tas ir ļoti trausls. 2861 02:16:12,230 --> 02:16:12,730 Kāpēc? 2862 02:16:12,730 --> 02:16:16,580 Pieņemsim, ka, ja mēs pievienosim manu ļaunprātīgo malan@harvard.edu 2863 02:16:16,580 --> 02:16:20,430 single quote , ievērojiet, kas notiek ar lietotājvārdu šeit. 2864 02:16:20,430 --> 02:16:26,340 Lietotājvārda mainīgais figūriekavu iekšpusē tiks aizstāts ar šo. 2865 02:16:26,340 --> 02:16:30,045 Un ievērojiet vienas pēdiņas , ko uzrakstīja Hārvardas programmētājs, 2866 02:16:30,045 --> 02:16:33,750 malan@harvard.edu single quote , ko uzrakstīju es - ko es uzrakstīju 2867 02:16:33,750 --> 02:16:37,455 vienas pēdiņas , ko uzrakstīja Hārvarda, un visu citu, ko viņi vēlas 2868 02:16:37,455 --> 02:16:41,160 pēc tam. 2869 02:16:41,160 --> 02:16:43,524 Tomēr kādas ir sekas ,dash, dash? 2870 02:16:46,722 --> 02:16:48,680 Viss pa labi tiks ignorēts. 2871 02:16:48,680 --> 02:16:51,730 Tāpēc šajā gadījumā parole pat nekad netiek pārbaudīta. 2872 02:16:51,730 --> 02:16:56,440 Es maldinu serveri ignorēt visu pēc -- bet esmu ļoti gudri, ļoti 2873 02:16:56,440 --> 02:17:01,150 ļaunprātīgi izveidojis sintaktiski derīgu vaicājumu. 2874 02:17:01,150 --> 02:17:01,650 Kāpēc? 2875 02:17:01,650 --> 02:17:06,670 Jo es sniedzu vienu citātu, kas beigs domu par šo pirmo citātu. 2876 02:17:06,670 --> 02:17:08,849 Un tagad es zinātu, kā to izdarīt tikai tad, ja redzētu kodu vai ja 2877 02:17:08,849 --> 02:17:11,029 es vienkārši nejauši mēģinātu ievietot apostrofus tīmekļa veidlapās 2878 02:17:11,029 --> 02:17:13,209 un redzētu, vai kaut kas sabojājas. 2879 02:17:13,209 --> 02:17:15,215 Bieži vien pretinieki uzbrūk sistēmām. 2880 02:17:15,215 --> 02:17:17,590 Viņi ieraksta potenciāli bīstamas rakstzīmes, nospiež taustiņu Enter. 2881 02:17:17,590 --> 02:17:20,173 Ja kaut kas sabojājas, viņi ne vienmēr ir iekļuvuši sistēmā, taču 2882 02:17:20,173 --> 02:17:22,757 viņi zina, ka var būt ievainojamība. 2883 02:17:22,757 --> 02:17:25,340 Un tad viņi sāk mēģināt metodiskāk šādas lietas. 2884 02:17:25,340 --> 02:17:29,500 Tātad tas būs slikti, jo tas faktiski aizkrāso pārējo vaicājumu. 2885 02:17:29,500 --> 02:17:32,035 Un šis vaicājums noteikti atgriezīs dažas rindas, pat nezinot manu 2886 02:17:32,035 --> 02:17:34,570 paroli. 2887 02:17:34,570 --> 02:17:39,025 Un tātad šī loģika dot dot dot nozīmē, ka, ja dati tiek atgriezti no 2888 02:17:39,025 --> 02:17:43,480 šī vaicājuma, Hārvarda, iespējams, pieņems, ka Malans ir pieteicies. 2889 02:17:43,480 --> 02:17:47,840 Parādiet viņam viņa kontu vai citu, kas šeit tiek aizsargāts. 2890 02:17:47,840 --> 02:17:50,559 Īsāk sakot, fstring izmantošana ir slikta. 2891 02:17:50,559 --> 02:17:54,280 Izmantojot jebkuru ekvivalentu, piemēram, %s, C, slikti. 2892 02:17:54,280 --> 02:17:58,195 Runājot par SQL, to var atrisināt, izmantojot jautājuma zīmes vai 2893 02:17:58,195 --> 02:18:02,110 jebkuru citu, ko nosaka trešās puses bibliotēka, piemēram, CS50. 2894 02:18:02,110 --> 02:18:02,620 Kāpēc? 2895 02:18:02,620 --> 02:18:05,080 Jo tādas bibliotēkas kā mūsējā ir izveidotas tā, lai būtu vismaz 2896 02:18:05,080 --> 02:18:07,540 gudras un paranoiskas. 2897 02:18:07,540 --> 02:18:09,740 Un tas, ko mēs darīsim, ir tas. 2898 02:18:09,740 --> 02:18:14,130 Ja izmantojat jautājuma zīmes un vērtības ir pievienotas, mēs 2899 02:18:14,130 --> 02:18:18,520 neizmantosim visas potenciāli bīstamas rakstzīmes šajos vietturos. 2900 02:18:18,520 --> 02:18:20,994 Tādējādi vienas pēdiņas vairs netiks uzskatītas par gramatiskām 2901 02:18:20,994 --> 02:18:23,469 vienām pēdiņām 2902 02:18:23,469 --> 02:18:26,870 Tas būs burtiski lietotājvārda vai paroles rakstzīme. 2903 02:18:26,870 --> 02:18:30,185 Tāpēc bibliotēka par to parūpējas jūsu vietā, jo jūs pievienojat 2904 02:18:30,185 --> 02:18:33,500 lietotājvārdu un paroli kā atsevišķus argumentus. 2905 02:18:33,500 --> 02:18:35,430 Un tad mēs vai trešā puse, kuru izmantojat, faktiski veicam 2906 02:18:35,430 --> 02:18:37,360 dezinfekciju. 2907 02:18:37,360 --> 02:18:41,510 Tas ir datu tīrīšana un slikto rakstzīmju novēršana. 2908 02:18:41,510 --> 02:18:44,650 Tagad šī ir sava veida interneta mēma, kas kādu laiku pastāvēja. 2909 02:18:44,650 --> 02:18:47,290 Ja kādreiz esat braucis ar automašīnu vai atradies automašīnā, kurā 2910 02:18:47,290 --> 02:18:49,930 ir automātiskie nodevu lasītāji. 2911 02:18:49,930 --> 02:18:52,969 Šī persona domāja, ka varētu būt smieklīgi mēģināt darīt ko līdzīgu. 2912 02:18:52,969 --> 02:18:54,309 Ko viņi, domājams, dara? 2913 02:18:54,309 --> 02:18:57,507 Nav skaidrs, vai tas darbojās vai ne, pieņēmums ir tāds, ka šeit ir 2914 02:18:57,507 --> 02:19:00,705 faktiskās numura zīmes beigas, bet šeit ir interesantas vienas 2915 02:19:00,705 --> 02:19:03,903 pēdiņas ar semikolu. 2916 02:19:03,903 --> 02:19:05,981 Tas ir īpaši slikti, jo tas nozīmē, ka jūs, iespējams, varat izpildīt 2917 02:19:05,981 --> 02:19:08,059 otru vaicājumu datu bāzē. 2918 02:19:08,059 --> 02:19:12,404 Šeit ir kāds, kurš izklaidējas, mēģinot nomest visu datu bāzes 2919 02:19:12,404 --> 02:19:16,750 tabulu, pašvaldībai kas skenē caur kamerām to numura zīmes kodu. 2920 02:19:16,750 --> 02:19:19,150 Un es būtu nolaidīgs, ja mēs nebeigtu uz šīs nots 2921 02:19:19,150 --> 02:19:23,320 Vismaz datorzinātņu aprindās ir kāds kuru sauc , bez jebkādas 2922 02:19:23,320 --> 02:19:27,490 saistības ar TF nosaukumu, ko mēs ievietojām datubāzē agrāk, mazais 2923 02:19:27,490 --> 02:19:31,660 Bobijs Tables, kas beidzas ar šo XKCD komiksu. 2924 02:19:31,660 --> 02:19:34,000 Un, ja jūs ķiķiniet , ja smejaties, jūs tagad esat pilntiesīgi SQL 2925 02:19:34,000 --> 02:19:36,340 programmētāji. 2926 02:19:36,340 --> 02:19:39,049 Jauki, jauki. 2927 02:19:42,030 --> 02:19:44,740 Katrs CS students zina par mazo Bobiju Table . 2928 02:19:44,740 --> 02:19:47,657 Tātad, ja tagad pieminēsiet mazo Bobiju Tables, jūs esat gatavs. 2929 02:19:47,657 --> 02:19:49,240 Nu labi, šodienai tas arī viss. 2930 02:19:49,240 --> 02:19:51,780 Tiksimies nākamreiz. 2931 02:19:51,780 --> 02:19:55,130 [MŪZIKA ATSKAŅOTĀS]