5.5. SQL-ის ინსტრუქციები

Access-ის მონაცემების ბაზასთან SQL-ის ენაზე შეკითხვის სინტაქსი შემდეგია:

SELECT [ALL ! DISTINCT ! DISTINCTROW ! TOP] _

{* ! table.* ! table.] field1 [AS allias1] ! table.] field2 [AS allias2] ! , …..]

FROM table1 [table1Allias] [, table2 [table2Allias] [,….]

[WHERE criteria]

[GROUP BY groupfieldst]

[HAVING groupcriteria]

ORDER BY field1 [ASC ! DESC ] [, field2 [ASC ! DESC ]]    [,…..]]]

[WITH OWNERACCESS OPTION]

SELECT გვიჩვენებს, რომ ცხრილიდან ამორჩეული იქნება ჩანაწერები. ALL, DISTINCT,  DISTINCTROW,  TOP პრედიკატებს უწოდებენ. ALL  გვიჩვენებს, რომ ამორჩევის ობიექტია ყველა ჩანაწერი დუბლირებული ჩანაწერების ჩათვლით. DISTINCT პრედიკატი გვიჩვენებს, რომ ამორჩევის ობიექტია არადუბლირებული ჩანაწერები. DISTINCTROW პრედიკატის მითითებით, ამორჩევის ობიექტია ყველა ჩანაწერი, რომელშიც თუნდაც ერთი ველის მნიშვნელობა განსხვავდება საწყისი ჩანაწერების მნიშვნელობისგან. TOP პრედიკატის მითითება უზრუნველყოფს გარკვეული რაოდენობის ჩანაწერების ამორჩევას  ან ამორჩეული  რაოდენობის ჩვენებას პროცენტულად.

{* ! table.* ! table.] field1 [AS allias1] ! table.] field2 [AS allias2] ! , …..]  გვიჩვენებს ამოსარჩევი ველების დასახელებას.

FROM-ში  მიეთითება ცხრილის და მონაცემების ბაზის დასახელება, საიდანაც ხორციელდება ამორჩევა. თუ გამოტოვებულია პარამეტრი <ბაზის დასახელება>, მაშინ იგულისხმება, რომ ამორჩევა აქტიური ბაზიდან წარმოებს.

მაგალითებით ვაჩვენოთ  SELECT  ბრძანების გამოყენება.

 დავუშვათ,  გვაქვს სამი ცხრილი სახელებით: „საქონელი”, „საწყობი”, „უწყისი”. ცხრილის „საქონელი" ჩანაწერის სტრუქტურა შემდეგია:

<საქონლის კოდი><დასახელება><შეძენის ფასი><სარეალიზაციო ფასი>

ცხრილის „საწყობი" სტრუქტურა შემდეგია:

<საწყობის ნომერი><საწყობის დასახელება><მისამართი>

ცხრილის „უწყისი" სტრუქტურა შემდეგია:

<საწყობის ნომერი><საქონლის კოდი><რაოდენობა>

ამ ცხრილებში ველების დასახელებები შემდეგია: "საქონლისკოდი", "დასახელება", "შეძენისფასი", "სარეალიზაციოფასი", "საწყობისნომერი", "საწყობისდასახელება", „მისამართი",  „საქონლისკოდი", „რაოდენობა". ცხრილებისა და ველების დასახელებები ლათინური ალფაბეტითაა დაწერილი.

1.     ცხრილიდან „საქონელი” ამორჩეულ იქნეს ყველა ჩანაწერი:

SELECT * FROM საქონელი

2. ცხრილიდან „საქონელი” ამორჩეულ იქნეს ყველა ჩანაწერი შემდეგი სტრუქტურით <დასახელება> <შეძენისფასი>:

SELECT * დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი

AS [საქონლის დასახელება] და AS [საქონლის შეძენის ფასი] მითითება უზრუნველყოფს საშედეგო ცხრილში სვეტების სათაურად წინადადებების: „საქონლის დასახელება", „საქონლის შეძენის ფასი" დაწერას.

3. ცხრილიდან „საქონელი” ამორჩეულ იქნეს ჩანაწერები სტრუქტურით <დასახელება> <შეძენისფასი>  რომლებშიც „შეძენისფასი”< 100:

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი WHERE შეძენისფასი < 100

SQL ინსტრუქციებში WHERE-ში შეიძლება გამოყენებულ იქნეს ამორჩევის რთული პირობები ოპერატორების: OR, AND, NOT, IS NULL, BETWEEN, IN, LIKE, =, <=, >=, >, <, <>   გამოყენებით.

IS NULL-ით ამოირჩევა ყველა ის ჩანაწერი, რომლის მითითებული ველი მონაცემს არ შეიცავს.

4. ამორჩეულ იქნეს ყველა ჩანაწერი, რომლებშიც შეძენისფასი” < 100 ან შეძენისფასი”< = “” :

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი WHERE შეძენისფასი IS NULL Oღ შეძენისფასი < 100

5.1.1. ოპერატორი BETWEEN

BETWEEN-ით შეგვიძლია მოიძებნოს ყველა ჩანაწერი, მოთავსებული გარკვეულ დიაპაზონში. მაგ.,

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი WHERE შეძენისფასი BETWEEN 45 AND  100

ამოირჩევა ყველა ჩანაწერი, რომლებშიც ველის შეძენისფასი”-ის მნიშვნელობებია  დიაპაზონში 45-დან 100-მდე.

5.1.2. ოპერატორი IN

IN ოპერატორით შეიძლება გარკვეული ველის მნიშვნელობის შესატყვისი ჩანაწერების ამორჩევა. მაგ.,

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი, WHERE შეძენისფასი IN (42, 105, 750).

ამოირჩევა ჩანაწერები, რომლებშიც შეძენის ფასის მნიშვნელობებია 42, 105, 750. დასაწყისში ამოირჩევა     ყველა ჩანაწერი, რომლებშიც შეძენის ფასის მნიშვნელობაა 42, შემდეგ _ 105, და ბოლოს ჩანაწერები შეძენის ფასის მნიშვნელობით 750.

5.1.3. ოპერატორი LIKE

ოპერატორით Like ორი სტრიქონის ტიპის მონაცემის შედარება ხორციელდება. ეს ოპერატორი წარმატებით გამოიყენება ტექსტში სიტყვის, ფრაზის მოსაძებნად, რომელთა მნიშვნელობა Like-თი განსაზღვრულ შაბლონს ემთხვევა. Like ოპერატორის სინტაქსი შემდეგია:

<სტრიქონის ტიპის გამოსახულება> Like <შაბლონის სახით წარმოდგენილი სტრიქონის ტიპის გამოსახულება>. შედარების შედეგია True, თუ პირველი ოპერანდი ემთხვევა შაბლონს. Like ოპერატორის შაბლონში შემდეგი სიმბოლოები გამოიყენება/ცხრ. 5.8./:

ცხრილი 5.8.

შაბლონის სიმბოლო

შაბლონში მოცემული სიმბოლოს შესაბამისი სიმბოლოები

#

ნებისმიერი  ერთი ციფრი 0_9

* an %

ნებისმიერი სიმბოლოს ან მათი კომბინაციის ნებისმიერი რაოდენობა

?

ნებისმიერი ერთი სიმბოლო

[sia]

სიმბოლოების სიაა. სიაში არსებულ ნებისმიერ სიმბოლოსთან დამთხვევისას Like ოპერატორის შედეგია True

[!sia]

სიმბოლოების სიაა. სიაში არსებულ ნებისმიერ სიმბოლოსთან არდამთხვევისას Like ოპერატორის შედეგია True

მაგალითები:

strgvari Like “l*a” ‘ True, თუ  strgvari-ს მნიშვნელობაალომია”, “ლომაიადა ა..

strgvari Like “l???a” ‘ True, თუ   strgvari-ს მნიშვნელობაალომია”, “ლილიადა ა..

strgvari Like “l[ab]” ‘ True, თუ   strgvari-ს მნიშვნელობაალაანლბდა ა..

strgvari Like “lo[!b]” ‘ True, თუ  strgvari-ს მნიშვნელობა არ არის ობ

strgvari Like “lo[a-c]” ‘ True, თუ  strgvari-ს მნიშვნელობაა ოა, ობ, ოც

strgvari Like “lo[!a-c]” ‘ True, თუ   strgvari-ს მნიშვნელობა არ არის ოა, ობ, ოც

აუცილებელია სიმბოლოების დიაპაზონის მითითება სიმბოლოების მნიშვნელობების ზრდის მიხედვით. მაგ., [-] დიაპაზონი სწორად არის ჩაწერილი, ხოლო [-] არ არის სწორი.

შაბლონში სიმბოლოებს #, *, [ , ? განსაკუთრებული მნიშვნელობა აქვთ, ამიტომ საჭიროა შაბლონში ეს სიმბოლოები მოთავსდეს კვადრატულ ფრჩხილებში.

სტრგვარი Lიკე “*[?]” ‘True  თუ  strgvari-ს მნიშვნელობაში ბოლო სიმბოლოა კითხვის ნიშანი.

შაბლონში სიმბოლოებს: ძახილის ნიშანს(!) და მარჯვენა ფრჩხილს(]) განსაკუთრებული მნიშვნელობა აქვთ, ამიტომ საჭიროა შაბლონში ეს სიმბოლოები კვადრატული ფრჩხილების გარეშე დაიწეროს.

strgvari Like “*!”  არის True, თუ     strgvari-ს მნიშვნელობაში ბოლო სიმბოლოა ძახილის ნიშანი

დეფისის ნიშანი შაბლონში უნდა მოთავსდეს სიის დასაწყისში ან ბოლოს.

strgvari Like “*g[-]*” ‘ True თუ     strgvari-ის მნიშვნელობაა "ბიგ-ბენიან სხვა მისი მსგავსი.

Like ოპერატორით სტრიქონების შედარების შედეგი დამოკიდებულია ინსტრუქციაზე Option Compare. თუ ინსტრუქციაში მოცემულია სტრიქონების ორობითი შედარება, მაშინ ოპერატორი Like რეგისტრებს განასხვავებს. თუ Option Compare-ში ტექსტური შედარებაა მოცემული, მაშინ Like ოპერატორი რეგისტრების მიმართ მგძნობიარე არ არის.

SQL-ის ინსტრუქციებში Like ოპერატორში * ნიშნის ნაცვლად გამოიყენება % (პროცენტის ნიშანი), ამიტომ  შაბლონის მითითებისას “ “-ის ნაცვლად გამოყენებულ უნდა იქნეს ‘ ‘ სიმბოლო.

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი AS [საქონლის შეძენის ფასი]  FROM საქონელი WHERE დასახელება LIKE ‘საკერავი’

ამორჩეული იქნება ყველა ჩანაწერი, რომელშიც ველი "დასახელება" იწყება სიტყვით "საკერავი".

 როდესაც   Like  ოპერატორის  შაბლონის მნიშვნელობა შეიტანება ფორმაზე დატანილი TextBox-ის ტიპის ველიდან, ხშირად საჭირო ხდება ძებნის დროს  Like ოპერატორის გამოვიყენება. დავუშვათ ფორმაზე დატანილი ველის სახელია Vsek. ამ ველში ჩაწერილი სიმბოლოების მიხედვით, ცხრილიდან, რომლის სახელია ტბდასახელება, ვეძებთ ისეთ დასახელებებს, რომლებიც ველში Vsek ჩაწერილი სიმბოლოების იდენტურია. მაგალითად ამოვარჩიოთ ყველა იმ საქონლის დასახელება, რომელიც იწყება ასოებით “ატ”. ფორმიდან შეკითხვის მიცემის ინსტრუქცია შემდეგი იქნება:

“Select * FROM tbdasaxelebaa Where dasaxeleba Like ‘ “ & Vsek & “%’ ”.   

5.1.4. ოპერატორი NOT

ოპერატორი NOT  შეიძლება გამოყენებულ იქნეს ოპერატორებთან IS NULL, BETWEEN, IN, LIKE, ანუ IS NOT  NULL, NOT BETWEEN, NOT IN, NOT LIKE.

საშედეგო მონაცემების ფორმატიზაცია

საშედეგო მონაცემებს შეიძლება მიეცეს ფორმატიზაციის ატრიბუტები:

SELECT  დასახელება AS [საქონლის დასახელება], შეძენისფასი Format(შეძენისფასი, "### ##0.00ლ") AS [საქონლის შეძენის ფასი]  FROM საქონელი WHERE შეძენისფასი < 100

ამ მაგალითში საშედეგო მონაცემებში ველის შეძენისფასიმნიშვნელობა დაწერილია ათობითი მძიმის შემდეგ ორი ნიშნის სიზუსტით ასო "-(ლარი) ჩვენებით.

მონაცემების მოძებნა ერთზე მეტი ცხრილიდან

SELECT ინსტრუქციაში ველის სრული სახელია <ცხრილის სახელი><ველის სახელი>.

არგუმენტის <ცხრილის სახელი> ცხრილის სრული დასახელების ნაცვლად შეიძლება გამოყენებულ იქნეს აბრევიატურა. Aამ შემთხვევაში FROM-ის ინსტრუქციაში ცხრილის სრულ დასახელებასთან ერთად ინტერვალის ნიშნის შემდეგ უნდა დაიწეროს  SELECT ინსტრუქციაში გამოყენებული აბრევიატურა.

SELECT   . დასახელება AS [საქონლის დასახელება], . რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს, უწყისი  WHERE .საქონლისკოდი=.საქონლისკოდი

ცხრილიდან საქონელი" ამორჩეული იქნება ჩანაწერები, რომელთა კოდი ტოლია ცხრილში უწყისი" საქონლის კოდის. საშედეგო ცხრილში გამოტანილი იქნება ჩანაწერები შემდეგი სტრუქტურით <დასახელება><რაოდენობა>. საშედეგო ცხრილში სვეტების დასახელებები იქნებასაქონლის დასახელება", რაოდენობა საწყობში".

SELECT   .დასახელება AS [საქონლის დასახელება], .რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს, უწყისი უ WHERE .საქონლისკოდი=.საქონლისკოდი AND .საწყობის ნომერი='04'

წინა შეკითხვისგან განსხვავებით, ამორჩეული იქნება 04 საწყობში არსებული საქონელი

SELECT   .დასახელება AS [საქონლის დასახელება], .რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს, უწყისი უ, საწყობი საწ ჭHEE .საქონლისკოდი =.საქონლისკოდი AND .საწყობის ნომერი=საწ.საწყობის ნომერი AND საწ.საწყობისდასახელება=საწყობი (საღებავები)"

წინა შეკითხვისგან განსხვავებით, ამ შეკითხვის შედეგად საშედეგო ცხრილში საწყობის ნომრის ნაცვლად გამოტანილი იქნება საწყობის დასახელება.

მოძებნილი მონაცემების გამოტანა გარკვეული თანმიმდევრობით

SELECT   .დასახელება AS [საქონლის დასახელება], .რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს, უწყისი უ

WHERE .საქონლისკოდი=.საქონლისკოდი AND .საწყობისომერი='04'

ORDER BY .დასახელება

საშედეგო მონაცემები დახარისხებული იქნება ზრდადობით.

როგორც ზევით აღვნიშნეთ, ბრძანების ORDER BY სინტაქსი შემდეგია:

ORDER BY field1 [ASC ! DESC ] [, field2 [ASC ! DESC ]]    [,…..]]]

field1 ველის დასახელებაა, რომლითაც მონაცემების დახარისხება ხდება(ჩვენს მაგალითში ველით ს.დასახელება). ASC  გვიჩვენებს, რომ დახარისხება ზრდადობით ხორციელდება, ხოლო DESC  გვიჩვენებს, რომ დახარისხება შემცირებით წარმოებს. თუ გამოტოვებულია ეს არგუმენტი, მაშინ გაჩუმებით იგულისხმება, რომ დახარისხება ზრდადობით ხორციელდება.

5.1.5. წინადადება TOP

TOP სიტყვის საშუალებით მასივის დასაწყისიდან შეგვიძლია გამოვიტანოთ  ჩანაწერის სასურველი რაოდენობა, ან მთელი მასივიდან ამოვარჩიოთ ჩანაწერების რაოდენობა, რომელიც მთელი ჩანაწერების გარკვეულ პროცენტს შეადგენს. მაგ.,

SELECT TOP 3  .დასახელება AS [საქონლის დასახელება], .რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს. უწყისი უ.

WHERE .საქონლისკოდი=.საქონლისკოდი AND .საწყობის ნომერი='04'

ORDER BY ს.დასახელება

ამოირჩევა პირველი სამი ჩანაწერი.

SELECT  TOP 5 PERCENT ს.დასახელება Aშ [საქონლის დასახელება], უ.რაოდენობა AS [რაოდენობა საწყობში]  FROM საქონელი ს, უწყისი უ.

WHERE ს.საქონლისკოდი=უ.საქონლისკოდი AND .საწყობის ნომერი='04'

ORDER BY ს.დასახელება

საერთო ჩანაწერებიდან ამოირჩევა ჩანაწერების 5%.

SELECT ინსტრუქციაში ფუნქციების გამოყენება

SELECT ინსტრუქციაში შეიძლება გამოყენებულ იქნეს ფუნქციები/ცხრ. 5.9./

                                                                                ცხრილი 5.9.

AVG

საშუალო არითმეტიკული

COUNT

ამორჩეული ჩანაწერების რაოდენობა

FIRST

ველში პირველი მნიშვნელობა

LAST

ველში შემდეგი მნიშვნელოba

MAX

დომენში მაქსიმალური მნიშვნელობა

MIN

დომენში მინიმალური მნიშვნელობა

STDEV

საშუალოკვადრატული გადახრა

SUM

მოცემული ველის მნიშვნელობების ჯამი

VAR

Dისპერსია

ამ ფუნქციების გამოყენებით SELECT-ის ჩაწერის სინტაქსი შემდეგია:

SELECT <ფუნქციის დასახელება><(ველის დასახელება)>…

SELECT COUNT(დასახელება) AS [სულ დასახელება]

FROM საქონელი WHERE შეძენის ფასი<150

ცხრილში "საქონელი" დაითვლება 150 ლარზე ნაკლები ფასის მქონე საქონლის რაოდენობა.

SELECT ინსტრუქციაში მონაცემების დაჯგუფება

მონაცემების ჯგუფში გაერთიანება ხორციელდება წინადადებით GROUP BY

SELECT საწ. საწყობის დასახელება, SUM (უ. რაოდენობა) AS რაოდენობა საწყობში

FROM  უწყისი უ. საწყობი საწ.

WHERE  უ. საწყობის ნომერი=საწ. საწყობის ნომერი

GROUP BY საწ. საწყობის დასახელება

ამ ინსტრუქციით მოძებნილი მონაცემები დაჯგუფდება საწყობის ნომრების მიხედვით და თითოეულ საწყობში დაითვლება საქონელის საერთო რაოდენობა.

GROUP BY ინსტრუქციით დაჯგუფება ხორციელდება ერთი დომენით(ერთი სვეტით).

დავუშვათ, გვსურს, ამოვარჩიოთ ჩანაწერები იმ საწყობების შესახებ, სადაც საქონლის რაოდენობა გარკვეულ რაოდენობაზე ნაკლებია.

SELECT საწ. საწყობის დასახელება, SUM (უ. რაოდენობა) AS რაოდენობა საწყობში

FROM  უწყისი უ. საწყობი საწ.

WHERE  უ. საწყობის ნომერი=საწ. საწყობის ნომერი

GROUP BY საწ. საწყობის დასახელება

HAVING SUM (უ. რაოდენობა)<10000

წინადადება HAVING გამოიყენება მაშინ, როდესაც გაანგარიშებით მონაცემზე ხორციელდება პირობების დადება.

რთული, კომბინირებული შეკითხვის ფორმირება

რთულ ე.წ. კომბინირებულ შეკითხვას ისეთ შეკითხვას უწოდებენ, რომელიც შეკითხვა-ქვეშეკითხვას შეიცავს. ქვეშეკითხვის ფორმირებისას დაცულ უნდა იქნეს შემდეგი პირობები:

·        ქვეშეკითხვის წინადადება SELECT, როგორც წესი, ერთ დომენს(სვეტს) უნდა შეიცავდეს. იშვიათად გამოიყენება რამდენიმე დომენი;

·        წინადადება ORDER BY გამოყენებულ უნდა იქნეს ძირითად შეკითხვაში. ქვეშეკითხვაში მონაცემების დასაჯგუფებლად აუცილებელად გამოყენებულ უნდა იქნეს წინადადება GROUP BY;

·        ძირითად შეკითხვაში არ შეიძლება გამოყენებულ იქნეს წინადადება BETWEEN.

SELECT  TOP 1 საწყობის ნომერი FROM უწყისი GROUP BY საწყობის ნომერი ORDER BY SUM(რაოდენობა) DESC

შეკითხვის შედეგად მიიღება ერთი ჩანაწერი (წინადადება TOP 1) _ საწყობის ნომერი, რომელშიც ნაჩვენები იქნება მაქსიმალური რაოდენობა, იმიტომ, რომ მასივი დახარისხებული იქნება შემცირებით (DESC). ეს შეკითხვა გამოვიყენოთ ძირითად შეკითხვაში ქვეშეკითხვის სახით.

SELECT .დასახელება AS [საქონლის დასახელება], უწყ. რაოდენობა AS [დასახელება], FROM საქონელი Aშ ს, უწყისი AS უწყ. WHERE  .საქონლისკოდი=უწყ.საქონლის კოდი AND უწყ.საქონლისკოდი=(SELECT  TOP 1 საწყობის ნომერი FROM უწყისი GROUP BY საწყობის ნომერი ORDER BY SUM(რაოდენობა) DESC)