Жалпы таблицалык туюнтмалар (WITH)
Суроонун куруу блогуна ат бериңиз да, SQLди рецепт сыяктуу үстүнөн ылдый окуңуз
Негизги идея: Жалпы таблицалык туюнтма (CTE) — бул инструкциянын башында
WITH ачкыч сөзү менен аныкталган убактылуу аталыш алган натыйжа топтому. Ички суроону башка суроонун ичине терең катканын ордуна, ага бир жолу ат берип, кийин ошол атты кадимки таблица сыяктуу колдоносуз. Бир инструкция бир нече CTE аныктай алат, ар бир кийинкиси мурункуларына таяна алат — ушул менен чырмалышкан кашаалар уясы ачык, иреттелген конвейерге айланат.
Теманын аягында сиз муну кыла аласыз:
WITH name AS (SELECT ...)аркылуу бир CTE аныктап, ага кайрылуу,- бир нече CTEни окула турган көп кадамдуу конвейерге бириктирүү,
- эмне үчүн CTE ошол эле логиканы ички суроодон окуу оңой экенин түшүндүрүү,
- бир CTEге экинчисинен жана акыркы суроодон кайрылуу,
- көрүнүү аймагынын эрежелерин айтуу: CTE канча жашайт жана аны эмне көрөт.
0. Биздин мисал таблица
Бул беттеги ар бир суроо sales деген бир кичине таблицаны колдонот. Анда сатылган ар бир китепке бир сап: сатуучу, анын региону, аталышы жана сатуу суммасы долларда. Ал мындай түзүлүп, толтурулат:
CREATE TABLE sales (
id INT PRIMARY KEY,
seller VARCHAR(30),
region VARCHAR(20),
book VARCHAR(30),
amount INT
);
INSERT INTO sales (id, seller, region, book, amount) VALUES
(1, 'Ann', 'North', 'SQL Basics', 40),
(2, 'Ann', 'North', 'Joins Deep', 55),
(3, 'Bo', 'North', 'SQL Basics', 40),
(4, 'Cy', 'South', 'Indexes 101', 30),
(5, 'Cy', 'South', 'SQL Basics', 40),
(6, 'Di', 'East', 'Joins Deep', 55),
(7, 'Di', 'East', 'Indexes 101', 30),
(8, 'Ann', 'North', 'Indexes 101', 30);
Бүт таблица мындай көрүнөт:
| id | seller | region | book | amount |
|---|---|---|---|---|
| 1 | Ann | North | SQL Basics | 40 |
| 2 | Ann | North | Joins Deep | 55 |
| 3 | Bo | North | SQL Basics | 40 |
| 4 | Cy | South | Indexes 101 | 30 |
| 5 | Cy | South | SQL Basics | 40 |
| 6 | Di | East | Joins Deep | 55 |
| 7 | Di | East | Indexes 101 | 30 |
| 8 | Ann | North | Indexes 101 | 30 |
Бул сандарды эсиңизде тутуңуз. Үч регион боюнча жыйынтык: North = 165 (1, 2, 3, 8-саптар), South = 70 (4, 5-саптар) жана East = 85 (6, 7-саптар). Бул жыйынтыктарды жакында CTE менен эсептейбиз.