Pamata CRUD ar SQL · Tests

6 jautājumi · Bloom: Understand:1, Apply:4, Analyze:1

Q1 Understand mcq_single

Strādājot ar tabulu lietotaji(id, vards, vecums, pilseta), kura no šīm apgalvojumu pārīm pareizi apraksta SELECT un WHERE lomu vienā vaicājumā?

Pareizā atbilde: A
SELECT klauzula nosaka, kuras KOLONNAS parādīsies rezultātā (piemēram, SELECT vards, vecums), bet WHERE klauzula filtrē, KURAS RINDAS tiks atgrieztas (piemēram, WHERE pilseta = 'Rīga'). Tās ir divas atšķirīgas lietas vienā vaicājumā.
Kāpēc pārējās atbildes nav pareizas:
  • B. Bieža iesācēju sajaukšana — patiesībā tieši pretēji: SELECT strādā ar kolonnām, WHERE ar rindām.
  • C. SELECT un WHERE nav viena un tā pati lieta — viens izvēlas kolonnas, otrs filtrē rindas.
  • D. Tabulas nosaukumu norāda FROM klauzula, nevis WHERE.
Q2 Apply mcq_single

No tabulas lietotaji(id, vards, vecums, pilseta) tev jāatlasa tikai to lietotāju vārdi, kuri ir vecāki par 30 gadiem. Kurš vaicājums ir pareizs?

Pareizā atbilde: A
Pareizā secība ir SELECT <kolonnas> FROM <tabula> WHERE <nosacījums>. Tā kā vecums ir skaitlis, salīdzinām ar 30 bez pēdiņām, un > nozīmē stingri lielāks par 30.
Kāpēc pārējās atbildes nav pareizas:
  • B. Sajaukta klauzulu secība — WHERE vienmēr nāk PĒC FROM, ne pirms tā.
  • C. Skaitļus nelikt pēdiņās — pēdiņas paredzētas tikai tekstam (piemēram, 'Rīga'). Šis dažkārt nostrādā, bet nav laba paraža.
  • D. WHERE nevar būt pirms SELECT — vaicājums vienmēr sākas ar SELECT.
Q3 Apply mcq_multi

Kuri DIVI no šiem SELECT vaicājumiem pret tabulu lietotaji(id, vards, vecums, pilseta) NEizdosies vai atgriezīs kļūdu? (Izvēlies 2 atbildes.)

Pareizā atbilde: B, C
B vaicājumā trūkst FROM lietotaji — bez FROM klauzulas MySQL nezina, no kuras tabulas lasīt. C vaicājumā tekstuālā vērtība Rīga nav ielikta vienpēdiņās, tāpēc MySQL to interpretēs kā kolonnas nosaukumu un izmetīs kļūdu. A un D ir derīgi vaicājumi.
Kāpēc pārējās atbildes nav pareizas:
  • A. Šis ir pareizs vaicājums — divas kolonnas, FROM klauzula klāt, teksts pēdiņās.
  • D. SELECT * FROM lietotaji; ir pilnīgi derīgs — atgriež visas rindas un visas kolonnas (WHERE nav obligāts pie SELECT).
Q4 Apply mcq_single

Tev jāpievieno tabulai lietotaji(id, vards, vecums, pilseta) jauna rinda — Pēteris, 35 gadi, no Cēsīm. Kurš INSERT vaicājums ir pareizs?

Pareizā atbilde: A
Kolonnu saraksts (vards, vecums, pilseta) un vērtību saraksts ('Pēteris', 35, 'Cēsis') sakrīt gan SKAITĀ (3 un 3), gan SECĪBĀ. Teksts ir pēdiņās, skaitlis bez pēdiņām.
Kāpēc pārējās atbildes nav pareizas:
  • B. Vērtību skaits (2) neatbilst kolonnu skaitam (3) — trūkst pilsētas vērtības. MySQL izmetīs kļūdu Column count doesn't match value count.
  • C. Sajaukta vērtību secība — 35 mēģinās ielikt vards laukā un 'Pēteris' vecums laukā. Tā rodas tieši tās ļaunās bezjēdzīgās rindas tabulā.
  • D. Trūkst VALUES iekavas — vērtības VIENMĒR liek iekavās: VALUES (...).
Q5 Apply mcq_single

Anna (id = 1) pārvācas uz Jelgavu. Tev jāmaina tikai viņas pilseta tabulā lietotaji. Kurš vaicājums dara TIEŠI to un ir drošs palaišanai?

Pareizā atbilde: A
WHERE id = 1 ierobežo izmaiņas TIKAI uz Annas rindu. SET pilseta = 'Jelgava' nosaka jauno vērtību. Šī ir pareiza un droša UPDATE forma.
Kāpēc pārējās atbildes nav pareizas:
  • B. BĪSTAMI! Bez WHERE šī komanda padarīs VISU lietotāju pilsētu par Jelgavu — Anna, Jānis, Līga un visi citi pēkšņi dzīvos Jelgavā. Tā ir tā katastrofiskā kļūda, no kuras WHERE mūs pasargā.
  • C. Sajauktas lomas — šeit SET mēģina mainīt id un WHERE meklē jau Jelgavu. Tas nav tas, ko vajag, un, ja kāda rinda ar pilseta = 'Jelgava' jau ir, tās id pārrakstītos uz 1.
  • D. INSERT pievieno JAUNU rindu — to nevar lietot, lai mainītu esošu rindu. Turklāt INSERT vaicājumam nav WHERE klauzulas.
Q6 Analyze mcq_single

Kolēģis tev parāda šādu komandu un saka 'palaidīšu pēc minūtes': DELETE FROM lietotaji; Kas notiks, ja viņš to palaidīs pret mūsu tabulu lietotaji(id, vards, vecums, pilseta)?

Pareizā atbilde: A
DELETE FROM lietotaji; bez WHERE klauzulas izdzēš VISAS rindas no tabulas — pati tabulas struktūra (kolonnas) paliek, bet dati pazūd neatgriezeniski. Tieši šī iemesla dēļ pirms DELETE vienmēr iesakām palaist SELECT ar plānoto WHERE.
Kāpēc pārējās atbildes nav pareizas:
  • B. Diemžēl MySQL formāli ATĻAUJ DELETE bez WHERE — kļūdas nebūs, vienkārši pazudīs visi dati. Tāpēc disciplīna ir mūsu pašu rokās.
  • C. DELETE nedzēš tikai pirmo rindu pēc noklusējuma — bez WHERE tas skar VISAS rindas.
  • D. Pati tabulas struktūra netiek dzēsta — tam vajadzīga DROP TABLE komanda. DELETE iztukšo rindas, bet tabula paliek.