Тақырып 10

Мәліметтер қорын жасау. Құрылымдалған сұраныстар

Спецификация бойынша не тексеріледі:

Деректер қорын әзірлеу кезеңдеріER-диаграмма: мәндер, атрибуттар, байланыстарДеректерді құру және өзгерту: CREATE, INSERT, UPDATE, DELETESELECT: іріктеу, сұрыптау, DISTINCT, LIMITШарттар: салыстыру, AND/OR/NOT, BETWEEN, IN, LIKEАгрегаттық функциялар, GROUP BY және HAVINGКестелерді біріктіру: JOINФормалар, есептер және веб-бетпен байланыс

Бір минутта мәні

Деректер қорын әзірлеу нақты әлемнен кестелерге қарай жүреді: алдымен пәндік сала зерттеледі, ER-диаграмма (мәндер, олардың атрибуттары мен байланыстары) салынады, содан кейін ол кілттері мен деректер типтері бар кестелерге айналдырылады және тек содан кейін толтырылып, өңделеді. ДҚ-мен құрылымдалған сұраныстар тілі SQL арқылы жұмыс істейді. CREATE TABLE командалары құрылымды жасайды, INSERT, UPDATE және DELETE жазбаларды қосады, өзгертеді және жояды, ал SELECT деректерді шығарады: WHERE сүзеді, ORDER BY сұрыптайды, LIMIT шектейді, DISTINCT қайталануларды алып тастайды, COUNT, SUM, AVG, MIN, MAX қорытындыларды есептейді, GROUP BY және HAVING топтайды, JOIN кестелерді біріктіреді. Пайдаланушылар үшін сұраныстардың үстінен енгізуге арналған формалар мен басып шығаруға арналған есептер құрылады. ҰБТ-ның әдеттегі тапсырмасы — кесте мен сұраныс бойынша оның неше жазба немесе қандай мән шығаратынын анықтау.

Қарапайым тілмен

SQL-сұраныс — кітапханашыға сыпайы өтініш: «Оқушылар каталогынан Астанадағыларының аттарын ТАҢДА және балы бойынша РЕТТЕ» — SELECT name FROM students WHERE city = 'Астана' ORDER BY score.

Алдымен сызба

Кестелерді құрмас бұрын ER-диаграмма салынады: тіктөртбұрыштар — мәндер (Оқушы, Курс), сопақтар — атрибуттар (аты, балы), ромбтар немесе сызықтар — байланыстар (жазылған).

Төрт етістік

CREATE — кесте құру, INSERT — жол жазу, UPDATE — түзету, DELETE — өшіру. SELECT ештеңені өзгертпейді, тек көрсетеді.

SELECT бөліктері

SELECT нені көрсету, FROM қайдан, WHERE қай жолдар, GROUP BY қалай топтау, HAVING қай топтарды қалдыру, ORDER BY қалай реттеу, LIMIT нешеуін шығару.

Бір жолдағы қорытынды

COUNT жолдарды санайды, SUM қосады, AVG орташасын табады, MIN мен MAX — шеткі мәндер. GROUP BY болса, қорытынды әр топ үшін бөлек есептеледі.

Ұғымдар мен терминдер

Сұраныс
деректер қорынан белгілі бір ақпаратты алу (немесе оны өзгерту) талабы, мысалы, SQL тілінде жазылған.
SQL
Structured Query Language — реляциялық деректер қорларында деректерді құру, өзгерту және іріктеу үшін құрылымдалған сұраныстар тілі.
ER-диаграмма
«мән–байланыс» сызбасы: пәндік саланың мәндерін, олардың атрибуттарын және арасындағы байланыстарды бейнелейді; ДҚ-ны жобалауда қолданылады.
Мән (сущность)
ақпараты сақталатын пәндік саладағы бір текті объектілер класы (Оқушы, Курс, Кітап); ДҚ-да кестеге айналады.
Атрибут
мәннің қасиеті (аты, сыныбы, балы); ДҚ-да кестенің өрісіне айналады.
Агрегаттық функция
жолдар жиыны бойынша бір мәнді есептейтін функция: COUNT, SUM, AVG, MIN, MAX.
Форма
кесте мен сұраныс деректерін енгізу, бейнелеу және түзету әрекеттерін орындау үшін қолданушы интерфейсін ұйымдастыруға мүмкіндік беретін нысан.
Есеп
деректер қорының бір немесе бірнеше кестесінен экранға, баспаға немесе файлға шығарылатын деректердің форматталған түрі.

Тақырыпты талдау

Деректер қорын әзірлеу кезеңдері 10 сынып

1) Пәндік саланы талдау: қандай объектілер бар (оқушылар, курстар, мұғалімдер), олар туралы қандай ақпарат сақталады, қандай сұраныстар қажет болады. 2) Инфологиялық (тұжырымдамалық) жобалау: ER-диаграмма. 3) Логикалық жобалау: кестелерге көшу, өрістерді, бастапқы және сыртқы кілттерді таңдау, қалыпқа келтіру. 4) Физикалық жобалау: ДҚБЖ-ны, деректер типтерін, индекстерді таңдау. 5) Кестелерді құру (CREATE TABLE) және деректермен толтыру. 6) Сұраныстарды, формаларды және есептерді құру; тестілеу.

Бір кестелі ДҚ (10.3.2.2 мақсаты) қарапайым тізімдерге жарайды: телефон анықтамалығы, кітаптар тізімі. Кестеде бірдей деректер қайталана бастаса (әр жолда курс атауы мен мұғалімнің тегі), оны бірнеше байланысқан кестеге бөледі — көп кестелі ДҚ шығады (10.3.2.3 мақсаты).

ER-диаграмма: мәндер, атрибуттар, байланыстар 10 сынып

Мән тіктөртбұрышпен, атрибут сопақпен (немесе тіктөртбұрыш ішіндегі тізіммен) бейнеленеді, кілттік атрибуттың асты сызылады, байланыс — ромбпен немесе жазуы бар сызықпен. Сызықтың ұштарында еселік көрсетіледі: 1 немесе К (N, «қарға табаны»).

«Мектеп» мысалы: Оқушы(id, аты, сыныбы, қаласы, балы) және Курс(id, атауы, мұғалімі) мәндері; меншікті «баға» атрибуты бар К:К түріндегі «жазылған» байланысы. Кестелерге көшкенде әр мән кестеге (students, courses), атрибуттар өрістерге, ал К:К байланысы жеке enroll(student_id, course_id, mark) кестесіне айналады.

Көшу ережелері: 1:К байланысы — сыртқы кілт «К» жағындағы кестеге; 1:1 байланысы — сыртқы кілт кез келген кестеге (немесе кестелерді біріктіру); К:К байланысы — бірге құрама бастапқы кілтті құрайтын екі сыртқы кілті бар жаңа байланыстырушы кесте.

Деректерді құру және өзгерту: CREATE, INSERT, UPDATE, DELETE 10 сынып

SQL командалары топтарға бөлінеді: DDL — құрылымды сипаттау (CREATE TABLE, ALTER TABLE, DROP TABLE) және DML — деректермен жұмыс (SELECT, INSERT, UPDATE, DELETE). Кілттік сөздерді бас әріппен жазу қабылданған, команда нүктелі үтірмен аяқталады, жолдық мәндер жалқы тырнақшаға алынады.

CREATE TABLE students(
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    grade INTEGER,
    city TEXT,
    score INTEGER
);

INSERT INTO students(name, grade, city, score) VALUES ('Алия', 11, 'Астана', 117); — бір жазба қосады (VALUES жиындарын үтір арқылы бірнешеуін тізуге болады). UPDATE students SET score = score + 10 WHERE city = 'Шымкент'; — іріктелген жазбалардағы мәндерді өзгертеді. DELETE FROM enroll WHERE mark < 4; — іріктелген жазбаларды жояды.

Басты қауіп: WHERE жоқ UPDATE және DELETE кестенің БАРЛЫҚ жазбасына әсер етеді. DELETE FROM students; кестені толығымен тазалайды (құрылымы қалады), ал DROP TABLE students; кестенің өзін де жояды. NOT NULL, PRIMARY KEY, UNIQUE, FOREIGN KEY ... REFERENCES шектеулері қате деректерді енгізуге мүмкіндік бермейді.

SELECT: іріктеу, сұрыптау, DISTINCT, LIMIT 10 сынып

Жалпы түрі: SELECT өрістер FROM кесте WHERE шарт GROUP BY өріс HAVING шарт ORDER BY өріс LIMIT n; — бөліктер дәл осы ретпен жазылады, тек SELECT пен FROM міндетті. * барлық өрістерді білдіреді. AS бағанға бүркеншік ат береді: SELECT name AS оқушы.

ORDER BY өсу (ASC, әдепкі) немесе кему (DESC) ретімен сұрыптайды; бірнеше өріс бойынша болады: ORDER BY grade, score DESC. LIMIT n нәтиженің алғашқы n жолын қалдырады — ORDER BY DESC-пен бірге бұл «үздік n». DISTINCT қайталанатын жолдарды алып тастайды: SELECT DISTINCT city FROM students 3 жол шығарады, ал DISTINCT-сіз — 8.

ДҚБЖ сұранысты логикалық түрде орындау реті: FROM (және JOIN) → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT. Сондықтан WHERE агрегаттық функцияларды қолдана алмайды, ал LIMIT сұрыптаудан кейін орындалады.

Шарттар: салыстыру, AND/OR/NOT, BETWEEN, IN, LIKE 10 сынып

WHERE ішінде =, <> (немесе !=), >, <, >=, <= және AND, OR, NOT логикалық амалдары қолданылады (басымдық NOT → AND → OR, жақшалар ретті өзгертеді).

BETWEEN a AND b — мән a-дан b-ға дейінгі аралықта, шекаралары ҚОСА: score BETWEEN 91 AND 112 Нурланды (97), Дананы (112), Мадинаны (103) және Санжарды (91) іріктейді — 4 жазба. IN (тізім) — мән тізілгендердің біреуімен сәйкес келеді: city IN ('Астана', 'Шымкент') OR арқылы жазылған екі шартпен бірдей. NOT IN — ешқайсысымен сәйкес келмейді.

LIKE — жолды үлгімен салыстыру: % — кез келген таңбалардың кез келген саны (нөл де), _ — дәл бір таңба. name LIKE 'А%' — «А»-дан басталады (Айгерим, Аружан); name LIKE '%н' — «н»-мен аяқталады (Нурлан, Ерлан, Аружан); name LIKE '_а%' — екінші әрпі «а» (Дана, Мадина, Санжар). Access сұраныстар конструкторында % және _ орнына файл маскаларындағыдай * және ? қолданылады.

IS NULL / IS NOT NULL бос мәнді тексереді; = NULL салыстыруы жұмыс істемейді.

Агрегаттық функциялар, GROUP BY және HAVING 10 сынып

Агрегаттық функциялар көп жолды бір мәнге жинайды: COUNT(*) — жолдар саны, COUNT(өріс) — бос емес мәндер саны, SUM — қосынды, AVG — орташа, MIN, MAX — ең кіші және ең үлкен. students үшін: COUNT(*) = 8, SUM(score) = 816, AVG(score) = 102, MAX = 135, MIN = 66.

GROUP BY жолдарды өрісінің мәні бірдей топтарға бөліп, әр топ үшін агрегатты есептейді; нәтижеде топтар қанша болса, сонша жол. SELECT city, COUNT(*) FROM students GROUP BY city → 3 жол: Алматы 3, Астана 3, Шымкент 2.

HAVING дайын топтарды агрегат бойынша сүзеді, ал WHERE топтауға дейін жеке жолдарды сүзеді. ... GROUP BY city HAVING AVG(score) > 100 → Алматы (≈107,7) және Шымкент (107,5); Астана (≈92,7) өтпейді. Есте сақтаңыз: COUNT/SUM/AVG/MIN/MAX бар шарт — HAVING-те, қарапайым шарт — WHERE-де.

Кестелерді біріктіру: JOIN 10 сынып

JOIN (INNER JOIN) байланысқан өрістерінің мәндері сәйкес келетін екі кестенің жолдарын біріктіреді: FROM enroll JOIN students ON students.id = enroll.student_id. Нәтижеге тек «жұбын» тапқан жолдар кіреді. Аттас өрістерді ажырату үшін кесте.өріс деп жазады (students.id, courses.id).

SELECT students.name, courses.title, enroll.mark
FROM enroll
JOIN students ON students.id = enroll.student_id
JOIN courses ON courses.id = enroll.course_id
WHERE enroll.mark = 5;

Бұл сұраныс 7 жол шығарады: Айгерим — Математика және Информатика, Дана — Информатика, Аружан — Математика, Информатика және Физика, Санжар — История. LEFT JOIN жұбы болмаса да сол жақ кестенің барлық жолын қалдырады (жетіспейтін өрістер NULL болады).

JOIN көбінесе GROUP BY-пен бірге қолданылады: әр курс бойынша орташа баға — Информатика 4,5, История ≈4,33, Математика 4,25, Физика 4,0.

Формалар, есептер және веб-бетпен байланыс 10 сынып

Форма (10.3.2.4 мақсаты) — деректерді ыңғайлы енгізу және қарау терезесі: енгізу өрістері, ашылмалы тізімдер, жалаушалар, «Сақтау», «Келесі жазба» батырмалары. Пайдаланушы бүкіл кестені көрмейді және аз қателеседі; «Сақтау» батырмасының артында INSERT немесе UPDATE командасы тұр.

Есеп (10.3.2.5 мақсаты) — сұраныс нәтижесінің басып шығаруға немесе экспорттауға ресімделген түрі: тақырып, топтау (мысалы, қалалар бойынша), аралық және жалпы қорытындылар (COUNT, AVG), колонтитулдар. Есеп деректерді тек көрсетеді, ол арқылы деректерді өзгертуге болмайды.

Веб-беттің ДҚ-мен байланысы (10.3.3.2 мақсаты): пайдаланушы HTML-форманы <form> толтырады → браузер деректерді серверге жібереді → серверлік скрипт (PHP, Python) ДҚБЖ-ға (MySQL, PostgreSQL) SQL-сұраныс құрастырады → нәтиже HTML-бетке айналады. Интернет-дүкендер мен электрондық журналдар осылай жұмыс істейді. Формадан келген деректерді сұранысқа тікелей қоюға болмайды — бұл SQL-инъекция шабуылына жол ашады; параметрленген сұраныстар қолданылады.

Шешімі бар есеп мысалдары

Есеп 1SELECT DISTINCT city FROM students; сұранысы неше жол шығарады?
  1. city өрісінде 8 мән: Астана ×3, Алматы ×3, Шымкент ×2.
  2. DISTINCT әр мәннің бір данасын ғана қалдырады.
Жауабы 3 жол
Есеп 2SELECT name FROM students ORDER BY score DESC LIMIT 3; сұранысы не шығарады?
  1. Балл кему ретімен сұрыптау: Аружан 135, Айгерим 128, Дана 112, Мадина 103, …
  2. LIMIT 3 алғашқы үш жолды қалдырады.
Жауабы Аружан, Айгерим, Дана
Есеп 3SELECT name FROM students WHERE score BETWEEN 91 AND 112; сұранысы неше жол шығарады?
  1. BETWEEN шекараларды қосады: 91-ден 112-ге дейінгі балдар керек.
  2. Сәйкес келетіндер: Нурлан 97, Дана 112, Мадина 103, Санжар 91.
  3. Сәйкес келмейтіндер: 128, 84, 135, 66.
Жауабы 4 жол
Есеп 4SELECT COUNT(*) FROM enroll WHERE mark = 5; сұранысы қандай мән шығарады?
  1. enroll-дағы бағаларды қарап шығамыз: (1,1,5), (1,2,5), (3,2,5), (5,1,5), (5,2,5), (5,3,5), (8,4,5).
  2. mark = 5 болатын жолдар — жетеу.
Жауабы 7
Есеп 5SELECT city, AVG(score) FROM students GROUP BY city HAVING AVG(score) > 100; сұранысы не шығарады?
  1. Алматы: (97 + 135 + 91) / 3 = 323 / 3 ≈ 107,7.
  2. Астана: (128 + 84 + 66) / 3 = 278 / 3 ≈ 92,7. Шымкент: (112 + 103) / 2 = 107,5.
  3. HAVING орташасы 100-ден үлкен топтарды қалдырады.
Жауабы 2 жол: Алматы ≈107,7 және Шымкент 107,5
Есеп 6SELECT name FROM students WHERE name LIKE '%н'; сұранысы неше жол шығарады?
  1. %н — басы кез келген, соңғы әрпі «н».
  2. Нурлан, Ерлан, Аружан «н»-мен аяқталады; Айгерим, Дана, Тимур (м), Мадина, Санжар (р) — жоқ.
Жауабы 3 жол

Күрделі есептер: қадам-қадаммен

Есеп 1UPDATE students SET score = score + 10 WHERE city = 'Шымкент'; командасы, содан кейін SELECT COUNT(*) FROM students WHERE score > 110; командасы орындалды. Қандай сан шығады?

Идея: Алдымен өзгерісті тек іріктелген жазбаларға мұқият қолданамыз, содан кейін жаңа деректер бойынша санаймыз.

  1. UPDATE
    Шымкент: Дана 112 → 122, Мадина 103 → 113. Қалған жазбалар өзгермейді.
  2. score > 110 шарты
    Айгерим 128, Дана 122, Аружан 135, Мадина 113. Нурлан 97, Ерлан 84, Тимур 66, Санжар 91 — жоқ.
  3. Тұзақ
    UPDATE-ке дейін жауап 3 болар еді (Мадина өтпейтін). Командалардың реті маңызды.
Жауабы 4
Есеп 2SELECT courses.title, AVG(enroll.mark) FROM courses JOIN enroll ON courses.id = enroll.course_id GROUP BY courses.title HAVING AVG(enroll.mark) >= 4.3; сұранысы неше жол шығарады және олар қай курстар?

Идея: JOIN әр бағаға курс атауын сәйкестендіреді, GROUP BY бағаларды курстар бойынша жинайды, HAVING топтарды сүзеді.

  1. Бағаларды course_id бойынша топтаймыз
    Математика (1): 5, 4, 3, 5 → 17/4 = 4,25. Информатика (2): 5, 5, 5, 3 → 18/4 = 4,5.
    Физика (3): 3, 5, 4 → 12/3 = 4,0. История (4): 4, 4, 5 → 13/3 ≈ 4,33.
  2. HAVING ≥ 4.3
    Информатика (4,5) және История (≈4,33) өтеді.
Жауабы 2 жол: Информатика және История
Есеп 3DELETE FROM enroll WHERE mark < 4; орындалды. enroll-да неше жазба қалды және осыдан кейін неше оқушының мүлде жазбасы жоқ?

Идея: 3 бағасы бар жолдарды жоямыз, содан кейін кімде бірде-бір жол қалмағанын тексереміз.

  1. Не жойылады
    3 бағалары: (2,3,3), (4,1,3), (6,2,3) — 3 жол. 14 болатын, 11 қалды.
  2. Кім жазбасыз қалды
    2-оқушыда (2,1,4), 4-оқушыда (4,4,4) сақталды. 6-оқушының (Тимур) бір ғана жазбасы болған, ол жойылды.
  3. SQL-да тексеру
    SELECT name FROM students
    WHERE id NOT IN (SELECT student_id FROM enroll);
Жауабы 11 жазба; жазбасыз 1 оқушы (Тимур)

ҰБТ-дағы жиі қателіктер

  • Агрегаты бар шартты WHERE ішіне жазады (WHERE AVG(score) > 100). COUNT/SUM/AVG/MIN/MAX бойынша шарттар GROUP BY-дан кейін HAVING ішіне қойылады.
  • BETWEEN екі шекараны да қосатынын ұмытады: BETWEEN 91 AND 112 91-ді де, 112-ні де іріктейді.
  • UPDATE немесе DELETE командасын WHERE-сіз орындайды — кестенің барлық жазбасы өзгереді немесе жойылады.
  • Үлгілерді шатастырады: SQL-да % — кез келген сандағы таңба, _ — дәл бір таңба; * және ? — файл маскалары мен Access конструкторы.
  • GROUP BY-дан кейінгі жолдарды бастапқы жазбалар саны бойынша санайды. Нәтижеде топтар қанша болса, сонша жол (HAVING-тен кейін одан да аз).

Есте сақта

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT; WHERE — жолдар үшін, HAVING — топтар үшін; % — кез келген таңбалар, _ — бір таңба; BETWEEN шекараларды қосады.

Өзіңді тексер

1. Қай SQL командасы кестеге жаңа жазба қосады?
  1. UPDATE
  2. INSERT
  3. CREATE
  4. SELECT
Жауабын көрсету

INSERT INSERT INTO … VALUES … жол қосады; UPDATE барларын өзгертеді, CREATE кесте құрады.

2. SELECT * FROM students WHERE city IN ('Астана', 'Шымкент') AND score >= 100; сұранысы неше жол шығарады?
  1. 2
  2. 3
  3. 4
  4. 5
Жауабын көрсету

3 Астана мен Шымкенттен: Айгерим 128, Ерлан 84, Тимур 66, Дана 112, Мадина 103. Балы ≥ 100 — Айгерим, Дана және Мадина — 3.

3. Агрегаттық функцияның мәні бойынша топтарды іріктеу үшін қай сөйлем қолданылады?
  1. WHERE
  2. ORDER BY
  3. HAVING
  4. DISTINCT
Жауабын көрсету

HAVING HAVING топтарды GROUP BY-дан кейін сүзеді; WHERE топтауға дейін жеке жолдарды іріктейді.

4. SELECT MAX(score) - MIN(score) FROM students; сұранысы не шығарады?
  1. 69
  2. 51
  3. 135
  4. 102
Жауабын көрсету

69 MAX = 135 (Аружан), MIN = 66 (Тимур); 135 − 66 = 69.

5. Екінші әрпі «а» болатын барлық есімдерді қай үлгі таңдайды?
  1. LIKE 'а%'
  2. LIKE '%а'
  3. LIKE '_а%'
  4. LIKE '%а%'
Жауабын көрсету

LIKE '_а%' _ — дәл бір кез келген таңба (бірінші әріп), содан кейін «а», содан кейін % — кез келген тізбек.

6. ER-диаграммадағы Оқушы мен Курс мәндері арасындағы «көптің көпке» байланысы кестелерге көшкенде неге айналады?
  1. Курс кестесіндегі сыртқы кілтке
  2. Оқушы кестесіндегі сыртқы кілтке
  3. Екі сыртқы кілті бар жеке байланыстырушы кестеге
  4. Екі кестенің ортақ бастапқы кілтіне
Жауабын көрсету

Екі сыртқы кілті бар жеке байланыстырушы кестеге К:К екі мәннің де кілттерін қамтитын үшінші кестемен (enroll сияқты) жүзеге асырылады.

Байланысты тақырыптар

Деңгейіңді біл: ҰБТ-ға тегін диагностика