Бағыныңқы сұрауды қолданып, сұрауды басқа сұраудың ішіне немесе өрнекке орналастыру

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

Бағыныңқы сұрауды өрнек немесе SQL көрінісі ішінде SQL нұсқауында жазуыңызға болады.

Бұл мақалада:

Сұраудың нәтижелерін өріс ретінде басқа сұрауда қолдану

Бағыныңқы сұрауды сұрау өрісі үшін шарт ретінде қолдану

Бағыныңқы сұраумен пайдалануға болатын жалпы SQL кілт сөздері

Сұраудың нәтижелерін өріс ретінде басқа сұрауда қолдану

Бағыныңқы сұрауды бүркеншік аты (SQL) өрісі ретінде қолдануыңызға болады. Бағыныңқы сұрауды бүркеншік ат өрісі ретінде бағыныңқы сұрау нәтижелерін негізгі сұраудағы өріс ретінде пайдаланған кезде қолданыңыз.

Ескерту : Бүркеншік ат өрісі ретінде қолданылатын бағыныңқы сұрау біреуден артық өріс қайтармайды.

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

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

Northwind дерекқорын орнату нұсқауы

  1. Файл қойындысындағы Жаңа түймешігін басыңыз.

  2. Қол жетімді үлгілер астында Үлгілер параметрін таңдаңыз.

  3. Northwind параметрін таңдап, Жасау пәрменін таңдаңыз.

  4. Дерекқорды ашу үшін Northwind сатушылары бетіндегі ( Іске қосылу экраны нысан қойындысы) нұсқаулығын орындаңыз, одан кейін «Кіру» тілқатысу терезесін жабыңыз.

  1. Жасау қойындысының Сұраулар тобындағы Сұрау жасақтамасы параметрін таңдаңыз.

  2. Кестені көрсету тілқатысу терезесіндегі Сұраулар қойындысын басып, Өнім тапсырыстары түймешігін екі рет басыңыз.

  3. Кестені көрсету тілқатысу терезесін жабыңыз.

  4. Өнім артикулы және Тапсырыс күні өрістерін сұрау жасақтама торына қосу үшін, оларды екі рет басыңыз.

  5. Тордың Өнім артикулы бағанындағы Сұрыптау жолында Артуы бойынша сұрыптау пәрменін таңдаңыз.

  6. Тордың Тапсырыс күні бағанындағы Сұрыптау жолында Кемуі бойынша сұрыптау пәрменін таңдаңыз.

  7. Тордың үшінші бағанында Өріс жолын тінтуірдің оң жақ түймешігімен басып, одан кейін мәтінмәндік мәзірде Ұлғайту пәрменін таңдаңыз.

  8. Ұлғайту тілқатысу терезесінде мына өрнектерді енгізіңіз немесе қойыңыз:

    Prior Date: (SELECT MAX([Тапсырыс күні]) 
    FROM [Өнім тапсырыстары] AS [Ескі тапсырыстар]
    WHERE [Ескі тапсырыстар].[Тапсырыс күні] < [Өнім тапсырыстары].[Тапсырыс күні]
    AND [Ескі тапсырыстар].[Өнім артикулы] = [Өнім тапсырыстары].[Өнім артикулы])

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

  1. Тордың төртінші бағанының Өріс жолына мына өрнекті енгізіңіз:

    Аралық: [Тапсырыс күні]-[Бастапқы күні]

Бұл өрнек бағыныңқы сұрау арқылы анықталған бастапқы күнінің мәнін пайдаланып, өнімнің әрбір тапсырыс күні мен бастапқы тапсырыс күні арасындағы аралықты есептейді.

  1. Жасақтама қойындысының Нәтижелер тобында Жегу түймешігін нұқыңыз.

    1. Сұрау іске қосылып, өнім атауларының тізімін, тапсырыс күндерін, бастапқы тапсырыс күндерін және тапсырыс күндері арасындағы аралықты көрсетеді. Нәтижелер алдымен өнім артикулы бойынша (артуы бойынша), одан кейін тапсырыс күні бойынша (кемуі бойынша) сұрыпталады.

    2. Ескерту : Өнім артикулы қондырмалы өріс болғандықтан, әдепкіде, Access бағдарламасы нақты өнім кодтарын емес, қондырмалы мәндерді (бұл жағдайда өнім атауын) көрсетеді. Бұл пайда болатын мәндерді өзгерткенімен, бұл сұрыптау ретін өзгертпейді.

  2. Northwind дерекқорын жабыңыз.

Беттің жоғарғы жағы

Бағыныңқы сұрауды сұрау өрісі үшін шарт ретінде қолдану

Бағыныңқы сұрауды өріс шарт ретінде қолдануға болады. Бағыныңқы сұрау нәтижелерінің өріс көрсететін мәндерді шектеуі қажет болған кезде бағыныңқы сұрауды өріс шарты ретінде қолданыңыз.

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

  1. Northwind 2007.accdb дерекқорын ашып, мазмұнын қосыңыз.

  2. Кіру пішінін жабыңыз.

  3. жасау қойындысының Басқа тобында Сұрау жасақтамасы түймешігін нұқыңыз.

  4. Кестені көрсету тілқатысу терезесінің Кестелер қойындысында Тапсырыстар және Қызметкерлер түймешігін екі рет басыңыз.

  5. Кестені көрсету тілқатысу терезесін жабыңыз.

  6. «Тапсырыстар» кестесінде сұрау құрастыру торына қосу үшін Қызметкер коды өрісін, Тапсырыс коды өрісін және Тапсырыс күні өрісін екі рет нұқыңыз. «Қызметкерлер» кестесінде құрастыру торына қосу үшін Лауазым өрісін екі рет нұқыңыз.

  7. «Қызметкер коды» бағанының Шарттар жолын тінтуірдің оң жақ түймешігімен нұқып, мәтінмәндік мәзірдегі Ұлғайту пәрменін таңдаңыз.

  8. Ұлғайту жолағына мына өрнекті енгізіңіз немесе қойыңыз:

    IN (SELECT [Код] FROM [Қызметкерлер] 
    WHERE [Лауазым]<>'Сату бөлімінің қызметкері')

    Бұл бағыныңқы сұрау болып табылады. Ол лауазымы сату бөлімінің қызметкері болып табылмайтын қызметкер кодтарын таңдайды және сол нәтижелер жиынын негізгі сұрауға қамтамасыз етеді. Негізгі сұрау «Тапсырыстар» кестесіндегі қызметкер кодтарының нәтижелер жиыны ішінде болғанын тексереді.

  9. Жасақтама қойындысының Нәтижелер тобында Жегу түймешігін нұқыңыз.

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

Беттің жоғарғы жағы

Бағыныңқы сұраумен пайдалануға болатын жалпы SQL кілт сөздері

Бағыныңқы сұраумен пайдалануға болатын бірнеше SQL кілт сөзі бар:

Ескерту : Бұл тізім түпкілікті емес. Деректер анықтамасының кілт сөздерінен басқа бағыныңқы сұрауда кез келген жарамды SQL кілт сөзін пайдалануға болады.

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

Мысалы, факультеттегі оқушы деректерін талдап жатырсыз делік. Студенттер әр негізгі пәнге әр түрлі болатын ең аз GPA ұпайын жинауы керек. Негізгі пәндер мен талап етілетін ең аз GPA ұпайы «Негізгі пәндер» атты кестеде сақталады және тиісті студент мәліметтері «Студент_жазбалары» атты кестеде сақталады.

Әрбір оқушы талап етілетін ең аз GPA ұпайынан асқан негізгі пәндердің тізімін (және талап етілетін ең аз GPA ұпайын) қарау үшін, мына сұрауды пайдалануға болады:

SELECT [Негізгі пән], [Ең аз_GPA] 
FROM [Негізгі пәндер]
WHERE [Ең аз_GPA] < ALL
(SELECT [GPA] FROM [Студент_жазбалары]
WHERE [Студент_жазбалары].[Негізгі пән]=[Негізгі пәндер].[Негізгі пән]);
  • ANY    Бағыныңқы сұрау қайтарған жолдардың кемінде біреуімен салыстырған кезде шартты қанағаттандыратын жолдарды шығарып алу үшін, WHERE сөйлеміндегі ANY кілт сөзін пайдаланыңыз.

    Мысалы, факультеттегі студент деректерін талдап жатырсыз делік. Студенттер әр негізгі пәнге әр түрлі болатын ең аз GPA ұпайын жинауы керек. Негізгі пәндер мен талап етілетін ең аз GPA ұпайы «Негізгі пәндер» атты кестеде сақталады және тиісті студент мәліметтері «Студент_жазбалары» атты кестеде сақталады.

    Оқушы талап етілетін ең аз GPA ұпайын жинай алмаған негізгі пәндердің тізімін (және талап етілетін ең аз GPA ұпайын) қарау үшін, мына сұрауды пайдалануға болады:

    SELECT [Негізгі пән], [Ең аз_GPA] 
    FROM [Негізгі пәндер]
    WHERE [Ең аз_GPA] > ANY
    (SELECT [GPA] FROM [Студент_жазбалары]
    WHERE [Студент_жазбалары].[Негізгі пән]=[Негізгі пәндер].[Негізгі пән]);

    Ескерту : Әрі SOME кілт сөзін бірдей мақсаттарға пайдалануға болады; SOME кілт сөзі ANY кілт сөзімен мағыналас.

  • EXISTS    Бағыныңқы сұраудың кемінде бір жолды қайтару қажеттігін көрсету үшін, WHERE сөйлеміндегі EXISTS кілт сөзін пайдаланыңыз. Әрі бағыныңқы сұраудың жолдарды қайтару қажеттігін көрсету үшін, EXISTS кілт сөзіне NOT арқылы кіріспе жасауға болады.

    Мысалы, мына сұрау кемінде қолда бар бір тапсырыстағы өнімдер тізімін береді:

    SELECT *
    FROM [Өнімдер]
    WHERE EXISTS
    (SELECT * FROM [Тапсырыс мәліметтер]
    WHERE [Тапсырыс мәліметтері].[Product ID]=[Өнімдер].[Код]);

    NOT EXISTS арқылы сұрау кемінде қолда бар бір тапсырыста табылмаған өнімдер тізімін береді:

    SELECT *
    FROM [Өнімдер]
    WHERE NOT EXISTS
    (SELECT * FROM [Тапсырыс мәліметтер]
    WHERE [Тапсырыс мәліметтері].[Product ID]=[Өнімдер].[Код]);
  • IN    Негізгі сұраудың ағымдағы жолындағы мәннің бағыныңқы сұрау қайтаратын жиын бөлігі екенін тексеру үшін, WHERE сөйлеміндегі IN кілт сөзін пайдаланыңыз. Әрі негізгі сұраудың ағымдағы жолындағы мәннің бағыныңқы сұрау қайтаратын жиын бөлігі емес екенін тексеру үшін, IN кілт сөзіне NOT арқылы кіріспе жасауға болады.

    Мысалы, мына сұрау сату бөлімінің қызметкерлері болып табылмайтын қызметкерлер өңдеген тапсырыстар тізімін (тапсырыс күндерімен) береді.

    SELECT [Тапсырыс коды], [Тапсырыс күні]
    FROM [Тапсырыстар]
    WHERE [Қызметкер коды] IN
    (SELECT [Код] FROM [Қызметкерлер]
    WHERE [Лауазым]<>'Сату бөлімінің қызметкері');

    NOT IN кілт сөзі арқылы осы жолмен бірдей сұрауды жазуға болады:

    SELECT [Тапсырыс коды], [Тапсырыс күні]
    FROM [Тапсырыстар]
    WHERE [Қызметкер коды] NOT IN
    (SELECT [Код] FROM [Қызметкерлер]
    WHERE [Лауазым]='Сату бөлімінің қызметкері');

Беттің жоғарғы жағы

Дағдыларды жетілдіру
Оқыту курсымен танысыңыз
Жаңа мүмкіндіктерге бірінші болып қол жеткізу
Office Insider бағдарламасына қосылу

Осы ақпарат пайдалы болды ма?

Пікіріңіз үшін рақмет!

Пікіріңізге рақмет! Сізді Office қолдау көрсету қызметіндегі агенттердің бірімен байланыстырған жөн болуы мүмкін.

×