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

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

წინა თემაში SQL Management Studio-ში შეიქმნა მარტივი მონაცემთა ბაზა ერთი ცხრილით. ახლა მოდით განვსაზღვროთ და შევასრულოთ პირველი SQL მოთხოვნა. ამისათვის გახსენით SQL Management Studio, დააწკაპუნეთ მარჯვენა ღილაკით Object Explorer-ის ზედა დონის ელემენტზე (სერვერის სახელი) და აირჩიეთ New Query კონტექსტური მენიუდან, რომელიც გამოჩნდება:

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

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

SELECT * FROM University.dbo.Students

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

მოთხოვნის შეყვანის შემდეგ დააწკაპუნეთ ღილაკზე Execute ინსტრუმენტთა პანელზე, ან შეგიძლიათ დააჭიროთ F5 ღილაკს.

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

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

გამოიყენეთ უნივერსიტეტის SELECT * სტუდენტებისგან

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

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

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

თქვენ შეგიძლიათ იმუშაოთ შეკითხვებთან შეკითხვის რედაქტორის ან Solution Explorer-ის გამოყენებით. ეს სტატია მოიცავს ორივე ამ ხელსაწყოს. SQL Server Management Studio-ის ამ ორი კომპონენტის გარდა, ჩვენ გადავხედავთ SQL კოდის გამართვას ჩაშენებული გამართვის გამოყენებით.

შეკითხვის რედაქტორი

შეკითხვის რედაქტორის პანელის გასახსნელად შეკითხვის რედაქტორი, SQL Server Management Studio-ის ხელსაწყოთა პანელზე დააწკაპუნეთ ღილაკს New Query. ეს პანელი შეიძლება გაფართოვდეს ღილაკების ჩვენებამდე ყველა შესაძლო შეკითხვის შესაქმნელად და არა მხოლოდ მონაცემთა ბაზის ძრავის მოთხოვნების შესაქმნელად. ნაგულისხმევად, იქმნება მონაცემთა ბაზის ძრავის ახალი მოთხოვნა, მაგრამ ასევე შეგიძლიათ შექმნათ MDX, XMLA და სხვა მოთხოვნები ინსტრუმენტთა პანელზე შესაბამის ღილაკზე დაწკაპუნებით.

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

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

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

    Transact-SQL განცხადებების შექმნა და შესრულება;

    შექმნილი Transact-SQL ენის განცხადებების ფაილში შენახვა;

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

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

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

პირველი USE მოთხოვნის განცხადება განსაზღვრავს SampleDb მონაცემთა ბაზის გამოყენებას, როგორც მიმდინარე მონაცემთა ბაზას. მეორე განცხადება, SELECT, ამოიღებს ყველა სტრიქონს Employee ცხრილიდან. ამ მოთხოვნის გასაშვებად და შედეგების საჩვენებლად, შეკითხვის რედაქტორის ხელსაწყოთა პანელზე დააწკაპუნეთ ღილაკზე Execute ან დააჭირეთ F5-ს.

თქვენ შეგიძლიათ გახსნათ Query Editor რამდენიმე ფანჯარა, ე.ი. განახორციელეთ მრავალი კავშირი მონაცემთა ბაზის ძრავის ერთ ან მეტ ინსტანციასთან. ახალი კავშირი იქმნება SQL Server Management Studio-ის ხელსაწყოთა ზოლზე New Query ღილაკზე დაწკაპუნებით.

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

    მიმდინარე ოპერაციის სტატუსი (მაგალითად, "მოთხოვნა წარმატებით დასრულდა");

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

    მიმდინარე მომხმარებლის სახელი და სერვერის პროცესის ID;

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

    ბოლო მოთხოვნის შესრულებაზე დახარჯული დრო;

    ნაპოვნი ხაზების რაოდენობა.

SQL Server Management Studio-ის ერთ-ერთი მთავარი უპირატესობა მისი გამოყენების სიმარტივეა, რაც ასევე ეხება Query Editor-ს. შეკითხვის რედაქტორი გთავაზობთ ბევრ ფუნქციას, რათა გააადვილოს Transact-SQL განცხადებების კოდირება. კერძოდ, ის იყენებს სინტაქსის ხაზგასმას Transact-SQL განცხადებების წაკითხვის გასაუმჯობესებლად. ყველა დაჯავშნილი სიტყვა ნაჩვენებია ლურჯად, ცვლადები ნაჩვენებია შავით, სტრიქონები ნაჩვენებია წითლად და კომენტარები ნაჩვენებია მწვანეში.

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

SQL Management Studio მხარს უჭერს SQL Intellisense-ს, რომელიც არის ავტომატური დასრულების ინსტრუმენტი. სხვა სიტყვებით რომ ვთქვათ, ეს მოდული გვთავაზობს ნაწილობრივ შეყვანილი Transact-SQL განცხადების ელემენტების ყველაზე სავარაუდო დასრულებას.

ობიექტის შემსწავლელი ასევე დაგეხმარებათ შეკითხვის რედაქტირებაში. მაგალითად, თუ გსურთ იცოდეთ როგორ შექმნათ CREATE TABLE განცხადება Employee ცხრილისთვის, დააწკაპუნეთ ცხრილზე მარჯვენა ღილაკით Object Explorer-ში და აირჩიეთ Script Table As --> CREATE to --> New Query Editor Window კონტექსტური მენიუდან. გამოჩნდება ცხრილები --> CREATE-ის გამოყენება --> ახალი შეკითხვის რედაქტორის ფანჯარა). შეკითხვის რედაქტორის ფანჯარა, რომელიც შეიცავს ამ გზით შექმნილ CREATE TABLE განცხადებას, ნაჩვენებია ქვემოთ მოცემულ ფიგურაში. ეს ფუნქცია ასევე ვრცელდება სხვა ობიექტებზე, როგორიცაა შენახული პროცედურები და ფუნქციები.

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

Solution Explorer

SQL Server Management Studio-ში შეკითხვის რედაქტირება ეფუძნება გადაწყვეტილებების მეთოდს. თუ თქვენ შექმნით ცარიელ მოთხოვნას ახალი შეკითხვის ღილაკის გამოყენებით, ის დაფუძნებული იქნება ცარიელ გადაწყვეტაზე. ამის ნახვა შეგიძლიათ ბრძანებების თანმიმდევრობის გაშვებით View --> Solution Explorer მენიუდან ცარიელი მოთხოვნის გახსნისთანავე.

გადაწყვეტილება შეიძლება დაკავშირებული იყოს არცერთ, ერთ ან რამდენიმე პროექტთან. ცარიელი გადაწყვეტა, რომელიც არ ასოცირდება არცერთ პროექტთან. პროექტის გამოსავალთან დასაკავშირებლად, დახურეთ ცარიელი გადაწყვეტა, Solution Explorer და Query Editor და შექმენით ახალი პროექტი File --> New --> Project გაშვებით. ახალი პროექტის ფანჯარაში, რომელიც იხსნება, შუა პანელში აირჩიეთ SQL Server Scripts ვარიანტი. პროექტი არის ფაილების ორგანიზების საშუალება კონკრეტულ ადგილას. თქვენ შეგიძლიათ მიანიჭოთ პროექტს სახელი და აირჩიოთ მდებარეობა დისკზე მისი მდებარეობისთვის. როდესაც თქვენ შექმნით ახალ პროექტს, ახალი გადაწყვეტა ავტომატურად იხსნება. თქვენ შეგიძლიათ დაამატოთ პროექტი არსებულ გადაწყვეტას Solution Explorer-ის გამოყენებით.

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

SQL სერვერის გამართვა

SQL Server, დაწყებული SQL Server 2008-ით, აქვს ჩაშენებული კოდის გამართვა. გამართვის სესიის დასაწყებად აირჩიეთ გამართვა --> გამართვის დაწყება SQL Server Management Studio-ის მთავარი მენიუდან. ჩვენ შევხედავთ, თუ როგორ მუშაობს გამართვა, მაგალითის გამოყენებით ბრძანებების ჯგუფის გამოყენებით. ჯგუფი არის SQL განცხადებებისა და პროცედურული გაფართოებების ლოგიკური თანმიმდევრობა, რომელიც იგზავნება მონაცემთა ბაზის ძრავზე, რათა შეასრულოს მასში შემავალი ყველა განცხადება.

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

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

გამართვის პროცესთან დაკავშირებული ინფორმაცია ნაჩვენებია ორ პანელში შეკითხვის რედაქტორის ფანჯრის ბოლოში. ინფორმაცია სხვადასხვა ტიპის გამართვის ინფორმაციის შესახებ დაჯგუფებულია ამ პანელებში რამდენიმე ჩანართად. მარცხენა პანელი შეიცავს Autos ჩანართს, Locals ჩანართს და ხუთ საათამდე ჩანართს. მარჯვენა პანელი შეიცავს Call Stack, Threads, Breakpoints, Command Window, Immediate Window და Output ჩანართებს. Locals ჩანართი აჩვენებს ცვლადი მნიშვნელობებს, Call Stack ჩანართზე აჩვენებს ზარის დასტას მნიშვნელობებს, ხოლო Breakpoints-ის ჩანართს აჩვენებს წყვეტის წერტილების ინფორმაციას.

გამართვის პროცესის დასასრულებლად, შეასრულეთ ბრძანებების თანმიმდევრობა მთავარი მენიუდან Debug --> Stop Debugging ან დააწკაპუნეთ ლურჯ ღილაკს debugger-ის პანელზე.

SQL Server 2012 ამატებს რამდენიმე ახალ ფუნქციას SQL Server Management Studio-ში ჩაშენებულ გამართვას. ახლა თქვენ შეგიძლიათ შეასრულოთ მასში რამდენიმე შემდეგი ოპერაციები:

    მიუთითეთ წყვეტის წერტილის მდგომარეობა. წყვეტის მდგომარეობაარის SQL გამოხატულება, რომლის შეფასებული მნიშვნელობა განსაზღვრავს, შეჩერდება თუ არა კოდის შესრულება მოცემულ წერტილში. წყვეტის წერტილის პირობის დასადგენად, დააწკაპუნეთ მაუსის მარჯვენა ღილაკით წითელ წყვეტის წერტილის ხატულაზე და აირჩიეთ მდგომარეობა კონტექსტური მენიუდან. იხსნება დიალოგური ფანჯარა Breakpoint Condition, რომელიც საშუალებას გაძლევთ შეიყვანოთ საჭირო ლოგიკური გამოხატულება. გარდა ამისა, თუ თქვენ გჭირდებათ შესრულების შეჩერება, თუ გამოთქმა მართალია, უნდა დააყენოთ Is True შეცვლა. თუ შესრულება უნდა შეწყდეს, თუ გამოთქმა შეიცვალა, მაშინ უნდა დააყენოთ გადამრთველი When Changed.

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

    1. უპირობო (ნაგულისხმევი მოქმედება) (შესვენება ყოველთვის);

      თუ დარტყმების რაოდენობა უდრის მითითებულ მნიშვნელობას (Break როდესაც მისი რაოდენობა უდრის მითითებულ მნიშვნელობას);

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

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

    გამართვის დროს დარტყმების რაოდენობის დასაყენებლად, დააწკაპუნეთ მაუსის მარჯვენა ღილაკზე Breakpoints ჩანართზე, აირჩიეთ Hit Count კონტექსტური მენიუდან, შემდეგ აირჩიეთ ერთ-ერთი პირობა Breakpoint Hit Count დიალოგურ ფანჯარაში, რომელიც იხსნება წინა სიიდან. ვარიანტებისთვის, რომლებიც საჭიროებენ მნიშვნელობას, შეიყვანეთ იგი ტექსტურ ველში პირობების ჩამოსაშლელი სიის მარჯვნივ. მითითებული პირობების შესანახად დააჭირეთ OK.

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

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

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

    გამოიყენეთ სწრაფი საათის ფანჯარა. თქვენ შეგიძლიათ ნახოთ Transact-SQL გამოხატვის მნიშვნელობა QuickWatch ფანჯარაში და შემდეგ შეინახოთ გამონათქვამი Watch ფანჯარაში. სწრაფი საათის ფანჯრის გასახსნელად, გამართვის მენიუდან აირჩიეთ Quick Watch. ამ ფანჯარაში გამოსახულება შეიძლება შეირჩეს Expression-ის ჩამოსაშლელი სიიდან ან შეიყვანოთ ამ ველში.

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

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

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

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

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

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

მიღებული ცხრილიარის ცხრილის გამოხატულება, რომელიც შედის შეკითხვის 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 განცხადება აჩვენებს შემდეგ შედეგს.

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

მაგრამ მონაცემთა ბაზების მუდმივი გამოყენების მიუხედავად, პროგრამული სისტემების მრავალი შემქმნელისთვისაც კი არსებობს მრავალი ბრმა წერტილი ერთი და იგივე ტერმინების განსხვავებული ინტერპრეტაციების გამო. ჩვენ მივცემთ მონაცემთა ბაზის ძირითადი ტერმინების მოკლე განმარტებას 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 სინტაქსის სტანდარტი, მონაცემთა ბაზების რეპლიკაცია და ღრუბლოვანი სერვისები.

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

SQL დანაყოფი:


DDL
(მონაცემთა განმარტების ენა) - ANSI-ში ეგრეთ წოდებული Schema Description Language, შედგება ბრძანებებისგან, რომლებიც ქმნიან ობიექტებს (ცხრილები, ინდექსები, ხედები და ა.შ.) მონაცემთა ბაზაში.
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 = 'როსტოვი' OR NOT user_name = 'ალექსანდრე';- აჩვენებს ყველა მნიშვნელობას ცხრილიდან, სადაც ქალაქის როსტოვის სახელი ჩანს ერთ ხაზზე ან მომხმარებლის სახელი არ არის ზუსტად ალექსანდრე.

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 პროგრამირების საფუძვლები, თქვენ შეგიძლიათ მიაღწიოთ მწვერვალს საკუთარი თავის ცოდნით საფუძვლებს.

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