DUGS LOIDS: Tātad savos videoklipos par tīmekļa izstrādi mēs pāris
reizes esam runājuši par to, kas ir datubāze.
Un šajā videoklipā mēs iedziļināsimies nedaudz sīkāk un parādīsim,
kas ir datubāze, kāpēc mēs to izmantotu un kā mēs varētu ar to
darboties .
Piemēram, lai mēs varētu izveidot vietnes, kas ir daudz sarežģītākas
nekā tikai tīmekļa lapa, kuru viņi vienkārši apmeklē un skatās ziņas,
mums var būt nepieciešama informācijas datu bāze, piemēram,
lietotājvārda un paroles kombinācijas, glabāšanai, lai lietotājs
mēģinātu reģistrēties iekšā.
Šī pieteikšanās informācija tiek nosūtīta uz datu bāzi.
Tas tiek pārbaudīts ar informāciju datu bāzē, lai noskaidrotu, vai
lietotājvārda un paroles kombinācija atbilst.
Un, ja tā ir, tas ļauj lietotājam iekļūt.
Mēs varam arī saglabāt citu informāciju lietotājiem, piemēram, viņu
iepirkšanās vēsturi vai jebkādu citu informāciju, ko jūs, iespējams,
vēlēsities lietotājam ilgstoši saglabāt.
Tagad, ja kādreiz esat izmantojis tādas programmas kā Microsoft
Excel, Google Sheets vai Numbers, jūs droši vien esat iepazinies ar
datu bāzes pamatideju.
Datu bāze sastāv no pāris dažādiem hierarhijas līmeņiem.
Datubāzē mums ir tabulas.
Un katrā no šīm tabulām mums ir rindas un kolonnas.
Un, ja jūs esat pazīstams ar programmu Excel vai, iespējams, pat
nezināt, ļaujiet man īsumā pēc analogijas pastāstīt par to, kas ir
datu bāze, tabula, rinda, kolonna.
Un tad mēs varam to vienā mirklī pārvērst tajā pašā idejā SQL.
Tāpēc savā ekrānā esmu atvēris Excel failu.
Un augšpusē man ir burti — A, B, C, D, E.
Tās būtu dažādas kolonnas manā failā.
Kreisajā pusē man ir numurētas rindas, kurās varu ievietot
informāciju.
Tā, piemēram, es varētu vienkārši ievietot savu vārdu šeit šūnā A1.
Tātad tas atrodas A kolonnā pirmajā rindā.
Tagad apakšējā kreisajā stūrī ir funkcija, kuru, iespējams, neesat
izmantojis pārāk bieži, ja neizmantojat programmu Excel pārāk bieži.
Bet ir tādi priekšstati par izklājlapām .
Izklājlapas ir līdzīgas dažādām tabulām.
Ņemiet vērā, ka, pārejot uz 2. lapu, dati, kas bija 1. lapā, mans
vārds, vairs nav tur.
Tātad katrai lapai ir savs unikāls rindu un kolonnu kopums.
Taču visas šīs lapas joprojām ir iesietas vienā failā ar nosaukumu
Book 1.
Tātad līdzība ir tāda, ka 1. grāmata ir mūsu datubāze, kurā ir
atšķirīgs tabulu skaits, kas Excel valodā ir tikai izklājlapa .
Un katrā lapā ir kolonnas, kurās mēs varam ievietot datus, un rindas,
kurās mēs varam ievietot datus.
Tātad ir dažādu veidu datu bāzes , kurus mēs varam izmantot savās
programmās.
Mēs runāsim par SQL, SQL, kas apzīmē strukturēto vaicājumu valodu.
SQL valoda ir programmēšanas valoda, kuras vienīgais dzīves mērķis ir
vaicāt vai uzdot jautājumus vai izgūt datus no datu bāzes.
Un ir daudz dažādu SQL implementāciju.
Divas no populārākajām ir šādas — mums ir MySQL, kas ir atvērtā
pirmkoda platforma.
To ļoti bieži izmanto, lai izveidotu relāciju datu bāzes.
Šajā videoklipā mēs neiedziļināsimies daudz detaļās par to, kas ir
relāciju datu bāze salīdzinājumā ar citiem datu bāzes veidiem.
Taču ziniet, ka ir vairāk nekā viens tips, un šajā kursā mēs
aplūkojam relāciju datu bāzes.
Vēl viens veids, ko mēs faktiski esam izmantojuši CS50 kopš
2016. gada, ir SQLite, kam ir ļoti līdzīga funkcija, kas iestatīta kā
MySQL.
Bet tā ir tikai nedaudz vieglāka .
To ir nedaudz vieglāk izmantot CS50 IDE.
Un tāpēc mēs faktiski izmantosim to klasē.
Neatkarīgi no tā, kādu SQL ieviešanu izmantojat, daudzi no tiem būs
aprīkoti ar rīku phpMyAdmin, kas ir GUI vai grafiskā lietotāja
interfeisa rīks, ko izmanto, lai izpildītu dažus nogurdinošākus vai
ikdienišķākus datu bāzes vaicājumus ,lietotājam draudzīgs veids, jo
varat vienkārši noklikšķināt un veikt darbības tīmekļa
pārlūkprogrammā.
Un tos visbiežāk izmanto, lai vispirms izveidotu datu bāzes un
iestatītu tabulas, jo pirmā lieta, ko darīsit pēc datu bāzes
konfigurēšanas, ir tabulas izveide.
Jo bez tabulas mums nav rindu un kolonnu.
Un bez rindām un kolonnām mēs nevaram saglabāt nekādus datus.
Tabulām ir ļoti apgrūtinoša sintakse, kas tiek izmantota to
iestatīšanai.
Tāpēc grafiskā interfeisa phpMyAdmin izmantošana tabulas izveidošanai
noteikti noderēs.
Tabulas veidošanas procesā jums būs precīzi jānorāda, kuras kolonnas
tiks saglabātas šajā tabulā.
Tātad pašā sākumā, kad veidojat tabulu, jūs sakāt, ka manā tabulā
tiks saglabāti lietotājvārdi un paroles un jebkāda cita veida
informācija, kuru vēlaties.
un jums tas ir jānorāda pirms datu ievietošanas tabulā.
Tāpēc jums jau laikus jāizstrādā, kā izskatīsies jūsu tabula .
Kad tas būs izdarīts, gandrīz katrs vaicājums, izņemot, piemēram,
datu bāzes dzēšanu un tabulas dzēšanu, kuru turpmāk izmantosit šajā
tabulā, attieksies uz datiem, kas tiek glabāti dažādās tabulas
rindās.
Tāpat kā C, katra mūsu SQL tabulas kolonna spēj glabāt dažādu datu
tipu datus.
Piemēram, C versijā mums bija rakstzīmes un virknes, veseli skaitļi
un peldošā komata skaitļi.
Un SQL ir vēl daži datu veidi.
Šie ir tikai 20 no tiem, un tas nav pat pilnīgs saraksts.
Bet dažām no šīm lietām vajadzētu izskatīties pazīstamām.
Tā, piemēram, mums ir int, kurš var saglabāt veselus skaitļus.
Bet mums ir arī šie četri citi veidi, kuros var būt veseli skaitļi ar
dažādām augšējām robežām.
Tātad jūs varat atcerēties no C, ka vesela skaitļa augšējā robeža ir
2 līdz 31. pakāpei vai 2 līdz 32. pakāpei, ja tie ir pozitīvi veseli
skaitļi bez komata .
Bet šeit mēs varam teikt mazas ints vai mazas ints vai vidējas vai
lielas ints, kurām katrai ir atšķirīgas vērtību augšējās robežas.
Decimālzīme un peldošais komats ir datu tipa Double un peldošā komata
vietā, ko mēs pazīstam no C.
Mēs varam arī saglabāt datuma un laika zīmogus SQL datu bāzēs.
Tam nav datu veida, kas būtu paredzēts darboties C platformā .
Bet SQL ir daži dažādi veidi, kā to izdarīt.
Mēs varam veikt pat eksotiskākas lietas, piemēram, uzglabāt
ģeometriju vai rindu virknes.
Un kas tie ir?
Ģeometriju un rindu virknes var izmantot, lai SQL datu bāzē saglabātu
apgabala kartēšanu vai iezīmēšanu kartē , piemēram, izmantojot ĢIS
datus.
Un mēs faktiski varam to saglabāt savā SQL tabulā un nedaudz vēlāk
izveidot precīzu zīmējumu.
Teksta veids virkņu vietā ir tikai patvaļīgi lielas teksta daļas.
Uzskaitījumu klasifikācija ir arī veids, kas pastāv C valodā, taču
mēs par tiem pārāk daudz nerunājam C valodā.
Taču īsumā , enums ir jūsu tabulas kolonna, ko var izmantot, lai
saglabātu ierobežotu vērtību kopu.
Tā, piemēram, man varētu būt enum, ko sauc, piemēram, par
iecienītākajām krāsām.
Un es varētu norādīt, kad es veidoju savu tabulu , ka tā var saturēt
tikai sarkanu, zaļu un zilu.
Ja mēģinātu ievietot rindu, kurā šajā vietā ir violeta krāsa, tas
nedarbosies, jo tā nav viena no uzskaitītajām vērtībām, ko var
saglabāt šajā kolonnā.
Ir arī char un varchar.
Un tie nav gluži tie paši, kas, jūsuprāt, ir C valodā.
Tāpēc veltīsim īsu brīdi, lai izskaidrotu atšķirību starp šiem diviem
datu veidiem, kas ir diezgan svarīgi.
Tātad atšķirībā no C, char neattiecas uz vienu rakstzīmi.
Faktiski tas ir līdzīgs mūsu priekšstatam par virkni, taču ar
brīdinājumu, ka šī virkne ir noteikta garuma.
Un parasti, kad mēs norādām char vai varchar veidu, mums ir jānorāda
šīs virknes garums pašā sākumā, tāpat kā mēs to darām c.
Piemēram, mans kolonnas veids varētu būt 10 rakstzīmes .
Tas nozīmē, ka es varu saglabāt 10 rakstzīmju virknes šajā tabulas
kolonnā, tieši 10 rakstzīmju virknes.
Tātad, ja es mēģinātu saglabāt, piemēram, vārdu “hi”, HI, kas sastāv
tikai no diviem burtiem, tas nonāks kolonnā .
Bet tas arī saglabātu 8 papildu — būtībā nulles baitu ekvivalentu,
tāpēc šajā kolonnā šajā rindā man joprojām bija 10 rakstzīmes.
Un, ja es mēģinātu saglabāt, piemēram, 15 rakstzīmju virkni, tas
nedarbotos.
Beigās es saglabātu tikai pirmos 10 burtus.
Tātad tas vienmēr būs 10, katru reizi.
No otras puses, varchar attiecas uz mainīga garuma virkni.
Tātad, ja es teicu, ka mana kolonna ir varchar 99, es varu saglabāt
1, 2, 3, 4, 5 rakstzīmju virknes līdz 99 rakstzīmēm garas,
neizmantojot visas šīs papildu brīvās vietas vai nulles baitus vai
nulles virknes beigās.
Tātad char, fiksēta garuma virknes .
Varchar, mainīga garuma virknes .
Mēs nerunāsim par to, kāpēc jūs varētu vēlēties izmantot vienu vai
otru.
Taču ir iemesli, kāpēc jūs ne vienmēr vēlaties izmantot varchar, un
dažās situācijās jūs varētu vēlēties izmantot char.
Tagad SQLite faktiski ir daudzi vai visi šie paši datu tipi.
Taču atšķirība ir tāda, ka, lai vienkāršotu lietas, katrs no šiem
datu tipiem ir saistīts ar tā saukto tipu radniecību .
Tātad visu sarakstu ar 20 — vai vairāk — var reducēt līdz vienai no
šīm piecām dažādajām radniecībām — null, integer, real, text, un
blob.
Nulle, iespējams, ir diezgan acīmredzama — nekas.
Integer — veseli skaitļi.
Real — tas ietvertu tādas lietas kā decimālzīme un peldošs.
Text būtu iekļautas tādas lietas kā char un varchar.
Blobs — tas vairāk līdzinātos ģeometrijai vai datiem, kas patiesībā
nav teksts, bet ir tikai liels bitu vai baitu skaits.
Tas būtu blob .
Un viss var samazināties līdz vienai no šīm piecām dažādajām vienībām
.
Tāpēc pēc kolonnu norādīšanas mūsu SQL tabulā ir ļoti svarīgi ņemt
vērā vēl vienu apsvērumu, proti, vienu kolonnu, kas ir mūsu primārā
atslēga.
Kāpēc mums ir nepieciešama primārā atslēga?
Iemesls ir tāds, ka katrai tabulas rindai jābūt unikālai un ātri
identificējamai, lai mūsu SQL vaicājumi būtu visefektīvākie.
Tāpēc pareizās primārās atslēgas izvēle ļaus mums pārliecināties, ka
katrā rindā ir viena vērtība, kas ir pilnīgi unikāla.
Un, ja tā ir taisnība, ja katrā rindā ir viena unikāla kolonna, mēs
varam unikāli identificēt vai ļoti ātri noteikt, par kuru rindu mēs
runājam.
Tagad ir arī iespējams izveidot kopīgu primāro atslēgu, kas ir tikai,
piemēram, divu kolonnu kombinācija, taču tas var būt patvaļīgi liels
kolonnu skaits, kas vienmēr ir unikāls.
Tāpēc man varētu būt viena kolonna, kurā vienmēr varētu būt A, B vai
C.
Man varētu būt vēl viena kolonna, kurā ir vieninieki un divi, un trīs
un četri.
Man varētu būt vairāki A un vairāki B un vairāki C, vairāki
vieninieki, divi un trīs.
Taču visās šajās rindās man ir atļauts izmantot tikai vienu
A1 kombināciju.
Man var būt B1, C1.
Man var būt A2, A3, A4.
Taču vienmēr ir tikai viena šo divu kolonnu kombinācija, kas ir
unikāla.
Tas būtu arī pieņemami, jo tā ir kopīga primārā atslēga.
Tātad SQL ir programmēšanas valoda, tāpat kā citas programmēšanas
valodas, par kurām mēs runājām.
Bet tai ir ļoti ierobežots vārdu krājums.
Tagad ir vairāk lietu, ko varat darīt ar SQL, nekā mēs runāsim šajā
videoklipā, jo šajā videoklipā mēs runāsim tikai par četrām darbībām,
kuras var veikt tabulā , vai četrām galvenajām darbības, kuras,
visticamāk, veiksiet tabulā — INSERT, SELECT, UPDATE un DELETE.
Un šīs četras lietas mēs iedziļināsimies mazliet sīkāk tikai pēc
sekundes.
Taču šīs noteikti ir visizplatītākās četras darbības, ko darīsit ar
tabulām, kuras veidojat, noteikti CS50, bet, iespējams, arī
vispārīgi, kad strādājat ar datu bāzēm.
Tāpēc attiecībā uz visiem piemēriem, kurus mēs aplūkosim šajā
videoklipā, mēs apsvērsim datubāzi, kurā ir šīs divas tabulas, ko
sauc par users un moms .
Un jūs varat redzēt, ka users ir četras dažādas kolonnas — idnum,
username, password, un fullname.
Un moms ir divas dažādas kolonnas, username un mother .
Un tagad sāksim strādāt ar tiem un redzēsim, kā mēs varam manipulēt
ar šo datu bāzi un tajā esošajām tabulām, lai - kāda iemesla dēļ mums
tās būtu vajadzīgas - tiktu atjauninātas mūsu vietnē.
Tātad pirmā darbība, ko mēs aptversim, ir insert .
Un, kā jūs varētu gaidīt, tas pievieno informāciju tabulai.
Tagad SQL vaicājumiem ir noteikta struktūra.
Un tāpēc ar katru no šīm darbībām es parādīšu jums vispārīgu
struktūru par to, kā vaicājums varētu izskatīties.
Un tad mēs izmantosim pāris šī vaicājuma piemērus, lai redzētu, kā
tas ietekmē mūsu tabulu.
Tātad ievietošanas vaicājums kopumā izskatās apmēram šādi: INSERT
INTO tabula.
Tātad mēs norādām, kurā tabulā mēs vēlamies ievietot.
Un tad mums ir iekavas, kolonnas — tas ir ar komatu atdalīts saraksts
ar visām mūsu tabulas kolonnām, kurās vēlamies ievietot datus.
Pēc tam mums ir VALUES un pēc tam ar komatu atdalīts to vērtību
saraksts, kuras vēlamies ievietot šajās kolonnās tādā pašā secībā.
Piemēram, es varētu vēlēties INSERT INTO lietotājus šajās trīs
kolonnās — username, password, name .
Vērtības attiecīgi — newman ar mazajiem burtiem, USMAIL — kas atbilst
parolei, un pēc tam lielais burts N Newman pilnajam vārdam.
Tātad, pieņemot, ka es izpildīšu šo vaicājumu šeit parādītajā users
tabulā, kas notiks?
Nu, lūk, kas notiks.
Mēs pievienosim šo rindu, jo mēs ievietojām users tabulā.
Bet jūs, iespējams, jautāsiet sev: uzgaidiet.
Jūs nekad nenorādījāt ID numuru.
Tātad, kā tieši ID numurs tur nokļuva?
Es domāju, jūs norādījāt Newman un USMAIL un Newman.
Bet tie 12, tie nekad nebija mūsu vaicājuma daļa.
Un tev ir taisnība.
Tā kā, definējot kolonnu, kas galu galā kļūst par jūsu tabulas
primāro atslēgu, parasti ir ieteicams, lai šī kolonna būtu vesels
skaitlis.
Tā nav prasība, bet parasti tā ir laba doma .
Un tā kā primārās atslēgas iegūšana ir tik svarīga, iespējams,
vēlēsities to norādīt automātiskai palielināšanai.
Un tas būtībā nozīmē, ka varat aizmirst iekļaut to kā daļu no sava
vaicājuma.
Un, ja to izdarīsit, tā tur automātiski ievietos vērtību, kas ir
unikāla no visām pārējām vērtībām šajā kolonnā, parasti katru reizi
palielinot tikai par vienu, lai šī rinda joprojām būtu unikāla.
Jo, ja tas nav iestatīts uz automātisko palielināšanu un mēs
vienkārši aizmirsām to izlaist, var būt dažas rindas, kas faktiski ir
tukšas vai nulle.
Bet, ja tā ir mūsu primārā atslēga, ja ID numurs ir mūsu primārā
atslēga un mums ir dažas rindas, kas ir tukšas, tagad tās nav
unikālas.
Mums ir divas tukšas rindas.
Mēs nevaram tos unikāli identificēt.
Tāpēc, iestatot savu primāro atslēgu, jūs parasti vēlaties, lai tas
būtu vesels skaitlis, un jūs parasti vēlaties, lai tā automātiski
palielinātos, lai jūs pilnībā aizmirstu par to, ka par to ir
jāuztraucas, un ļautu tabulai to izdarīt jūsu vietā.
Tā nu 12 tur nokļuva.
Es biju norādījis, ka mana idnum kolonna veic automātisku
palielināšanu katru reizi, kad ievietoju tabulā.
Darīsim to citreiz.
Ievietosim citā tabulā, ievietosim moms table šādas vērtības šajās
nākamajās kolonnās.
Username un mother tabulu kolonnās varam INSERT INTO VALUES kramer un
Babs Kramer.
Un tāpat kā tas, ko mēs redzējām iepriekš, tas ir tas, kas mums būtu
rezultāts.
Mēs vienkārši ievietotu šo rindu, un tagad tā būtu daļa no mūsu datu
bāzes un daļa no mūsu tabulām.
Tātad tā ir insert darbība.
Tagad parunāsim par otro darbību, kas ir select .
Tātad, ja ievietošana tiek izmantota, lai ievietotu informāciju
tabulā, tiek izmantota darbība select , lai šo informāciju izņemtu no
tabulas, lai mēs varētu ar to kaut ko darīt.
Arī select queries ir ļoti līdzīga uzbūve .
Un tie izskatās šādi — SELECT un pēc tam visas kolonnas, kuras
vēlaties izvēlēties FROM , no kuras tabulas vēlaties tās izvēlēties.
Un tad pēc izvēles šeit sarkanā krāsā šīs divas citas lietas — WHERE
kāds nosacījums ir izpildīts.
Un mēs parasti SQL kontekstā nosacījumu saucam par predikātu.
Bet būtībā mēs tikai pārbaudām, vai kāda situācija ir patiesa.
Un mēs varētu vēlēties, piemēram, sakārtot tos pēc noteiktas
kolonnas, lai tie būtu sakārtoti alfabētiskā secībā pēc vērtībām kādā
kolonnā vai kā cita.
Mums nav jādara ne WHERE , ne ORDER BY .
Bet parasti WHERE tiks izmantots, lai jūs neatgūtu visu datu bāzi.
Un ORDER BY tikai palīdz sakārtot lietas.
Piemēram, šeit ir atlases vaicājums, ko mēs varētu izmantot — SELECT
idnum, pilns nosaukums no lietotāju tabulas.
Tātad, paskatīsimies, kas šeit notiks.
Tāpēc atcerieties, ka es atlasu idnum un fullname no lietotāju
tabulas.
Nu, kāds atlases vaicājums man atgriezīsies?
Šī informācija šeit.
Tajā tiks aplūkota katra tabulas rinda, un tajā tiks izvilkts ID
numurs un pilns vārds, un visi tie tiks parādīti visā lietotāju
tabulā.
Mana lietotāju tabula sastāv tikai no trim rindām, tāpēc tajā ir
sniegti trīs informācijas pāri, trīs idnum-fullname kombinācijas.
Tagad pieņemsim, ka es vēlos nedaudz ierobežot meklēšanu un nedaudz
ierobežot vaicājumu.
SELECT password FROM users WHERE idnum ir mazāks nekā 12 .
Tāpēc tagad es savam atlases vaicājumam pievienoju predikātu vai
nosacījumu.
Kas te notiks?
Nu, es iegūšu šo informāciju.
Šī ir tikai paroles kolonna no users tabulas, kur ID numurs šajā
rindā ir mazāks par 12.
Tāpēc man tiek atdota tikai 10. un 11. rindas parole.
12. rindas parole man nav atdota, jo 12 nav mazāks par 12.
Ir vēl viena lieta, ko mēs varam darīt ar atlases vaicājumu, un tas
ir, lai atlasītu *.
SELECT * from moms where username equals jerry.
* ir tikai saīsinājums katrai kolonnai.
Tā vietā, lai šeit būtu jānorāda lietotājvārds, mother , divas
kolonnas vai, ja es izmantoju users tabulu, jānorāda idnum, username,
password, fullname , es varu vienkārši pateikt SELECT *.
Dodiet man visu šajā rindā.
Un, ja es SELECT * from moms where username equals jerry , man tiek
atdota šī informācijas kopa.
Tomēr datubāzēs ir lieliska lieta — mums nav jābūt tikai divām
tabulām.
Un jo īpaši mums nav jābūt tikai vienai tabulai, kurā tiek glabāta
visa atbilstošā informācija par lietotāju.
Ja mēs vēlētos saglabāt papildus tam, kas mums ir pieejams, tādu
informāciju kā viņu adrese un dzimšanas datums un sociālās
apdrošināšanas numurs vai jebkas cits, ko mēs vēlamies saglabāt par
viņiem, šī tabula varētu kļūt arvien lielāka, un lielāka un lielāka
līdz brīdim, kad tas kļūst gandrīz kaitinoši, ka tas ir jāizmanto.
Bet mēs varam izmantot attiecības starp dažādām tabulām.
Un šeit relāciju datubāzei tiek izmantots termins relāciju.
Mēs varam pietiekami rūpīgi izveidot tabulas savās datu bāzēs, lai
mēs varētu izmantot attiecības starp tām, lai iegūtu informāciju no
vietas, kur mums tā ir vajadzīga, neievietojot visu šo informāciju
vienā tabulā.
Tā, piemēram, šeit ir mūsu datubāze, kā mēs to pēdējo reizi atstājām,
ar trīs rindām katrā no users un moms tabulām.
Tagad iedomāsimies hipotētisku situāciju, kad mēs vēlamies savienot
pārī lietotāja pilnu vārdu, kas pašlaik ir saglabāts tikai users
tabulā, ar viņa mātes vārdu, kas tiek saglabāts tikai moms s tabulā.
Viņi šobrīd nav vienā tabulā .
Tāpēc mēs nevaram izmantot tāda paša veida atlases vaicājumu, kādu
izmantojām iepriekš.
Mums ir jāizmanto tā sauktais atlases pievienošanās vaicājums.
Tas izskatās diezgan līdzīgs iepriekšējam atlases vaicājumam.
Taču mēs pievienojam vienu papildu informāciju, proti, kuras tabulas
mēs savienojam.
Tāpēc es vēlos atlasīt noteiktu kolonnu kopu no vienas tabulas, tikai
īslaicīgi pievienojot tai citai tabulai.
Tās īsti nesavienojas .
Bet tas rada šāda veida hipotētisku tabulu, kas tās apvieno.
Attiecībā uz predikātu, kur predikāts ir — būtībā mēs cenšamies
atrast, kur abas tabulas pārklājas, lai mēs varētu izveidot šo
sapludināto tabulu tikai uz laiku šī vaicājuma vajadzībām un pēc tam
tās atkal atdalīt.
Piemēram, man varētu būt vaicājums, kas izskatās šādi — SELECT
users.fullname, comma, moms.mother FROM users , kas pievienojas moms
tabulai, uz to īslaicīgi ON — kas ir līdzīgs WHERE — users.username
equals moms.username .
Un šī sintakse arī ir nedaudz sveša, vai ne?
Es tagad pievienoju dažus savu kolonnu nosaukumus ar tabulu
nosaukumiem.
Iemesls, kāpēc es to daru, ir jo īpaši pēdējā rindiņa, kur katrā no
šīm divām tabulām man bija kolonna ar nosaukumu username .
Man tie jānošķir.
Tāpēc man jānorāda, kura tabula un kāda kolonna.
Tas ir viss, kas šeit notiek, jo es ļoti skaidri runāju par to, kuru
kolonnu vēlos, norādot ne tikai kolonnas nosaukumu, bet arī tabulas
nosaukumu.
Lūk, kas notiktu, ja izpildītu šo atlases vaicājumu.
Šeit ir mūsu divas tabulas pašā sākumā.
Šī ir visa informācija, ar kuru es mēģinu sākt.
Es savienošu šīs divas tabulas, kur where users.username equals
moms.username.
Ņūmens neparādās abās tabulās.
Tāpēc es pat netuvošos šīs informācijas iegūšanai.
Krāmers neparādās abās tabulās, tā kā šis arī nestrādā .
Bet gan Džerijs, gan gcostanza parādās abās tabulās.
Un tāpēc tas ir sava veida pārklāšanās punkts.
Un jūs varat domāt par to tā, it kā mums būtu mūsu users tabula, kas
ir kā viens aplis šeit, un mūsu moms tabula, kas ir viens aplis šeit.
Kad mēs pievienojamies, tā ir tāda pati kā Venna diagramma.
Mēs cenšamies noskaidrot, kas šīm divām tabulām ir kopīgs, un
izmantojam to kā savienojuma tabulu enkura punktu.
Tā mēs šeit darījām.
Mēs noskaidrojām, kur abām tabulām ir kopīgi dati.
Pamatojoties uz to, mēs izveidojam šo hipotētisko tabulu, ko sauc par
users un moms un kurā ir visa informācija, kas parādās abās tabulās.
Bet ievērojiet, ka otrā kolonna norāda uz pārklāšanos.
Šī kolonna attiecas uz datiem, kas atrodas gan failā user.username,
gan moms.username.
Tātad tas ir tas, ko mēs šeit iegūstam.
Bet atcerieties, ka šajā vaicājumā , mēs nevēlējāmies visu.
Tas nebija SELECT * FROM users JOIN moms WHERE users.username equals
moms.username.
Username We tikai pieprasa pilnu vārdu un mātes vārdu.
Un tas ir tas, ko mēs iegūstam.
Un šī patiešām garā vaicājuma rezultātā mēs iegūstam šo informācijas
kopu — users.fullname un moms.mother katrai rindai abās tabulās, kur
username ir vienāds.
Labi.
Tātad tas bija nedaudz sarežģītāk.
Jūs, iespējams, nedarīsit pārāk daudz pievienošanās.
Par laimi, pēdējās divas darbības ir nedaudz vieglākas.
Tātad atjaunināšana ir trešā no četrām galvenajām operācijām.
Tas ir tas, ko mēs izmantojam, lai mainītu informāciju tabulā vai
mainītu to vai atjauninātu informāciju.
Ietvars izskatās šādi — UPDATE table SET column equals value — tāpēc
mēs atjauninām kādu kolonnu, lai tajā būtu jauns datu fragments —
WHERE predikāti.
Mēs cenšamies noskaidrot, kuru rindu vēlamies atjaunināt, un pēc tam
mēs atjauninām šo kolonnu.
Tā, piemēram, es vēlos UPDATE users SET password equals yadayada
WHERE idnum equals 10
Droši vien varat uzminēt, kas šeit notiks.
Mēs atradīsim rindu, kuras ID numurs ir 10, un tur atjaunināsim
paroli no “fusilli” uz “yadayada”. Diezgan vienkārši.
Ceturtā un pēdējā darbība, ko mēs visbiežāk veicam SQL, ir dzēšana,
kas izjauc vai pilnībā noņem informāciju no tabulas.
Pamata ietvars izskatās apmēram šādi - DELETE no kādas tabulas WHERE
predikāta vai, atkal, kur ir izpildīts kāds nosacījums.
Tā, piemēram, jūs varētu vēlēties DELETE no mūsu users tabulas, WHERE
the user name equals 'newman.' . Tagad, ja mēs to izdarījām un šī
bija mūsu tabula, ar kuru sākt, jūs droši vien varat uzminēt, kas
notiks.
Pēc šī vaicājuma izpildes rinda, kuras lietotājvārds ir newman, vairs
nav mūsu tabulā.
Tagad visas darbības, kuras mēs tikko parādījām, ir patiešām viegli
izdarāmas phpMyAdmin grafiskajā saskarnē, kas ir iekļauta lielākajā
daļā SQL implementēšanu , ko varat lejupielādēt.
Tomēr, lai gan phpMyAdmin ir ļoti ērti lietojams, tam ir nepieciešama
manuāla iejaukšanās.
Jums būs jāpiesakās un jānoklikšķina uz dažām pogām, lai izdzēstu
informāciju vai atjauninātu vai mainītu to.
Un mēs nevēlamies to darīt.
Mēs esam tīmekļa pārziņi , vai ne?
Mēs vēlamies, lai lietas notiktu automātiski.
Mēs vēlamies, lai mūsu rakstītās programmas veiktu šīs izmaiņas mūsu
vietā.
Tāpēc mēs nevēlamies iedziļināties phpMyAdmin un veikt šīs izmaiņas.
Mums ir jāraksta kods, kas to dara mūsu vietā.
Par laimi, SQL patiešām lieliski integrējas ar daudzām modernām
programmēšanas valodām, piemēram, Python vai PHP, kurām ir funkcijas,
kuras varat izmantot, lai izveidotu savienojumu ar datu bāzi.
Un tad programmēšanas valodai ir citas funkcijas, kas jūsu vietā
pieprasīs datu bāzi un veiks šīs izmaiņas.
Tagad mēs apspriedīsim tieši to, kā šīs valodas to dara.
Mēs to saglabāsim video par šīm valodām.
Bet ziniet, ka to varat darīt, lai izvairītos no jebkāda veida
manuālas iejaukšanās, kad vēlaties atjaunināt vai veikt jebkādas
darbības savās datu bāzēs.
Mani sauc Dags Loids.
Šis ir CS50.