Shanraq.org Shanraq.org
SQL дерекке нақты сұрақ қояды
Қоғам

Информатика: өз цифрлық көмекшімізді жасаймыз 52-сабақ (барлығы 72)

SQL дерекке нақты сұрақ қояды

Дерекқорға нақты сұрақ қоямыз: қай сабақ қай тапсырмаға тиесілі және қанша минут болды?

Картадағы орнымыз

72 сабақтың 52-сі, «Деректер, кестелер және дерекқорлар» блогы (47–54). Үш ойдан алынған тапсырмасы бар 1.1 көмекшісін жалғастырамыз. Блок соңында жазбалар жергілікті SQLite ішінде сақталып, тексерілген еске салу ережелері өзгермейді.

SQL дерекке нақты сұрақ қояды

Жағдай және сұрақ

Досыңыз «оқуға қатысты сабақтарды тап» дейді. Дерекқор тұспалды түсінбейді: оған кесте атауы, шарт және нәтиже реті қажет. ID-дегі бір қате бос нәтиже береді; оны нөл минутпен шатастыруға болмайды.

Жаңа сөздерді анық түсінейік

SQL — реляциялық дерекке сұрау жазатын тіл. SELECT бағандарды, FROM кестені атайды, WHERE жолдарды іріктейді, ORDER BY ретін анықтайды. SUM қосады, COUNT жазбаларды санайды. Сұрау параметрі ? мәнді SQL мәтінінен бөлек қабылдайды: енгізілген дерек пәрменге айналмайды. Жинақтау бірнеше жолды бір қорытындыға әкеледі. task_id = 't-01' екі жазба қайтарады; қосындысы 45 минут.

Сабақтың тірек сигналы

Сызбаны солдан оңға оқыңыз. Әр жебенің кірісін, өзгерісін және тексеруін айтыңыз. Үшінші қадамды жауып, нәтижесін болжаңыз. Содан соң CSV, SQL не есептегі тиісті жолды табыңыз: сурет нақты сан мен байланысты алмастырмауы керек.

Қадамдап талдаймыз

Сұрауды ретімен оқыңыз: SELECT minutes FROM study_sessions WHERE task_id = ? ORDER BY observed_on, параметрі t-01. Нәтиже — 20, кейін 25. Параметрді t-03 етсеңіз, 15, кейін 10. Python ішінде (task_id,) беріңіз; пайдаланушы мәтінінен SQL жолын құрамаңыз. SELECT COUNT(*), SUM(minutes) ... t-01 үшін екі жазба және 45 минут береді. t-02 үшін COUNT(*) — 0, ал бос жиындағы SUM — NULL; оларды тең мағыналы деуге болмайды.

Болжаңыз және тексеріңіз

Алдымен жол ретіне дейін нақты күтілетін нәтижені жазыңыз. Кодты step-05 бумасынан орындап, таңба бойынша салыстырыңыз. Бір кірісті өзгертіп, «болжау — іске қосу — түсіндіру» айналымын қайталаңыз. Мысал тек көрсетілген ережені дәлелдейді; ойдан алынған деректі нақты адамдар өлшеміне айналдырмайды.

from pathlib import Path
from tempfile import TemporaryDirectory
from data_store import create_database, connect_readonly
with TemporaryDirectory() as folder:
    db = Path(folder) / "test.db"
    create_database(db, "tasks.json", "study_sessions.csv")
    with connect_readonly(db) as connection:
        rows = connection.execute("SELECT minutes FROM study_sessions WHERE task_id = ? ORDER BY observed_on", ("t-01",)).fetchall()
    print(*(row[0] for row in rows))

Күтілетін нәтиже

20 25

Қатені табыңыз

ORDER BY минут санын емес, жол ретін өзгертеді. Ол болмаса, керекті ретке кепіл жоқ. Енгізілген мәтінді SQL-ге тікелей қоссаңыз, арнайы таңбалар сұрау мағынасын бұзуы мүмкін; параметр деректі пәрменнен бөледі.

Жобаға енгізілетін өзгеріс

Жоба журналына үш тексерілетін сұрауды енгізіңіз: t-01 тізімі, t-03 қосындысы, t-02 жазбалар саны. Әр санды бастапқы CSV-мен салыстырыңыз.

Тапсырма және дәлел

t-03 жолдарын алдын ала болжаңыз. Python-дағы (task_id,) неге бір мәндік кортеж екенін түсіндіріңіз. Сабақ жоқ тапсырма үшін COUNT(*) пен SUM(minutes) мәндерін салыстырыңыз.

Жаңа жағдайға көшіру

Кітап беру кестесінде кітап ID-і бойынша сұрау бос нәтиже берді. Бұл кітаптың бар, бірақ берілмегенін дәлелдей ме? Кітаптың өзін қалай тексеруге болады?

1, 7 және 30 күннен кейін қайталау

1 күннен кейін сызбаны жатқа салып, қарапайым ұқсастық жұмыс істемейтін жағдайды атаңыз. 7 күннен кейін жаңа кестені мәтінсіз досыңызға түсіндіріп, соңғы сабақтағы он сұрақтың кемінде жетеуіне жауап беріңіз. 30 күннен кейін уақытша бумаға импорт жасап, үш тапсырма, төрт сабақ, 70 минут және өзгермеген еске салуды тексеріңіз. Түсініксіз терминді жазып, алғашқы анықтамасына оралыңыз.

Тексеруге арналған бастапқы құжат

Ресми құжаттама

Келесі сабақ

Кестелерді біріктіру және адал есеп

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Жоба дәлелін тексеру

Бақылауды, түсіндіруді, қатені түзетуді және жобаңыздағы өзгерісті жазыңыз. Модель алғашқы шатасқан немесе дәлелденбеген байланысты көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.