განახლების მონაცემთა მოდიფიკაციის ოპერატორი საშუალებას იძლევა. SQL(DML) დახმარება: განაახლეთ და წაშალეთ განცხადებები. VBA მონაცემთა ტიპები

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

განახლება<имя таблицы>
SET (სვეტის სახელი = (გამოთქმა სვეტის მნიშვნელობის გამოსათვლელად
| NULL
| ნაგულისხმევი),...)
[ (სად<предикат>}];

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

თუ სვეტი იძლევა null მნიშვნელობას, მაშინ ის შეიძლება პირდაპირ იყოს მითითებული. ალტერნატიულად, შეგიძლიათ შეცვალოთ არსებული მნიშვნელობა ნაგულისხმევი მნიშვნელობით ( ნაგულისხმევი) მოცემული სვეტისთვის.

ბუნებრივია, სვეტის მონაცემთა ტიპები hdდა ვერძითავსებადი უნდა იყოს. გამონათქვამი შეიძლება გამოყენებულ იქნას ტიპების გადასაცემად CAST.

თუ გსურთ შეცვალოთ მონაცემები გარკვეული სვეტის შინაარსიდან გამომდინარე, შეგიძლიათ გამოიყენოთ გამოხატულება საქმე. თუ, ვთქვათ, გჭირდებათ 20 GB მყარი დისკის დაყენება კომპიუტერის ნოუთბუქებზე 128 მბ-ზე ნაკლები მეხსიერებით და 40 GB მყარი დისკები სხვა კომპიუტერის ნოუთბუქებზე, მაშინ შეგიძლიათ დაწეროთ შემდეგი მოთხოვნა:

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

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

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

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

განცხადების წაშლა

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

წაშლა FROM-დან<имя таблицы > ;

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

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

1. ცხრილის ცალკეული რიგების წაშლა არ არის შესული. ჟურნალი აღრიცხავს მხოლოდ იმ გვერდების განთავისუფლებას, რომლებიც დაკავებული იყო ცხრილის მონაცემებით.
2. ტრიგერები არ მუშაობს, კერძოდ, წაშლის ტრიგერი.
3. ბრძანება არ გამოიყენება, თუ ეს ცხრილი მითითებულია უცხო გასაღებით, და მაშინაც კი, თუ უცხო კლავიშს აქვს კასკადი წაშლის ვარიანტი.
4. მრიცხველი ( იდენტობა) აღდგება საწყის მნიშვნელობამდე.

მაგალითი . საჭიროა მაგიდიდან ამოღება ლეპტოპიყველა კომპიუტერის ნოუთბუქი 12 ინჩზე ნაკლები ეკრანის ზომით.

TRUNCATE TABLE ლეპტოპი

Transact-SQL აფართოებს განცხადების სინტაქსს წაშლა, დამატებითი წინადადების შემოღება FROM

FROM<источник табличного типа>

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

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

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

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

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

SQL Server პლატფორმა მხარს უჭერს ANSI UPDATE განცხადების ძირითად კომპონენტებს, მაგრამ ONLY და ARRAY საკვანძო სიტყვები არ არის მხარდაჭერილი და მასივების განახლების შესაძლებლობა არ არის მხარდაჭერილი. SQL Server-ში UPDATE განცხადების ფუნქციონირება გაუმჯობესებულია ცხრილის მინიშნებების დამატებით WITH პუნქტით, შეკითხვის მინიშნებების დამატებით OPTION პუნქტთან და ცვლადების უფრო ძლიერი დამუშავებით. სინტაქსი შემდეგია.

განახლება (ცხრილის_სახელი | ნახვის_სახელი | მწკრივის ნაკრები) )] SET (სვეტის სახელი=(DEFAULT | NULL | სკალარული_გამოხატვა) |

stirrup name=scalar_expression| variable_name=column_name=scalar_expression) [, ...] ]

WHERE (პირობები | კურსორის_სახელის მიმდინარეობა) )]

SQL Server-ში UPDATE განცხადების სინტაქსის ელემენტები შემდეგია.

მინიშნებით

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

ცვლადი_სახელი

SQL Server ცვლადები უნდა გამოცხადდეს UPDATE განცხადების გამოყენებამდე, DECLARE @variable სახით. SET კონსტრუქცია @variable=column!=expression! აყენებს ცვლადს განახლებული სვეტის საბოლოო მნიშვნელობას და SET @variable-column!, column!=expression აყენებს ცვლადს მნიშვნელობას სვეტში UPDATE განცხადების შესრულებამდე.

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

AS მეტსახელი

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

ცხრილების შეერთებისთვის შესაძლებელია სტანდარტული ANSI სინტაქსის გამოყენება FROM პუნქტთან ერთად.

მცირე ვარიაცია ANSI WHERE CURRENT OF პუნქტში. კურსორის სახელის WHERE CURRENT OF პუნქტი, რომელიც გამოიყენება კურსორთან ერთად, იწვევს SQL Server პლატფორმის განახლებას მხოლოდ ერთი ჩანაწერის შესახებ, რომელზეც ამჟამად მდებარეობს კურსორი. კურსორი ითვლება ლოკალურად, მაგრამ ასევე შეგიძლიათ მიუთითოთ გლობალური კურსორი GLOBAL საკვანძო სიტყვის გამოყენებით.

OPTION მოთხოვნა

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

ძირითადი გაფართოება, რომელსაც Microsoft SQL Server აცნობს ANSI სტანდარტული UPDATE განცხადებას, არის FROM პუნქტი. FROM პუნქტი საშუალებას გაძლევთ გამოიყენოთ JOIN პუნქტი, რომელიც მნიშვნელოვნად ამარტივებს სამიზნე ცხრილის რიგების განახლებას FROM პუნქტში მითითებული სტრიქონების ასოცირებით იმ მწკრივებთან, რომლებიც განახლებულია table_name UPDATE კომპონენტით. შემდეგი მაგალითი გვიჩვენებს ცხრილის შეერთების შედეგის განახლებას ANSI სტილის და საკმაოდ მოუხერხებელი ქვემოთხოვნის გამოყენებით, შემდეგ კი მისი განახლება SQL Server FROM პუნქტის გამოყენებით. ორივე მოთხოვნა ასრულებს ერთსა და იმავე მოქმედებას, მაგრამ სრულიად განსხვავებული გზით.

ასეთი განახლების შესრულება Transact-SQL სტილის გამოყენებით ორი ცხრილის, ავტორისა და სათაურის ავტორის, სათაურების ცხრილთან შეერთების საკითხია. ANSI კოდის გამოყენებით იგივე ოპერაციის შესასრულებლად, ჯერ უნდა მოძებნოთ au_id მნიშვნელობა ავტორების ცხრილში და გადასცეთ titleauthor ცხრილში, შემდეგ მოძებნეთ title_id მნიშვნელობა და გადასცეთ იგი მთავარ UPDATE განცხადებაში.

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

განაახლეთ ავტორები SET state="ZZ" FROM (აირჩიეთ TOP 10 * FROM ავტორები ORDER BY au_lname) AS t1 WHERE authors.au_id=t1.au_.id

ამ მაგალითში მნიშვნელოვანია აღინიშნოს, რომ ზოგადად საკმაოდ რთულია პირველი n ჩანაწერების განახლება UPDATE განცხადებით, თუ არ არის მწკრივების გარკვეული თანმიმდევრობა, რომელიც შეიძლება განისაზღვროს WHERE პუნქტით. თუმცა, ჩადგმული ცხრილის ქვემოთხოვნა FROM პუნქტში, რომელიც იყენებს TOP საკვანძო სიტყვას პირველი 10 ჩანაწერის მისაღებად, გიხსნით ზედმეტი პროგრამირების დაკარგვას, რაც სხვაგვარად იქნებოდა საჭირო.

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

განახლებასპისოკი

SETსტიპი = 50000;

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

განახლების სია

SETსტიპი = 50000

სადწყევლა=მე;

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

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

Გუნდში განახლებაწინადადებაში SETთქვენ შეგიძლიათ გამოიყენოთ სკალარული გამონათქვამები ველის მნიშვნელობის შესაცვლელად. დავუშვათ, რომ ყველა სტუდენტი მიიღებს სტიპენდიის 25%-იან ზრდას; საჭიროა ცვლილებების შეტანა:

განახლებასპისოკი

SETსტიპი = (სტიპი *25)/100;

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

SQL. ბრძანების სინტაქსის წაშლა

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

წაშლა FROM-დანსია;

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

წაშლა FROM-დანსპისოკი

სადწვერი = 0;

ან მიუთითეთ ძირითადი გასაღების მნიშვნელობა ერთი ჩანაწერის წასაშლელად

წაშლა FROM-დანსპისოკი

სადფიო = „პეტკინი“;

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

SQL SELECT ბრძანების სინტაქსი

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

მაგალითი. Spisok ცხრილის საფუძველზე, მიიღეთ ცხრილი შემდეგი ფორმის ყველა ჩანაწერით:

ბრძანება მოცემულია:

აირჩიეთფიო, ჯოხი FROMსია;

ბრძანების შესრულების შედეგი ნაჩვენებია სურათზე.

ფიო სტიპი
რიბკინა
უტკინი
ფშენიჩკო
სობაჩკინა
სათესლე ჯირკვალი

აირჩიეთ- საკვანძო სიტყვა, რომელიც "ეუბნება" DBMS-ს, რომ ბრძანება არის მოთხოვნა;

ფიო, ჯოხი- ველების (სვეტების) დასახელების სია, რომლის მიხედვითაც უნდა შეირჩეს ინფორმაცია და ნორმალიზდეს ახალი ცხრილი;

სპისოკისგან; FROM-საკვანძო სიტყვა, უნდა იყოს ყველა მოთხოვნაში; Spisik - ცხრილის სახელი, რომელიც არის მოთხოვნის მონაცემთა წყარო;

მძიმით (;) სიმბოლო მიუთითებს ბრძანების დასრულებაზე და მის შესასრულებლად მზადყოფნაზე.

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

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

აირჩიეთ * FROMსია;

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

აირჩიეთკურსი, ჯგუფი, ფიო FROMსია;

SQL. შერჩევა კრიტერიუმებით (WHERE)

აპლიკაციის გამოყენებით სადგუნდში აირჩიეთდაყენებულია ცხრილიდან ჩანაწერების არჩევის პირობა; პრედიკატს შეუძლია მიიღოს მნიშვნელობები "true" ან "false".

მაგალითი.

გუნდი აირჩიეთრომ შეარჩიოთ სტუდენტები ET-41 ჯგუფიდან Spisok ცხრილიდან:

აირჩიეთჯგუფი, ფიო FROM Spisok WHERE gruppa='ET-41';

პროგრამა გადახედავს Spisok ცხრილის ყველა ჩანაწერს, შეამოწმებს თითოეულ მათგანს პრედიკატის ჭეშმარიტებაზე. gruppa='ET-41'.აღსრულების შედეგად მივიღებთ.

ჯგუფი ფიო
ET-41 რიბკინა
ET-41 უტკინი
ET-41 ფშენიჩკო
ET-41 სობაჩკინა
ET-41 სათესლე ჯირკვალი

SQL-ის გამოყენება სხვა პროგრამირების ენებთან

Ენა SQLგამოიყენება მონაცემთა ბაზაში წვდომის პროგრამების დასაწერად, როგორც სხვა პროცედურული პროგრამირების ენების ქვეენა (Pascal, PL/1, Fortran, COBOL, C, Ada და ა.შ.). Ენა SQLარა პროცედურული, არამედ დეკლარაციული, ლოკალური. მისი ჩასმა შესაძლებელია პროცედურულ ენებზე დაწერილ პროგრამებში. ენაზე SQLარ არსებობს ძირითადი IF პირობების შემოწმების განცხადებები, FOR, DO და WHILE განცხადებები და ა.შ. ენა SQLშექმნილია ექსკლუზიურად მონაცემთა ბაზის მართვისთვის.

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

პროგრამა ჩაშენებული SQLსაკუთარი შედგენის წინ გადის წინასწარ კომპილაციას, სადაც ბრძანებები SQLგარდაქმნიან (თარგმნიან) წინასწარ კომპილერის მიერ მაღალი დონის ენის სახით; ამის შემდეგ შედგენილია მთელი ძირითადი პროგრამა.

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

Visual Basic აპლიკაცია. Ძირითადი ცნებები.

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

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

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

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

მონაცემთა ტიპები პრეფიქსი აღწერილობის სიმბოლო ზომა (ბაიტი) მნიშვნელობა
მთელი რიცხვი ინტ % მოკლე მთელი რიცხვი (-32788-დან +32767-მდე)
გრძელი ლნგ & გრძელი მთელი რიცხვი (-2147483648-დან +2147483647-მდე)
Მარტოხელა სნგ ! ერთი ზუსტი მცურავი წერტილის ნომერი: -3.4e38-დან +3.4e38-მდე
Ორმაგი დბლ # ორმაგი სიზუსტის მცურავი წერტილის ნომერი: -1.79e308-დან +1.79e308-მდე
ბაიტები ბიტი არა ბაიტი: 0-დან 255-მდე
ვალუტა Cur @ ფიქსირებული წერტილის ნომერი: -922337203685477.5808 +922337203685477.5807
სიმებიანი $ 10 + 2 სიმბოლოზე სტრიქონი: 0-დან 65535 სიმბოლომდე
ლოგიკური Ურნა არა ლოგიკური რიცხვი: ჭეშმარიტი და მცდარი
თარიღი დათ არა თარიღი და დრო
ვარიანტი ვარ არა <16 ნებისმიერი მონაცემი
ობიექტი obj არა ნებისმიერი ობიექტის მითითება

ცვლადები და მუდმივები VBA-ში

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

დეკლარაცია მოდულის დონეზე ხდება საჯარო და კერძო ოპერატორების მიერ: მოდულის და პროცედურის დონეზე - Dim ოპერატორის მიერ: მხოლოდ პროცედურის დონეზე - სტატიკური ოპერატორის მიერ.

დეკლარირებული ცვლადების ინიციალიზაცია ხდება კომპილაციის დროს: ციფრულ ცვლადს ენიჭება მნიშვნელობა ნული (0); სიმებიანი ცვლადი არის ცარიელი სტრიქონი (ნულოვანი სიგრძე); Variant ტიპის ცვლადი არის Emtry მნიშვნელობა (მნიშვნელობის გარეშე).

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

Const (const სახელი =<константное выражение>}…

საჯარო - გამოცხადებული მუდმივი ხელმისაწვდომია ნებისმიერი პროცედურისთვის

პირადი - მოდულის ფარგლებში პროცედურებისთვის

ას<тип данных>- მუდმივი მონაცემთა ტიპის დეკლარაცია

ბოლო განახლება: 07/13/2017

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

განაახლეთ ცხრილის_სახელი SET სვეტი1 = მნიშვნელობა1, სვეტი2 = მნიშვნელობა2, ... სვეტიN = მნიშვნელობაN

მაგალითად, გავზარდოთ ყველა პროდუქტის ფასი 5000-ით:

განაახლეთ პროდუქტების ნაკრები ფასი = ფასი + 5000

გამოიყენეთ კრიტერიუმები და შეცვალეთ მწარმოებლის სახელი "Samsung"-დან "Samsung Inc."-ზე:

განაახლეთ პროდუქტების ნაკრები მწარმოებელი = "Samsung Inc." WHERE მწარმოებელი = "Samsung"

უფრო რთული მოთხოვნა - შეცვალეთ მწარმოებლის ველი "Apple" მნიშვნელობით "Apple Inc." პირველ 2 სტრიქონში:

განაახლეთ პროდუქტების ნაკრები Manufacturer = "Apple Inc." FROM (SELECT TOP 2 FROM Products WHERE Manufacturer="Apple") AS Selected WHERE Products.Id = Selected.Id

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

შემდეგ მოდის განახლების პირობა Products.Id = Selected.Id. ანუ, ფაქტობრივად, საქმე გვაქვს ორ ცხრილთან - პროდუქტებთან და შერჩეულთან (რომელიც მიღებულია პროდუქტებიდან). შერჩეული შეიცავს პირველ ორ სტრიქონს, სადაც Manufacturer = "Apple". პროდუქტებში - ზოგადად ყველა ხაზი. და განახლება ხორციელდება მხოლოდ იმ სტრიქონებისთვის, რომლებიც არჩეულ არჩევანშია. ანუ, თუ პროდუქტების ცხრილში Apple-ის მწარმოებლის ათობით პროდუქტია, მაშინ განახლება გავლენას მოახდენს მათგან მხოლოდ პირველ ორზე.

განახლების ბრძანება- ცვლის უკვე არსებულ ჩანაწერს ან ცხრილის მრავალ ჩანაწერს SQL. ცვლის არსებულ მნიშვნელობებს ცხრილში ან ხედის მთავარ ცხრილში.

განაახლეთ ბრძანების ბრძანების სინტაქსი

განაახლეთ ბრძანების სინტაქსი

განახლების ბრძანება. UPDATE ბრძანების ძირითადი საკვანძო სიტყვები და პარამეტრები

  • სქემა-ავტორიტეტის იდენტიფიკატორი, ჩვეულებრივ იგივე მომხმარებლის სახელი
  • მაგიდის ხედი -მაგიდის სახელი SQLრომელშიც მონაცემები იცვლება; თუ ხედია განსაზღვრული, მონაცემები იცვლება მთავარ ცხრილში SQLწარმომადგენლობა
  • subquery_1 - subquery, რომელსაც სერვერი ექცევა ისევე, როგორც ხედს
  • თანსვეტი - ცხრილის სვეტი SQLან ხედები SQL, რომლის ღირებულებაც იცვლება; თუ ცხრილის სვეტი პუნქტიდან SETგამოტოვებული, სვეტის მნიშვნელობა უცვლელი რჩება
  • ექსპრ - ; ეს გამოთქმა შეიძლება შეიცავდეს ძირითად ცვლადებს და არჩევით ინდიკატორ ცვლადებს
  • ქვემოკითხვა_2 - შესაბამისი სვეტისთვის მინიჭებული ახალი მნიშვნელობა
  • ქვემოკითხვა_3 - შესაბამისი სვეტისთვის მინიჭებული ახალი მნიშვნელობა

სად- განსაზღვრავს სტრიქონების დიაპაზონს, რომლებიც უნდა შეიცვალოს მათ მიერ, რისთვისაც მითითებულია მდგომარეობა მართალი; თუ ეს ფრაზა გამოტოვებულია, ცხრილის ან ხედის ყველა მწკრივი განახლდება.
დამტკიცების გაცემისას განახლებანებისმიერი განახლების გამომწვევიგანსაზღვრულია მაგიდაზე.
ქვეკითხვები. თუ შეთავაზება SETშეიცავს ქვემოკითხვა, ის აბრუნებს ზუსტად ერთ მწკრივს თითოეული შეცვლილი მწკრივისთვის. თითოეული მნიშვნელობა ქვემოთხოვნის შედეგში ენიჭება სიის შესაბამის სვეტებს ფრჩხილებში. თუ ქვემოთხოვნა არ აბრუნებს არცერთ მწკრივს, სვეტი ენიჭება NULL. ქვეკითხვებიშეუძლია მონაცემების შერჩევა შეცვლილი ცხრილიდან. შეთავაზება SETშეუძლია გამონათქვამების გაერთიანება და ქვემოკითხვები.

განახლების ბრძანების მაგალითი 1
რეიტინგის შეცვლა ყველა მყიდველისთვის 200-ის ტოლი მნიშვნელობით:

განახლებაკლიენტები SETრეიტინგი = 200;

განახლების ბრძანების მაგალითი 2
ცხრილის ყველა მწკრივში სვეტის მნიშვნელობის ჩანაცვლება ჩვეულებრივ იშვიათად გამოიყენება. ამიტომ გუნდში განახლებაროგორც გუნდში წაშლა, შეგიძლიათ გამოიყენოთ პრედიკატი. რეიტინგის სვეტის მნიშვნელობების მითითებული ჩანაცვლების შესასრულებლად, ყველა მყიდველისთვის, რომლებსაც ემსახურება გამყიდველი ჯოვანი (snum = 1003), შეიყვანეთ:

განახლებაკლიენტები SETრეიტინგი = 200 WHERE snum = 1001;

SQL UPDATE ბრძანების მაგალითი 3
წინადადებაში SETთქვენ შეგიძლიათ მიუთითოთ ნებისმიერი რაოდენობის მნიშვნელობა მძიმით გამოყოფილი სვეტებისთვის:

განახლებაემპ SETსამუშაო = 'მენეჯერი', sal = sal + 1000, deptno = 20 WHERE ename = 'JONES';

განახლების ბრძანების მაგალითი 4
წინადადებაში SETშესაძლებელია ნულოვანი მნიშვნელობის მითითება რაიმე სპეციალური სინტაქსის გამოყენების გარეშე (როგორიცაა IS NULL). ამრიგად, თუ გსურთ დააყენოთ კლიენტების ყველა რეიტინგი ლონდონიდან (ქალაქი = 'ლონდონი') NULL-მდე, თქვენ შეიყვანთ:

განახლებაკლიენტები SETრეიტინგი = NULL WHERE ქალაქი = 'ლონდონი';

განახლების ბრძანების მაგალითი 5
განმარტავს შემდეგი ბრძანების სინტაქსის გამოყენებას განახლება:

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

განახლებაემპ ა SETდეპტნო=
(აირჩიეთ deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( აირჩიეთ 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno) WHERE deptno IN ( აირჩიეთ deptno FROM dept WHERE loc = 'DALLAS' OR loc = 'DETROIT');

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

  • ცვლის მხოლოდ იმ თანამშრომლებს, რომლებიც მუშაობენ დალასში ან დეტროიტში
  • ადგენს deptno სვეტის მნიშვნელობას ბოსტონიდან თანამშრომლებისთვის
  • თითოეული თანამშრომლის ხელფასს ადგენს 1,1-ჯერ მეტი მთელი დეპარტამენტის საშუალო ხელფასზე
  • ადგენს თითოეული თანამშრომლის საკომისიოს 1,5-ჯერ, ვიდრე მთელი დეპარტამენტის საშუალო საკომისიო

მონაცემთა მანიპულირების ოპერატორები (DML ენა).

DML განცხადებები მოქმედებს მონაცემთა ბაზაზე და გამოიყენება მონაცემების შესაცვლელად და საჭირო ინფორმაციის მისაღებად.

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

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

INSERT - ჩადეთ ახალი რიგები ცხრილში.

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

12.2 ინტერაქტიული SQL რეჟიმი (ინტერაქტიული SQL)

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

ამყარებს კავშირს მონაცემთა ბაზასთან (დასტურდება წვდომის უფლებების ხელმისაწვდომობა);

· შეაქვს შესაბამისი SQL ამონაწერი, საჭიროების შემთხვევაში შეაქვს დამატებითი ინფორმაცია დიალოგურ რეჟიმში;

იწყებს ბრძანების შესრულებას.

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

ახორციელებს მოთხოვნის ანალიზს (ამოწმებს არის თუ არა მოთხოვნა სწორი);

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

ირჩევს შეკითხვის შესრულებას - შეკითხვის შესრულების გეგმა;

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

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

მომხმარებლისა და DBMS-ს შორის ურთიერთქმედების სქემა ინტერაქტიული SQL-ის გამოყენებით

ნაჩვენებია ნახ. 12.1.

ბრინჯი. 12.1. სქემა, თუ როგორ მუშაობს ინტერაქტიული SQL

12.3. SQL-ის გამოყენება ცხრილიდან ინფორმაციის შესარჩევად

მონაცემების მიღება ხდება SELECT განცხადების გამოყენებით, რომელიც ყველაზე ხშირად გამოიყენება SQL ენაში. SELECT განცხადების სინტაქსი ასეთია:

აირჩიეთ<список атрибутов>/*

FROM<список таблиц>

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

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

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

საჭირო საკვანძო სიტყვაა FROM, რასაც მოჰყვება მოთხოვნილი ცხრილების სახელები.

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

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

GROUP BY პუნქტი განსაზღვრავს დაჯგუფების ატრიბუტების ჩამონათვალს (ეს და შემდეგი საკვანძო სიტყვა ცოტა მოგვიანებით იქნება ახსნილი).

HAVING პუნქტი განსაზღვრავს პირობებს, რომლებიც ვრცელდება თითოეულ ჯგუფზე.

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

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

SQL - განახლების მოთხოვნა

მიეცით ყველა სტუდენტის სია.

აირჩიეთ id_st, გვარი

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

მიეცით იმ შეფასებების სია, რომელიც მიიღო მოსწავლემ კოდი „1“.

აირჩიეთ id_st, მონიშნეთ

გასცეს იმ სტუდენტების კოდების სია, რომლებმაც გამოცდებზე ერთი ორი ან სამი მაინც მიიღეს.

WHERE პუნქტში შეგიძლიათ დაწეროთ გამოხატულება არითმეტიკული შედარების ოპერატორების გამოყენებით (<, >და ა.შ.) და ლოგიკური ოპერატორები (AND, OR, NOT), როგორც ჩვეულებრივ პროგრამირების ენებში.

აირჩიეთ id_st, მონიშნეთ

WHERE (MARK >= 2) და (MARK<= 3)

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

IN - მნიშვნელობების გარკვეულ კომპლექტში შესვლა;

BETWEEN - შესვლა მნიშვნელობების გარკვეულ დიაპაზონში;

LIKE - შეამოწმეთ შესატყვისი ნიმუშით;

IS NULL - შეამოწმეთ განუსაზღვრელი მნიშვნელობა.

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

აირჩიეთ id_st, მონიშნეთ

WHERE ნიშანი IN(2,3)

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

იგივე შედეგის მიღწევა შესაძლებელია BETWEEN ოპერატორის გამოყენებით:

აირჩიეთ id_st, მონიშნეთ

სადაც მონიშნეთ 2-დან 3-მდე

ჩამოთვალეთ ყველა სტუდენტი, რომელთა გვარები იწყება ასო A-თი.

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

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

_ (ხაზგასმული) - ცვლის რომელიმე სიმბოლოს;

% (პროცენტის ნიშანი) - ცვლის ნებისმიერი რაოდენობის სიმბოლოების თანმიმდევრობას.

აირჩიეთ id_st, გვარი

WHERE გვარი LIKE 'A%'

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

MIN არის მინიმალური მნიშვნელობა სვეტში;

MAX - მაქსიმალური მნიშვნელობა სვეტში;

SUM არის სვეტის მნიშვნელობების ჯამი;

AVG არის საშუალო მნიშვნელობა სვეტში;

COUNT - არა NULL მნიშვნელობების რაოდენობა სვეტში.

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

აირჩიეთ AVG (ნიშანი)

რა თქმა უნდა, შეგიძლიათ გამოიყენოთ აგრეგატული ფუნქციები WHERE პუნქტთან ერთად:

აირჩიეთ AVG (ნიშანი)

WHERE id_st = 100

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

აირჩიეთ AVG (ნიშანი)

WHERE id_ex = 10

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

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

SELECT id_st, AVG (ნიშანი)

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

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

SELECT id_st, AVG (ნიშანი)

WHERE id_ex = 100

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

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

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

აირჩიეთ 'საშუალო=', AVG(ნიშანი)

WHERE id_ex = 10

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

12.4. SQL-ის გამოყენება მრავალი ცხრილიდან ინფორმაციის შესარჩევად

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

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

კიდევ ერთხელ დავუბრუნდეთ მაგალითს მე-8 ლექციიდან. განვიხილოთ შესაბამისი ER დიაგრამა (ნახ. 12.2.).

ბრინჯი. 12.2. დაკავშირებული ცხრილების მაგალითი

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

mark_st ცხრილი დაკავშირებულია exam_st ცხრილთან id_ex ველით.

mark_st ცხრილი დაკავშირებულია სტუდენტურ ცხრილთან id_st ველით.

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

აირჩიეთ სტუდენტი.გვარი, mark_st.id_ex, mark_st.mark

სტუდენტისგან, ნიშნის_ ქ

WHERE student.id_st = mark_st.id_st

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

1. FROM პუნქტში ჩამოთვლილია ორი ცხრილი.

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

3. WHERE პუნქტი განსაზღვრავს ცხრილის შეერთების პირობას.

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

SELECT E.surname, M.id_ex, M.mark

სტუდენტისგან E, ნიშნის_სტ მ

WHERE E.id_st = M.id_st

12.5. SQL-ის გამოყენებით მონაცემთა ჩასმა, რედაქტირება და წაშლა
მაგიდებში

ცხრილში მონაცემების დასამატებლად, SQL სტანდარტი უზრუნველყოფს INSERT ბრძანებას.

მოდით შევხედოთ რამდენიმე ნიმუშის შეკითხვებს.

INSERT INTO mark_st

VALUES (1, 2, 5)

ეს შეკითხვა აყენებს მწკრივს mark_st ცხრილში, რომელიც შეიცავს VALUES სიაში ჩამოთვლილ მნიშვნელობებს. თუ არ გჭირდებათ ველის მნიშვნელობის მითითება, შეგიძლიათ მას NULL მიაკუთვნოთ:

INSERT INTO ნიშანში

VALUES (1, 2, NULL)

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

ჩასმა ნიშნის_სტში (id_st, id_ex)

ცხრილიდან მონაცემების მოსაშორებლად არის DELETE ბრძანება:

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

თქვენ შეგიძლიათ შეზღუდოთ წასაშლელი ინფორმაციის დიაპაზონი შემდეგნაირად:

WHERE გვარი > 'AND'

UPDATE ბრძანება გამოიყენება მონაცემთა განახლებისთვის.

SET ნიშანი = '5'

WHERE id_st = 100 და id_ex = 10

ამ მოთხოვნით მე-10 საგამოცდო კოდში 100 კოდის მქონე მოსწავლის ნიშანი „5“-ით შეიცვლება.

12.5. SQL ენა და ურთიერთობითი ალგებრა ოპერაციები

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

კავშირის ოპერაცია

SQL ენის გამოყენებით, კავშირის ოპერაცია წარმოდგენილია შემდეგნაირად:

განსხვავება ოპერაცია

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

პროექციის ოპერაცია

აირჩიეთ ველი i1 , … , ველი in

ნიმუშის აღების (შერჩევის) ოპერაცია

სად( )

კვეთის ოპერაცია

წინა78910111213141516171819202122შემდეგი

4.6.5.DML: მონაცემთა მოდიფიკაციის ბრძანებები.

ამ ჯგუფში შედის ჩანაწერების დამატების, შეცვლისა და წაშლის ოპერატორები. ᲩᲐᲓᲔᲗ<имя_таблицы> [ (<имя_столбца>,<имя_столбца>,…)] ღირებულებები (<значение>,<значение>,..) ამ ბრძანების სვეტების სია არჩევითია. ამ შემთხვევაში, ცხრილის ყველა ველის მნიშვნელობები უნდა იყოს მითითებული იმ თანმიმდევრობით, რომლითაც ეს სვეტები იყო ჩამოთვლილი ბრძანებაში, მაგალითად: მაგალითი სვეტების სიით: განახლება<имя_таблицы>SET<имя_столбца>=<значение>,… თუ მითითებულია საკვანძო სიტყვა და პირობა, მაშინ ბრძანება ვრცელდება მხოლოდ იმ ჩანაწერებზე, რომლებისთვისაც იგი შესრულებულია. თუ პირობა არ არის მითითებული, ვრცელდება ყველა ჩანაწერზე. მაგალითი: ლოგიკური გამონათქვამები მუდმივებზე და ველებზე გამოიყენება როგორც პირობა. პირობები საშუალებას იძლევა:

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

ყველა ეს საკვანძო სიტყვა დეტალურად იქნება აღწერილი და ილუსტრირებული ოპერატორის პუნქტში. აქ ჩვენ შემოვიფარგლებით მარტივი მაგალითის მოყვანით: ეს ბრძანება გვხვდება ცხრილში გამომცემლებიყველა null სვეტის მნიშვნელობა urlდა ცვლის მათ სტრიქონით "url not defined". წაშლა FROM-დან<имя_таблицы>[სად<условие> ] ყველა ჩანაწერი, რომელიც აკმაყოფილებს მითითებულ პირობას, წაიშლება. თუ საკვანძო სიტყვა და პირობა აკლია, ყველა ჩანაწერი ამოღებულია ცხრილიდან. მაგალითი: ეს ბრძანება შლის Super Computer Publishing ჩანაწერს.

4.6.6.DML: მონაცემთა შერჩევა.

SQL-ში ცხრილებიდან ჩანაწერების მისაღებად, ოპერატორი განისაზღვრება აირჩიეთ. ამ ბრძანების დახმარებით ხდება არა მხოლოდ რელაციური ალგებრის „შერჩევის“ (ჰორიზონტალური ქვესიმრავლის) მოქმედება, არამედ ორი ან მეტი ცხრილის წინასწარი შეერთება (შეერთება). ეს არის ყველაზე რთული და ძლიერი SQL საშუალება, სრული განცხადების სინტაქსი აირჩიეთროგორც ჩანს: აირჩიეთ<список_выбора>FROM<имя_таблицы>, … [ სად<условие>][ ᲘᲗ ᲓᲐᲯᲒᲣᲤᲔᲑᲐ<имя_столбца>,… ] [ HAVING<условие> ] ,… ] წინადადებების თანმიმდევრობა განცხადებაში აირჩიეთმკაცრად უნდა დაიცვან (მაგალითად, ყოველთვის წინ უნდა უსწრებდეს), წინააღმდეგ შემთხვევაში შეცდომებს შეიტანს.

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

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

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

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

ამ ბრძანების კიდევ ერთი ვარიანტი შეიძლება შეიქმნას სიის შეყვანის ლოგიკური შემოწმების გამოყენებით:

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

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

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

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

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

  • % (პროცენტის ნიშანი) - ცვლის ნებისმიერი რაოდენობის სიმბოლოს
  • _ (ხაზგასმით) - ცვლის ერთ სიმბოლოს.

შევეცადოთ მოვძებნოთ საჭირო ვებ-გვერდი: შაბლონის შესაბამისად, DBMS იპოვის ყველა ხაზს, რომელიც შეიცავს ქვესტრინგს "Wiley". კიდევ ერთი მაგალითი: იპოვეთ ყველა წიგნი, რომლის სათაური იწყება სიტყვით "SQL":<ключевой_символ>. ნიმუშში ძირითადი სიმბოლოს პირდაპირი მიმდევრობა განიხილება, როგორც ნორმალური სიმბოლო, ყველა მომდევნო სიმბოლოს აქვს ნორმალური მნიშვნელობა. მაგალითად, ჩვენ უნდა ვიპოვოთ ბმული ვებ გვერდზე, რომელიც ცნობილია, რომ შეიცავს ქვესტრიქონს "my_works" მის url-ში: დასასრულს, გაითვალისწინეთ, რომ როდესაც ოპერატორი შესრულებულია, მიღებულ ურთიერთობას შეიძლება ჰქონდეს რამდენიმე ჩანაწერი იგივე მნიშვნელობებით . ყველა სფეროსთვის. საკვანძო სიტყვა გამოიყენება შერჩევისგან დუბლიკატი ჩანაწერების გამოსარიცხად. საკვანძო სიტყვა მიუთითებს, რომ ყველა სტრიქონი უნდა იყოს შეტანილი შედეგში.

4.6.7.DML: აირჩიეთ მრავალი ცხრილიდან.

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

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

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

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

4.6.8.DML: გამოთვლები SELECT-ში.

საშუალებას გაძლევთ შეასრულოთ სხვადასხვა არითმეტიკული მოქმედებები მიღებული მიმართების სვეტებზე. მშენებლობაში<список_выбора>შეგიძლიათ გამოიყენოთ მუდმივები, ფუნქციები და მათი კომბინაციები არითმეტიკული მოქმედებებითა და ფრჩხილებით. მაგალითად, იმის გასარკვევად, თუ რამდენი წელი გავიდა 1992 წლიდან (SQL-92 სტანდარტის მიღების წელი) კონკრეტული წიგნის გამოცემამდე, შეგიძლიათ შეასრულოთ ბრძანება: დამატება (+), გამოკლება (-), გაყოფა ( /), გამრავლება ( *), ასევე სხვადასხვა ფუნქციები (COS, SIN, ABS - აბსოლუტური მნიშვნელობა და ა.შ.).

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

  • AVG(<имя поля>) - საშუალო ამ ველის ყველა მნიშვნელობაზე
  • COUNT(<имя поля>) ან COUNT(*)- ჩანაწერების რაოდენობა
  • MAX(<имя поля>) - ამ ველის ყველა მნიშვნელობის მაქსიმუმი
  • MIN(<имя поля>) - ამ ველის ყველა მნიშვნელობის მინიმუმი
  • SUM(<имя поля>) - ამ ველის ყველა მნიშვნელობის ჯამი

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

4.6.9.DML: მონაცემთა დაჯგუფება.

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

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

საკვანძო სიტყვა მუშაობს შემდეგნაირად: ჯერ ის ყოფს სტრიქონებს ჯგუფებად, შემდეგ კი პირობები დაწესდება მიღებულ კომპლექტებზე. მაგალითად, წინა მოთხოვნიდან წავშალოთ ის გამომცემლები, რომლებსაც აქვთ მხოლოდ ერთი წიგნი: გამოყენების სხვა შემთხვევა არის შედეგში მხოლოდ იმ გამომცემლების ჩართვა, რომელთა სახელი მთავრდება ქვესტრიქონით „Press“: რა განსხვავებაა ამ ორ გამოყენების შემთხვევას შორის? მეორე ვარიანტში შეგვეძლო ჩანაწერის შერჩევის პირობა განვათავსოთ საკვანძო სიტყვების განყოფილებაში, მაგრამ პირველ ვარიანტში ამის გაკეთება შეუძლებელია, რადგან ის არ იძლევა აგრეგაციის ფუნქციების გამოყენების საშუალებას.

4.6.10.DML: მონაცემთა დახარისხება.

საკვანძო სიტყვა გამოიყენება ოპერატორის მიერ მიღებული მონაცემების დასალაგებლად. მასთან ერთად, თქვენ შეგიძლიათ დაალაგოთ შედეგები მითითებული ნებისმიერი სვეტის ან გამოხატვის მიხედვით<списке_выбора>. მონაცემები შეიძლება დალაგდეს ზრდადობით ან კლებადობით. მაგალითი: დაალაგეთ ავტორთა სია ანბანურად: უფრო რთული მაგალითი: მიიღეთ ავტორების სია დალაგებული ანბანურად და მათი პუბლიკაციების სია, სადაც თითოეული ავტორი ახარისხებს წიგნების სიას გამოცემის თარიღის მიხედვით საპირისპირო თანმიმდევრობით (ანუ, ჯერ უახლესი წიგნები, შემდეგ უფრო და უფრო „უძველესი“): საკვანძო სიტყვა აქ მიუთითებს ველების მიხედვით დახარისხების საპირისპირო თანმიმდევრობას წელიწადი, საკვანძო სიტყვა (შეიძლება გამოტოვოთ) - პირდაპირი დალაგება ველების მიხედვით ავტორი.

4.6.11.DML: შერწყმის ოპერაცია.

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

4.6.12 ხედების გამოყენება.

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

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

ხედი განისაზღვრება ბრძანებით

ხედის შექმნა<имя_представления> [<имя_столбца>,…] AS<запрос> უნდა დაიცვან შემდეგი შეზღუდვები:

  • ნახვა უნდა ეფუძნებოდეს ერთ მოთხოვნას (დაუშვებელია)
  • ხედის წარმომქმნელი მოთხოვნის გამომავალი უნდა იყოს შეუკვეთავი (დაუშვებელია)

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

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

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

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

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

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

ხედის ამოღება ხდება ოპერატორის გამოყენებით:

DROP VIEW<имя_представления>

4.6.13 SQL-ის სხვა მახასიათებლები.

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

  • შენახული პროცედურები. მონაცემთა დამუშავების აპლიკაციების შექმნის პრაქტიკული გამოცდილება აჩვენებს, რომ მონაცემთა მთელი რიგი ოპერაციები, რომლებიც ახორციელებენ საერთო ლოგიკას ყველა მომხმარებლისთვის და არ არის დაკავშირებული მომხმარებლის ინტერფეისთან, უნდა გადავიდეს სერვერზე. ამასთან, ამ ოპერაციების განხორციელების პროცედურების დასაწერად, სტანდარტული ფუნქციები საკმარისი არ არის, რადგან აქ საჭიროა ოპერატორები ფილიალების, მარყუჟების და ა.შ. ამიტომ, ბევრი DBMS გამყიდველი გვთავაზობს საკუთარს პროცედურულიგაფართოებები (Oracle-ის PL/SQL და ა.შ.). ეს გაფართოებები შეიცავს ლოგიკურ გამონათქვამებს (IF ... მაშინ ... ELSE), პირობითი გადახტომის განცხადებებს (SWITCH ... CASE ...), მარყუჟის განცხადებებს (FOR, WHILE, UNTIL) და კონტროლის განცხადებების გადაცემის პროცედურებზე (CALL, RETURN). ). ეს ხელსაწყოები ქმნიან ფუნქციურ მოდულებს, რომლებიც ინახება სერვერზე მონაცემთა ბაზასთან ერთად. ამ მოდულებს ჩვეულებრივ უწოდებენ შენახული პროცედურები. მათი გამოძახება შესაძლებელია პარამეტრის გადაცემით ნებისმიერი მომხმარებლის მიერ, რომელსაც აქვს ამის უფლება. ზოგიერთ სისტემაში შენახული პროცედურები ასევე შეიძლება განხორციელდეს როგორც DBMS-ის გარე მოდულები ზოგადი დანიშნულების ენებზე, როგორიცაა Cან პასკალი.

    SQL - განახლების მოთხოვნა

    მაგალითი PostgreSQL DBMS: ფუნქციის შექმნა<имя_функции> ([<тип_параметра1>,…<тип_параметра2>]) RETURNs <return ტიპები> როგორც [ | <имя_объектного_модуля>]ენა „SQL“ | 'C' | "შინაგანი"შექმნილი ფუნქცია გამოძახებულია SELECT განაცხადიდან (იგივეა, როგორც აგრეგაციის ფუნქციები). შენახული პროცედურების შესახებ დამატებითი ინფორმაციისთვის იხილეთ E. Eisenberg-ის სტატია New Standard for Stored Procedures in SQL, DBMS N 5-6, 1996 წ.

  • ტრიგერები. თითოეული ცხრილისთვის შეიძლება დაინიშნოს შენახული პროცედურა პარამეტრების გარეშე, რომელიც გამოიძახება ამ ცხრილის მოდიფიკაციის განაცხადის (INSERT, UPDATE, DELETE) შესრულებისას. ასეთ შენახულ პროცედურებს ტრიგერები ეწოდება. ტრიგერები ავტომატურად სრულდება, იმისდა მიუხედავად, ეს არის ადამიანის ოპერატორის მოქმედება თუ აპლიკაციის პროგრამა, რომელიც იწვევს მონაცემთა ცვლილებას. ტრიგერის შექმნის განცხადების "საშუალო" სინტაქსი: ტრიგერის შექმნა<имя_триггера>ჩართულია<имя_таблицы>FOR ( ჩასმა | განახლება | წაშლა ) [, INSERT | განახლება | წაშლა] ... როგორც საკვანძო სიტყვა განსაზღვრავს ცხრილის სახელს, რომლისთვისაც არის განსაზღვრული ტრიგერი, საკვანძო სიტყვა მიუთითებს, თუ რომელი მონაცემთა მოდიფიკაციის ბრძანებ(ებ)ი ააქტიურებს ტრიგერს. საკვანძო სიტყვის შემდეგ განცხადებები აღწერს მოქმედებებს, რომლებსაც ტრიგერი ასრულებს და ამ მოქმედებების შესრულების პირობებს. ნებისმიერი რაოდენობის განცხადებები, შენახული პროცედურების ზარები და ა.შ. შეგიძლიათ ჩამოთვალოთ აქ. ტრიგერების გამოყენება ძალიან მოსახერხებელია მთლიანობის შეზღუდვის შემოწმების ოპერაციების შესასრულებლად (იხ. თავი 4.3).
  • ღონისძიების მონიტორები. რიგი DBMS იძლევა ისეთი შენახული პროცედურების შექმნას, რომლებიც განუწყვეტლივ სკანირებენ ერთ ან მეტ ცხრილს გარკვეული მოვლენების გამოსავლენად (მაგალითად, სვეტის საშუალო მნიშვნელობა აღწევს მითითებულ ზღვარს). მოვლენის შემთხვევაში შეიძლება დაიწყოს ტრიგერი, შენახული პროცედურა, გარე მოდული და ა.შ. მაგალითი: მოდით, ჩვენი მონაცემთა ბაზა იყოს პროცესის კონტროლის ავტომატური სისტემის ნაწილი. ერთ-ერთი ცხრილის ველში ჩასმულია ხრახნის საჭრელზე დაყენებული ტემპერატურის სენსორის ჩვენებები. როდესაც ეს მნიშვნელობა აღემატება მითითებულ ლიმიტს, იხსნება გარე პროგრამა, რომელიც ცვლის აპარატის პარამეტრებს.

კითხვა ძველია, მაგრამ ვგრძნობდი, რომ საუკეთესო პასუხი ჯერ არ მიცემულა.

არის თუ არა სინტაქსი განახლებისთვის... სვეტების სახელების მითითების გარეშე ?

ზოგადი გადაწყვეტა დინამიური SQL-ით

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

ეს სპეციფიკურია PostgreSQL-სთვის. მე ვაშენებ დინამიურ კოდს, რომელიც ეფუძნება schema_information-ს, კონკრეტულად ცხრილს, რომელიც განსაზღვრულია ANSI SQL-ში და მხარს უჭერს ყველაზე თანამედროვე DBMS-ებს (გარდა Oracle-ისა). მაგრამ განცხადება PL/pgSQL კოდით, რომელიც ახორციელებს დინამიურ SQL-ს, არის სრულიად არასტანდარტული PostgreSQL სინტაქსი.

SQL განახლება

ვივარაუდოთ, რომ შესაბამისი სვეტი for ყველასსვეტში, მაგრამ არა პირიქით.

შეიძლება ჰქონდეს დამატებითი სვეტები.

არასავალდებულოა მხოლოდ შერჩეული მწკრივის განახლება.

SQL Fiddle.

მსგავსი პასუხები მეტი განმარტებით:

ნაწილობრივი გადაწყვეტილებები უბრალო SQL-ით

გამყოფი სვეტების სიით

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

SQL Fiddle.

ეს სინტაქსი დაინერგა Postgres 8.2-ით 2006 წლის დეკემბერში, კითხვაზე დიდი ხნით ადრე.
დამატებითი დეტალები მოცემულია სახელმძღვანელოში და შესაბამისი პასუხი dba.SE-ზე:

სვეტების სიით

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

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

SQL Fiddle.

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

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

მე მაქვს ორი მაგიდა:

ყოველთვის იქნება ქვესიმრავლე (რაც ნიშნავს, რომ ყველა სვეტი ასევე შედის).

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

არის თუ არა სინტაქსი ან სხვა გზა ამის გასაკეთებლად სვეტების სახელების მითითების გარეშე, უბრალოდ თქვით "დააყენეთ ყველა სვეტი A" ?

მე ვიყენებ PostgreSQL, ამიტომ კონკრეტული არასტანდარტული ბრძანება ასევე მიღებულია (თუმცა არ არის რეკომენდებული).

ეს ცნებები ეხება მონაცემთა ბაზებს.

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

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

პროცედურული პროცედურულიარაპროცედურული არაპროცედურული

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

ოპერატორის განახლება

არის კიდევ ერთი არაპროცედურული ენა QBE. მოდით, გვერდიდან შევხედოთ SQL. Ისე, SQLეს არის ორი ნაწილი, პირველი ნაწილი არის მონაცემთა ბაზაში ობიექტების შესაქმნელად DDL, ხოლო მეორე ნაწილი ამ ობიექტებში მონაცემებით მანიპულირებისთვისაა DML. რატომ ასეთი დაყოფა? მონაცემთა ბაზის შექმნა არ არის ადვილი საქმე და მოითხოვს სერიოზულ შესწავლას. არსებობს სპეციალური პროგრამები, რომლებიც ხელს უწყობენ მონაცემთა სტრუქტურის შექმნას, კავშირების შემოწმებას და წინააღმდეგობების გადაჭრას დიზაინის ეტაპზე. ამ პროგრამების მუშაობის შედეგად იქმნება ბრძანებების ნაკრები DDL(ოპერატორების სახით SQL) რომელიც მუშაობს მონაცემთა ბაზის სერვერზე და ყველა სტრუქტურა მზად არის წასასვლელად. შემდეგ იწყება შევსება, მე უკვე ვიყენებ DMLდა შემდეგ იმუშავეთ, ისევ გამოიყენეთ DML(ოპერატორების სახით SQL).

წინა ნაბიჯი | შემდეგი ნაბიჯი | Სარჩევი
ავტორი კაევ არტემი.

 
სტატიები მიერთემა:
მაკარონი თინუსით ნაღების სოუსში მაკარონი ახალი ტუნას ნაღების სოუსში
მაკარონი ტუნასთან ერთად ნაღების სოუსში არის კერძი, რომლიდანაც ნებისმიერი ენა გადაყლაპავს, რა თქმა უნდა, არა მხოლოდ გასართობად, არამედ იმიტომ, რომ ის საოცრად გემრიელია. ტუნა და მაკარონი სრულყოფილ ჰარმონიაშია ერთმანეთთან. რა თქმა უნდა, ალბათ ვინმეს არ მოეწონება ეს კერძი.
საგაზაფხულო რულონები ბოსტნეულით ბოსტნეულის რულონები სახლში
ამრიგად, თუ თქვენ გიჭირთ კითხვა "რა განსხვავებაა სუშისა და რულონებს შორის?", ჩვენ ვპასუხობთ - არაფერი. რამდენიმე სიტყვა იმის შესახებ, თუ რა არის რულონები. რულონები სულაც არ არის იაპონური სამზარეულო. რულეტების რეცეპტი ამა თუ იმ ფორმით გვხვდება ბევრ აზიურ სამზარეულოში.
ფლორისა და ფაუნის დაცვა საერთაშორისო ხელშეკრულებებში და ადამიანის ჯანმრთელობა
ეკოლოგიური პრობლემების გადაჭრა და, შესაბამისად, ცივილიზაციის მდგრადი განვითარების პერსპექტივები დიდწილად დაკავშირებულია განახლებადი რესურსების კომპეტენტურ გამოყენებასთან და ეკოსისტემების სხვადასხვა ფუნქციებთან და მათ მართვასთან. ეს მიმართულება არის ყველაზე მნიშვნელოვანი გზა
მინიმალური ხელფასი (მინიმალური ხელფასი)
მინიმალური ხელფასი არის მინიმალური ხელფასი (SMIC), რომელსაც ამტკიცებს რუსეთის ფედერაციის მთავრობა ყოველწლიურად ფედერალური კანონის "მინიმალური ხელფასის შესახებ" საფუძველზე. მინიმალური ხელფასი გამოითვლება სრულად დასრულებული ყოველთვიური სამუშაო განაკვეთისთვის.