MS SQL Server მონაცემთა ბაზაში შეკითხვის (Query) შექმნის მაგალითი. მონაცემთა ბაზა მდებარეობს ადგილობრივ *.mdf ფაილში. როგორ დავწეროთ SQL მოთხოვნები - დეტალური მაგალითები DataGridView კონტროლის განთავსება და მონაცემთა ბაზის კომუნიკაციების დაყენება

MS SQL Server მონაცემთა ბაზაში შეკითხვის (Query) შექმნის მაგალითი. მონაცემთა ბაზა მდებარეობს ადგილობრივ *.mdf ფაილში. როგორ დავწეროთ SQL მოთხოვნები - დეტალური მაგალითები DataGridView კონტროლის განთავსება და მონაცემთა ბაზის კომუნიკაციების დაყენება

MS SQL Server მონაცემთა ბაზაში შეკითხვის (Query) შექმნის მაგალითი. მონაცემთა ბაზა მდებარეობს ადგილობრივ *.mdf ფაილში

Ამოცანა

მითითებულია მონაცემთა ბაზა, რომელიც განთავსებულია Education.mdf ფაილში. მონაცემთა ბაზა შეიცავს ორ ურთიერთდაკავშირებულ ცხრილებს Student და Session.

ცხრილები ერთმანეთთან დაკავშირებულია ID_Book ველით.

Microsoft Visual Studio ინსტრუმენტების გამოყენებით შექმენით შეკითხვა სახელად Query1, რომელსაც ექნება შემდეგი სტრუქტურა:

ველის სახელი მაგიდა
ნომერი_წიგნი Სტუდენტი
სახელი Სტუდენტი
მათემატიკა სესია
ინფორმატიკა სესია
ფილოსოფია სესია
საშუალო გამოთვლითი ველი

შესრულება (ეტაპობრივად ინსტრუქციები)

1. ჩამოტვირთეთ Microsoft Visual Studio
2. დააკავშირეთ Education.mdf მონაცემთა ბაზა Server Explorer პროგრამაში მონაცემთა ბაზების სიას

იმისათვის, რომ არ დაკარგოთ დრო Education.mdf მონაცემთა ბაზის ცხრილების შემუშავებასა და დაკავშირებაზე, შეგიძლიათ ჩამოტვირთოთ წინასწარ მომზადებული მონაცემთა ბაზის არქივი. ჩამოტვირთვისა და გარკვეულ საქაღალდეში შენახვის შემდეგ საჭიროა მონაცემთა ბაზის გახსნა და დაკავშირება Server Explorer უტილიტაში მონაცემთა ბაზების სიაში.

მონაცემთა ბაზის დაკავშირება ხორციელდება რამდენიმე სტანდარტული გზით:

  • ინსტრუმენტების მენიუდან ბრძანების „დაკავშირება მონაცემთა ბაზასთან...“ არჩევით;
  • ღილაკის (ბრძანების) არჩევა "დაკავშირება მონაცემთა ბაზასთან..." Server Explorer უტილიტადან.

შედეგად, გაიხსნება ოსტატის ფანჯარა, რომელშიც რამდენიმე ნაბიჯის (ფანჯრების) გამოყენებით, საჭიროა მონაცემთა ბაზის კავშირის კონფიგურაცია.

ბრინჯი. 1. მონაცემთა ბაზის დამატების/დაკავშირების მეთოდები

დეტალური აღწერა, თუ როგორ უნდა დააკავშიროთ მონაცემთა ბაზა, როგორიცაა Microsoft SQL Server Microsoft Visual Studio-ში მოცემულია თემაში:

  • შექმნის/დაკავშირების მაგალითი მე ადგილობრივი Microsoft SQL Server მონაცემთა ბაზა, რომელიც მდებარეობს *.mdf ფაილში

დაკავშირების შემდეგ, Server Explorer უტილიტა ფანჯარა გამოიყურება, როგორც ნაჩვენებია სურათზე 2.

ბრინჯი. 2. Server Explorer-ის პროგრამა დაკავშირებული Education.mdf მონაცემთა ბაზასთან

3. ახალი მოთხოვნის დამატება. ახალი შეკითხვის გუნდი

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

მოთხოვნა იქმნება ბრძანების „ახალი შეკითხვის“ გამოყენებით, რომელიც გამოძახებულია კონტექსტური მენიუდან (სურათი 3). ბრძანების გამოსაძახებლად, უბრალოდ დააწკაპუნეთ ველის მაუსის მარჯვენა ღილაკით, რომელიც მონიშნულია Education.mdb მონაცემთა ბაზის ელემენტების საჩვენებლად. უნდა აღინიშნოს, რომ მოთხოვნები არ არის შენახული სისტემის მიერ. ნახვები გამოიყენება შენახული (კომპლექსური) მოთხოვნების საჩვენებლად.

სურათი 3 გვიჩვენებს კონტექსტურ მენიუს, რომელიც გამოიძახება ნახვების ჩანართზე დაწკაპუნებისას. ამ მენიუში თქვენ უნდა აირჩიოთ ბრძანება "ახალი შეკითხვა". ეს ბრძანება არის მონაცემთა ბაზის სხვა კომპონენტების (ცხრილები, დიაგრამები და ა.შ.) კონტექსტური მენიუს სიაში.

ბრინჯი. 3. ახალი შეკითხვის ბრძანება

შედეგად, გაიხსნება "ცხრილის დამატება" ფანჯარა, რომელშიც თქვენ უნდა აირჩიოთ ცხრილები, რომელთა მონაცემები გამოყენებული იქნება მოთხოვნაში (სურათი 4).

ბრინჯი. 4. შეკითხვისას გამოსაყენებელი ცხრილების შერჩევა

ჩვენი შემთხვევისთვის ორივე ცხრილი უნდა ავირჩიოთ.

შედეგად, Microsoft Visual Studio ფანჯარა გამოიყურება, როგორც ნაჩვენებია სურათზე 5.

ბრინჯი. 5. MS Visual Studio ფანჯარა მოთხოვნის შექმნის შემდეგ

ცხრილებში თქვენ უნდა აირჩიოთ ველები, რომლებიც გამოყენებული იქნება მოთხოვნაში. ველების არჩევის თანმიმდევრობა უნდა შეესაბამებოდეს იმას, თუ როგორ არის ისინი ნაჩვენები მოთხოვნაში, დავალების პირობების შესაბამისად. ეს ნიშნავს, რომ ჯერ შეირჩევა Student ცხრილის ველები (NumBook, Name), შემდეგ კი სესია ცხრილის ველები (მათემატიკა, ინფორმატიკა, ფილოსოფია).

ჩვენს შემთხვევაში, ველების არჩევანი ნაჩვენებია სურათზე 6.

ბრინჯი. 6. მოთხოვნისთვის ველების შერჩევა

როგორც ნახაზი 6-დან ჩანს, სისტემის მიერ გენერირებული SQL შეკითხვა ნაჩვენებია ფანჯრის ბოლოში.

აირჩიეთ Student.Num_Book, Student.Name, Session.Mathematics, Session.Informatics, Session.ფილოსოფია FROM
4. დაამატეთ გამოთვლილი ველი საშუალო

გამოთვლილი ველის Average-ის შესაქმნელად, თქვენ უნდა შეცვალოთ ამ მოთხოვნის ტექსტი ფანჯარაში, სადაც ნაჩვენებია SQL მოთხოვნა. Მაგალითად:

აირჩიეთ Student.Num_Book, Student.Name, Session.Mathematics, Session.Informatics, Session.Philosophy, (სესია.მათემატიკა + სესია.ინფორმატიკა + სესია.ფილოსოფია) / 3.0 AS Average FROMსესია INNER JOIN სტუდენტი ON Session.ID_Book = Student.ID_Book

ემატება საანგარიშო ველი Average, რომელიც არის საშუალო არითმეტიკული (სურათი 7).

SQL - სტრუქტურირებული შეკითხვის ენა.
ამ მიმოხილვაში ჩვენ გადავხედავთ SQL მოთხოვნების ყველაზე გავრცელებულ ტიპებს.
განსაზღვრულია SQL სტანდარტი ANSI(ამერიკის ეროვნული სტანდარტების ინსტიტუტი).
SQL არის ენა, რომელიც მიმართულია კონკრეტულად რელაციურ მონაცემთა ბაზებზე.

SQL დანაყოფი:


DDL
(მონაცემთა განმარტების ენა) - ეგრეთ წოდებული Schema Description Language ANSI-ში, შედგება ბრძანებებისგან, რომლებიც ქმნიან ობიექტებს (ცხრილები, ინდექსები, ხედები და ა.შ.) მონაცემთა ბაზაში.
DML(მონაცემთა მანიპულირების ენა) არის ბრძანებების ნაკრები, რომელიც განსაზღვრავს, თუ რა მნიშვნელობებია წარმოდგენილი ცხრილებში ნებისმიერ დროს.
DCD(მონაცემთა მართვის ენა) შედგება ობიექტებისგან, რომლებიც განსაზღვრავენ, მისცენ მომხმარებელს გარკვეული მოქმედებების შესრულების უფლება თუ არა. ისინი ANSI DDL-ის ნაწილია. არ დაგავიწყდეთ ეს სახელები. ეს არ არის სხვადასხვა ენები, არამედ SQL ბრძანებების სექციები დაჯგუფებულია მათი ფუნქციების მიხედვით.

მონაცემთა ტიპები:

SQL Server - მონაცემთა ტიპები

აღწერა

ბიგინტი (int 8)

ბიგინტი (int 8)

ორობითი(n)

ორობითი(n) ან გამოსახულება

პერსონაჟი
(სინონიმი char)

ეროვნული პერსონაჟიან ntext

ხასიათი განსხვავებულია(სინონიმი char ცვალებადი ვარჩარი)

განსხვავებული ეროვნული ხასიათიან ntext

თარიღის დრო

თარიღის დრო

ათობითი

აკა რიცხვითი

ორმაგი სიზუსტე

ორმაგი სიზუსტე

მთელი რიცხვი (int 4) (სინონიმი: ინტ)

მთელი რიცხვი (int 4)

ეროვნული ხასიათი(სინონიმი: ეროვნული ხასიათი, ნჩარ)

ეროვნული ხასიათი

რიცხვითი(სინონიმები: ათობითი, დეკ)

განსხვავებული ეროვნული ხასიათი(სინონიმები: განსხვავებული ეროვნული ხასიათი, ნვარჩარი)

განსხვავებული ეროვნული ხასიათი

მცირე დროით

თარიღის დრო

წვრილი (int 2)

წვრილი (int 2)

მცირე ფული

sql_variant

აღარ არის მხარდაჭერილი

შემდეგი
SQL Server 2005-ით დაწყებული, მისი გამოყენება არ არის რეკომენდებული.

დროის შტამპი

Არ არის მხარდაჭერილი

პატარა (int 1)

პატარა (int 1)

უნიკალური იდენტიფიკატორი

უნიკალური იდენტიფიკატორი

ვარბინარული(n)

ვარბინარული(n) ან გამოსახულება

მცირე თარიღის დრო

თარიღის დრო

წვრილი (int 2)

წვრილი (int 2)

მცირე ფული

sql_variant

Არ არის მხარდაჭერილი

დროის შტამპი

Არ არის მხარდაჭერილი

პატარა (int 1)

პატარა (int 1)

უნიკალური იდენტიფიკატორი

უნიკალური იდენტიფიკატორი

ვარბინარული(n)

ვარბინარული(n) ან გამოსახულება

მონაცემთა ტიპების ცხრილი SQL Server 2000-ში

რა არის მოთხოვნა?

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

SELECT ბრძანება:

აირჩიეთ"Select" არის ყველაზე ხშირად გამოყენებული ბრძანება, რომელიც გამოიყენება ცხრილიდან მონაცემების შესარჩევად.
შეკითხვის ტიპი SELECT-ის გამოყენებით:

SELECT ID, მომხმარებლის_სახელი, ქალაქი, დაბადების დღე FROM users_base-დან;

ასეთი შეკითხვა გამოიტანს users_base ცხრილიდან SELECT ბრძანების შემდეგ მძიმით გამოყოფილი სვეტების ყველა მნიშვნელობას. ასევე, თქვენ შეგიძლიათ აჩვენოთ ყველა სვეტი ერთი სიმბოლოთი, * ე.ი. SELECT * FROM users_base ; - ასეთი შეკითხვა აჩვენებს ცხრილის ყველა მონაცემს.

აირჩიეთ ბრძანების სტრუქტურა:

SELECT (სვეტების სახელები გამოყოფილი მძიმეებით, რომლებიც უნდა იყოს ნაჩვენები მოთხოვნაში) FROM (ცხრილის სახელი მონაცემთა ბაზაში)
- ეს არის ყველაზე მარტივი ტიპის მოთხოვნა. არსებობს დამატებითი ბრძანებები მოსახერხებელი მონაცემების მისაღებად (იხ. ქვემოთ "ფუნქციები")

DML ბრძანებები:

მნიშვნელობების განთავსება და ამოღება შესაძლებელია ველებიდან სამი DML (მონაცემთა მანიპულირების ენა) ბრძანების გამოყენებით:
INSERT(ჩასმა)
განახლება(განახლება, მოდიფიკაცია),
წაშლა(წაშლა)

INSERT ბრძანება:

INSERT INTO users_base (მომხმარებლის_სახელი, ქალაქი, დაბადების დღე) VALUES ('ალექსანდრე', 'როსტოვი', '06/20/1991');

INSERT ბრძანებას გააჩნია პრეფიქსი INTO (into), შემდეგ ფრჩხილებში არის სვეტების სახელები, რომლებშიც უნდა ჩავსვათ მონაცემები, შემდეგ მოდის VALUES ბრძანება (მნიშვნელობები) და ფრჩხილებში მნიშვნელობები მოდის თავის მხრივ (ეს არის აუცილებელია სვეტებთან მნიშვნელობების თანმიმდევრობის დაცვა, მნიშვნელობები უნდა იყოს იმავე თანმიმდევრობით, როგორც თქვენ მიერ მითითებული სვეტები).

განახლების ბრძანება:

განაახლეთ users_base SET user_name = 'Alexey';

UPDATE ბრძანება განაახლებს მნიშვნელობებს ცხრილში. ჯერ მოდის თვით UPDATE ბრძანება, შემდეგ ცხრილის სახელი, SET ბრძანების შემდეგ (set), შემდეგ სვეტის სახელი და მისი მნიშვნელობა ბრჭყალებში (ბრჭყალები მოთავსებულია, თუ მნიშვნელობა არის სტრიქონის ფორმატში, თუ ეს არის რიცხვითი მნიშვნელობა და სვეტი. არ არის მიბმული მონაცემთა ტიპთან vchar ან სხვა სტრიქონების ტიპებთან, ციტატებს მნიშვნელობა არ აქვთ.)

DELETE ბრძანება:

DELETE FROM users_base WHERE user_name = 'ვასილი';

DELETE ბრძანება შლის მთელ რიგს და განსაზღვრავს რიგს WHERE კრიტერიუმის გამოყენებით. ამ შემთხვევაში, ეს მოთხოვნა წაშლის ყველა რიგს, რომლებშიც user_name სვეტის მნიშვნელობა იყო Vasily. WHERE კრიტერიუმზე და სხვაზე ცოტა მოგვიანებით ვისაუბრებთ.

კრიტერიუმები, ფუნქციები, პირობები და ა.შ. რა გვეხმარება SQL-ში:

WHERE პუნქტი არის SELECT ბრძანებისა და სხვა DML ბრძანებების პუნქტი, რომელიც საშუალებას გაძლევთ დააყენოთ პრედიკატები, რომელთა მდგომარეობა შეიძლება იყოს ჭეშმარიტი ან მცდარი ცხრილის ნებისმიერი მწკრივისთვის. ბრძანება ამოიღებს ცხრილიდან მხოლოდ იმ სტრიქონებს, რომლებისთვისაც ეს განცხადება მართალია.
მაგალითი:
აირჩიეთ ID, ქალაქი, დაბადების დღე FROM users_base WHERE user_name = 'Alexey';- ასეთი შეკითხვა აჩვენებს მხოლოდ იმ მწკრივებს, რომლებიც ემთხვევა WHERE მდგომარეობას, კერძოდ, ყველა სტრიქონს, რომლებშიც მომხმარებლის_სახელის სვეტს აქვს მნიშვნელობა Alexey.

ORDER BY - პირობა არჩეული რიგების დახარისხებისთვის. აქვს 2 კრიტერიუმი ASC და DESC. ASC (დახარისხება A-დან Z-მდე ან 0-დან 9-მდე)

DESC (ASC-ის საპირისპირო).
მაგალითი:
აირჩიეთ ID, ქალაქი, დაბადების დღე FROM users_base ORDER მომხმარებლის_სახელის მიხედვით ASC; - ასეთი შეკითხვა აჩვენებს მომხმარებლის_სახელის სვეტის მიხედვით დალაგებულ მნიშვნელობებს A-დან Z-მდე (A-Z; 0-9)

ეს პირობა ასევე შეიძლება გამოყენებულ იქნას WHERE პუნქტთან ერთად.
მაგალითი:
აირჩიეთ ID, ქალაქი, დაბადების დღე FROM users_base-დან WHERE user_name = ‘Alexey’ ORDER BY id ASC;

DISTINCT არის არგუმენტი, რომელიც გაძლევთ საშუალებას ამოიღოთ ორმაგი მნიშვნელობები თქვენი SELECT პუნქტიდან. იმათ. თუ თქვენ გაქვთ დუბლიკატი მნიშვნელობები სვეტში, ვთქვათ user_name, მაშინ DISTINCT გაჩვენებთ მხოლოდ ერთ მნიშვნელობას, მაგალითად, თქვენს მონაცემთა ბაზაში გყავთ 2 ადამიანი სახელად ალექსეი, მაშინ შეკითხვა DISTINCT ფუნქციის გამოყენებით გაჩვენებთ მხოლოდ 1 მნიშვნელობას. რაც პირველად გვხვდება...
მაგალითი:
SELECT DISTINCT user_name FROM users_base;- ასეთი შეკითხვა გვაჩვენებს მომხმარებლის_სახელის სვეტის ყველა ჩანაწერის მნიშვნელობას, მაგრამ ისინი არ განმეორდება, ე.ი. თუ თქვენ გქონდათ უსასრულო რაოდენობის განმეორებადი მნიშვნელობები, მაშინ ისინი არ გამოჩნდება...

AND - არგუმენტად იღებს ორ ლოგინს (A AND B სახით) და აფასებს მათ სიმართლის საწინააღმდეგოდ, არის თუ არა ორივე ჭეშმარიტი.
მაგალითი:
SELECT * FROM users_base WHERE city = 'როსტოვი' AND user_name = 'ალექსანდრე';- აჩვენებს ყველა მნიშვნელობას ცხრილიდან, სადაც ქალაქის სახელი ჩანს ერთ ხაზზე (ამ შემთხვევაში, როსტოვი და მომხმარებლის სახელი ალექსანდრე.

OR - არგუმენტად იღებს ორ ლოგინს (A OR B სახით) და აფასებს სწორია თუ არა.

SELECT * FROM users_base WHERE city = 'როსტოვი' ან მომხმარებლის_სახელი = 'ალექსანდრე';- აჩვენებს ყველა მნიშვნელობას ცხრილიდან, სადაც ხაზში ჩანს ქალაქის როსტოვის სახელი ან მომხმარებლის სახელი ალექსანდრე.

NOT - იღებს არგუმენტად ერთ ლოგიკურს (ფორმით NOT A) და ცვლის მის მნიშვნელობას false-დან true-ში ან true-ში.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- აჩვენებს ყველა მნიშვნელობას ცხრილიდან, სადაც ქალაქის როსტოვის სახელი ჩანს ერთ ხაზზე ან მომხმარებლის სახელი არ არის ზუსტად ალექსანდრე.

IN - განსაზღვრავს მნიშვნელობების ერთობლიობას, რომელშიც მოცემული მნიშვნელობა შეიძლება იყოს ან არ იყოს შეტანილი.
SELECT * FROM users_base WHERE city IN ('Vladivostok', 'Rostov');- ასეთი შეკითხვა აჩვენებს ცხრილიდან ყველა მნიშვნელობას, რომელიც შეიცავს ქალაქის სვეტში მითითებული ქალაქების სახელებს

Between მსგავსია IN ოპერატორის. სიმრავლიდან რიცხვებით განსაზღვრისგან განსხვავებით, როგორც ამას აკეთებს IN, BETWEEN განსაზღვრავს დიაპაზონს, რომლის მნიშვნელობები უნდა შემცირდეს, რომ პრედიკატი ჭეშმარიტი გახდეს.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10;- აჩვენებს ცხრილის ყველა მნიშვნელობას, რომელიც იქნება 1-დან 10-მდე დიაპაზონში ID სვეტში

COUNT - აწარმოებს მწკრივის ნომრებს ან ველების არა-NULL მნიშვნელობებს, რომლებიც არჩეულია მოთხოვნამ.
SELECT COUNT (*) FROM users_base ;- აჩვენებს რიგების რაოდენობას ამ ცხრილში.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- აჩვენებს ხაზების რაოდენობას მომხმარებლის სახელებით (არ განმეორდება)

SUM - აწარმოებს ყველა არჩეული მნიშვნელობის არითმეტიკულ ჯამს მოცემულ ველზე.
SELECT SUM (id) FROM users_base ;- გამოჩნდება id სვეტის ყველა მწკრივის მნიშვნელობების ჯამი.

AVG - აფასებს ამ ველის ყველა შერჩეულ მნიშვნელობას.
SELECT AVG (id) FROM users_base ;- აჩვენებს id სვეტის ყველა არჩეული მნიშვნელობის საშუალოს

MAX - აწარმოებს ამ ველის ყველა არჩეულ მნიშვნელობას შორის ყველაზე დიდს.

MIN - აწარმოებს ყველა არჩეულ მნიშვნელობას ამ ველისთვის ყველაზე პატარას.

ცხრილების შექმნა:

CREATE TABLE users_base (ID მთელი რიცხვი, მომხმარებლის_სახელის ტექსტი, ქალაქის ტექსტი, დაბადების დღის თარიღი);- ასეთი ბრძანების შესრულება გამოიწვევს ცხრილის შექმნას, რისთვისაც მაგალითები მოვიყვანე... აქ ყველაფერი მარტივია, ვწერთ CREATE TABLE ბრძანებას, შემდეგ ცხრილის სახელს, რომლის შექმნაც გვინდა, შემდეგ ფრჩხილებში, გამოყოფილია მძიმეებით, სვეტების სახელები და მათი მონაცემთა ტიპი. ეს არის სტანდარტული გზა SQL-ში ცხრილის შესაქმნელად. ახლა მე მივცემ SQL Server 2005-ში ცხრილების შექმნის მაგალითს:

დააყენეთ ANSI_NULLS ჩართული
წადი
QUOTED_IDENTIFIER-ის დაყენება ჩართული
წადი
თუ არ არსებობს (აირჩიეთ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") და ჩაწერეთ (N"U))
დასაწყისი
შექმენით მაგიდა .(

NOT NULL,
NOT NULL,
NOT NULL,
ძირითადი გასაღები დაჯგუფებულია
A.S.C.


ᲓᲐᲡᲐᲡᲠᲣᲚᲘ
წადი
დააყენეთ ANSI_NULLS ჩართული
წადი
QUOTED_IDENTIFIER-ის დაყენება ჩართული
წადი
თუ არ არსებობს (აირჩიეთ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") და ჩაწერეთ (N"U))
დასაწყისი
შექმენით მაგიდა .(
IDENTITY (1,1) NOT NULL,
NULL,
NULL,
ძირითადი გასაღები დაჯგუფებულია
A.S.C.
) ჩართულით (IGNORE_DUP_KEY = OFF).
) ON TEXTIMAGE_ON
ᲓᲐᲡᲐᲡᲠᲣᲚᲘ
წადი
დააყენეთ ANSI_NULLS ჩართული
წადი
QUOTED_IDENTIFIER-ის დაყენება ჩართული
წადი
თუ არ არსებობს (აირჩიეთ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") და ჩაწერეთ (N"U))
დასაწყისი
შექმენით მაგიდა .(
IDENTITY (1,1) NOT NULL,
NULL,
NULL,
ძირითადი გასაღები დაჯგუფებულია
A.S.C.
) ჩართულით (IGNORE_DUP_KEY = OFF).
) ჩართვა
ᲓᲐᲡᲐᲡᲠᲣᲚᲘ

SQL Server 2005-ში სინტაქსი სხვა თემაა, მე უბრალოდ მინდოდა მეჩვენებინა, რომ მე აღვწერე SQL პროგრამირების საფუძვლები, თქვენ შეგიძლიათ მიაღწიოთ მწვერვალს საკუთარი თავის ცოდნით საფუძვლებს.

თუ თქვენ გაქვთ რაიმე შეკითხვები ამ თემაზე, გთხოვთ მომწერეთ

SQL ან სტრუქტურირებული შეკითხვის ენა არის ენა, რომელიც გამოიყენება მონაცემთა მართვის რელაციურ მონაცემთა სისტემაში (RDBMS). ეს სტატია მოიცავს ჩვეულებრივ გამოყენებულ SQL ბრძანებებს, რომლებსაც ყველა პროგრამისტი უნდა იცნობდეს. ეს მასალა იდეალურია მათთვის, ვისაც სურს გაეცნოს SQL-ის ცოდნას სამუშაო გასაუბრების წინ. ამისათვის გადახედეთ სტატიაში მოცემულ მაგალითებს და დაიმახსოვრეთ, რომ მონაცემთა ბაზებს წყვილებში სწავლობდით.

გაითვალისწინეთ, რომ ზოგიერთი მონაცემთა ბაზის სისტემა მოითხოვს მძიმით ყოველი განცხადების ბოლოს. მძიმით არის სტანდარტული მაჩვენებელი ყველა განცხადების ბოლოს SQL-ში. მაგალითები იყენებს MySQL-ს, ამიტომ საჭიროა მძიმით.

მაგალითებისთვის მონაცემთა ბაზის შექმნა

შექმენით მონაცემთა ბაზის დემონსტრირება, თუ როგორ მუშაობს გუნდები. სამუშაოდ, თქვენ უნდა ჩამოტვირთოთ ორი ფაილი: DLL.sql და InsertStatements.sql. ამის შემდეგ გახსენით ტერმინალი და შედით MySQL კონსოლში შემდეგი ბრძანების გამოყენებით (სტატია ვარაუდობს, რომ MySQL უკვე დაინსტალირებულია სისტემაში):

Mysql -u root -p

შემდეგ შეიყვანეთ თქვენი პაროლი.

გაუშვით შემდეგი ბრძანება. მოდით ვუწოდოთ მონაცემთა ბაზას "უნივერსიტეტი":

CREATE DATABASE უნივერსიტეტი; USE უნივერსიტეტი; წყარო ; წყარო

ბრძანებები მონაცემთა ბაზებთან მუშაობისთვის

1. ხელმისაწვდომი მონაცემთა ბაზების ნახვა

მონაცემთა ბაზების ჩვენება;

2. შექმენით ახალი მონაცემთა ბაზა

მონაცემთა ბაზის შექმნა;

3. მონაცემთა ბაზის არჩევა გამოსაყენებლად

გამოყენება ;

4. SQL ბრძანებების იმპორტი .sql ფაილიდან

წყარო ;

5. წაშალეთ მონაცემთა ბაზა

ჩამოაგდეს მონაცემთა ბაზა ;

მაგიდებთან მუშაობა

6. მონაცემთა ბაზაში არსებული ცხრილების ნახვა

ცხრილების ჩვენება;

7. შექმენით ახალი ცხრილი

მაგიდის შექმნა ( , , ᲛᲗᲐᲕᲐᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ ( ), ᲣᲪᲮᲝᲣᲠᲘ ᲒᲐᲡᲐᲦᲔᲑᲘ ( ) ლიტერატურა ());

მთლიანობის შეზღუდვები CREATE TABLE-ის გამოყენებისას

შეიძლება დაგჭირდეთ შეზღუდვების შექმნა ცხრილის გარკვეულ სვეტებზე. ცხრილის შექმნისას შეგიძლიათ დააყენოთ შემდეგი შეზღუდვები:

  • ცხრილის უჯრედს არ შეიძლება ჰქონდეს NULL მნიშვნელობა;
  • პირველადი გასაღები - PRIMARY KEY (col_name1, col_name2, ...);
  • უცხოური გასაღები - FOREIGN KEY (col_namex1, …, col_namexn) REFERENCES ცხრილის_სახელი (col_namex1, …, col_namexn) .

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

მაგალითი

შექმენით ცხრილი "ინსტრუქტორი":

CREATE TABLE ინსტრუქტორი (ID CHAR(5), სახელი VARCHAR(20) NOT NULL, dept_name VARCHAR(20), ხელფასი NUMERIC(8,2), PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES Department(dept_name));

8. ცხრილის ინფორმაცია

თქვენ შეგიძლიათ ნახოთ სხვადასხვა ინფორმაცია (მნიშვნელობის ტიპი, გასაღები თუ არა) ცხრილის სვეტების შესახებ შემდეგი ბრძანებით:

აღწერე ;

9. ცხრილის მონაცემების დამატება

ᲩᲐᲓᲔᲗ (, , , ...) ღირებულებები ( , , , …);

ცხრილის თითოეულ სვეტს მონაცემებს რომ ამატებთ, არ გჭირდებათ სვეტების სახელების მითითება.

ᲩᲐᲓᲔᲗ ღირებულებები ( , , , …);

10. ცხრილის მონაცემების განახლება

განახლება SET = , = , ... სად ;

11. ცხრილიდან ყველა მონაცემის ამოღება

წაშლა FROM-დან ;

12. ცხრილის წაშლა

ჩამოაგდეს მაგიდა ;

ბრძანებები მოთხოვნების შესაქმნელად

13. აირჩიეთ

SELECT გამოიყენება კონკრეტული ცხრილიდან მონაცემების მისაღებად:

აირჩიეთ , , … დან ;

შემდეგ ბრძანებას შეუძლია აჩვენოს ყველა მონაცემი ცხრილიდან:

აირჩიეთ * FROM ;

14. SELECT DISTINCT

ცხრილის სვეტები შეიძლება შეიცავდეს დუბლიკატულ მონაცემებს. გამოიყენეთ SELECT DISTINCT მხოლოდ არადუბლიკატი მონაცემების მოსაძიებლად.

აირჩიეთ განსხვავებული , , … დან ;

15. სად

თქვენ შეგიძლიათ გამოიყენოთ WHERE საკვანძო სიტყვა SELECT-ში, რათა მიუთითოთ პირობები მოთხოვნაში:

აირჩიეთ , , … დან სად ;

მოთხოვნაში შეიძლება მითითებული იყოს შემდეგი პირობები:

  • ტექსტის შედარება;
  • რიცხვითი მნიშვნელობების შედარება;
  • ლოგიკური ოპერატორები AND (and), OR (ან) და NOT (უარყოფა).

მაგალითი

სცადეთ შემდეგი ბრძანებები. ყურადღება მიაქციეთ WHERE-ში მითითებულ პირობებს:

SELECT * FROM კურსიდან WHERE dept_name='შედ. მეცნიერ.'; SELECT * FROM კურსიდან WHERE კრედიტები>3; SELECT * FROM კურსიდან WHERE dept_name="Comp. Sci." და კრედიტები>3;

16. ჯგუფი BY

GROUP BY ოპერატორი ხშირად გამოიყენება საერთო ფუნქციებით, როგორიცაა COUNT, MAX, MIN, SUM და AVG გამომავალი მნიშვნელობების დასაჯგუფებლად.

აირჩიეთ , , … დან ᲘᲗ ᲓᲐᲯᲒᲣᲤᲔᲑᲐ ;

მაგალითი

მოდით ვაჩვენოთ კურსების რაოდენობა თითოეული ფაკულტეტისთვის:

SELECT COUNT(course_id), dept_name FROM კურსის ჯგუფიდან dept_name;

17. ქონა

HAVING საკვანძო სიტყვა დაემატა SQL-ს, რადგან WHERE არ შეიძლება გამოყენებულ იქნას საერთო ფუნქციებთან.

აირჩიეთ , , ... FROM ᲘᲗ ᲓᲐᲯᲒᲣᲤᲔᲑᲐ ქონა

მაგალითი

მოდით გამოვავლინოთ ფაკულტეტების სია, რომლებსაც აქვთ ერთზე მეტი კურსი:

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name HAVING COUNT(course_id)>1;

18. შეკვეთა

ORDER BY გამოიყენება შეკითხვის შედეგების კლებადი ან აღმავალი თანმიმდევრობით დასალაგებლად. ORDER BY დალაგდება ზრდის მიხედვით, თუ არ არის მითითებული ASC ან DESC.

აირჩიეთ , , … დან შეკვეთა , , …ASC|DESC;

მაგალითი

მოდით ვაჩვენოთ კურსების სია კრედიტების ზრდადი და კლებადი თანმიმდევრობით:

აირჩიეთ * კურსიდან შეკვეთა კრედიტების მიხედვით; SELECT * FROM კურსიდან ORDER BY კრედიტების მიხედვით DESC;

19. შორის

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

აირჩიეთ , , … დან სად ᲨᲝᲠᲘᲡ და ;

მაგალითი

მოდით გამოვაჩინოთ ინსტრუქტორების სია, რომელთა ხელფასი 50000-ზე მეტია, მაგრამ 100000-ზე ნაკლები:

აირჩიეთ * ინსტრუქტორისგან, სადაც ხელფასი 50000-დან 100000-მდე;

20. LIKE

LIKE ოპერატორი გამოიყენება WHERE-ში მსგავსი მნიშვნელობის საძიებო ნიმუშის დასაზუსტებლად.

არსებობს ორი უფასო ოპერატორი, რომლებიც გამოიყენება LIKE-ში:

  • % (არცერთი, ერთი ან მეტი სიმბოლო);
  • _ (ერთი პერსონაჟი).
აირჩიეთ , , … დან სად LIKE ;

მაგალითი

მოდით გამოვაჩინოთ კურსების სია, რომელთა სახელები შეიცავს "to"-ს და კურსების სია, რომელთა სახელები იწყება "CS-"-ით:

აირჩიეთ * კურსიდან, სადაც სათაური LIKE '%to%'; SELECT * FROM კურსიდან WHERE course_id LIKE "CS-___";

21. IN

IN-ის გამოყენებით შეგიძლიათ მიუთითოთ მრავალი მნიშვნელობა WHERE პუნქტისთვის:

აირჩიეთ , , … დან სად IN ( , , …);

მაგალითი

მოდით გამოვაჩინოთ კომპის სპეციალობების სტუდენტების სია. მეცნიერება, ფიზიკა და ელექ. ინჟ.:

SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. შეუერთდი

JOIN გამოიყენება ორი ან მეტი ცხრილის დასაკავშირებლად მათში არსებული საერთო ატრიბუტების გამოყენებით. ქვემოთ მოყვანილი სურათი გვიჩვენებს SQL-ში შეერთების სხვადასხვა გზებს. გაითვალისწინეთ განსხვავება მარცხენა გარე შეერთებასა და მარჯვენა გარე შეერთებას შორის:

აირჩიეთ , , … დან შეუერთდი ჩართულია = ;

მაგალითი 1

ჩვენ გამოვაჩენთ ყველა კურსის ჩამონათვალს და შესაბამის ინფორმაციას ფაკულტეტების შესახებ:

აირჩიეთ * კურსიდან შეუერთდით განყოფილებას course.dept_name=department.dept_name;

მაგალითი 2

ჩვენ გამოვაჩენთ ყველა საჭირო კურსის ჩამონათვალს და მათ შესახებ დეტალებს:

SELECT prereq.course_id, title, dept_name, credits, prereq_id FROM prereq LEFT OUTER JOIN კურსი ON prereq.course_id=course.course_id;

მაგალითი 3

ჩვენ გამოვაჩენთ ყველა კურსის ჩამონათვალს, მიუხედავად იმისა, საჭიროა თუ არა ისინი:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq RIGHT OUTER JOIN კურსი ON prereq.course_id=course.course_id;

23. ხედი

View არის ვირტუალური SQL ცხრილი, რომელიც შექმნილია გამოხატვის შესრულების შედეგად. ის შეიცავს რიგებს და სვეტებს და ძალიან ჰგავს ჩვეულებრივ SQL ცხრილს. View ყოველთვის აჩვენებს უახლეს ინფორმაციას მონაცემთა ბაზიდან.

შემოქმედება

ხედის შექმნა AS SELECT , , … დან სად ;

მოცილება

DROP VIEW ;

მაგალითი

მოდით შევქმნათ ხედი, რომელიც შედგება კურსებისგან 3 კრედიტით:

24. აგრეგატული ფუნქციები

ეს ფუნქციები გამოიყენება მოცემულ მონაცემებთან დაკავშირებული საერთო შედეგის მისაღებად. შემდეგი ხშირად გამოიყენება აგრეგატული ფუნქციები:

  • COUNT (col_name) - აბრუნებს რიგების რაოდენობას;
  • SUM (col_name) - აბრუნებს ამ სვეტის მნიშვნელობების ჯამს;
  • AVG (col_name) - აბრუნებს მოცემული სვეტის საშუალო მნიშვნელობას;
  • MIN (col_name) - აბრუნებს მოცემული სვეტის უმცირეს მნიშვნელობას;
  • MAX (col_name) - აბრუნებს მოცემული სვეტის უდიდეს მნიშვნელობას.

25. ჩადგმული ქვეკითხვები

ჩადგმული ქვემოთხოვნები არის SQL მოთხოვნები, რომლებიც მოიცავს SELECT , FROM და WHERE პუნქტებს, რომლებიც ჩადგმულია სხვა მოთხოვნაში.

მაგალითი

მოდი ვიპოვოთ კურსები, რომლებიც ისწავლებოდა 2009 წლის შემოდგომაზე და 2010 წლის გაზაფხულზე:

SELECT DISTINCT course_id FROM semester WHERE semester = 'Fall' AND year= 2009 AND course_id IN (SELECT course_id FROM section WHERE semester = 'Spring' AND year= 2010);

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

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

Მონაცემთა ბაზა - ფაილი ან ფაილების კოლექცია შეკვეთილი მონაცემთა სტრუქტურებისა და მათი ურთიერთობის შესანახად. ძალიან ხშირად მართვის სისტემას უწოდებენ მონაცემთა ბაზას - ის არის მხოლოდ ინფორმაციის საცავი კონკრეტული ფორმატით და შეუძლია მუშაობა სხვადასხვა DBMS-ებთან.

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

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

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

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

რა არის SQL?

SQL(ინგლისური - სტრუქტურირებული შეკითხვის ენა) შეიქმნა მხოლოდ მონაცემთა ბაზებთან მუშაობისთვის და ამჟამად არის სტანდარტი ყველა პოპულარული DBMS-ისთვის. ენის სინტაქსი შედგება მცირე რაოდენობის ოპერატორებისგან და ადვილად შესასწავლია. მაგრამ, მიუხედავად მისი აშკარა სიმარტივისა, ის საშუალებას გაძლევთ შექმნათ sql მოთხოვნები რთული ოპერაციებისთვის ნებისმიერი ზომის მონაცემთა ბაზით.

1992 წლიდან არსებობს საყოველთაოდ მიღებული სტანდარტი სახელწოდებით ANSI SQL. ის განსაზღვრავს ოპერატორების ძირითად სინტაქსს და ფუნქციებს და მხარს უჭერს DBMS ბაზრის ყველა ლიდერს, როგორიცაა ORACLE. შეუძლებელია ენის ყველა შესაძლებლობის განხილვა ერთ მოკლე სტატიაში, ამიტომ მოკლედ განვიხილავთ მხოლოდ ძირითად SQL შეკითხვებს. მაგალითები ნათლად აჩვენებს ენის სიმარტივეს და შესაძლებლობებს:

  • მონაცემთა ბაზებისა და ცხრილების შექმნა;
  • მონაცემთა შერჩევა;
  • ჩანაწერების დამატება;
  • ინფორმაციის შეცვლა და წაშლა.

SQL მონაცემთა ტიპები

მონაცემთა ბაზის ცხრილის ყველა სვეტი ინახავს მონაცემთა იგივე ტიპს. მონაცემთა ტიპები SQL-ში იგივეა, რაც სხვა პროგრამირების ენებში.

ჩვენ ვქმნით ცხრილებს და მონაცემთა ბაზებს

SQL-ში ახალი მონაცემთა ბაზების, ცხრილების და სხვა მოთხოვნების შესაქმნელად ორი გზა არსებობს:

  • DBMS კონსოლის საშუალებით
  • მონაცემთა ბაზის სერვერთან დართული ინტერაქტიული ადმინისტრირების ინსტრუმენტების გამოყენებით.

ოპერატორის მიერ იქმნება ახალი მონაცემთა ბაზა მონაცემთა ბაზის შექმნა<наименование базы данных>; . როგორც ხედავთ, სინტაქსი მარტივი და ლაკონურია.

ჩვენ ვქმნით ცხრილებს მონაცემთა ბაზაში CREATE TABLE განაცხადის გამოყენებით შემდეგი პარამეტრებით:

  • მაგიდის სახელი
  • სვეტების სახელები და მონაცემთა ტიპები

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

შექმენით ცხრილი:

შექმენით მაგიდა საქონელი

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

საქონლის_ფასი DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

ცხრილი შედგება ხუთი სვეტისგან. სახელის შემდეგ მოდის მონაცემთა ტიპი, სვეტები გამოყოფილია მძიმეებით. სვეტის მნიშვნელობას შეუძლია მიიღოს ცარიელი მნიშვნელობები (NULL) ან უნდა იყოს შევსებული (NOT NULL) და ეს განისაზღვრება ცხრილის შექმნისას.

მონაცემთა ამოღება ცხრილიდან

მონაცემთა მოპოვების ოპერატორი ყველაზე ხშირად გამოყენებული SQL მოთხოვნაა. ინფორმაციის მისაღებად უნდა მივუთითოთ რისი არჩევა გვინდა ასეთი ცხრილიდან. ჯერ მარტივი მაგალითი:

SELECT commodity_name FROM Commodity-დან

SELECT განცხადების შემდეგ ჩვენ ვაზუსტებთ სვეტის სახელს ინფორმაციის მისაღებად და FROM განსაზღვრავს ცხრილს.

შეკითხვის შედეგი იქნება ცხრილის ყველა სტრიქონი Commodity_name მნიშვნელობებით იმ თანმიმდევრობით, რომლითაც ისინი შევიდა მონაცემთა ბაზაში, ე.ი. ყოველგვარი დახარისხების გარეშე. შედეგის შესაკვეთად გამოიყენება დამატებითი ORDER BY პუნქტი.

რამდენიმე ველის მოთხოვნის მიზნით, ჩამოთვალეთ ისინი გამოყოფილი მძიმეებით, როგორც შემდეგ მაგალითში:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

შეკითხვის შედეგად შესაძლებელია მწკრივის ყველა სვეტის მნიშვნელობის მიღება. ამისათვის გამოიყენეთ "*" ნიშანი:

აირჩიეთ * საქონლისგან

  • დამატებით SELECT მხარს უჭერს:
  • მონაცემთა დახარისხება (ORDER BY ოპერატორი)
  • შერჩევა პირობების მიხედვით (WHERE)
  • დაჯგუფების ვადა (GROUP BY)

დაამატეთ ხაზი

ცხრილში მწკრივის დასამატებლად გამოიყენება SQL მოთხოვნები INSERT ოპერატორით. დამატება შეიძლება გაკეთდეს სამი გზით:

  • დაამატეთ ახალი მთელი ხაზი;
  • სტრიქონის ნაწილი;
  • შეკითხვის შედეგები.

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

ჩადეთ საქონლის ღირებულებებში ("106", "50", "კოკა-კოლა", "1.68", "ალკოჰოლის გარეშე ,)

მაგალითი ამატებს ახალ პროდუქტს ცხრილში. მნიშვნელობები ჩამოთვლილია VALUES-ის შემდეგ თითოეული სვეტისთვის. თუ არ არის შესაბამისი მნიშვნელობა სვეტისთვის, მაშინ NULL უნდა იყოს მითითებული. სვეტები ივსება მნიშვნელობებით ცხრილის შექმნისას მითითებული თანმიმდევრობით.

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

ჩასმა საქონელში (საქონლის_ID, გამყიდველის_იდენტიფიკატორი, საქონლის_სახელი)

VALUES ("106", "50", "კოკა-კოლა")

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

შეკითხვის შედეგების დამატება

INSERT ძირითადად გამოიყენება რიგების დასამატებლად, მაგრამ ასევე შეიძლება გამოყენებულ იქნას SELECT განცხადების შედეგების დასამატებლად.

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

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

  • ცხრილის ყველა მწკრივი განახლებულია.
  • მხოლოდ კონკრეტული ხაზისთვის.

UPDATE შედგება სამი ძირითადი ელემენტისგან:

  • ცხრილი, რომელშიც ცვლილებებია საჭირო;
  • ველების სახელები და მათი ახალი მნიშვნელობები;
  • შესაცვლელი რიგების არჩევის პირობები.

მოდით შევხედოთ მაგალითს. ვთქვათ ID=106 პროდუქტის ფასი შეიცვალა, ამიტომ ეს ხაზი განახლებას საჭიროებს. ჩვენ ვწერთ შემდეგ ოპერატორს:

განაახლეთ საქონლის ნაკრები commodity_price = "3.2" WHERE commodity_id = "106"

ჩვენ დავაზუსტეთ ცხრილის სახელი, ჩვენს შემთხვევაში Commodity, სადაც განხორციელდება განახლება, შემდეგ SET-ის შემდეგ - სვეტის ახალი მნიშვნელობა და ვიპოვეთ სასურველი ჩანაწერი WHERE-ში საჭირო ID მნიშვნელობის მითითებით.

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

განაახლეთ საქონლის ნაკრები commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

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

განაახლეთ საქონლის ნაკრები commodity_desc = NULL WHERE commodity_id = "106"

რიგების ამოღება

SQL მოთხოვნები ცხრილის რიგების წასაშლელად შესრულებულია DELETE განცხადების გამოყენებით. გამოყენების ორი შემთხვევაა:

  • ცხრილის გარკვეული სტრიქონები წაშლილია;
  • ცხრილის ყველა სტრიქონი წაშლილია.

ცხრილიდან ერთი მწკრივის წაშლის მაგალითი:

DELETE FROM Commodity WHERE commodity_id = "106"

DELETE FROM-ის შემდეგ მივუთითებთ ცხრილის სახელს, რომელშიც სტრიქონები წაიშლება. WHERE პუნქტი შეიცავს პირობას, რომლითაც სტრიქონები შეირჩევა წასაშლელად. მაგალითში ჩვენ ვშლით პროდუქტის ხაზს ID=106. WHERE-ის დაზუსტება ძალიან მნიშვნელოვანია, რადგან ამ განცხადების გამოტოვება წაშლის ცხრილის ყველა მწკრივს. ეს ასევე ეხება ველების მნიშვნელობის შეცვლას.

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

SQL-ის გამოყენება Microsoft Access-ში

როგორც წესი, ინტერაქტიულად გამოიყენება ცხრილების, მონაცემთა ბაზების შესაქმნელად, მონაცემთა ბაზის მართვის, შეცვლის, ანალიზისთვის და SQL Access მოთხოვნების განსახორციელებლად მოსახერხებელი ინტერაქტიული შეკითხვის დიზაინერის საშუალებით (Query Designer), რომლის გამოყენებითაც შეგიძლიათ შექმნათ და დაუყოვნებლივ შეასრულოთ ნებისმიერი სირთულის SQL განცხადებები.

სერვერზე წვდომის რეჟიმი ასევე მხარდაჭერილია, რომელშიც Access DBMS შეიძლება გამოყენებულ იქნას როგორც SQL მოთხოვნების გენერატორი ODBC მონაცემთა ნებისმიერი წყაროსთვის. ეს ფუნქცია წვდომის აპლიკაციებს საშუალებას აძლევს, ურთიერთქმედონ ნებისმიერ ფორმატთან.

SQL გაფართოებები

ვინაიდან SQL მოთხოვნებს არ გააჩნიათ პროცედურული პროგრამირების ენების ყველა შესაძლებლობა, როგორიცაა მარყუჟები, განშტოებები და ა.შ., DBMS მწარმოებლები ავითარებენ SQL-ის საკუთარ ვერსიას გაფართოებული შესაძლებლობებით. პირველ რიგში, ეს არის შენახული პროცედურების მხარდაჭერა და პროცედურული ენების სტანდარტული ოპერატორები.

ენის ყველაზე გავრცელებული დიალექტები:

  • Oracle მონაცემთა ბაზა - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL ინტერნეტში

MySQL DBMS განაწილებულია უფასო GNU ზოგადი საჯარო ლიცენზიის ქვეშ. არსებობს კომერციული ლიცენზია საბაჟო მოდულების შემუშავების შესაძლებლობით. როგორც კომპონენტი, ის შედის ინტერნეტ სერვერების ყველაზე პოპულარულ ასამბლეებში, როგორიცაა XAMPP, WAMP და LAMP და არის ყველაზე პოპულარული DBMS ინტერნეტში აპლიკაციების შესაქმნელად.

ის შეიქმნა Sun Microsystems-ის მიერ და ამჟამად მხარდაჭერილია Oracle Corporation-ის მიერ. მხარდაჭერილია მონაცემთა ბაზები 64 ტერაბაიტამდე ზომის, SQL:2003 სინტაქსის სტანდარტი, მონაცემთა ბაზების რეპლიკაცია და ღრუბლოვანი სერვისები.

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

    მიღებული ცხრილები;

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

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

მიღებული ცხრილები

მიღებული ცხრილიარის ცხრილის გამოხატულება, რომელიც შედის შეკითხვის FROM პუნქტში. მიღებული ცხრილები შეიძლება გამოყენებულ იქნას იმ შემთხვევებში, როდესაც სვეტის მეტსახელების გამოყენება შეუძლებელია, რადგან SQL მთარგმნელი ამუშავებს სხვა განცხადებას, სანამ მეტსახელი გახდება ცნობილი. ქვემოთ მოყვანილი მაგალითი გვიჩვენებს სვეტის მეტსახელის გამოყენების მცდელობას იმ სიტუაციაში, როდესაც სხვა პუნქტი მუშავდება, სანამ მეტსახელი გახდება ცნობილი:

გამოიყენეთ SampleDb; SELECT MONTH(EnterDate) როგორც enter_month FROM Works_on GROUP BY enter_month;

ამ მოთხოვნის გაშვების მცდელობისას გამოჩნდება შემდეგი შეცდომის შეტყობინება:

შეტყობინება 207, დონე 16, მდგომარეობა 1, ხაზი 5 არასწორი სვეტის სახელი "enter_month". (შეტყობინება 207: დონე 16, მდგომარეობა 1, ხაზი 5 არასწორი სვეტის სახელი enter_month)

შეცდომის მიზეზი არის ის, რომ GROUP BY პუნქტი მუშავდება SELECT განცხადების შესაბამისი სიის დამუშავებამდე და ჯგუფის დამუშავებისას უცნობია enter_month სვეტის მეტსახელი.

ამ პრობლემის გადაჭრა შესაძლებელია მიღებული ცხრილის გამოყენებით, რომელიც შეიცავს წინა მოთხოვნას (GROUP BY პუნქტის გარეშე), რადგან FROM პუნქტი შესრულებულია GROUP BY პუნქტამდე:

გამოიყენეთ SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

ამ შეკითხვის შედეგი იქნება ასეთი:

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

ამ შეკითხვის შედეგი:

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

ცხრილის საერთო გამოხატულება (OTB)არის დასახელებული ცხრილის გამოხატულება, რომელსაც მხარს უჭერს Transact-SQL ენა. ცხრილის საერთო გამონათქვამები გამოიყენება შემდეგი ორი ტიპის შეკითხვებში:

    არარეკურსიული;

    რეკურსიული.

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

OTB და არარეკურსიული მოთხოვნები

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

გამოიყენეთ AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue)HederORHE)FROM 2005 წ ")/2.5;

ამ მაგალითში მოთხოვნა ირჩევს შეკვეთებს, რომელთა ჯამური გადასახადები (TotalDue) მეტია ყველა გადასახადის საშუალოზე და რომლის ტვირთის გადასახადი (Freight) მეტია საშუალო გადასახადების 40%-ზე. ამ მოთხოვნის მთავარი თვისებაა მისი სიგრძე, რადგან ქვემოთხოვნა ორჯერ უნდა დაიწეროს. მოთხოვნის კონსტრუქციის ზომის შემცირების ერთ-ერთი შესაძლო გზაა ქვემოთხოვნის შემცველი ხედის შექმნა. მაგრამ ეს გამოსავალი ცოტა რთულია, რადგან ის მოითხოვს ხედის შექმნას და შემდეგ წაშლას მოთხოვნის შესრულების დასრულების შემდეგ. უკეთესი მიდგომა იქნება OTB-ის შექმნა. ქვემოთ მოყვანილი მაგალითი გვიჩვენებს არარეკურსიული OTB-ის გამოყენებას, რაც ამცირებს მოთხოვნის განმარტებას ზემოთ:

გამოიყენეთ AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE სულDue2005c ფასიდან _ კალკ ) /2,5;

WITH პუნქტის სინტაქსი არარეკურსიულ შეკითხვებში შემდეგია:

cte_name პარამეტრი წარმოადგენს OTB სახელს, რომელიც განსაზღვრავს მიღებულ ცხრილს, ხოლო column_list პარამეტრი წარმოადგენს ცხრილის გამოხატვის სვეტების სიას. (ზემოთ მოყვანილ მაგალითში OTB-ს ეწოდება price_calc და აქვს ერთი სვეტი, წელი_2005.) inner_query პარამეტრი წარმოადგენს SELECT განცხადებას, რომელიც განსაზღვრავს შესაბამისი ცხრილის გამონათქვამის შედეგების კომპლექტს. განსაზღვრული ცხრილის გამოხატულება შეიძლება გამოყენებულ იქნას outer_query-ში. (ზემოთ მოცემულ მაგალითში გარე მოთხოვნა იყენებს OTB price_calc-ს და მის year_2005 სვეტს ორმაგად ჩადგმული მოთხოვნის გასამარტივებლად.)

OTB და რეკურსიული მოთხოვნები

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

cte_name და column_list პარამეტრებს აქვთ იგივე მნიშვნელობა, რაც OTB-ში არარეკურსიული მოთხოვნებისთვის. WITH პუნქტის ძირითადი ნაწილი შედგება ორი მოთხოვნისაგან, რომლებსაც შეუერთდა ოპერატორი UNION ALL. პირველი შეკითხვა იძახება მხოლოდ ერთხელ და ის იწყებს რეკურსიის შედეგის დაგროვებას. UNION ALL ოპერატორის პირველი ოპერანდი არ მიუთითებს OTB-ზე. ამ შეკითხვას ეწოდება საცნობარო მოთხოვნა ან წყარო.

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

UNION ALL ოპერატორი უერთდება ამჟამად დაგროვილ რიგებს, ისევე როგორც დამატებით რიგებს, რომლებიც დამატებულია მიმდინარე ზარის მიერ რეკურსიულ წევრზე. (UNION ALL ოპერატორის არსებობა ნიშნავს, რომ დუბლიკატი რიგები არ წაიშლება შედეგიდან.)

და ბოლოს, outer_query პარამეტრი განსაზღვრავს გარე მოთხოვნას, რომელსაც OTB იყენებს ორივე წევრის შეერთების ყველა ზარის დასაბრუნებლად.

OTB-ის რეკურსიული ფორმის დემონსტრირებისთვის, ჩვენ ვიყენებთ თვითმფრინავის ცხრილს, რომელიც განსაზღვრულია და შევსებულია ქვემოთ მოცემულ მაგალითში ნაჩვენები კოდით:

გამოიყენეთ SampleDb; CREATE TABLE Airplane(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Airplane", "Fuselage", 1, 10); INSERT INTO Airplane VALUES ("Airplane", "Wings", 1, 11); INSERT INTO Airplane VALUES ("Airplane", "Tail", 1, 12); INSERT INTO Airplane VALUES ("Fuselage", "Salon", 1, 13); INSERT INTO Airplane VALUES ("Fuselage", "Cockpit", 1, 14); INSERT INTO Airplane VALUES ("Fuselage", "Nose",1, 15); INSERT INTO Airplane VALUES-ში ("Cabin", NULL, 1,13); INSERT INTO Airplane VALUES-ში ("Cockpit", NULL, 1, 14); INSERT INTO Airplane VALUES-ში ("ცხვირი", NULL, 1, 15); INSERT INTO Airplane VALUES-ში ("Wings", NULL,2, 11); INSERT INTO Airplane VALUES-ში ("კუდი", NULL, 1, 12);

თვითმფრინავის ცხრილს აქვს ოთხი სვეტი. სვეტი ContainingAssembly განსაზღვრავს ასამბლეას, ხოლო ContainedAssembly სვეტი განსაზღვრავს ნაწილებს (სათითაოდ), რომლებიც ქმნიან შესაბამის ასამბლეას. ქვემოთ მოყვანილი სურათი გვიჩვენებს შესაძლო ტიპის თვითმფრინავის და მისი შემადგენელი ნაწილების გრაფიკულ ილუსტრაციას:

თვითმფრინავის ცხრილი შედგება შემდეგი 11 მწკრივისაგან:

შემდეგი მაგალითი იყენებს WITH პუნქტს შეკითხვის დასადგენად, რომელიც ითვლის თითოეული აშენების მთლიან ღირებულებას:

გამოიყენეთ SampleDb; WITH list_of_parts(assembly1, რაოდენობა, ღირებულება) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityAssembly, a.QuantityASTContained. ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", რაოდენობა "Quantity", ღირებულება "Price" FROM list_of_parts;

WITH პუნქტი განსაზღვრავს OTB სიას სახელად list_of_parts, რომელიც შედგება სამი სვეტისაგან: assembly1, რაოდენობა და ღირებულება. მაგალითში პირველი SELECT განცხადება გამოიძახება მხოლოდ ერთხელ რეკურსიის პროცესის პირველი საფეხურის შედეგების შესანახად. მაგალითის ბოლო სტრიქონზე SELECT განცხადება აჩვენებს შემდეგ შედეგს.

დათვალიერება