Ms sql server so'rovlari. MS SQL Server ma'lumotlar bazasida so'rov (Query) yaratishga misol

Oxirgi yangilanish: 07/05/2017

Oxirgi mavzuda SQL Management Studio dasturida bitta jadvalli oddiy ma lumotlar bazasi yaratilgan. Endi birinchi SQL so'rovini aniqlaymiz va bajaramiz. Buni amalga oshirish uchun SQL Management Studio dasturini oching, Object Explorer-dagi (server nomi) yuqori darajadagi elementni o'ng tugmasini bosing va paydo bo'lgan kontekst menyusidan Yangi so'rovni tanlang:

Shundan so'ng, dasturning markaziy qismida SQL buyruqlarini kiritish oynasi ochiladi.

Oldingi mavzuda yaratilgan jadval bo'yicha so'rovni bajaramiz, xususan, biz undan barcha ma'lumotlarni olamiz. Bizning ma'lumotlar bazasi universitet deb ataladi va jadval dbo.Students , shuning uchun jadvaldan ma'lumotlarni olish uchun biz quyidagi so'rovni kiritamiz:

TANLANG * universitet.dbo.Students

SELECT bayonoti ma'lumotlarni tanlash imkonini beradi. FROM ma'lumotni qaerdan olish kerakligini ko'rsatadi. Aslida, bu so'rov bilan biz "barchasini universitet.dbo.Students jadvalidan tanlang" deymiz. Shuni ta'kidlash kerakki, jadvalning to'liq yo'li ma'lumotlar bazasi va sxemani ko'rsatuvchi jadval nomi uchun ishlatiladi.

So'rovni kiritgandan so'ng, asboblar panelidagi "Bajarish" tugmasini bosing yoki F5 tugmasini bosishingiz mumkin.

So'rovni bajarish natijasida dasturning pastki qismida kichik jadval paydo bo'ladi, unda so'rov natijalari - ya'ni "Talabalar" jadvalidagi barcha ma'lumotlar ko'rsatiladi.

Agar bitta ma'lumotlar bazasiga bir nechta so'rovlar qilish kerak bo'lsa, biz ma'lumotlar bazasini bajarish uchun USE buyrug'idan foydalanishimiz mumkin. Bunday holda, jadvallarni so'rashda ma'lumotlar bazasi nomi va sxemasisiz ularning nomini ko'rsatish kifoya:

Talabalardan universitet SELECT * ISHLATISH

Bunday holda, biz server uchun so'rovni bir butun sifatida bajaramiz, biz serverdagi istalgan ma'lumotlar bazasiga kira olamiz. Ammo biz so'rovlarni faqat ma'lum bir ma'lumotlar bazasida bajarishimiz mumkin. Buning uchun kerakli ma'lumotlar bazasini o'ng tugmasini bosing va kontekst menyusidan "Yangi so'rov" ni tanlang:

Agar bu holda biz yuqorida qo'llanilgan talabalar jadvalini so'ramoqchi bo'lsak, so'rovda ma'lumotlar bazasi nomi va sxemasini ko'rsatishimiz shart emas, chunki bu qiymatlar allaqachon aniq bo'lar edi.

SQL Server Management Studio barcha turdagi so'rovlarni yaratish uchun to'liq vositani taqdim etadi. Uning yordamida siz so'rovlarni yaratishingiz, saqlashingiz, yuklashingiz va tahrirlashingiz mumkin. Bundan tashqari, siz hech qanday serverga ulanmasdan so'rovlar ustida ishlashingiz mumkin. Ushbu vosita, shuningdek, turli loyihalar uchun so'rovlarni ishlab chiqish imkoniyatini beradi.

So'rovlar bilan so'rovlar muharriri va Yechim Explorer orqali ishlashingiz mumkin. Ushbu maqola ikkala vositani ham qamrab oladi. SQL Server Management Studio ning ushbu ikkita komponentiga qo'shimcha ravishda biz o'rnatilgan tuzatuvchi yordamida SQL kodini tuzatishni ko'rib chiqamiz.

So'rov muharriri

So'rovlar muharriri panelini ochish uchun So'rov muharriri, SQL Server Management Studio asboblar panelida Yangi so'rov tugmasini bosing. Ushbu panelni faqat Database Engine so'rovlarini emas, balki barcha mumkin bo'lgan so'rovlarni yaratish tugmalarini ko'rsatish uchun kengaytirilishi mumkin. Odatiy bo'lib, yangi Database Engine so'rovi yaratiladi, lekin siz asboblar panelidagi tegishli tugmani bosish orqali MDX, XMLA va boshqa so'rovlarni ham yaratishingiz mumkin.

So'rovlar muharriri panelining pastki qismidagi holat satri muharrirning serverga ulanish holatini ko'rsatadi. Agar siz serverga avtomatik ravishda ulanmagan bo'lsangiz, So'rovlar muharririni ishga tushirganingizda, sizga ulanish uchun server va autentifikatsiya rejimini tanlashingiz mumkin bo'lgan Serverga ulanish dialog oynasi paydo bo'ladi.

So'rovlarni oflayn rejimda tahrirlash serverga ulangandan ko'ra ko'proq moslashuvchanlikni ta'minlaydi. So‘rovlarni tahrirlash uchun serverga ulanish shart emas, so‘rovlar muharriri oynasini bir serverdan uzish (So‘rov --> Ulanish --> O‘chirish menyu buyrug‘i yordamida) va boshqa tahrirlovchi oynasini ochmasdan boshqasiga ulanish mumkin. Oflayn tahrirlash rejimini tanlash uchun ma'lum bir so'rov turi uchun muharrirni ishga tushirganingizda paydo bo'ladigan serverga ulanish dialog oynasida "Bekor qilish" tugmasini bosing.

So'rovlar muharriridan quyidagi vazifalarni bajarish uchun foydalanishingiz mumkin:

    Transact-SQL operatorlarini yaratish va bajarish;

    yaratilgan Transact-SQL bayonotlarini faylga saqlash;

    umumiy so'rovlar uchun ijro rejalarini yaratish va tahlil qilish;

    tanlangan so'rovni bajarish rejasining grafik tasviri.

So'rovlar muharriri o'rnatilgan matn muharriri va turli harakatlar uchun tugmalar to'plamiga ega asboblar panelini o'z ichiga oladi. So'rovlar muharririning asosiy oynasi gorizontal ravishda so'rovlar paneli (yuqori) va natijalar paneli (pastki) ga bo'lingan. Bajarilishi kerak bo'lgan Transact-SQL operatorlari (ya'ni so'rovlar) yuqori panelga kiritiladi va tizimning ushbu so'rovlarni qayta ishlash natijalari pastki panelda ko'rsatiladi. Quyidagi rasmda so'rovlar muharririga so'rovni kiritish misoli va bu so'rovni bajarish natijalari ko'rsatilgan:

Birinchi USE so'rovi bayonoti joriy ma'lumotlar bazasi sifatida SampleDb ma'lumotlar bazasidan foydalanishni belgilaydi. Ikkinchi ibora, SELECT, Xodimlar jadvalidagi barcha qatorlarni oladi. Ushbu so'rovni bajarish va natijalarni ko'rsatish uchun So'rovlar muharriri asboblar panelida "Bajarish" tugmasini bosing yoki F5 tugmasini bosing.

Siz bir nechta so'rovlar muharriri oynasini ochishingiz mumkin, ya'ni. Ma'lumotlar bazasi mexanizmining bir yoki bir nechta nusxalariga bir nechta ulanishlarni amalga oshirish. SQL Server Management Studio asboblar panelidagi New Query tugmasini bosish orqali yangi ulanish yaratiladi.

So'rovlar muharriri oynasining pastki qismidagi holat satrida so'rovlar bayonotlarining bajarilishi bilan bog'liq quyidagi ma'lumotlar ko'rsatiladi:

    joriy operatsiya holati (masalan, "So'rov muvaffaqiyatli yakunlandi");

    ma'lumotlar bazasi serverining nomi;

    joriy foydalanuvchi nomi va server jarayoni identifikatori;

    joriy ma'lumotlar bazasi nomi;

    oxirgi so'rovni bajarish uchun sarflangan vaqt;

    topilgan qatorlar soni.

SQL Server Management Studio ning asosiy afzalliklaridan biri uning foydalanish qulayligi bo'lib, u Query Editor uchun ham amal qiladi. So'rovlar muharriri Transact-SQL bayonotlarini kodlashni osonlashtiradigan ko'plab xususiyatlarni taqdim etadi. Xususan, Transact-SQL bayonotlarining o'qilishini yaxshilash uchun sintaksisni ta'kidlashdan foydalanadi. Barcha zaxiralangan so'zlar ko'k rangda, o'zgaruvchilar qora rangda, satrlar qizil rangda va izohlar yashil rangda ko'rsatilgan.

Bundan tashqari, so'rovlar muharriri kontekstga sezgir yordamga ega Dinamik yordam, bu orqali siz ma'lum bir ko'rsatma haqida ma'lumot olishingiz mumkin. Agar siz bayonot sintaksisini bilmasangiz, uni tahrirlovchida tanlang va keyin F1 tugmasini bosing. Shuningdek, Books Online-dan yordam olish uchun turli Transact-SQL bayonotlarining parametrlarini ajratib ko'rsatishingiz mumkin.

SQL Management Studio avtomatik to'ldirish vositasining bir turi bo'lgan SQL Intellisense-ni qo'llab-quvvatlaydi. Boshqacha qilib aytganda, ushbu modul qisman kiritilgan Transact-SQL bayonoti elementlarining eng katta ehtimol bilan yakunlanishini taklif qiladi.

Object Explorer so'rovlarni tahrirlashda ham yordam berishi mumkin. Misol uchun, agar siz Xodimlar jadvali uchun CREATE TABLE bayonotini yaratishni o'rganmoqchi bo'lsangiz, Object Explorer-da jadvalni o'ng tugmasini bosing va yorliq menyusidan Skript jadvali sifatida --> CREATE to --> New Query Editor oynasini tanlang. jadvallar --> CREATE-dan foydalanish --> Yangi so'rovlar muharriri oynasi). Shu tarzda yaratilgan CREATE TABLE operatorini o'z ichiga olgan So'rovlar muharriri oynasi quyidagi rasmda ko'rsatilgan. Bu imkoniyat, shuningdek, saqlangan protseduralar va funktsiyalar kabi boshqa ob'ektlar uchun ham amal qiladi.

Ob'ekt brauzeri ma'lum bir so'rov uchun bajarish rejasini grafik ko'rsatish uchun juda foydali. So'rovni bajarish rejasi - bu ma'lum bir so'rovni bajarish uchun bir nechta mumkin bo'lgan variantlar orasida so'rovlarni optimallashtiruvchi tomonidan tanlangan bajarish variantidir. Tahrirlovchining yuqori paneliga kerakli so'rovni kiriting, So'rov --> Taxminiy bajarilish rejasini ko'rsatish (So'rov --> Taxminiy bajarilish rejasini ko'rsatish) menyusidan buyruqlar ketma-ketligini tanlang va ushbu so'rovning bajarish rejasi ekranda ko'rsatiladi. muharrir oynasining pastki paneli.

Yechim Explorer

SQL Server Management Studio'da so'rovlarni tahrirlash yechimlar usuliga asoslanadi. Yangi so'rov tugmasi yordamida bo'sh so'rov yaratsangiz, u bo'sh yechimga asoslanadi. Buni bo'sh so'rovni ochgandan so'ng darhol View -> Solution Explorer menyusidan buyruqlar ketma-ketligini ishga tushirish orqali ko'rish mumkin.

Qaror hech bir, bir yoki bir nechta loyiha bilan bog'liq bo'lishi mumkin. Hech qanday loyiha bilan bog'lanmagan bo'sh yechim. Loyihani yechim bilan bog‘lash uchun bo‘sh yechim, Yechim Explorer va So‘rovlar muharririni yoping va Fayl -> Yangi -> Loyiha buyruqlar ketma-ketligini ishga tushirish orqali yangi loyiha yarating. Ochilgan Yangi loyiha oynasida o'rta panelda SQL Server skriptlari variantini tanlang. Loyiha - bu ma'lum bir joyda fayllarni tashkil qilish usuli. Siz loyihaga nom berishingiz va uning diskdagi joylashuvi uchun joy tanlashingiz mumkin. Yangi loyiha yaratganingizda, yangi yechim avtomatik ravishda ishga tushiriladi. Siz Solution Explorer yordamida mavjud yechimga loyiha qo'shishingiz mumkin.

Har bir yaratilgan loyiha uchun Solution Explorer ulanishlar (ulanishlar), so'rovlar (so'rovlar) va turli (turli) papkalarni ko'rsatadi. Berilgan loyiha uchun yangi so'rovlar muharriri oynasini ochish uchun uning "So'rovlar" papkasini o'ng tugmasini bosing va kontekst menyusidan "Yangi so'rov" ni tanlang.

Nosozliklarni tuzatish SQL Server

SQL Server, SQL Server 2008 dan boshlab, o'rnatilgan kodni tuzatuvchiga ega. Nosozliklarni tuzatish seansini boshlash uchun SQL Server Management Studio asosiy menyusidan Nosozliklarni tuzatish --> Nosozliklarni tuzatishni boshlash buyruqlar ketma-ketligini tanlang. Biz tuzatuvchining ishlashini buyruqlar paketi yordamida misol yordamida ko'rib chiqamiz. To'plam bu SQL bayonotlari va protsessual kengaytmalarning mantiqiy ketma-ketligi bo'lib, u o'z ichiga olgan barcha bayonotlarni bajarish uchun Ma'lumotlar bazasi mexanizmiga yuboriladi.

Quyidagi rasmda p1 loyihasida ishlaydigan xodimlar sonini hisoblaydigan paket ko'rsatilgan. Agar bu raqam 4 yoki undan ko'p bo'lsa, tegishli xabar ko'rsatiladi. Aks holda, xodimlarning ismlari va familiyalari ko'rsatiladi.

Muayyan ko'rsatma bo'yicha paketning bajarilishini to'xtatish uchun siz rasmda ko'rsatilganidek, to'xtash nuqtalarini o'rnatishingiz mumkin. Buni amalga oshirish uchun siz to'xtatmoqchi bo'lgan chiziqning chap tomoniga bosing. Nosozliklarni tuzatishni boshlaganingizda, bajarish sariq o'q bilan belgilangan kodning birinchi qatorida to'xtaydi. Bajarish va disk raskadrovkani davom ettirish uchun menyu buyrug'ini bajaring Debug --> Continue (Debugging --> Continue). Paket ko'rsatmalarini bajarish birinchi to'xtash nuqtasiga qadar davom etadi va sariq o'q shu nuqtada to'xtaydi.

Nosozliklarni tuzatish jarayoni bilan bog'liq ma'lumotlar So'rovlar muharriri oynasining pastki qismidagi ikkita panelda ko'rsatiladi. Turli xil disk raskadrovka ma'lumotlari haqidagi ma'lumotlar ushbu panellarda bir nechta yorliqlarda guruhlangan. Chap panelda "Avtomatiklar" (Avtomatik), "Mahalliy" (Mahalliy) va "Ko'rish" (Ko'rinadigan) beshtagacha yorliqlar mavjud. O'ng panelda qo'ng'iroqlar to'plami, mavzular, uzilish nuqtalari, buyruqlar oynasi, darhol oyna va chiqish yorliqlari mavjud. Mahalliylar yorlig'i o'zgaruvchan qiymatlarni, Call Stack yorlig'i qo'ng'iroqlar to'plami qiymatlarini va Breakpoints yorlig'i to'xtash nuqtalari haqida ma'lumotni ko'rsatadi.

Nosozliklarni tuzatish jarayonini to'xtatish uchun asosiy menyudan Debug --> Nosozliklarni tuzatishni to'xtatish buyruqlar ketma-ketligini bajaring yoki tuzatuvchi asboblar panelidagi ko'k tugmani bosing.

SQL Server 2012 da, SQL Server Management Studio'da o'rnatilgan tuzatuvchi bir nechta yangi xususiyatlar bilan yaxshilandi. Endi siz unda bir qator quyidagi operatsiyalarni bajarishingiz mumkin:

    To'xtash nuqtasi shartini belgilang. To'xtash nuqtasi holati Bu SQL ifodasi bo'lib, uning baholangan qiymati kodning bajarilishi ma'lum bir nuqtada to'xtatiladimi yoki yo'qligini aniqlaydi. To'xtash nuqtasi shartini belgilash uchun kerakli to'xtash nuqtasi uchun qizil belgini o'ng tugmasini bosing va kontekst menyusidan Shart-ni tanlang. Breakpoint Condition dialog oynasi ochiladi, unda siz kerakli mantiqiy ifodani kiritishingiz kerak. Bunga qo'shimcha ravishda, agar siz ifoda rost bo'lsa, bajarishni to'xtatmoqchi bo'lsangiz, "Is True" tugmachasini o'rnatishingiz kerak. Agar ifoda o'zgargan bo'lsa, ijroni to'xtatish kerak bo'lsa, u holda o'zgartirilganda (O'zgartirilganda) kalitni o'rnatishingiz kerak.

    To'xtash nuqtasiga urishlar sonini belgilang. Xitlar soni - bajarilish vaqtida to'xtash nuqtasiga necha marta urilganiga asoslanib, berilgan nuqtada bajarishni to'xtatish sharti. Belgilangan takrorlashlar soniga va berilgan to'xtash nuqtasi uchun ko'rsatilgan boshqa shartlarga erishilganda, tuzatuvchi belgilangan amalni bajaradi. Xitlar soniga asoslangan tanaffus holati quyidagilardan biri bo'lishi mumkin:

    1. shartsiz (standart amal) (Har doim sindirish);

      agar urishlar soni belgilangan qiymatga teng bo'lsa (uning soni belgilangan qiymatga teng bo'lganda sindirish);

      agar urishlar soni ko'rsatilgan qiymatning karrali bo'lsa (urishlar soni ko'rsatilgan qiymatning ko'paytmasiga teng bo'lganda sindirish);

      agar urishlar soni belgilangan qiymatga teng yoki undan ko'p bo'lsa (Uning soni belgilangan qiymatdan katta yoki teng bo'lganda sindirish).

    Nosozliklarni tuzatish vaqtida urishlar sonini o'rnatish uchun "To'xtash nuqtalari" yorlig'ida kerakli to'xtash nuqtasi belgisini o'ng tugmasini bosing, kontekst menyusidan "Urishlar soni" ni tanlang, so'ngra paydo bo'ladigan "To'xtash nuqtasi urishlar soni" dialog oynasida quyidagi shartlardan birini tanlang: yuqoridagi ro'yxatdan . Qiymat talab qiladigan variantlar uchun uni shartlar ochiladigan ro'yxatining o'ng tomonidagi matn maydoniga kiriting. Belgilangan shartlarni saqlash uchun OK tugmasini bosing.

    To'xtash nuqtasi filtrini belgilang. To'xtash nuqtasi filtri to'xtash nuqtasi ishini faqat belgilangan kompyuterlar, jarayonlar yoki oqimlar bilan cheklaydi. To'xtash nuqtasi filtrini o'rnatish uchun kerakli to'xtash nuqtasini o'ng tugmasini bosing va kontekst menyusidan Filtrni tanlang. Keyin ochilgan "To'xtash nuqtasi filtrlari" dialog oynasida ushbu to'xtash nuqtasining bajarilishini cheklamoqchi bo'lgan resurslarni belgilang. Belgilangan shartlarni saqlash uchun OK tugmasini bosing.

    To'xtash nuqtasida amalni belgilang. Qachon Hit sharti paketning bajarilishi berilgan to'xtash nuqtasiga to'g'ri kelganda bajarilishi kerak bo'lgan harakatni belgilaydi. Odatiy bo'lib, urishni hisoblash sharti va to'xtatish sharti bajarilsa, bajarish to'xtatiladi. Shu bilan bir qatorda, oldindan belgilangan xabarni ko'rsatishingiz mumkin.

    To'xtash nuqtasiga tegilganda nima qilish kerakligini belgilash uchun kerakli to'xtash nuqtasi uchun qizil belgini o'ng tugmasini bosing va kontekst menyusidan Qachon urishni tanlang. Ochilgan "When Breakpoint is Hit" dialog oynasida kerakli amalni tanlang. Belgilangan shartlarni saqlash uchun OK tugmasini bosing.

    Tezkor tomosha oynasidan foydalaning. QuickWatch oynasida siz Transact-SQL ifodasining qiymatini ko'rishingiz va keyin ushbu ifodani Kuzatuv qiymatlari oynasida saqlashingiz mumkin. Tezkor tomosha oynasini ochish uchun Debug menyusidan Tezkor tomoshani tanlang. Bu oynadagi ifoda yoki ifoda (Ifoda) ochiladigan roʻyxatidan tanlanishi yoki uni shu maydonga kiritishi mumkin.

    Tezkor ma'lumot maslahatidan foydalaning. Kod identifikatori ustiga kursorni olib kelsangiz, Tez ma'lumot vositasi o'z deklaratsiyasini qalqib chiquvchi oynada ko'rsatadi.

Jadval ifodalari pastki so'rovlar deb ataladi, ular jadval kutilayotgan joyda ishlatiladi. Jadval ifodalarining ikki turi mavjud:

    olingan jadvallar;

    umumlashtirilgan jadval ifodalari.

Jadval ifodalarining ushbu ikki shakli quyidagi kichik bo'limlarda muhokama qilinadi.

Olingan jadvallar

Olingan jadval so'rovning FROM bandiga kiritilgan jadval ifodasidir. Ustun taxalluslaridan foydalanish mumkin bo'lmaganda olingan jadvallardan foydalanish mumkin, chunki SQL tarjimoni taxallus ma'lum bo'lgunga qadar boshqa bayonotni qayta ishlaydi. Quyidagi misolda taxallus ma'lum bo'lgunga qadar boshqa band qayta ishlanayotgan vaziyatda ustun taxallusdan foydalanishga urinish ko'rsatilgan:

SampleDb dan foydalanish; MONTH(EnterDate) ni Enter_month sifatida tanlang. FROM Works_on GROUP BY BY enter_month;

Ushbu so'rovni bajarishga urinish quyidagi xato xabarini qaytaradi:

207-xabar, 16-darajali, 1-holat, 5-qator ustun nomi yaroqsiz "enter_month". (207-xabar: 16-daraja, 1-holat, 5-qator ustun nomi yaroqsiz enter_month)

Xatoning sababi shundaki, GROUP BY bandi SELECT operatorining tegishli ro'yxatiga ishlov berishdan oldin qayta ishlanadi va enter_month ustunining taxalluslari guruhga ishlov berilganda ma'lum emas.

Bu muammoni oldingi so'rovni o'z ichiga olgan ko'rinish yordamida hal qilish mumkin (GROUP BY bandisiz), chunki FROM bandi GROUP BY bandidan oldin bajariladi:

SampleDb dan foydalanish; kirish_oyni TANGLASH (OYni (Kiritish sanasi) oyni kiritish_oyidan FROM Works_on sifatida) m GROUP BY enter_month AS;

Ushbu so'rovning natijasi quyidagicha bo'ladi:

Odatda, jadval ifodasi SELECT iborasining jadval nomi paydo bo'lishi mumkin bo'lgan istalgan joyga joylashtirilishi mumkin. (Jadval ifodasining natijasi har doim jadval yoki alohida hollarda ifoda bo'ladi.) Quyidagi misolda SELECT iborasining tanlash ro'yxatida jadval ifodasidan foydalanish ko'rsatilgan:

Ushbu so'rovning natijasi:

Umumiy jadval ifodalari

Umumiy jadval ifodasi (OTB) (qisqacha CTE) Transact-SQL tili tomonidan qo'llab-quvvatlanadigan nomli jadval ifodasidir. Umumiy jadval ifodalari quyidagi ikki turdagi so'rovlarda qo'llaniladi:

    rekursiv bo'lmagan;

    rekursiv.

Ushbu ikki turdagi so'rovlar keyingi bo'limlarda muhokama qilinadi.

OTB va rekursiv bo'lmagan so'rovlar

OTB ning rekursiv bo'lmagan shakli olingan jadvallar va ko'rinishlarga muqobil sifatida ishlatilishi mumkin. Odatda OTB tomonidan aniqlanadi WITH bandlari va WITH bandida ishlatiladigan ismga ishora qiluvchi qo'shimcha so'rov. Transact-SQL da WITH kalit so'zining ma'nosi noaniq. Noaniqlikka yo'l qo'ymaslik uchun WITH bayonotidan oldingi bayonot nuqtali vergul bilan tugatilishi kerak.

AdventureWorks2012 dan foydalaning; Sales.SalesOrderHeader FROMDAN SalesOrderID NI TANLASH QAYERDA TotalDue > (Sales.SalesOrderHeader FROM AVG(TotalDue) QAYER YEAR(OrderDate) = "2005") VA Yuk tashish > (Sales.SalesOrderHeader FROM AVG(TotalTotalDue) NI TANlang = WHO2005 Sales.SalesOrderHeader. ")/2.5;

Ushbu misoldagi soʻrov jami soliqlari (TotalDue) barcha soliqlarning oʻrtacha qiymatidan katta boʻlgan va yuk toʻlovlari (Freight) oʻrtacha soliqlarning 40% dan ortiq boʻlgan buyurtmalarni tanlaydi. Ushbu so'rovning asosiy xususiyati uning kattaligidir, chunki ichki so'rov ikki marta yozilishi kerak. So'rov konstruktsiyasi doirasini qisqartirishning mumkin bo'lgan usullaridan biri quyi so'rovni o'z ichiga olgan ko'rinishni yaratishdir. Ammo bu yechim biroz qiyin, chunki u ko'rinishni yaratishni va so'rov tugagandan so'ng o'chirishni talab qiladi. Eng yaxshi yondashuv OTB yaratish bo'ladi. Quyidagi misol yuqoridagi so'rov ta'rifini qisqartiradigan rekursiv bo'lmagan OTB dan foydalanishni ko'rsatadi:

AdventureWorks2012 dan foydalaning; price_calc(year_2005) BILAN (Sales.SalesOrderHeader FROM AVG(TotalDue) ANLASH QAYER YIL(Buyurtma sanasi) = "2005") Sales.SalesOrderHeader QAYERDAN SalesOrderID NI TANGLASH. /2,5;

Rekursiv bo'lmagan so'rovlarda WITH bandining sintaksisi quyidagicha:

cte_name parametri natijaviy jadvalni belgilaydigan OTB nomi, column_list parametri esa jadval ifodasi ustunlari ro'yxati. (Yuqoridagi misolda OTB price_calc deb nomlangan va bitta ustunga ega, year_2005.) Inner_query parametri mos jadval ifodasining natijalar to'plamini belgilaydigan SELECT iborasini ifodalaydi. Belgilangan jadval ifodasi keyin tashqi_so'rovda ishlatilishi mumkin. (Yuqoridagi misoldagi tashqi so'rov ikki marta joylashtirilgan so'rovni soddalashtirish uchun OTB price_calc va uning year_2005 ustunidan foydalanadi.)

OTB va rekursiv so'rovlar

Ushbu bo'lim yuqori murakkablikdagi materiallarni taqdim etadi. Shuning uchun, uni birinchi marta o'qiganingizda, uni o'tkazib yuborish va keyinroq qaytish tavsiya etiladi. OTBlar rekursiv bo'lishi mumkin, chunki OTBlar o'zlariga havolalarni o'z ichiga olishi mumkin. Rekursiv so'rov uchun asosiy OTB sintaksisi quyidagicha ko'rinadi:

cte_name va column_list parametrlari rekursiv bo'lmagan so'rovlar uchun OTB dagi kabi ma'noga ega. WITH bandining asosiy qismi bayonot bilan birlashtirilgan ikkita so'rovdan iborat HAMMA ittifoq. Birinchi so'rov faqat bir marta chaqiriladi va u rekursiya natijasini to'plashni boshlaydi. UNION ALL operatorining birinchi operandi OTBga ishora qilmaydi. Bu so'rov mos yozuvlar so'rovi yoki manba deb ataladi.

Ikkinchi so'rov OTB ga havolani o'z ichiga oladi va uning rekursiv qismini ifodalaydi. Shuning uchun u rekursiv a'zo deb ataladi. Rekursiv qismga birinchi qo'ng'iroqda OTB ma'lumotnomasi mos yozuvlar so'rovining natijasini ifodalaydi. Rekursiv a'zo so'rovga birinchi qo'ng'iroq natijasidan foydalanadi. Shundan so'ng, tizim rekursiv qismni yana chaqiradi. Rekursiv a'zoga qo'ng'iroq, oldingi qo'ng'iroq bo'sh natijalar to'plamini qaytarganda tugaydi.

UNION ALL operatori hozirgacha to'plangan qatorlarni, shuningdek joriy chaqiruv orqali rekursiv a'zoga qo'shilgan qo'shimcha qatorlarni birlashtiradi. (UNION ALL operatorining mavjudligi takroriy qatorlar natijadan olib tashlanmasligini anglatadi.)

Nihoyat, outer_query parametri OTB ikkala a'zoning birlashuviga barcha qo'ng'iroqlarni olish uchun foydalanadigan tashqi so'rovni belgilaydi.

OTB ning rekursiv shaklini ko'rsatish uchun biz quyidagi misolda ko'rsatilgan kod bilan aniqlangan va to'ldirilgan samolyot jadvalidan foydalanamiz:

SampleDb dan foydalanish; CREATE TABLE samolyoti (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); Samolyot QIYMATLARIGA INSERT INTO ("Samolyot", "Fuselage", 1, 10); Samolyot QIYMATLARIGA INSERT INTO ("Samolyot", "Wings", 1, 11); INSERT INTO Airplane VAVAES ("Samolyot", "Quyruq", 1, 12); Samolyot QIYMATLARIGA INSERT INTO ("Fuselage", "Salon", 1, 13); Samolyot QIYMATLARIGA INSERT INTO ("Fyuzelaj", "Kokpit", 1, 14); INSERT INTO samolyot QIYMATLARI ("Fuselage", "Burun", 1, 15); INSERT INTO Airplane VALUES("Salon", NULL, 1,13); INSERT INTO Airplane VAVAES("kabin", NULL, 1, 14); INSERT INTO Airplane VALUES("Burun", NULL, 1, 15); INSERT INTO Airplane VALUES("Wings", NULL,2, 11); INSERT INTO Airplane VALUES("Tail", NULL, 1, 12);

Samolyot jadvali to'rtta ustundan iborat. ContainingAssembly ustuni yig'ilishni belgilaydi va ContainedAssembly ustuni mos keladigan yig'ilishni tashkil etuvchi qismlarni (birma-bir) belgilaydi. Quyidagi rasmda samolyotning mumkin bo'lgan turi va uning tarkibiy qismlarining grafik tasviri ko'rsatilgan:

Samolyot jadvali quyidagi 11 qatordan iborat:

Quyidagi misolda har bir qurilishning umumiy narxini hisoblaydigan so'rovni aniqlash uchun WITH bandidan foydalaniladi:

SampleDb dan foydalanish; Qismlar_roʻyxati (montaj1, miqdor, xarajat) AS (ContainedAssembly NULL UNION BOʻLGAN samolyotdan TANLANGAN Qismlar, Miqdor, Birlik Xarajati) BILAN HAMMA TANLANG a.Oʻz ichiga olgan yigʻma, a.QuantityContained, a.QuantityContained, DIMquantity(AS2,CAST6) ) Qismlar_ro'yxatidan l, Samolyot a QAYERDA l.yig'ish1 = a.O'z ichiga olgan yig'ish) SELECT assembly1 "Qism", miqdor "Miqdor", xarajat "Narx" FROM qismlar_ro'yxati;

WITH bandi uchta ustundan iborat ro'yxat_of_parts nomli OTB ro'yxatini belgilaydi: yig'ish1, miqdor va narx. Misoldagi birinchi SELECT iborasi rekursiya jarayonining birinchi bosqichi natijalarini saqlash uchun faqat bir marta chaqiriladi. Misolning oxirgi satridagi SELECT iborasi quyidagi natijani ko'rsatadi.

Har birimiz muntazam ravishda turli xil ma'lumotlar bazalariga duch kelamiz va foydalanamiz. Elektron pochta manzilini tanlaganimizda, biz ma'lumotlar bazasi bilan ishlaymiz. Ma'lumotlar bazalari qidiruv xizmatlaridan, mijozlar ma'lumotlarini saqlash uchun banklardan va hokazolardan foydalanadi.

Ammo, ma'lumotlar bazalaridan doimiy foydalanishga qaramay, hatto ko'plab dasturiy ta'minot tizimlarini ishlab chiquvchilar uchun bir xil atamalarning turli talqinlari tufayli juda ko'p "oq dog'lar" mavjud. SQL tilini ko'rib chiqishdan oldin asosiy ma'lumotlar bazasi atamalariga qisqacha ta'rif beramiz. Shunday qilib.

Malumotlar bazasi - buyurtma qilingan ma'lumotlar tuzilmalari va ularning munosabatlarini saqlash uchun fayl yoki fayllar to'plami. Ko'pincha ma'lumotlar bazasi boshqaruv tizimi deb ataladi - u faqat ma'lum bir formatdagi ma'lumotlar ombori bo'lib, turli xil ma'lumotlar bazalari bilan ishlay oladi.

Jadval - Keling, ma'lum bir atributga ko'ra guruhlangan hujjatlarni saqlaydigan papkani tasavvur qilaylik, masalan, oxirgi oy uchun buyurtmalar ro'yxati. Bu kompyuterdagi jadval.Alohida jadval o'ziga xos nomga ega.

Ma'lumotlar turi - ma'lum bir ustun yoki satrda saqlashga ruxsat berilgan ma'lumotlar turi. Bu raqamlar yoki ma'lum bir formatdagi matn bo'lishi mumkin.

Ustun va qator- Biz hammamiz qatorlar va ustunlarga ega bo'lgan elektron jadvallar bilan ishladik. Har qanday relyatsion ma'lumotlar bazasi jadvallar bilan xuddi shunday ishlaydi. Ba'zan qatorlar yozuvlar deb ataladi.

asosiy kalit- har bir jadval qatorida uni noyob tarzda aniqlash uchun bir yoki bir nechta ustunlar bo'lishi mumkin. Asosiy kalit bo'lmasa, kerakli qatorlarni yangilash, o'zgartirish va o'chirish juda qiyin.

SQL nima?

SQL(inglizcha - tuzilgan so'rovlar tili) faqat ma'lumotlar bazalari bilan ishlash uchun ishlab chiqilgan va hozirda barcha mashhur DBMS uchun standart hisoblanadi. Tilning sintaksisi oz sonli operatorlardan iborat boʻlib, uni oʻrganish oson. Ammo, tashqi soddaligiga qaramay, u har qanday o'lchamdagi ma'lumotlar bazasi bilan murakkab operatsiyalar uchun SQL so'rovlarini yaratishga imkon beradi.

1992 yildan beri ANSI SQL deb nomlangan umumiy qabul qilingan standart mavjud. U operatorlarning asosiy sintaksisi va funksiyalarini belgilaydi va ORACLE kabi barcha maʼlumotlar bazasi bozori yetakchilari tomonidan qoʻllab-quvvatlanadi. Bitta kichik maqolada tilning barcha imkoniyatlarini qamrab olishning iloji yoʻq, shuning uchun biz faqat asosiy SQL soʻrovlarini qisqacha koʻrib chiqamiz. Misollar tilning soddaligi va imkoniyatlarini aniq ko'rsatadi:

  • ma'lumotlar bazalari va jadvallarni yaratish;
  • ma'lumotlardan namuna olish;
  • yozuvlarni qo'shish;
  • ma'lumotlarni o'zgartirish va o'chirish.

SQL ma'lumotlar turlari

Ma'lumotlar bazasi jadvalidagi barcha ustunlar bir xil turdagi ma'lumotlarni saqlaydi. SQL-dagi ma'lumotlar turlari boshqa dasturlash tillari bilan bir xil.

Jadvallar va ma'lumotlar bazalarini yaratish

SQLda yangi ma'lumotlar bazalari, jadvallar va boshqa so'rovlarni yaratishning ikki yo'li mavjud:

  • DBMS konsoli orqali
  • Ma'lumotlar bazasi serveriga kiritilgan interaktiv boshqaruv vositalaridan foydalanish.

Operator tomonidan yangi ma'lumotlar bazasi yaratiladi MA'LUMOTLAR BAZASI YARATING<наименование базы данных>; . Ko'rib turganingizdek, sintaksis sodda va ixcham.

Biz quyidagi parametrlarga ega CREATE TABLE bayonoti yordamida ma'lumotlar bazasi ichida jadvallarni yaratamiz:

  • jadval nomi
  • ustun nomlari va ma'lumotlar turlari

Misol tariqasida quyidagi ustunlardan iborat Tovarlar jadvalini tuzamiz:

Biz jadval yaratamiz:

JADVAL YARATING

(commodity_id CHAR(15) NULL EMAS,

vendor_id CHAR(15) NULL EMAS,

tovar_nomi CHAR(254) NULL,

tovar_narxi DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Jadval beshta ustundan iborat. Nomdan keyin ma'lumotlar turi keladi, ustunlar vergul bilan ajratiladi. Ustunning qiymati bo'sh bo'lishi mumkin (NULL) yoki to'ldirilishi kerak (NULL EMAS) va bu jadval yaratilganda aniqlanadi.

Jadvaldan ma'lumotlarni tanlash

Ma'lumotlarni tanlash operatori eng ko'p ishlatiladigan SQL so'rovidir. Ma'lumot olish uchun siz bunday jadvaldan nimani tanlashni xohlayotganimizni belgilashingiz kerak. Avval oddiy misol:

Tovardan tovar_nomini TANlang

SELECT operatoridan so'ng ma'lumot olish uchun ustun nomini, FROM esa jadvalni belgilaydi.

So'rovni bajarish natijasi ma'lumotlar bazasiga kiritilgan tartibda Commodity_name qiymatlari bo'lgan barcha jadval qatorlari bo'ladi, ya'ni. hech qanday saralashsiz. Natijaga buyurtma berish uchun qo'shimcha ORDER BY bandidan foydalaniladi.

Bir nechta maydonlarni so'rash uchun ularni quyidagi misolda bo'lgani kabi vergul bilan ajrating:

Tovardan tovar_identifikatori, tovar_nomi, tovar_narxini TANlang

So'rov natijasi sifatida qatorning barcha ustunlari qiymatini olish mumkin. Buning uchun "*" belgisi ishlatiladi:

Tovardan * TANLANG

  • Bundan tashqari, SELECT quyidagilarni qo'llab-quvvatlaydi:
  • Ma'lumotlarni saralash (ORDER BY bayonoti)
  • Shartlar bo'yicha tanlang (QAYERDA)
  • Guruhlash atamasi (GROUP BY)

Chiziq qo'shish

Jadvalga qator qo'shish uchun INSERT operatori bilan SQL so'rovlaridan foydalaniladi. Qo'shish uchta usulda amalga oshirilishi mumkin:

  • yangi butun qator qo'shing;
  • satrning bir qismi;
  • so'rov natijalari.

To'liq qatorni qo'shish uchun siz jadval nomini va yangi satr ustunlari (maydonlari) qiymatlarini ko'rsatishingiz kerak. Mana bir misol:

INSERT INTO TOMUR VAVAES("106 ", "50", "Coca-Cola", "1,68", "Alkogolsiz ,)

Misol jadvalga yangi mahsulot qo'shadi. Qiymatlar har bir ustun uchun VALUES dan keyin belgilanadi. Agar ustun uchun mos qiymat bo'lmasa, u holda NULL ko'rsatilishi kerak. Ustunlar jadval yaratilganda belgilangan tartibda qiymatlar bilan to'ldiriladi.

Agar siz satrning faqat bir qismini qo'shsangiz, misoldagi kabi ustunlar nomlarini aniq ko'rsatishingiz kerak:

INSERT INTO tovar (tovar_id, sotuvchi_id, tovar_nomi)

VALUES("106 ", '50", "Coca Cola",)

Biz faqat mahsulot identifikatorlarini, yetkazib beruvchini va uning nomini kiritdik, qolgan maydonlarni bo'sh qoldirdik.

So'rov natijalarini qo'shish

INSERT birinchi navbatda qatorlar qo'shish uchun ishlatiladi, lekin SELECT iborasi natijalarini qo'shish uchun ham ishlatilishi mumkin.

Ma'lumotlarni o'zgartirish

Ma'lumotlar bazasi jadvali maydonlaridagi ma'lumotlarni o'zgartirish uchun siz UPDATE bayonotidan foydalanishingiz kerak. Operatordan ikki usulda foydalanish mumkin:

  • Jadvaldagi barcha qatorlar yangilanadi.
  • Faqat ma'lum bir qator uchun.

UPDATE uchta asosiy elementdan iborat:

  • o'zgartirishlar kiritish kerak bo'lgan jadval;
  • maydon nomlari va ularning yangi qiymatlari;
  • o'zgartirish uchun qatorlarni tanlash shartlari.

Bir misolni ko'rib chiqing. Aytaylik, ID=106 bo'lgan mahsulot narxi o'zgardi, shuning uchun bu qatorni yangilash kerak. Quyidagi operatorni yozamiz:

YANGILANISH TOVAR SET commodity_price = "3.2" WHERE commodity_id = "106"

Jadvalning nomini ko'rsatdik, bizning holatimizda Tovar, yangilanish qaerda amalga oshiriladi, so'ngra SETdan keyin - ustunning yangi qiymati va WHERE da kerakli ID qiymatini ko'rsatib, kerakli yozuvni topdik.

Bir nechta ustunlarni o'zgartirish uchun SET iborasidan keyin vergul bilan ajratilgan bir nechta ustun-qiymat juftlarini belgilang. Keling, mahsulotning nomi va narxi yangilangan misolni ko'rib chiqaylik:

YANGILANISH TOVAR SET commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

Ustundagi ma'lumotlarni o'chirish uchun, agar jadval tuzilishi ruxsat bergan bo'lsa, uni NULL ga o'rnatishingiz mumkin. Shuni esda tutish kerakki, NULL aniq "yo'q" qiymati va matn yoki raqam shaklida nolga teng emas. Mahsulot tavsifini olib tashlang:

YANGILANISH TOVARLAR SET commodity_desc = NULL WHERE commodity_id = "106"

Qatorlarni olib tashlash

Jadvaldagi satrlarni o'chirish uchun SQL so'rovlari DELETE operatori bilan bajariladi. Ikkita foydalanish holatlari mavjud:

  • jadvaldagi ba'zi qatorlar o'chiriladi;
  • jadvaldagi barcha qatorlar o'chiriladi.

Jadvaldan bitta qatorni o'chirishga misol:

commodity_id = "106".

DELETE FROM dan so'ng biz qatorlar o'chiriladigan jadval nomini belgilaymiz. WHERE bandi o'chirish uchun qatorlar tanlanadigan shartni o'z ichiga oladi. Misolda, biz ID = 106 bo'lgan mahsulot qatorini o'chiramiz. QAYERNI belgilash juda muhim. Agar ushbu bayonotni o'tkazib yuborsangiz, jadvaldagi barcha qatorlar o'chiriladi. Bu maydonlar qiymatini o'zgartirish uchun ham amal qiladi.

DELETE iborasida ustun nomlari yoki meta-belgilar belgilanmagan. U satrlarni butunlay olib tashlaydi, lekin bitta ustunni olib tashlay olmaydi.

Microsoft Access-da SQL-dan foydalanish

Odatda interaktiv ravishda jadvallar, ma'lumotlar bazalarini yaratish, ma'lumotlar bazasidagi ma'lumotlarni boshqarish, o'zgartirish, tahlil qilish va qulay interaktiv so'rovlar dizayneri (Query Designer) orqali SQL Access so'rovlarini amalga oshirish uchun ishlatiladi, undan foydalanib siz har qanday murakkablikdagi SQL bayonotlarini tuzishingiz va darhol bajarishingiz mumkin.

Serverga kirish rejimi ham qo'llab-quvvatlanadi, bunda Access DBMS har qanday ODBC ma'lumotlar manbasiga SQL so'rovlari generatori sifatida ishlatilishi mumkin. Bu imkoniyat Access ilovalariga har qanday format bilan o'zaro ishlash imkonini beradi.

SQL kengaytmalari

SQL so'rovlari protsessual dasturlash tillarining tsikllar, filiallar va boshqalar kabi barcha xususiyatlariga ega emasligi sababli, DBMS ishlab chiqaruvchilari rivojlangan funktsiyalarga ega SQLning o'z versiyasini ishlab chiqadilar. Bu, birinchi navbatda, saqlangan protseduralar va protsessual tillarning standart operatorlarini qo'llab-quvvatlashdir.

Tilning eng keng tarqalgan dialektlari:

  • Oracle ma'lumotlar bazasi - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

Internet uchun SQL

MySQL DBMS GNU General Public License ostida tarqatiladi. Maxsus modullarni ishlab chiqish qobiliyatiga ega tijorat litsenziyasi mavjud. Ajralmas qism sifatida u XAMPP, WAMP va LAMP kabi Internet-serverlarning eng mashhur yig'ilishlariga kiritilgan va Internetda ilovalarni ishlab chiqish uchun eng mashhur DBMS hisoblanadi.

U Sun Microsystems tomonidan ishlab chiqilgan va hozirda Oracle korporatsiyasi tomonidan qo'llab-quvvatlanadi. 64 terabaytgacha bo'lgan ma'lumotlar bazalarini, SQL:2003 sintaksisi standartini, ma'lumotlar bazalarini replikatsiya qilish va bulutli xizmatlarni qo'llab-quvvatlaydi.

SQL- Strukturaviy so'rovlar tili.
Ushbu sharhda biz SQL so'rovlarining eng keng tarqalgan turlarini ko'rib chiqamiz.
SQL standarti aniqlangan ANSI(Amerika milliy standartlar instituti).
SQL - bu relyatsion ma'lumotlar bazalariga maxsus mo'ljallangan til.

SQL bo'linishi:


DDL
(Ma'lumotlarni aniqlash tili) - ANSI-da Sxema tavsifi tili deb ataladi, ma'lumotlar bazasida ob'ektlarni (jadvallar, indekslar, ko'rinishlar va boshqalar) yaratuvchi buyruqlardan iborat.
DML(Ma'lumotlarni manipulyatsiya qilish tili) istalgan vaqtda jadvallarda qanday qiymatlar mavjudligini aniqlaydigan buyruqlar to'plami.
DCD(Ma'lumotlarni boshqarish tili) foydalanuvchiga muayyan harakatlarni bajarishga ruxsat berish yoki bermaslikni aniqlaydigan vositalardan iborat. Ular ANSI da DDL ning bir qismidir. Bu nomlarni unutmang. Bular turli tillar emas, balki SQL buyruqlarining funksiyalari bo‘yicha guruhlangan bo‘limlari.

Ma'lumotlar turlari:

SQL Server - Ma'lumotlar turlari

Tavsif

bigint (int 8)

bigint (int 8)

ikkilik(n)

ikkilik(n) yoki tasvir

xarakter
(sinonim char)

milliy xarakter yoki ntext

xarakterga ega(sinonim char o'zgaruvchan varchar)

milliy xarakterga ega yoki ntext

sana vaqti

sana vaqti

kasr

u raqamli

ikki tomonlama aniqlik

ikki tomonlama aniqlik

butun son (int 4) (sinonimi: int)

butun son (int 4)

milliy xarakter(sinonimi: milliy xarakter, nchar)

milliy xarakter

Raqamli(sinonimlar: kasr, dek)

milliy xarakterga ega(sinonimlar: milliy xarakterga ega, nvarchar)

milliy xarakterga ega

Kichik sana vaqti

sana vaqti

kichik (int 2)

kichik (int 2)

Kichik pul

sql_variant

Endi qoʻllab-quvvatlanmaydi

Nmatn
SQL Server 2005 dan boshlab undan foydalanish tavsiya etilmaydi.

Vaqt tamg'asi

Qo'llab-quvvatlanmaydi

tinyint (int 1)

tinyint (int 1)

Uniqueidentifier

noyob identifikator

varbinar(n)

varbinar(n) yoki tasvir

kichik sana vaqti

sana vaqti

kichik (int 2)

kichik (int 2)

kichik pul

sql_variant

Qo'llab-quvvatlanmaydi

vaqt tamg'asi

Qo'llab-quvvatlanmaydi

tinyint (int 1)

tinyint (int 1)

noyob identifikator

noyob identifikator

varbinar(n)

varbinar(n) yoki tasvir

SQL Server 2000 da ma'lumotlar turlari jadvali

TALAB NIMA?

So'rov ma'lumotlar bazasi dasturiga bergan buyruqdir. So'rovlar DML tilining bir qismidir. SQL-dagi barcha so'rovlar bitta buyruqdan iborat. Ushbu buyruqning tuzilishi aldamchi darajada sodda, chunki siz uni juda murakkab baholash va ma'lumotlarni manipulyatsiya qilish uchun kengaytirishingiz kerak.

SELECT buyrug'i:

TANLASH"Tanlash" eng ko'p ishlatiladigan buyruq bo'lib, u jadvaldan ma'lumotlarni tanlash uchun ishlatiladi.
SELECT yordamida so'rov turi:

foydalanuvchilar_bazasidan identifikator, foydalanuvchi_nomi, shahar, tug'ilgan_kunni TANGLASH;

Bunday so'rov users_base jadvalidan SELECT buyrug'idan keyin vergul bilan ko'rsatilgan ustunlarning barcha qiymatlarini ko'rsatadi. Bundan tashqari, siz barcha ustunlarni bitta belgi bilan ko'rsatishingiz mumkin, * ya'ni. SELECT * FROM users_base ; - bunday so'rov jadvaldagi barcha ma'lumotlarni ko'rsatadi.

SELECT buyruqlar tuzilishi:

SELECT (So'rovda vergul bilan ajratilgan ustun nomlari) FROM (ma'lumotlar bazasidagi jadval nomi)
so'rovning eng oddiy turi hisoblanadi. Ma'lumotlarni olish qulayligi uchun qo'shimcha buyruqlar mavjud (quyida "Funktsiyalar" ga qarang)

DML buyruqlari:

Qiymatlarni uchta DML (Data Manipulation Language) buyrug'i bilan joylashtirish va maydonlardan olib tashlash mumkin:
KIRITMOQ(Kiritmoq)
YANGILANISH(yangilash, o'zgartirish),
OʻCHIRISH(o'chirish)

INSERT buyrug'i:

INSERT INTO users_base (foydalanuvchi_nomi, shahar, tug'ilgan_kuni) VALUES ('Aleksandr', 'Rostov', '20.06.1991');

INSERT buyrug'i INTO (in to - in) prefiksi bilan birga keladi, keyin qavslar ichida biz ma'lumotlarni kiritishimiz kerak bo'lgan ustunlar nomlari, so'ngra VALUES (qiymatlar) buyrug'i keladi va qavs ichida navbat bilan qiymatlar mavjud. (ustunlar bilan qiymatlar tartibiga rioya qilish majburiydir, qiymatlar siz ko'rsatgan ustunlar bilan bir xil tartibda kelishi kerak).

UPDATE buyrug'i:

UPDATE users_base SET user_name = 'Aleks';

UPDATE buyrug'i jadvaldagi qiymatlarni yangilaydi. Avval UPDATE buyrug'ining o'zi, so'ngra jadval nomi, SET buyrug'idan keyin (to'plam) keyin ustun nomi va uning qo'shtirnoq ichidagi qiymati (qiymat satr formatiga ega bo'lsa, agar u raqamli qiymat bo'lsa va ustun bo'lsa, tirnoq qo'yiladi) vchar ma'lumotlar turiga va boshqa har qanday qator turlariga bog'lanmagan, tirnoq belgilari ma'nosiz.)

DELETE buyrug'i:

DELETE FROM users_base WHERE user_name = 'Vasily';

DELETE buyrug'i butun qatorni o'chiradi, WHERE mezoni (Qaerda) bo'yicha qatorni aniqlaydi. Bunday holda, ushbu so'rov user_name ustunining qiymati Vasiliy bo'lgan barcha qatorlarni olib tashlaydi. WHERE mezonlari va boshqalar haqida biroz keyinroq gaplashamiz.

Mezonlar, funktsiyalar, shartlar va boshqalar. Bu bizga SQLda yordam beradi:

SELECT buyrug'ining WHERE bandi va boshqa DML buyruqlari jadvaldagi istalgan qator uchun sharti rost yoki noto'g'ri bo'lishi mumkin bo'lgan predikatlarni o'rnatish imkonini beradi. Buyruq faqat jadvaldan bunday bayonot to'g'ri bo'lgan qatorlarni chiqaradi.
Misol:
Identifikator, shahar, tug'ilgan_kunni users_base FROM TANGLASH QERDA user_name = 'Aleks';- bunday so'rov faqat WHERE shartiga mos keladigan qatorlarni, ya'ni user_name ustunida Aleks qiymatiga ega bo'lgan barcha qatorlarni ko'rsatadi.

ORDER BY - tanlangan qatorlarni saralash sharti. ASC va DESC 2 ta mezonga ega. ASC (A dan Z gacha yoki 0 dan 9 gacha tartiblash)

DESC (ASC qarshisi).
Misol:
foydalanuvchilar_bazasidan identifikator, shahar, tug'ilgan_kunni TANLASH. - bunday so'rov foydalanuvchi nomi ustuni bo'yicha A dan Z gacha (A-Z; 0-9) saralangan qiymatlarni ko'rsatadi.

Bu shart WHERE bandi bilan birgalikda ham ishlatilishi mumkin.
Misol:
Identifikator, shahar, tug'ilgan_kun FROM users_base WHERE user_name = 'Aleks' ORDER BY id ASC;

DISTINCT (Distinct) - bu SELECT bandidagi takroriy qiymatlarni yo'q qilish usulini taqdim etadigan argument. Bular. Agar sizda ustunda takroriy qiymatlar bo'lsa, deylik user_name, keyin DISTINCT siz uchun faqat bittasini ko'rsatadi, masalan, ma'lumotlar bazasida Aleksey ismli 2 kishi bor, keyin DISTINCT funksiyasidan foydalangan holda so'rov faqat bitta qiymatni ko'rsatadi. u birinchi bo'lib duch keladi ...
Misol:
User_base FROM DISTINCT user_name;- bunday so'rov foydalanuvchi_nomi ustunidagi barcha yozuvlarning qiymatlarini aks ettiradi, lekin ular takrorlanmaydi, ya'ni. Agar sizda cheksiz miqdordagi takroriy qiymatlar bo'lsa, ular ko'rsatilmaydi ...

AND - argument sifatida ikkita mantiqiy (A VA B shaklida) oladi va ularning ikkalasi ham to'g'ri yoki yo'qligini bilish uchun ularni rostga qarshi baholaydi.
Misol:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Aleksandr';- shahar nomi bir qatorda joylashgan jadvaldagi barcha qiymatlarni ko'rsatadi (bu holda, Rostov va foydalanuvchi nomi Aleksandr.

OR - argument sifatida ikkita mantiqiy qiymatni (A YOKI B shaklida) oladi va ulardan biri to'g'ri yoki yo'qligini to'g'riligini baholaydi.

SELECT * FROM users_base WHERE city = 'Rostov' OR user_name = 'Aleksandr';- jadvaldagi barcha qiymatlarni ko'rsatadi, bu erda qatorda Rostov shahri nomi yoki foydalanuvchi nomi Aleksandr ko'rsatilgan.

EMAS - argument sifatida bitta mantiqiy (NOT A ko'rinishida) oladi va uning qiymatini yolg'ondan rostga yoki rostdan yolg'onga o'zgartiradi.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Aleksandr';- Rostov shahri nomi bir qatorda joylashgan jadvaldagi barcha qiymatlarni aks ettiradi yoki foydalanuvchi nomi aniq Aleksandr bo'lmaydi.

IN - berilgan qiymat kiritilishi yoki kiritilmasligi mumkin bo'lgan qiymatlar to'plamini belgilaydi.
* foydalanuvchilar_bazasidan QAYERDA shahar ('Vladivostok', 'Rostov');- bunday so'rov shahar ustunida ko'rsatilgan shaharlarning nomlarini o'z ichiga olgan jadvaldagi barcha qiymatlarni ko'rsatadi

O'rtasida - IN operatoriga o'xshash. To'plamdagi raqamlar bilan belgilashdan farqli o'laroq, IN kabi, BETWEEN predikatni to'g'ri qilish uchun qiymatlari kamayishi kerak bo'lgan diapazonni belgilaydi.
* 1 dan 10 gacha bo'lgan identifikatordan foydalanuvchi_bazasidan TANGLASH;- id ustunida 1 dan 10 gacha bo'lgan jadvaldagi barcha qiymatlarni ko'rsatadi

COUNT - so'rov tanlagan maydonlarning qator raqamlarini yoki NULL bo'lmagan qiymatlarini ishlab chiqaradi.
users_base FROM COUNT (*) TANI ;- berilgan jadvaldagi qatorlar sonini aks ettiradi.
User_base FROM COUNT (DISTINCT user_name) TANI ;- foydalanuvchi nomlari bilan qatorlar sonini ko'rsatadi (takrorlanmaydi)

SUM - berilgan maydondagi barcha tanlangan qiymatlarning arifmetik yig'indisini chiqaradi.
users_base FROM SUM (id) ni tanlang;- id ustunining barcha satrlari qiymatlari yig'indisini ko'rsatadi.

AVG - berilgan maydonning barcha tanlangan qiymatlarini o'rtacha.
users_base FROM AVG (id) ni tanlang;- id ustunining barcha tanlangan qiymatlarining o'rtacha qiymatini chiqaradi

MAX - berilgan maydondagi barcha tanlangan qiymatlarning eng kattasini ishlab chiqaradi.

MIN - berilgan maydon uchun barcha tanlangan qiymatlarning eng kichigini ishlab chiqaradi.

Jadval yaratish:

CREATE TABLE users_base(id butun soni, foydalanuvchi_nomi matni, shahar matni, tug'ilgan_kun sanasi);- bunday buyruqni bajarish jadvalni yaratishga olib keladi, unga ko'ra men misollar keltirdim ... Bu erda hamma narsa oddiy, biz CREATE TABLE buyrug'ini yozamiz, keyin yaratmoqchi bo'lgan jadvalning nomini, keyin qavs ichida, vergul bilan ajratilgan, ustunlar nomlari va ularning ma'lumotlar turi. Bu SQL da jadval yaratishning standart usuli. Endi men SQL Server 2005 da jadvallar yaratishga misol keltiraman:

ANSI_NULLS YOQISH
BOSH
QUOTED_IDENTIFIERNI YOQING
BOSH
AGAR MAVJUD BO'LSA (Tanlang * FROM sys.objects WHERE object_id = OBJECT_ID(N".") VA (N"U") kiriting)
BOSHLANISHI
JADVAL YARAT .(

NULL EMAS,
NULL EMAS,
NULL EMAS,
KLASTER BO'LGAN ASOSIY KALIT
ASC


OXIRI
BOSH
ANSI_NULLS NI O'RING
BOSH
QUOTED_IDENTIFIERNI YOQING
BOSH
AGAR MAVJUD BO'LSA (Tanlang * FROM sys.objects WHERE object_id = OBJECT_ID(N".") VA (N"U") kiriting)
BOSHLANISHI
JADVAL YARAT .(
IDENTITY(1,1) NULL EMAS,
NULL,
NULL,
KLASTER BO'LGAN ASOSIY KALIT
ASC
)WITH(IGNORE_DUP_KEY=OFF) ON
) TEXTIMAGE_ONDA
OXIRI
BOSH
ANSI_NULLS NI O'RING
BOSH
QUOTED_IDENTIFIERNI YOQING
BOSH
AGAR MAVJUD BO'LSA (Tanlang * FROM sys.objects WHERE object_id = OBJECT_ID(N".") VA (N"U") kiriting)
BOSHLANISHI
JADVAL YARAT .(
IDENTITY(1,1) NULL EMAS,
NULL,
NULL,
KLASTER BO'LGAN ASOSIY KALIT
ASC
)WITH(IGNORE_DUP_KEY=OFF) ON
) ON
OXIRI

SQL Server 2005-dagi sintaksis boshqa mavzu, men shunchaki SQL dasturlash asoslarini tasvirlab berganimni ko'rsatmoqchi edim, siz asoslarni bilgan holda cho'qqilarni zabt etishingiz mumkin.

Agar sizda ushbu mavzu bo'yicha savollaringiz bo'lsa, iltimos, menga elektron pochta orqali yuboring.