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 საქონელი ს, უწყისი უ, საწყობი საწ ჭHEღE ს.საქონლისკოდი =უ.საქონლისკოდი 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)