Сунуштар башка SQL сурамдарына камтылган SELECT билдирүүлөрүн билдирет. Келгиле, ички сурамдарды колдонуунун жөнөкөй мисалын карап көрөлү.
Мисалы, өнүмдөр жана заказдар үчүн таблицаларды түзөлү:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАБЛИЦА өнүмдөрүн түзүү</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Id
INT
AUTO_INCREMENT БИРИНЧИ АЧКЫЧЫ,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ПродуктАты
VARCHAR
(30)
NULL
ЭМЕС,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Өндүрүүчү
VARCHAR
(20)
NO
NULL
,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ProductCount
INT
DEFAULT
0,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Баасы
DECIMAL
NO
NULL
</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
);</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ТАБЛИЦА ЗАКАЗДАРЫН ТҮЗҮҮ</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Id
INT
AUTO_INCREMENT БИРИНЧИ АЧКЫЧЫ,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ProductId
INT
NULL
ЭМЕС,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ПродуктСаны
INT
DEFAULT
1,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Түзүлгөн
DATE
NULL
ЭМЕС,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Баасы
DECIMAL
NULL
ЭМЕС,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ТЫШКЫ АЧКЫЧ (ПродуктИд) РЕФЕРЕНЦИЯЛАР КАСКАДЫ ЖОК КЫЛУУДА Товарлар(Id)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
);</font></font><font></font>
@A@
Буйрутмалар таблицасында Продукт таблицасында сатылып алынган өнүмдөр жөнүндө маалыматтар камтылган.
Келгиле, таблицаларга кээ бир маалыматтарды кошолу:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
INSERT
INTO
Продукттарга (Өнүмдүн аталышы, Өндүрүүчү, ПродуктСаны, Баасы)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
VALUES
(
'iPhone X'
,
'Apple'
, 2, 76000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'iPhone 8'
,
'Apple'
, 2, 51000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'iPhone 7'
,
'Apple'
, 5, 42000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'Galaxy S9'
,
'Samsung'
, 2, 56000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'Galaxy S8'
,
'Samsung'
, 1, 46000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'Honor 10'
,
'Huawei'
, 2, 26000),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(
'Nokia 8'
,
'HMD Global'
, 6, 38000);</font></font><font></font>
<font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Заказдарга
INSERT
INTO
(ProductId, CreatedAt, ProductCount, Price)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
БААЛУУЛАР</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'Galaxy S8'
WHERE
Продукттарынан ID ТАҢДАҢЫЗ),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
'21-05-2018'
,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
2,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(Продукциянын баасын ТАҢДАҢЫЗ,
WHERE
ProductName=
'Galaxy S8'
)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'iPhone X'
ЖЕРДЕГИ Өнүмдөрдөн ID ТАҢДАҢЫЗ),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
'23-05-2018'
, </font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
1,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'iPhone X'
ЖЕРДЕГИ Товарлардан бааны ТАНДАЙТ)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'iPhone 8'
ЖЕРДЕГИ Өнүмдөрдүн идентификаторун тандаңыз),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
'21-05-2018'
, </font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
1,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'iPhone 8'
КАЙДАГЫ Продукциялардан бааны ТАНДАЙТ)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
);</font></font><font></font>
@A@
Заказдар таблицасына маалыматтарды кошууда подсуроолор колдонулат. Мисалы, биринчи заказ Galaxy S8 продуктусуна жасалган. Демек, буйрутма тууралуу маалыматты Заказдар таблицасында сакташыбыз керек, мында ProductId талаасы Galaxy S8 продуктунун идентификаторун, ал эми Баа талаасы анын баасын көрсөтөт. Бирок суроо-талапты жазып жаткан учурда биз Сатып алуучунун идентификаторун, Продукттун ID'син же буюмдун баасын билбей калышыбыз мүмкүн. Бул учурда, сиз формадагы подсуроону аткара аласыз
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>(ProductName=
'iPhone 8'
КАЙДАГЫ Продукциялардан бааны ТАНДАЙТ)
</font></font>
@A@
Чакан сурам SELECT операторун аткарат жана кашаага алынат. Бул учурда, бир продуктту кошууда, эки кошумча суроо аткарылат. Ар бир подсуроо сандык идентификатор сыяктуу бир скалярдык маанини кайтарат.
Жогорудагы мисалда, подсуроолор башка таблицада аткарылган, бирок алар негизги сурам чакырылган ошол эле таблицада да аткарылышы мүмкүн. Мисалы, Товарлар таблицасынан минималдуу баасы бар өнүмдөрдү табалы:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
Баасы = (Продукциялардан
MIN
(Баа) ТАНДОО);</font></font><font></font>
@A@
Же баасы орточо жогору болгон товарларды табабыз:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
Баасы > (Продукциялардан
AVG
(Бааны) ТАНДОО);</font></font><font></font>@A@
Сунуштар корреляцияланган же корреляциясыз болушу мүмкүн. Жогорудагы мисалдарда, SELECT буйруктары иш жүзүндө команда тарабынан алынган бардык саптар үчүн бир подсуроону аткарды. Мисалы, подсуроо минималдуу же орточо бааны кайтарат, ал биз негизги суроодо канча катар тандасак да өзгөрбөйт. Башкача айтканда, ички суроонун натыйжасы негизги суроодо тандалган саптардан көз каранды болгон эмес. Жана мындай подсуроо бүт тышкы суроо үчүн бир жолу аткарылат.
Бирок сиз ошондой эле корреляцияланган подсураларды колдоно аласыз , алардын натыйжалары негизги суроодо тандалган саптарга көз каранды.
Мисалы, келгиле, Буйрутмалар таблицасынан бардык буйрутмаларды тандап алалы, аларга буюм жөнүндө маалымат кошулат:
@A@
SELECT
CreatedAt, Price, <font></font>
(
SELECT
ProductName
FROM
Products <font></font>
WHERE
Products.Id = Orders.ProductId)
AS
Product<font></font>
FROM
Orders;<font></font>
@A@
Бул учурда, Буйрутмалар жадыбалындагы ар бир сап үчүн, натыйжасы ProductId тилкесинен көз каранды болгон подсуроо аткарылат. Жана ар бир подсуроо ар кандай маалыматтарды кайтара алат.
Корреляциялык подсуроо негизги суроо аткарылган ошол эле таблицада да аткарылышы мүмкүн. Мисалы, Товарлар таблицасынан наркы белгилүү бир өндүрүүчү үчүн товарлардын орточо баасынан жогору болгон товарларды тандап алалы:
@A@
SELECT
ProductName,<font></font>
Manufacturer,<font></font>
Price, <font></font>
(
SELECT
AVG
(Price)
FROM
Products
AS
SubProds <font></font>
WHERE
SubProds.Manufacturer=Prods.Manufacturer)
AS
AvgPrice<font></font>
FROM
Products
AS
Prods<font></font>
WHERE
Price > <font></font>
(
SELECT
AVG
(Price)
FROM
Products
AS
SubProds <font></font>
WHERE
SubProds.Manufacturer=Prods.Manufacturer);<font></font>@A@
Бул жерде аныкталган эки корреляциялык подсуроолор бар. Биринчи кошумча суроо AvgPrice тилкесинин спецификациясын аныктайт. Ал Продукт таблицасынан алынган ар бир сап үчүн аткарылат. Продукт өндүрүүчүсү подсуроого өтөт жана анын негизинде ушул конкреттүү өндүрүүчүнүн продукциясынын орточо баасы тандалат. Жана товардын өндүрүүчүсү ар кандай болушу мүмкүн болгондуктан, ар бир учурда подсуроонун натыйжасы да ар кандай болушу мүмкүн.
Экинчи подсуроо окшош, болгону ал таблицадан алынган Продукттарды чыпкалоо үчүн колдонулат. Ошондой эле ар бир сап үчүн аткарылат.
Өндүрүүчүлөрдү ( ) салыштырганда подсуруда чыпкалоодо эки тараптуулукту болтурбоо үчүн SubProds.Manufacturer=Prods.Manufacturer
Prods лакап аты сырткы тандоо үчүн, ал эми SubProds лакап аты подсуроолордон тандоо үчүн аныкталган.
Корреляциялоочу подсуроолор тандоонун ар бир жеке саптары үчүн аткарылаарын эске алуу керек, мындай подсуроолордун аткарылышы бүтүндөй суроонун аткарылышын жайлатышы мүмкүн.