Sql qayerda ishlatiladi. SQL: ma'lumotlar bazalari bilan ishlash uchun universal til. Foydalanish uchun ma'lumotlar bazasini tanlash

TSQL kodini qanday yozish haqida hamma o'z fikriga ega: formatlash, o'zgaruvchilarni tayinlash, tizim funktsiyalari, ANSI standartlari yoki boshqa masalalar. Va bu fikrlar bir-biridan sezilarli darajada farq qilishi mumkin, buni forumlardagi ko'plab xabarlar va maqolalarga sharhlardagi qizg'in muhokamalar tasdiqlaydi. Ammo ko'pchilik yuqori darajada o'qiladigan va yuqori unumdorlikdagi kod hamma uchun eng yaxshi yechim ekanligiga rozi bo'ladi. Albatta, hiyla bunga qanday erishishdir.

T-SQL ishlab chiquvchilari qaror qabul qilishda yordam berish uchun standartlar to'plamini yaratish va keyin echimlarni yaratishda ularga murojaat qilishdan boshlash uchun eng yaxshi joy. Shunday qilib, standartlar farqlarni bartaraf etishga va umumiy maqsadga erishishga yordam beradi.

Ushbu maqolada men e'tiborni qarataman umumiy tamoyillar, T-SQL bayonotlarining turlaridan qat'iy nazar kodga qo'llanilishi mumkin. U formatlash, tizim funktsiyalari, eskirgan til elementlari va foydalanuvchi tomonidan belgilangan o'zgaruvchilar kabi mavzularni qamrab oladi.

O'qilishi va boshqa jihatlari

TSQL formatlash haqida ko'plab maqolalar yozilgan. Ba'zan bir nuqtada siz kodning ko'p qismini ko'rib chiqishingiz, kod nima qilayotganini tushunishingiz kerak, potentsial muammolarni aniqlash haqida gapirmaslik kerak.

Misol tariqasida kichik harflar bilan, qator ajratuvchi va boʻshliqsiz yozilgan USE va SELECT iboralarini olaylik, zarur hollardan tashqari:

adventureworks2014 dan foydalaning go ni tanlang emp.businessentityid empid,psn.firstname,psn.lastname,emp.sickleavhours sickleave,emp.nationalidnumber natid,emp.JobTitle dan humanresources.employee emp inner join person.personent.psiidness=empsiidsbu emp.jobtitle=" ishlab chiqarish bo'yicha mutaxassis - wc60" or emp.jobtitle="ishlab chiqarish bo'yicha texnik-wc50" order by emp.JobTitle desc,EmpID asc!}

Odatiy bo'lib, SQL Server katta-kichik harflarni sezmaydigan qilib tuzilgan. Shuning uchun bu yondashuvni qo'llash mumkin emasligi uchun hech qanday sabab yo'q. Yoki quyidagi misolda ko'rsatilgan yondashuv:

ADVENTUREWORKS2014 FOYDALANISH GO SELECT EMP.BUSINESSENTITYID EMPID,PSN.FIRSTNAME,PSN.LASTNAME,EMP.SICKLEAVEHOURS SICKLEAVE,EMP.NATIONALIDNUMBER NATID,EMP.JOBTITLE FROM E HUMANNNERSONEEON. MP.BUSIN ESSENTITYID=PSN.BUSINESSENTITYID WHERE EMP.JOBTITLE=" PRODUCTION TECHNICIAN - WC60)" OR EMP.JOBTITLE="ISHLAB CHIQARISH TEXNISIGI - WC50" ORDER BY EMP.JOBTITLE DESC,EMPID ASC!}

Bu mutlaqo qabul qilinadi. Ammo o'qish mumkin emas. Tasavvur qiling-a, siz bunday kodning yuzlab qatorlarini o'z ichiga olgan skriptni ko'rib chiqishingiz kerak.

Hatto TSQL konvertatsiya qilish kodi ham, undan ko'ra yaxshiroq bo'lsa, uning nomuvofiqligini yoki tasodifiy tashkil etilganligini tushunish qiyin bo'lishi mumkin. TSQL SELECT iborasini bir nechta satrlarga ajratganimizda, alohida elementlarni kiritganimizda, kalit so'zlarni bosh harf bilan yozganimizda va bayonotni tushuntirish uchun izohlar qo'shganda nima sodir bo'lishini ko'ring:

/* WC60 va WC50 texnik xodimlaridan ma'lumotlarni olish. */AdventureWorks2014 dan foydalanish; Emp.BusinessEntityID NI EmpID, psn.FirstName, psn.LastName, emp.SickLeaveHours AS SickLeave, emp.NationalIDNumber AS NatID, emp.JobTitle FROM HumanResources.Employeeeson.Person.ASOP. sinessEntityID = psn .BusinessEntityID WHERE (emp.JobTitle = "Ishlab chiqarish bo'yicha texnik - WC60)") OR (emp.JobTitle = "Ishlab chiqarish bo'yicha texnik - WC50") ORDER BY emp.JobTitle DESC, EmpID ASC;!}

Ushbu kodni ko'rish yuqoridagi misollarda ko'rsatilganidan ko'ra osonroqdir. Satr uzilishlari, bo'shliqlar, bosh harflar va chekinishlardan o'ylangan foydalanish T-SQL kodini tushunishni osonlashtiradi, ayniqsa hamma bir xil standartlarga amal qilganda.

T-SQL kodi izchil va diqqat bilan formatlangan bo'lishi kerak, shunda uni ko'rgan har bir kishi uchun uni o'qish va tushunish oson. Shu maqsadda katta harflar, chekinish va qator uzilishlaridan oqilona foydalanish kabi ko'plab omillarni hisobga olish kerak.

Ushbu elementlar bilan qanday kurashishni hal qilishda siz hamma narsani diqqat bilan tortishingiz kerak. Muayyan holatga qarab, ma'lum bir yondashuvni qo'llash uchun ham, qarshi ham kuchli dalillar bo'lishi mumkin. Ushbu kichik tafsilotlarni hisobga olganingizga ishonch hosil qiling. Misol uchun, taqqoslash operatorining har ikki tomoniga bo'sh joy qo'shish kerakmi, qachon va qanday qilib chekinish kerak yoki tanlovda vergul qo'yish kerak.

Keling, kodda sodir bo'layotgan voqealarni tavsiflashning oddiy va samarali mexanizmi bo'lgan sharhlarga o'tamiz. Shu jumladan TSQL holatida. To'g'ri joylashtirilgan sharhlar vaqtni tejash va hatto nomuvofiqliklarni ko'rsatishi mumkin. Agar siz o'z kodingizni ko'rib chiqayotgan bo'lsangiz ham, to'g'ri formatlangan sharhlarni qadrlang, ayniqsa kodni yillar oldin yozgan bo'lsangiz.

Shu sababli, siz ma'lumotlar bazasini yaratishda kengaytirilgan xususiyatlarni kiritishingiz kerakmi yoki yo'qligini ko'rib chiqishingiz kerak. Kengaytirilgan xususiyatlar ma'lumotlar bazasini chuqurroq tushunishga yordam beradi va uning tarkibiy qismlarini hujjatlashtirishni osonlashtiradi.

Kodni tushunishni osonlashtirishning yana bir usuli kerak bo'lganda qavslardan foydalanishdir. Oldingi misolda men ushbu tushunchani ko'rsatish uchun WHERE bandiga qavs qo'shdim. Bu holatda ular haqiqatan ham kerak bo'lmasa-da, u sharh kabi eslatma bo'lib xizmat qiladi. Qavslar kodni tekshirishni tezroq va osonroq qilish uchun ifoda mantiqini aniqlashtirishga yordam beradi.

Eng yaxshi amaliyot bu gaplar oxiriga nuqtali vergul qo'yishdir. Ko'p hollarda SQL Server uchun talab qilinmasa-da, Microsoft nuqta-vergul kerakligi haqida ogohlantiradi. U allaqachon ANSI standartlariga aylangan.

GOTO buyruqlarini ishlatmaslikka harakat qiling. Bu kodni tekshirishni qiyinlashtirishi mumkin, ayniqsa ular ko'p bo'lsa.

Bizning maqsadimiz T-SQL kodini izchil formatlash va taqdim etish usulini ishlab chiqish va uni o'qilishi, tushunarli va xizmat ko'rsatishi mumkin.

To'g'ri kod yozish

Bundan ham muhimroq, to'g'ri kodni yaratish. Bu nuqta zamonaviy TSQL elementlaridan foydalanishni o'z ichiga oladi. Bu rivojlanayotgan til, shuning uchun eskirgan yoki noto'g'ri sintaksisdan foydalanmaslik uchun ehtiyot bo'lishingiz kerak.

Eski kodning keng tarqalgan namunasi SQL-92 standartiga asoslangan birlashma bo'lib, u erda quyidagi misolda ko'rsatilganidek, WHERE bandida birlashish sharti aniqlanadi:

Emp.BusinessEntityID NI EmpID, psn.FirstName, psn.FirstName, emp.NationalIDNumberni HumanResources.Employee emp, Person.Person psn WHERE emp.BusinessEntityID = psn.JLANT(!BusinessEntityID = psn.JObDuG) NOATID ASKI TANGLASH Texnik - WC60";!}

SQL Server hali ham ushbu yondashuvni qo'llab-quvvatlasa-da, siz hali ham FROM bandida qo'shilish shartini o'z ichiga oladigan yangi modelga yopishib olishingiz kerak:

Agar bir nechta boshqa shartlar bilan WHERE bandida yashirilmagan bo'lsa, qo'shilish shartini tanlash ancha oson.

Ikkinchi yondashuv yana bir afzalliklarga ega. Agar biron bir bayonotga qo'shilish shartini kiritishni unutib qo'ysangiz, birinchi misol o'zaro bog'lanishni qaytaradi, u o'z ichiga olishi mumkin katta soni ma'lumotlar. Ikkinchi bayonot biror narsa noto'g'ri ekanligini aytadigan xatoni qaytaradi.

Eski kodning yana bir misoli, T-SQL bayonotida TOP bayonoti mavjud bo'lsa. Ilgari biz ushbu misoldagi kabi qavssiz raqamli ifodani belgilagan edik:

Shaxs.Shaxsdan unvoni, ismi, familiyasini TOP 10 TANLASH; Bu hali ham SQL Serverda ishlayotgan bo'lsa-da, to'g'ri sintaksis endi qavslarni o'z ichiga oladi: SELECT TOP(10) Title, FirstName, Familiya FROM Person.Person;

Ma'lumotlar bazasi jamoasi eskirgan kodni almashtirish uchun faol ishlashi kerak. Ko'pgina T-SQL va ANSI SQL elementlari allaqachon eskirgan yoki kelajakda eskirishi mumkin. Standartlar qanchalik tez o'zgarishini hisobga olsak, kodingizda eskirgan elementlar bo'lishi mumkin. Masalan, SQL Server 2016 da TSQL INSERT , UPDATE va DELETE iboralari uchun SET ROWCOUNT opsiyasi eskirgan. Matn, matn va rasm ma'lumotlar turlari ham mavjud. Hatto CREATE DEFAULT va DROP DEFAULT kabi bayonotlar ham oxir-oqibat eskiradi.

Kodlash standartlarini belgilaganingizda, eskirgan elementlar bilan qanday ishlashni aniqlang. Ishlab chiquvchilar ulardan qochishlari kerakligini aytish oson, ammo bunga erishish qiyin. Shuning uchun ularni qachon va qanday olib tashlash kerakligini tushuntirish kerak. Yaxshiyamki, Microsoft har birining chiqarilishi bilan nima eskirishi haqida ma'lumot beradi yangi versiya SQL Server. Ushbu elementlarning ro'yxatini bo'limda topasiz SQL Server 2016 da eskirgan ma'lumotlar bazasi mexanizmi xususiyatlari.

Endi shubhali kodning yana bir misolini ko'rib chiqaylik. Quyidagi tanlash iborasi bajarilmasligi kerak bo'lgan narsani bajaradi - taqqoslash operatori ( ga teng emas) NULL qiymatida ishlatiladi:

Jadvalda Sarlavha qiymati NULL bo'lgan qatorlar mavjud bo'lsa ham, bu bayonot satrlarni qaytarmaydi va xatoni qaytarmaydi. Ehtiyot bo'lmasangiz, noto'g'ri natijalarga erishishingiz mumkin. Shu sababli, siz ushbu turdagi konstruktsiyalardan qochishingiz kerak va uning o'rniga to'g'ri qatorlarni qaytarish uchun IS NULL yoki IS NOT NULL operatoridan foydalaning:

Bu ishlab chiquvchilar NULL qiymatlari va NULL ga qarshi TSQL testlari bilan ishlashda muammolarga duch kelishi mumkin bo'lgan ko'plab misollardan faqat bittasi. Siz standartlaringizda keng tarqalgan xatolarni tasvirlashni xohlashingiz mumkin.

Bundan tashqari, ustunlarga taxallus qo'yish haqida qaror qabul qilishingiz kerak bo'ladi. Umumiy yondashuv quyidagi misolda ko'rsatilganidek, avval taxallusni, keyin esa tenglik belgisini ko'rsatishdir:

SELECT EmpID = emp.BusinessEntityID, psn.FirstName, psn.LastName, NatID = emp.NationalIDNumber FROM HumanResources.Employee emp INNER JOIN Person.Person psn ON emp.BusinessEntityID = psn.BusinessEntityID (LAN = psn.Busid. kanalizatsiya Texnik-WC60";!}

Yana bir yondashuv ixtiyoriy AS kalit so'zi orqali oxirida taxallus qo'shishdir:

Emp.BusinessEntityID NI EmpID, psn.FirstName, psn.LastName, emp.NationalIDNumber NATID sifatida HumanResources.Employee emp INNER JOIN Person.Person psn ON emp.BusinessEntityHERID (BusinessEntityHERID = psn. : Ishlab chiqarish Texnik-WC60";!}

Birinchi yondashuv tarafdorlari uni o'qish uchun qulayroq deb ta'kidlaydilar. Ammo ikkinchi yondashuv tarafdorlari, shuningdek, ularning usuli yaxshi o'qilishiga erishadi, deb da'vo qiladilar, chunki birinchi yondashuvni o'zgaruvchan tayinlash bilan aralashtirish mumkin. Ikkinchi yondashuv tarafdorlari, shuningdek, ularning usuli ANSI standartlariga mos kelishini ko'rsatadilar.

Ko'rib chiqilishi kerak bo'lgan yana bir masala - hujjatsiz saqlanadigan protseduralardan foydalanish. Masalan, sp_mstablespace saqlangan protsedurasi tomonidan quyidagi SELECT iborasi Person jadvali tomonidan ishlatiladigan qatorlar soni va disk maydoni miqdorini qaytarish uchun ishlatiladi. TSQL exec misoli:

EXECUTE sp_mstablespace "person.person";

Saqlangan protseduralar ajoyib ishlaydi va juda qulay bo'lishi mumkin. Ammo Microsoft qachon ularni o'zgartirishi yoki butunlay olib tashlashini bilishning hech qanday usuli yo'q. Siz yaratgan kodni siz bilmasdan ham buzish mumkin.

Albatta, standartlashtirish va kodni tekshirish bilan bog'liq har xil muammolar mavjud. Asosiy vazifalardan biri kodning ANSI standartlariga mos kelishi qanchalik muhimligini aniqlashdir. Ba'zilarning ta'kidlashicha, u har doim ANSI ga mos kelishi kerak, chunki bu uni ishlab chiquvchilar uchun ko'chma va tushunarli qiladi. Boshqa tomondan, o'zingizning elementlaringizni tashlab, muhim xususiyatlarni yo'qotishingiz mumkin. Sizning jamoangiz va tashkilotingiz uchun nima yaxshiroq ekanligini hal qilishingiz kerak.

Xususiyatlar mos kelmasligi

SQL Server turli operatsiyalarni bajarish uchun bir qator tizim funktsiyalarini taqdim etadi. Ularning to'g'ri ishlatilishiga ishonch hosil qilishingiz kerak. Noto'g'ri funksiya xatoni qaytarmasligi mumkin, lekin baribir noto'g'ri natijalar beradi.

Misol uchun, ISNUMERIC funksiyasi quyidagi misolda ko'rsatilganidek, oldindan aytib bo'lmaydigan natijalarni qaytarish bilan mashhur:

DECLARE @a TABLE(Cola VARCHAR(10)); INSERT INTO @a VALUES ("abc"), ("123"), ("$456"), ("22:35:27"); ColA ni tanlang, ISNUMERIC(ColA) = 1 BO'LSA SO'NG QUYILADI (Cola AS INT) TestNatijalari @a dan;

Biz TSQL jadval o'zgaruvchisini yaratamiz va uni to'ldiramiz turli xil turlari satrlar sifatida uzatiladigan qiymatlar. Keyin qiymatning raqamli ekanligini tekshirish uchun ISNUMERIC funksiyasidan foydalanamiz. Agar rost bo'lsa ( funktsiya 1 ni qaytaradi), qiymatni INT ma'lumotlar turiga aylantirishga harakat qilish. Ammo bu holda, ma'lumotlar bazasi mexanizmi $ 456 ga yetganda, u qayta o'rnatiladi va xato xabari qaytariladi:

“456$” varchar qiymati int maʼlumotlar turiga oʻzgartirilganda konvertatsiya amalga oshmadi.

Muammo shundaki, ISNUMERIC funksiyasi ba'zan $456 uchun bo'lgani kabi raqamli ma'lumotlar turiga aylantirib bo'lmaydigan raqamli qiymatni chaqiradi. U hatto 7e9 va $ kabi qiymatlarni izohlaydi. , raqamli sifatida. Bu muammoning eng yaxshi yechimi TRY_CONVERT funksiyasidan foydalanishdir:

DECLARE @a TABLE(Cola VARCHAR(10)); INSERT INTO @a VALUES ("abc"), ("123"), ("$456"), ("22:35:27"); ColA NI TANlang, TRY_CONVERT(int, ColA) NULL BO'LMAGAN HOLDA SO'NG SO'YMASINING (INT O'ZBEKISTONDA) @a dan TestNatijalari sifatida tugaydi;

Ma'lumotlarni o'zgartirish SQL Serverda juda qiyin mavzu, shuning uchun ehtiyot bo'lishingiz kerak.

Tizim funktsiyalari bilan ishlashda siz shunga o'xshash operatsiyalarni bajarish uchun ishlatilishi mumkin bo'lgan yoki o'xshash turdagi ma'lumotlarni qaytarishi mumkin bo'lgan turli funktsiyalar bilan shug'ullanishingiz kerak bo'ladi. Misol uchun, qiymatning ma'lumotlar turini aylantirish uchun CAST yoki CONVERT funksiyasidan foydalanishingiz mumkin. CAST funksiyasi ANSI standartlariga kiradi, lekin cheklangan imkoniyatlarga ega.

TSQL CONVERT funksiyasi standartlar bilan ta'minlanmagan, ammo u sana va vaqt qiymatlarini formatlash uchun bir qator variantlarni taqdim etadi. Ko'p hollarda formatlashni dastur darajasida qoldirish yaxshiroqdir. Qanday bo'lmasin, siz qaysi xususiyatlardan foydalanishni va kodingiz ANSI standartlariga mos kelishi siz uchun qanchalik muhimligini hal qilishingiz kerak bo'ladi.

O'zaro almashtiriladigan funksiyalarning yana bir misoli COUNT va EXISTS ma'lum ma'lumotlar mavjudligini tasdiqlash uchun foydalanilganda. Masalan, quyidagi IF bayonoti Shaxs jadvalida PersonType ustunida EM qiymatiga ega bo'lgan qatorlar mavjudligini tekshiradi:

Ushbu operator ajoyib ishlayotgan bo'lsa-da, siz EXISTS funksiyasidan foydalanib, unumdorlikni oshirishingiz mumkin, ayniqsa katta ma'lumotlar to'plamlari uchun:

Funktsiyadan noto'g'ri foydalanish har doim ham funktsiya muammosi emas. Misol uchun, vaziyatga qarab, SCOPE_IDENTITY() funksiyasidan foydalanish @@IDENTITY tizim o'zgaruvchisiga qaraganda aniqroq ma'lumot beradi. Ikkala holatda ham joriy seansda jadval uchun yaratilgan oxirgi identifikator qiymati qaytariladi. Lekin SCOPE_IDENTITY() funksiyasi faqat ma'lum bir qamrov uchun amal qiladi, @@ IDENTITY o'zgaruvchisi esa qo'llanilmaydi, bu esa qaytarish qiymatining to'g'riligiga ta'sir qilishi mumkin. Qo'shimcha ma'lumot Ushbu muammo haqida SQL hujjatlari bo'limida topasiz Server SCOPE_IDENTITY (Transact-SQL).

TSQL tizim funksiyalaridan foydalanish o'zboshimchalik bilan bo'lmasligi kerak. Ulardan qaysi birini ishlatishni diqqat bilan ko'rib chiqish kerak.

O'zgaruvchilar va parametrlar

Keling, yuzaga kelishi mumkin bo'lgan ba'zi muammolarni ko'rsatadigan oddiy misolni ko'rib chiqaylik:

@a INT, @b VARCHAR(25), @c VARCHAR(2), @d VARCHAR, @e MONEY; SET@a=25; SET @b = "yigirma besh"; SELECT @c = "EM", @e = 25; TANLASH @a AS "@a", @c AS "@c", @d "@d", @e "@e", @f "@f";

T-SQL bayonotlarining ushbu qisqa to'plamida biz bir qator xatolarni tuzatishga muvaffaq bo'ldik:

  • Biz @b o'zgaruvchisini e'lon qilamiz va unga qiymat beramiz, lekin biz uni hech qachon SELECT iborasida ishlatmaymiz;
  • Biz @c ni CHAR(2) maʼlumotlar turi emas, VARCHAR(2) maʼlumotlar turi bilan eʼlon qilamiz;
  • Biz @d ni uzunlikni ko'rsatmasdan VARCHAR deb e'lon qilamiz va o'zgaruvchiga qiymat bermaymiz. Keyin o'zgaruvchidan SELECT iborasida foydalanamiz;
  • Biz @f dan SELECT iborasida foydalanamiz, garchi biz uni e'lon qilmagan yoki unga qiymat bermagan bo'lsak ham.

Ushbu stsenariylarning har qandayiga yo'l qo'ymaslik kerak, lekin katta kod bilan ishlashda bir nechta e'lon qilinmagan yoki foydalanilmagan o'zgaruvchilarni o'tkazib yuborish oson. Yaxshiyamki, SQL Server siz foydalanmoqchi bo'lgan o'zgaruvchilar haqida ularni e'lon qilmasdan xabar beradi, ammo boshqa stsenariylarda bunday emas. Kodlash standartlari bir nechta eslatmalarni o'z ichiga olishi kerak, shuning uchun ishlab chiquvchilar o'zgaruvchilardan to'g'ri foydalanayotganligini tekshirishlari kerak.

bilan ma'lumotlar bazasini ishlab chiqish sohasiga xush kelibsiz standart til SQL so'rovlari. Ma'lumotlar bazasini boshqarish tizimlari (DBMS) turli xil apparat platformalarida ishlaydigan ko'plab vositalarga ega.

  • Relyatsion ma'lumotlar bazasi asoslari

    Ushbu bobda… | Axborotni tashkil etish | Nima bo'ldi malumotlar bazasi| DBMS nima | Ma'lumotlar bazasi modellarini taqqoslash | Relyatsion ma'lumotlar bazasi nima

  • SQL asoslari

    Ushbu bobda… | SQL nima | SQL noto'g'ri tushunchalari | Turli SQL standartlariga qarash | SQL standart buyruqlari va zahiralangan so'zlarga kirish | Raqamlar, belgilar, sanalar, vaqtlar va boshqa ma'lumotlar turlarini ko'rsatish | Null qiymatlar va cheklovlar

  • SQL komponentlari

    Ushbu bobda… | Ma'lumotlar bazasini yaratish | Ma'lumotlarni qayta ishlash | Ma'lumotlar bazasini himoya qilish | SQL - bu relyatsion ma'lumotlar bazalarida ma'lumotlarni yaratish va saqlash uchun maxsus mo'ljallangan til. Garchi bunday ma'lumotlar bazalarini boshqarish tizimlarini etkazib beruvchi kompaniyalar o'zlarining SQL dasturlarini taklif qilsalar ham, tilning rivojlanishi ISO / ANSI standarti tomonidan belgilanadi va boshqariladi.

  • Oddiy ma'lumotlar bazasini yaratish va saqlash

    Ushbu bobda... | RAD vositasi yordamida ma'lumotlar bazasidan jadval yaratish, o'zgartirish va o'chirish. | SQL yordamida ma'lumotlar bazasidan jadval yaratish, o'zgartirish va o'chirish. | Ma'lumotlar bazasini boshqa ma'lumotlar bazasiga o'tkazish.

  • Ko'p jadvalli relyatsion ma'lumotlar bazasini yaratish

    Ushbu bobda... | Ma'lumotlar bazasida nima bo'lishi kerak | Ma'lumotlar bazasi elementlari orasidagi munosabatlarni aniqlash | Tugmalar yordamida jadvallarni bog'lash | Ma'lumotlar yaxlitligi dizayni | Ma'lumotlar bazasini normallashtirish | Ushbu bobda ko'p jadvalli ma'lumotlar bazasini yaratish misoli keltirilgan.

  • Ma'lumotlar bazasidan ma'lumotlarni manipulyatsiya qilish

    Ushbu bobda... | Ma'lumotlar bilan ishlash | Jadvaldan kerakli ma'lumotlarni olish | Bir yoki bir nechta jadvallardan tanlangan ma'lumotlarni ko'rsatish | Jadvallar va ko'rinishlardagi ma'lumotlarni yangilash | Jadvalga yangi qator qo'shish

  • Qadriyatlarning ta'rifi

    Ushbu bobda... | Ortiqcha kodlashni kamaytirish uchun o'zgaruvchilardan foydalanish | Ma'lumotlar bazasi jadvali maydonida tez-tez so'raladigan ma'lumotlarni olish | Murakkab iboralar yaratish uchun oddiy qiymatlarni birlashtirish | Ushbu kitob ma'lumotlar bazasining yaxlitligini saqlash uchun ma'lumotlar bazasi tuzilishi qanchalik muhimligini doimo ta'kidlaydi.

  • Ma'noli murakkab iboralar

    Ushbu bobda... | Shartli ifodalardan foydalanish case | Ma'lumotlar elementini bir ma'lumot turidan boshqasiga o'tkazish | Yozuv qiymatiga ega ifodalar bilan ma'lumotlarni kiritish vaqtini saqlang | 2-bobda SQL ma'lumotlar pastki tili deb ataladi.

  • To'g'ri ma'lumotlarga "otish"

    Ushbu bobda... | Kerakli jadvallarni belgilash | Kerakli chiziqlarni boshqalardan ajratish | Qaerda bo'laklarni samarali yaratish | Null qiymatlar bilan qanday ishlash kerak | Mantiqiy bog`lovchilar yordamida qo`shma iboralar yasash | So‘rov natijalarini ustunlar bo‘yicha guruhlash

  • Aloqa operatorlari

    Ushbu bobda… | O'xshash tuzilishga ega jadvallarni birlashtirish | Turli tuzilishga ega jadvallarni birlashtirish | Bir nechta jadvallardan kerakli ma'lumotlarni olish | SQL - relyatsion ma'lumotlar bazalarida qo'llaniladigan so'rovlar tili.

  • Ichki so'rovlardan foydalanish

    Ushbu bobda… | Bitta SQL bayonoti bilan bir nechta jadvallardan ma'lumotlarni olish | Bir jadvaldagi qiymatni boshqasidagi qiymatlar to'plami bilan solishtirish orqali ma'lumotlar elementlarini topish | Bir jadvaldagi qiymatni boshqasidan tanlash iborasi yordamida tanlangan bitta qiymat bilan taqqoslash orqali ma'lumotlar elementlarini topish

  • Rekursiv so'rovlar

  • Ma'lumotlar bazasi xavfsizligi

    Ushbu bobda... | Ma'lumotlar bazasi jadvaliga kirishni boshqarish | Ruxsat berish to'g'risida qaror qabul qilish | Kirish ruxsatlarini berish | Kirish ruxsatlarini bekor qilish | Ruxsatsiz kirish urinishlarining oldini olish

  • Ma'lumotlarni himoya qilish

    Ushbu bobda... | Ma'lumotlar bazasining buzilishini qanday oldini olish mumkin | Bir vaqtning o'zida operatsiyalar natijasida yuzaga keladigan muammolar | Ushbu muammolarni SQL mexanizmlari bilan hal qilish | Belgilangan tranzaksiya buyrug'i bilan kerakli xavfsizlik darajasini o'rnatish

  • Ilovalarda SQL dan foydalanish

    Ushbu bobda... | Ilovada SQL | Protsessual tillar bilan SQL almashish | Mos kelmaslikni qanday oldini olish mumkin | Protsessual kodga o'rnatilgan SQL kodi | Protsessual koddan SQL modullarini chaqirish | RAD vositasidan SQL chaqiruvi | Oldingi boblarda biz asosan SQL buyruqlarini alohida ko'rib chiqdik, ya'ni. ma'lumotlarni qayta ishlash vazifasi shakllantirildi va buning uchun SQL so'rovi yaratildi.

  • ODBC va JDBC

    Ushbu bobda… | ODBC ta'rifi | Qismlar tavsifi ODBC | Mijoz/server muhitida ODBC dan foydalanish | Internetda ODBC dan foydalanish | ODBC dan foydalanish mahalliy tarmoqlar| JDBC yordamida | Har yili bir tashkilot yoki bir nechta turli tashkilotlarning kompyuterlari bir-biriga tobora ko'proq ulanmoqda. Shu sababli, tarmoq orqali ma'lumotlar bazalariga umumiy foydalanishni o'rnatish zarurati tug'iladi.

  • SQL: 2003 va XML

    Ushbu bobda... | XML bilan SQL dan foydalanish | XML, ma'lumotlar bazalari va Internet | SQL:2003 tilining eng muhim yangi xususiyatlaridan biri bu kengaytiriladigan Markup Language (XML) fayllarini qo'llab-quvvatlash bo'lib, ular tobora heterojen platformalar o'rtasida ma'lumotlar almashinuvi uchun universal standartga aylanib bormoqda.

  • Kursorlar

    Ushbu bobda... | Deklaratsiya bayonotida kursor qamrovi | Kursor ochilishi | Qator ma'lumotlarini tanlash | Kursor yopish | SQL eng ommabop dasturlash tillarining ko'pchiligidan farq qiladi, chunki u bir vaqtning o'zida jadvalning barcha satrlari ma'lumotlari bilan operatsiyalarni bajaradi, protsessual tillar esa ma'lumotlarni satr bo'yicha qayta ishlaydi.

  • Hammaga salom! Bugun men imkon qadar soddaman, ayniqsa yangi boshlanuvchilar uchun, men sizga bu haqda aytib berishga harakat qilaman SQL nima va u nima uchun. Ushbu materialdan siz ma'lumotlar bazasi va ma'lumotlar bazasini boshqarish tizimi nima ekanligini, shuningdek, SQL tilining dialekti nima ekanligini bilib olasiz, chunki butun maqola sizni SQL nima ekanligini tushunishga olib borishga asoslanadi.

    O'ylaymanki, siz allaqachon SQL ma'lumotlar bazalari bilan bog'liq bo'lgan tilning bir turi ekanligini tasavvur qilasiz, ammo SQL nima ekanligini yaxshiroq tushunish uchun siz SQL nima ekanligini, bu til nima uchun ekanligini tushunishingiz kerak, ya'ni. uning tayinlanishi.

    Shuning uchun birinchi navbatda men sizga SQL tilining maqsadi aniq bo'ladigan va umuman nima uchun kerak bo'lgan ba'zi ma'lumotlarni beraman.

    Ma'lumotlar bazasi nima

    Va shundan boshlaymanki, ma'lumotlar bazasi deganda odatda ma'lum bir tarzda saqlanadigan va undan foydalanish mumkin bo'lgan har qanday ma'lumotlar to'plami tushuniladi. Ammo, agar biz avtomatlashtirilgan ma'lumotlar bazalari haqida gapiradigan bo'lsak, bu erda, albatta, relyatsion ma'lumotlar bazalari haqida gapiramiz.

    Relyatsion ma'lumotlar bazasi- bu ma'lum munosabatlar orqali bir-biriga bog'liq bo'lgan tartiblangan ma'lumotlar. U jadvallar shaklida taqdim etilgan bo'lib, unda barcha ma'lumotlar mavjud. Va bu juda muhim, chunki endi siz zamonaviy ma'lumotlar bazasini oddiygina jadvallar shaklida o'ylashingiz kerak ( SQL kontekstida gapirish), ya'ni. Umumiy ma'noda ma'lumotlar bazasi jadvallar to'plamidir. Albatta, bu juda soddalashtirilgan ta'rif, ammo ma'lumotlar bazasi haqida amaliy tushuncha beradi.

    SQL nima

    Ma'lumotlar bazasidagi ma'lumotlar tartiblanganligi, ma'lum bir ob'ektlarga bo'linganligi va jadvallar ko'rinishida taqdim etilishi tufayli unga kirish va bizga kerakli ma'lumotlarni topish oson.

    Va bu erda paydo bo'ladi asosiy savol: Qanday qilib u bilan bog'lanib, kerakli ma'lumotlarni olishimiz mumkin?

    Buning uchun maxsus vosita bo'lishi kerak va bu erda bizning yordamimizga SQL keladi, ya'ni ma'lumotlar bilan manipulyatsiya qilinadi ( yaratish, qidirish, yo'q qilish va boshqalar.) ma'lumotlar bazasida.

    SQL (Strukturaviy so'rovlar tili) tuzilgan so'rovlar tili bo'lib, uning yordamida maxsus so'rovlar yoziladi ( SQL bayonotlari deb ataladi) ma'lumotlar bazasidan ma'lumotlarni olish yoki ushbu ma'lumotlarni manipulyatsiya qilish uchun ma'lumotlar bazasiga.

    Shuni ham ta'kidlash joizki, ma'lumotlar bazasi va xususan, relyatsion model to'plamlar nazariyasiga asoslanadi, bu ma'lumotlar bazasida turli ob'ektlarning bir butunga, bir butun ostida birlashishini nazarda tutadi, biz jadvalni nazarda tutamiz. Bu juda muhim, chunki SQL tili to'plam bilan, ma'lumotlar to'plami bilan aniq ishlaydi, ya'ni. jadvallar bilan.

    Mavzu bo'yicha foydali materiallar:

    • Microsoft SQL Serverda ma'lumotlar bazasini yaratish - yangi boshlanuvchilar uchun ko'rsatmalar;
    • Microsoft SQL Serverda jadvallarga ma'lumotlarni qo'shish - INSERT INTO bayonoti.

    DBMS nima

    Sizda savol tug'ilishi mumkin, agar ma'lumotlar bazasi jadvallarda saqlanadigan ba'zi ma'lumotlar bo'lsa, u jismoniy jihatdan qanday ko'rinishga ega? Bir butun sifatida qanday qarash kerak?

    Qisqasi, bu shunchaki maxsus formatda yaratilgan fayl, ma'lumotlar bazasi aynan shunday ko'rinadi ( ko'p hollarda JB bir nechta fayllarni o'z ichiga oladi, ammo hozir bu darajada bu unchalik muhim emas).

    Yana davom etsak, agar ma'lumotlar bazasi maxsus formatdagi fayl bo'lsa, uni qanday yaratish yoki ochish kerak? Va bu erda qiyinchilik tug'iladi, chunki xuddi shunday, bunday faylni yaratish uchun hech qanday vositalarsiz, ya'ni. relyatsion ma'lumotlar bazasini yaratish mumkin emas, buning uchun sizga ma'lumotlar bazasini yaratish va boshqarish, boshqacha qilib aytganda, ushbu fayllar bilan ishlaydigan maxsus vosita kerak.

    Bunday vosita DBMS ma'lumotlar bazasini boshqarish tizimidir, DBMS deb qisqartirilgan.

    DBMS nima

    Aslida, juda ko'p turli xil DBMS mavjud, ularning ba'zilari to'lanadi va juda ko'p pul talab qiladi, agar biz to'liq xususiyatli versiyalar haqida gapiradigan bo'lsak, lekin eng ko'p, desak, "salqin"larida bepul nashrlar mavjud. , aytmoqchi, o'rganish uchun ajoyib.

    Ularning imkoniyatlari va mashhurligi nuqtai nazaridan quyidagi tizimlarni ajratib ko'rsatish mumkin:

    • Microsoft SQL Server Microsoft kompaniyasining ma'lumotlar bazasini boshqarish tizimidir. Bu korporativ sektorda, ayniqsa yirik kompaniyalarda juda mashhur. Va bu shunchaki DBMS emas - bu ma'lumotlarni saqlash va o'zgartirish, ularni tahlil qilish, ushbu ma'lumotlarni himoya qilish va boshqa ko'p narsalarni amalga oshirish imkonini beruvchi dasturlarning butun majmuasidir;
    • Oracle ma'lumotlar bazasi Oracle kompaniyasining ma'lumotlar bazasini boshqarish tizimidir. Bu, shuningdek, juda mashhur DBMS, shuningdek, yirik kompaniyalar orasida. Imkoniyatlari va funksionalligi jihatidan Oracle Database va Microsoft SQL Server bilan solishtirish mumkin, shuning uchun ular bir-biriga jiddiy raqobatchilardir va ularning to'liq xususiyatli versiyalarining narxi juda yuqori;
    • MySQL- Bu Oracle'dan ma'lumotlar bazasini boshqarish tizimi, lekin faqat u bepul tarqatiladi. MySQL Internet segmentida juda keng mashhurlikka erishdi, ya'ni. aynan MySQL-da Internetdagi deyarli barcha saytlar ishlaydi, boshqacha qilib aytganda, Internetdagi ko'pchilik saytlar ushbu ma'lumotlar bazasidan ma'lumotlarni saqlash vositasi sifatida foydalanadi;
    • PostgreSQL- Ushbu ma'lumotlar bazasini boshqarish tizimi ham bepul va u juda mashhur va funktsionaldir.

    Mavzu bo'yicha foydali materiallar:

    • Microsoft SQL Server 2016 Express-ni o'rnatish - Windows-da Microsoft SQL Serverning bepul nashrini o'rnatish misoli;
    • Microsoft SQL Server 2017 Express dasturini Ubuntu serveriga o'rnatish - Linuxda Microsoft SQL Serverning bepul nashrini o'rnatish misoli;
    • PostgreSQL 11-ni Windows-ga o'rnatish - Windows-da PostgreSQL-ni o'rnatishga misol;
    • MySQL-ni Windows-ga o'rnatish - Windows-da MySQL-ni o'rnatishga misol;
    • MySQL-ni Linux Mint-da o'rnatish va sozlash - Linux-da MySQL-ni o'rnatishga misol;
    • Oracle Database Express Edition 11g-ni o'rnatish - Windows-da Oracle-ning bepul nashrini o'rnatishga misol ( Maqola uzoq vaqt oldin yozilgan, ammo u hali ham foydali bo'ladi).

    SQL tili dialektlari (SQL kengaytmalari)

    SQL tili standart bo'lib, u barcha relyatsion ma'lumotlar bazalarida amalga oshiriladi, lekin har bir ma'lumotlar bazasi ushbu standartning kengaytmasiga ega, o'z ma'lumotlar tiliga ega, u odatda SQL dialekti deb ataladi, bu, albatta, SQL-ga asoslangan. ammo to'liq dasturlash uchun ko'proq imkoniyatlar beradi, bundan tashqari, bunday ichki til tizim ma'lumotlarini olish va SQL so'rovlarini soddalashtirish imkonini beradi.

    Bu erda SQL tilining ba'zi dialektlari:

    • Transact SQL(qisqartirilgan T-SQL) - Microsoft SQL Serverda qo'llaniladi;
    • PL/SQL(Protsessual til / Structured Query Language) - Oracle Database da qo'llaniladi;
    • PL/pgSQL(Protsessual til/PostGres tuzilgan so'rovlar tili) - PostgreSQL tomonidan qo'llaniladi.

    Shunday qilib, SQL bayonotlarini qaysi kengaytmada yozishingiz ma'lumotlar bazasi bazasiga bog'liq. Agar oddiy SQL so'rovlari haqida gapiradigan bo'lsak, masalan,

    Tovarlardan mahsulot identifikatori, mahsulot nomini tanlang

    keyin, albatta, bunday so'rovlar barcha ma'lumotlar bazasida ishlaydi, chunki SQL standartdir.

    Eslatma! Bu bitta jadvaldan ma'lumotlarni tanlash uchun oddiy SQL so'rovidir, ikkita ustun ko'rsatiladi.

    Ammo, agar siz dasturlashni rejalashtirmoqchi bo'lsangiz, DBMS ning barcha ichki xususiyatlaridan foydalaning ( protseduralarni ishlab chiqish, o'rnatilgan funktsiyalardan foydalanish, tizim ma'lumotlarini olish va h.k.), keyin siz SQLning ma'lum bir lahjasini o'rganishingiz va shunga mos ravishda ushbu dialektdan foydalanadigan DBMSda mashq qilishingiz kerak. Bu juda muhim, chunki ko'plab konstruktsiyalarning sintaksisi qobiliyatlar va boshqalar bilan bir xil tarzda farqlanadi. Va agar siz, masalan, boshqa ma'lumotlar bazasida ma'lum bir SQL kengaytmasining imkoniyatlaridan foydalanadigan SQL bayonotini ishlatsangiz, unda bunday ko'rsatma, albatta, bajarilmaydi.

    Masalan, men shaxsan T-SQL tiliga ixtisoslashganman va shunga mos ravishda men Microsoft SQL Server bilan 8 yildan ortiq ishlayapman!

    Albatta, men boshqa DBMS bilan ham ishlagan bo'lsam ham, bir vaqtning o'zida ikkita dasturga hamroh bo'ldim, ulardan biri PostgreSQL bilan ishlagan, ikkinchisi, ehtimol allaqachon aniq, Microsoft SQL Server bilan.

    Men MySQL bilan saytlar va xizmatlarni saqlashning bir qismi sifatida ishladim, ehtimol va ko'p. Men boshqa loyihalarning bir qismi sifatida Oracle Database bilan ishlashga majbur bo'ldim.

    Men T-SQL tilidagi barcha to‘plangan tajribalarimni bir joyga jamladim va uni kitoblar ko‘rinishida joylashtirdim, shuning uchun agar sizda Transact-SQL (T-SQL) tilini o‘rganish istagi bo‘lsa, kitoblarimni o‘qishni tavsiya etaman:

    • T-SQL dasturchining yo'li - yangi boshlanuvchilar uchun Transact-SQL qo'llanmasi. Unda men tilning barcha konstruksiyalari haqida batafsil gapirib beraman va izchillik bilan oddiydan murakkabga o‘taman. T-SQL tilini har tomonlama o'rganish uchun mos;
    • T-SQL dasturlash uslubi - to'g'ri kodlash asoslari. T-SQL kodining sifatini yaxshilashga qaratilgan kitob ( T-SQL tili bilan allaqachon tanish bo'lganlar uchun, ya'ni. hech bo'lmaganda asosiy narsalarni biladi).

    Umid qilamanki, endi siz SQL nima ekanligini va u nima uchun ekanligini tushundingiz, quyidagi materiallarda men sizga SQL so'rovlarini qanday yaratishni aytib beraman, buning uchun qanday vositalardan foydalanish kerakligini va qaysi ma'lumotlar bazasi uchun foydalanish kerakligini aytaman, chunki har bir DBMS o'z vositalariga ega. , shuning uchun ijtimoiy tarmoqlardagi guruhlarimdagi yangi maqolalar chiqishi uchun kuzatib boring.

    Jurnalimizning 6 va 7-sonlarida chop etilgan ushbu turkumdagi oldingi ikkita maqolada biz ma'lumotlarga kirishning turli mexanizmlarini, jumladan ADO, BDE va ​​ularning muqobillarini ko'rib chiqdik. Endi biz "DBMS - ishlab chiqish vositasi" ning ma'lum bir juftligi uchun ma'lumotlarga kirish texnologiyasini qanday tanlashni bilamiz.

    Ma'lumotlarga kirish texnologiyasi mavjud bo'lganda, biz nihoyat ma'lumotlarning o'zi va metama'lumotlarning qanday boshqarilishi kerakligi haqida o'ylashimiz mumkin. Manipulyatsiya usullari ma'lum ma'lumotlar bazasiga (masalan, ma'lumotlar bazasi ob'ektlariga kirish uchun ushbu ma'lumotlar bazasining mijoz qismining ob'ektlaridan foydalanish) yoki ma'lumotlarga kirish mexanizmiga xos bo'lishi mumkin. Shunga qaramay, deyarli barcha server tomonidagi relyatsion DBMS va ma'lumotlarga kirishning ko'pgina universal mexanizmlari (jumladan, ish stoli DBMS bilan birgalikda foydalanilganda) tomonidan qo'llab-quvvatlanadigan ma'lumotlarni manipulyatsiya qilishning ko'p yoki kamroq universal usuli mavjud. Bu usul SQL (Structured Query Language - Structured Query Language) dan foydalanish hisoblanadi. Quyida biz ushbu tilning maqsadi va xususiyatlarini ko'rib chiqamiz, shuningdek, ma'lumotlarni ajratib olish va umumlashtirish, yozuvlarni qo'shish, o'chirish va o'zgartirish, ma'lumotlarni ruxsatsiz kirishdan himoya qilish va ma'lumotlar bazalarini yaratish uchun qanday foydalanishni o'rganamiz. SQL-ni batafsilroq o'rganish uchun biz Martin Graberning "SQLga kirish" (M., Laurie, 1996) va "SQL." kitoblarini tavsiya qilishimiz mumkin. Ma’lumotnoma” (M., Lori, 1997).

    Kirish

    Strukturaviy so'rovlar tili - relyatsion DBMS ma'lumotlarini boshqarish uchun ishlatiladigan protsessual bo'lmagan til. "Protsessual bo'lmagan" atamasi ma'lum bir tilda ma'lumotlar bilan nima qilish kerakligini shakllantirish mumkinligini anglatadi, ammo buni qanday qilishni aniq ko'rsatib bo'lmaydi. Boshqacha qilib aytganda, bu tilda teglar, tsikl bayonotlari, shartli o'tishlar va boshqalar kabi algoritmik tuzilmalar mavjud emas.

    SQL tili 1970-yillarning boshlarida IBM tadqiqot loyihasi natijasida yaratilgan boʻlib, uning maqsadi relyatsion maʼlumotlarni manipulyatsiya qilish tilini yaratish edi. U dastlab SEQUEL (Structured English Query Language), keyin SEQUEL/2, keyin esa shunchaki SQL deb nomlangan. Rasmiy SQL standarti ANSI (Amerika Milliy Standartlar Instituti) tomonidan nashr etilgan. Milliy institut Standardization, AQSH) 1986 yilda (bu bugungi kunda eng ko'p qo'llaniladigan SQL ilovasi). Ushbu standart 1989 va 1992 yillarda kengaytirilgan, shuning uchun so'nggi SQL standarti SQL92 deb ataladi. Hozirda SQL3 standarti ustida ish olib borilmoqda, u ba'zi ob'ektga yo'naltirilgan kengaytmalarni o'z ichiga oladi.

    ANSI standartiga muvofiqlikning uchta darajasi mavjud - boshlang'ich, o'rta va to'liq. IBM, Informix, Microsoft, Oracle va Sybase kabi ko'plab server ma'lumotlar bazasi sotuvchilari ANSI standartiga asoslangan (hech bo'lmaganda kirish darajasidagi muvofiqlikka javob beradigan) ba'zi ma'lumotlar bazasiga xos kengaytmalar bilan SQL ning o'zlarining ilovalaridan foydalanadilar.

    Muayyan DBMS tomonidan qo'llaniladigan SQL versiyasiga mos kelishi haqida qo'shimcha ma'lumot olish uchun ushbu DBMS bilan birga keladigan hujjatlarga qarang.

    SQL qanday ishlaydi

    Keling, SQL qanday ishlashini ko'rib chiqaylik. Aytaylik, bizda ba'zi bir DBMS tomonidan boshqariladigan ma'lumotlar bazasi mavjud. Undan ma'lumotlarni olish uchun SQLda tuzilgan so'rov ishlatiladi. DBMS ushbu so'rovni qayta ishlaydi, so'ralgan ma'lumotlarni oladi va uni qaytaradi. Ushbu jarayon sxematik tarzda rasmda tasvirlangan. 1 .

    Keyinchalik ko'rib chiqamizki, SQL nafaqat ma'lumotlarni olish, balki ma'lumotlar strukturasini aniqlash, ma'lumotlarni qo'shish va o'chirish, ma'lumotlarga kirishni cheklash yoki ruxsat berish va ma'lumot butunligini saqlash imkonini beradi.

    E'tibor bering, SQLning o'zi na DBMS, na alohida mahsulot emas. Bu DBMS bilan o'zaro aloqa qilish uchun ishlatiladigan til va qaysidir ma'noda uning ajralmas qismidir.

    Ma'lumotlarni aniqlash tili (DDL)

    Ma'lumotlarni aniqlash tili ma'lumotlar bazalari va ulardagi ob'ektlarni (jadvallar, ko'rinishlar va boshqalar) yaratish, o'zgartirish va yo'q qilish imkonini beruvchi operatorlarni o'z ichiga oladi. Ushbu operatorlar jadvalda keltirilgan. 1.

    1-jadval

    Operator

    Tavsif

    Ma'lumotlar bazasiga yangi jadval qo'shish uchun ishlatiladi

    Ma'lumotlar bazasidan jadvalni olib tashlash uchun ishlatiladi

    Mavjud jadvalning tuzilishini o'zgartirish uchun ishlatiladi

    Ma'lumotlar bazasiga yangi ko'rinish qo'shish uchun ishlatiladi

    Ko'rinishni ma'lumotlar bazasidan olib tashlash uchun ishlatiladi

    Berilgan maydon uchun indeks yaratish uchun foydalaniladi

    Mavjud indeksni olib tashlash uchun ishlatiladi

    Yaratish uchun ishlatiladi yangi sxema ma'lumotlar bazasida

    Ma'lumotlar bazasidan sxemani olib tashlash uchun foydalaniladi

    Yangi domen yaratish uchun foydalaniladi

    Domenni bekor qilish uchun foydalaniladi

    Domenni ma'lumotlar bazasidan olib tashlash uchun foydalaniladi

    Ma'lumotlarni manipulyatsiya qilish tili (DML)

    Ma'lumotlarni manipulyatsiya qilish tili ma'lumotlarni tanlash, qo'shish, o'chirish va o'zgartirish imkonini beruvchi operatorlarni o'z ichiga oladi. E'tibor bering, ushbu bayonotlar ular chaqirilgan operatsiyani bajarish uchun talab qilinmaydi. DML bayonotlari jadvalda keltirilgan. 2.

    jadval 2

    Ba'zan SELECT bayonoti Data Query Language (DQL) deb nomlangan alohida toifaga kiradi.

    Kursorni boshqarish tili (CCL)

    Kursorni boshqarish tili iboralari kursorni aniqlash, SQL operatorlarini bajarishga tayyorlash va boshqa ba'zi bayonotlar uchun ishlatiladi. CCL bayonotlari Jadvalda keltirilgan. 5.

    5-jadval

    Operator

    Tavsif

    So'rov uchun kursorni aniqlash uchun ishlatiladi

    So'rov rejasini tavsiflash uchun ishlatiladi. Ushbu bayonot Microsoft SQL Server 7.0 uchun SQL kengaytmasi hisoblanadi. Boshqa ma'lumotlar bazasida bajarilishi shart emas. Masalan, Oracle-da siz EXPLAIN PLAN bayonotidan foydalanishingiz kerak

    So'rov natijalarini olishda kursorni ochish uchun foydalaniladi

    So'rov natijalaridan satr olish uchun ishlatiladi

    Kursorni yopish uchun ishlatiladi

    SQL bayonini bajarish uchun tayyorlash uchun foydalaniladi

    SQL bayonotini bajarish uchun ishlatiladi

    Tayyorlangan so'rovni tasvirlash uchun ishlatiladi

    Barcha SQL iboralari rasmda ko'rsatilgan shaklga ega. 2.

    Har bir SQL iborasi fe'l bilan boshlanadi, bu gap nima qilishini belgilaydigan kalit so'zdir (SELECT, INSERT, DELETE...). Operator shuningdek, qanday ma'lumotlar operatsiyalari bajarilganligi haqida ma'lumotni o'z ichiga olgan bandlarni o'z ichiga oladi. Har bir band FROM, WHERE va boshqalar kabi kalit so'z bilan boshlanadi. Gapning tuzilishi uning turiga bog'liq - ba'zi bandlar jadval yoki maydon nomlarini o'z ichiga oladi, ba'zilarida qo'shimcha kalit so'zlar, doimiylar yoki ifodalar bo'lishi mumkin.

    SQL bayonotlarini qanday bajarish kerak

    Barcha zamonaviy server DBMS (shuningdek, ko'plab mashhur ish stoli ma'lumotlar bazasi) SQL operatorini bajarish va uning natijasi bilan tanishish imkonini beruvchi yordamchi dasturlarni o'z ichiga oladi. Xususan, Oracle ning mijoz qismida SQL Plus yordam dasturi, Microsoft SQL Serverda esa SQL Query Analyzer yordam dasturi mavjud. Aynan shu yordamchi dastur biz SQL imkoniyatlarini namoyish qilish uchun foydalanamiz va biz "tajriba" qiladigan ma'lumotlar bazasi sifatida Microsoft SQL Server 7.0 tarqatish paketiga kiritilgan NorthWind ma'lumotlar bazasini olamiz. Asosan, siz boshqa ma'lumotlar bazasidan va ushbu ma'lumotlar bazasida SQL iboralarini bajarishi va natijalarni ko'rsatishi mumkin bo'lgan boshqa yordam dasturidan foydalanishingiz mumkin (yoki hatto biron bir ishlab chiqish vositasi yordamida o'zingizni yozishingiz mumkin - Visual Basic, Delphi, C ++ Builder va boshqalar). Biroq, har qanday holatda, ushbu ma'lumotlar bazasini zaxiralash tavsiya etiladi.

    Ko'pgina zamonaviy veb-ilovalar ma'lumotlar bazalari bilan o'zaro ishlaydi, odatda tildan foydalanadi SQL. Baxtimizga, bu tilni o'rganish juda oson. Ushbu maqolada biz oddiy narsalarni ko'rib chiqamiz SQL so'rovlar va ular bilan muloqot qilish uchun qanday foydalanishni o'rganing MySQL ma'lumotlar bazasi.

    Sizga nima kerak?

    SQL (Tuzilgan so'rovlar tili) kabi ma'lumotlar bazasini boshqarish tizimlari bilan ishlash uchun maxsus mo'ljallangan til MySQL, Oracle, Sqlite va boshqalar ... Bajarish uchun SQL ushbu maqoladagi so'rovlar, men sizga o'rnatishingizni maslahat beraman MySQL mahalliy kompyuterga. Bundan tashqari, men foydalanishni tavsiya qilaman phpMyAdmin vizual interfeys sifatida.

    Bularning barchasi hamma uchun sevimli Denverda mavjud. O'ylaymanki, hamma nima ekanligini va uni qaerdan olishni bilishi kerak :). mumkin aks holda WAMP yoki MAMP dan foydalaning.

    Denverda o'rnatilgan MySQL konsol. Biz undan foydalanamiz.

    MA'LUMOTLAR BAZASI YARATING:ma'lumotlar bazasini yaratish

    Mana bizning birinchi iltimosimiz. Keyingi ish uchun biz birinchi ma'lumotlar bazasini yaratamiz.

    Boshlash uchun oching MySQL konsol va tizimga kiring. Uchun WAMP standart parol bo'sh. Bu hech narsa emas :). Uchun MAMP - "ildiz". Denverga aniqlik kiritish kerak.

    Tizimga kirgandan so'ng, quyidagi qatorni kiriting va bosing Kiriting:

    MA'LUMOTLAR BAZASINI YARATING my_first_db;

    E'tibor bering, so'rov oxirida boshqa tillardagi kabi nuqtali vergul (;) qo'shiladi.

    Shuningdek, SQL-dagi buyruqlar harflar katta-kichikligiga sezgir. Biz ularni katta harflar bilan yozamiz.

    Variantlar faqat: belgilar to'plamiVa Harakatlash

    Agar siz o'rnatmoqchi bo'lsangiz belgilar to'plami (belgilar to'plami) va taqqoslash (taqqoslash) mumkin quyidagi buyruqni yozing:

    MA'LUMOTLAR BAZA YARATISH my_first_db SUVGA CHARAKTERLAR TOPLAMI utf8 COLLATE utf8_general_ci;

    Qo'llab-quvvatlanadigan belgilar to'plamlari ro'yxatini toping MySQL.

    MA'LUMOT BAZALARINI KO'RSATISH:barcha ma'lumotlar bazalarini ro'yxatlaydi

    Ushbu buyruq barcha mavjud ma'lumotlar bazalarini ko'rsatish uchun ishlatiladi.

    MA'LUMOTLAR BAZASI:ma'lumotlar bazasini o'chirish

    Ushbu so'rov bilan mavjud JB ni tashlab yuborishingiz mumkin.

    Bu buyruq bilan ehtiyot bo'ling, chunki u ogohlantirishsiz ishlaydi. Agar ma'lumotlar bazasida ma'lumotlar mavjud bo'lsa, ularning barchasi o'chiriladi.

    FOYDALANISH:Ma'lumotlar bazasini tanlash

    Texnik jihatdan, bu so'rov emas, balki operator va oxirida nuqta-vergul qo'yishni talab qilmaydi.

    Bu MySQL haqida xabar beradi joriy seans uchun sukut bo'yicha ishlash uchun ma'lumotlar bazasini tanlang. Endi biz jadvallar yaratishga va ma'lumotlar bazasi bilan boshqa narsalarni qilishga tayyormiz.

    Ma'lumotlar bazasidagi jadval nima?

    Ma'lumotlar bazasida jadvalni shunday ko'rsatishingiz mumkin excel fayli.

    Rasmda bo'lgani kabi, jadvallar ustun nomlari, qatorlari va ma'lumotlariga ega. Yordamida SQL so'rovlar bilan biz bunday jadvallarni yaratishimiz mumkin. Shuningdek, biz ma'lumotlarni qo'shishimiz, o'qishimiz, yangilashimiz va o'chirishimiz mumkin.

    JADVAL TUZISH: Jadval yarating

    C Ushbu so'rov yordamida biz ma'lumotlar bazasida jadvallar yaratishimiz mumkin. Afsuski, hujjatlar MySQL bu mavzuda yangi boshlanuvchilar uchun unchalik aniq emas. Ushbu turdagi so'rovning tuzilishi juda murakkab bo'lishi mumkin, ammo biz oson so'rovdan boshlaymiz.

    Quyidagi so'rov 2 ta ustunli jadvalni yaratadi.

    CREATE TABLE foydalanuvchilari (foydalanuvchi nomi VARCHAR(20), yaratilgan_date DATE);

    E'tibor bering, biz so'rovlarimizni bir nechta satrlarda va chekinish uchun yorliqlar bilan yozishimiz mumkin.

    Birinchi qator oddiy. Biz shunchaki "foydalanuvchilar" deb nomlangan jadval yaratamiz. Keyinchalik, qavs ichida vergul bilan ajratilgan holda, barcha ustunlar ro'yxati keltirilgan. Har bir ustun nomidan keyin bizda VARCHAR yoki DATE kabi ma'lumotlar turlari mavjud.

    VARCHAR(20) ustunning satr tipida ekanligini va maksimal 20 belgidan iborat bo'lishi mumkinligini bildiradi. DATE, shuningdek, sanalarni ushbu formatda saqlash uchun ishlatiladigan ma'lumot turi: "YYYY - AA-KK".

    ASOSIY KOLOT ( asosiy kalith)

    Keyingi so'rovni bajarishdan oldin biz "user_id" uchun ustunni qo'shishimiz kerak, bu bizning asosiy kalitimiz bo'ladi. PRIMARY KEY deganda jadvaldagi har bir qatorni aniqlash uchun foydalaniladigan ma'lumot deb o'ylashingiz mumkin.

    CREATE TABLE foydalanuvchilari (user_id INT AUTO_INCREMENT PRIMARY KEY, foydalanuvchi nomi VARCHAR(20), create_date DATE);

    INT 32 bitli butun son turini (raqamlar kabi) hosil qiladi. AUTO_INCREMENT avtomatik ravishda yangi qiymat hosil qiladi ID har safar biz ma'lumotlarning yangi qatorlarini qo'shamiz. Bu shart emas, lekin butun jarayonni osonlashtiradi.

    Bu ustun butun son bo'lishi shart emas, lekin u eng ko'p ishlatiladi. Asosiy kalitga ega bo'lish ham ixtiyoriy, lekin ma'lumotlar bazasi arxitekturasi va ishlashi uchun tavsiya etiladi.

    Keling, so'rovni bajaramiz:

    JADVALLARNI KO'RSATISH:barcha jadvallarni ko'rsatish

    Ushbu so'rov ma'lumotlar bazasida joylashgan jadvallar ro'yxatini olish imkonini beradi.

    TUSHINING:Jadval tuzilishini ko'rsatish

    Mavjud jadvalning tuzilishini ko'rsatish uchun ushbu so'rovdan foydalanishingiz mumkin.

    Ustunlar barcha xususiyatlar bilan ko'rsatiladi.

    JADVALNI QILISH:jadvalni o'chirish

    Xuddi DROP DATABASES kabi, bu so'rov jadvalni va uning mazmunini ogohlantirishsiz tushiradi.

    ALTER JADVAL: jadvalni o'zgartirish

    Bu so'rov, shuningdek, tufayli murakkab tuzilmani o'z ichiga olishi mumkin Ko'proq jadvalga kiritishi mumkin bo'lgan o'zgarishlar. Keling, misollarni ko'rib chiqaylik.

    (agar siz oxirgi bosqichda jadvalni o'chirib tashlagan bo'lsangiz, uni sinovlar uchun qayta yarating)

    USTUN QO'SHISH

    ALTER TABLE foydalanuvchilari foydalanuvchi nomidan KEYIN VARCHAR(100) elektron pochta manzilini qo'shish;

    SQL yaxshi o'qilishi tufayli, menimcha, uni batafsil tushuntirishdan ma'no yo'q. Biz "foydalanuvchi nomi" dan keyin "elektron pochta" yangi ustunini qo'shmoqdamiz.

    USTUNNI O'CHIRISH

    Bu ham juda oson edi. Iltimos, ushbu so'rovdan ehtiyotkorlik bilan foydalaning, chunki ma'lumotlar ogohlantirishsiz o'chirilishi mumkin.

    Keyingi tajriba uchun oʻchirilgan ustunni tiklang.

    USTUNGA O'ZGARTIRING

    Ba'zan siz ustunning xususiyatlariga o'zgartirish kiritishni xohlashingiz mumkin va buning uchun uni butunlay olib tashlashingiz shart emas.

    Bu soʻrov foydalanuvchi ustunining nomini “user_name” ga oʻzgartirdi va uning turini VARCHAR(20) dan VARCHAR(30) ga oʻzgartirdi. Bunday o'zgarish jadvaldagi ma'lumotlarni o'zgartirmasligi kerak.

    KIRITMOQ: Jadvalga ma'lumot qo'shish

    Quyidagi so‘rov yordamida jadvalga bir qancha ma’lumotlarni qo‘shamiz.

    Ko'rib turganingizdek, VALUES() vergul bilan ajratilgan qiymatlar ro'yxatini o'z ichiga oladi. Barcha qiymatlar bitta ustunga kiritilgan. Va qiymatlar jadval yaratilganda aniqlangan ustunlar tartibida bo'lishi kerak.

    E'tibor bering, birinchi qiymat "user_id" deb nomlangan PRIMARY KEY maydoni uchun NULL. Buni identifikator avtomatik ravishda yaratilishi uchun qilamiz, chunki ustun AUTO_INCREMENT xususiyatiga ega. Ma'lumot birinchi marta qo'shilganda ID 1 bo'ladi. Keyingi qator 2 bo'ladi va hokazo...

    ALTERNATİV VARİANT

    Qatorlarni qo'shish uchun yana bir so'rov varianti mavjud.

    Bu safar biz VALUES o‘rniga SET kalit so‘zidan foydalanamiz va unda qavslar yo‘q. Bir nechta nuanslar mavjud:

    Ustunni o'tkazib yuborish mumkin. Misol uchun, biz "user_id" ga qiymat belgilamadik, u sukut bo'yicha AUTO_INCREMENT qiymatini oladi. Agar siz VARCHAR ustunini o'tkazib yuborsangiz, bo'sh qator qo'shiladi.

    Har bir ustun nomi bilan atalishi kerak. Shu sababli, ular oldingi versiyadan farqli o'laroq, har qanday tartibda qayd etilishi mumkin.

    ALTERNATİV 2

    Mana yana bir variant.

    Shunga qaramay, ustun nomiga havolalar mavjud bo'lganligi sababli, siz qiymatlarni istalgan tartibda belgilashingiz mumkin.

    LAST_INSERT_ID()

    Joriy seansning oxirgi qatori uchun AUTO_INCREMENT boʻlgan identifikatorni olish uchun ushbu soʻrovdan foydalanishingiz mumkin.

    HOZIR()

    Endi so'rovlarda MySQL funksiyasidan qanday foydalanishni ko'rsatish vaqti keldi.

    NOW() funksiyasi joriy sanani qaytaradi. Shunday qilib, siz yangi qator qo'shganda ustunning sanasini avtomatik ravishda joriy qilish uchun undan foydalanishingiz mumkin.

    E'tibor bering, biz 1 ta ogohlantirish oldik, lekin unga e'tibor bermang. Buning sababi shundaki, NOW() vaqtinchalik ma'lumotlarni ko'rsatish uchun ham xizmat qiladi.

    TANLASH: Jadvaldan ma'lumotlarni o'qish

    Agar jadvalga ma'lumot qo'shsak, u erdan uni qanday o'qishni o'rganish mantiqan to'g'ri keladi. Bu erda SELECT so'rovi bizga yordam beradi.

    Quyida jadvalni o'qish uchun mumkin bo'lgan eng oddiy SELECT so'rovi keltirilgan.

    Bunday holda, yulduzcha (*) biz jadvaldagi barcha maydonlarni so'raganimizni bildiradi. Agar siz faqat ma'lum ustunlarni xohlasangiz, so'rov shunday ko'rinadi.

    VaziyatQAYERDA

    Ko'pincha, biz barcha ustunlar bilan emas, balki faqat ba'zilari bilan qiziqamiz. Misol uchun, biz faqat "nettuts" foydalanuvchisi uchun elektron pochta manziliga muhtojmiz deb faraz qilaylik.

    WHERE so'rovda shartlarni o'rnatish va batafsil tanlash imkonini beradi.

    E'tibor bering, tenglik dasturlashda bo'lgani kabi ikkita o'rniga bitta tenglik belgisini (=) ishlatadi.

    Taqqoslash usullaridan ham foydalanishingiz mumkin.

    AND yoki OR shartlarni birlashtirish uchun ishlatilishi mumkin:

    E'tibor bering, raqamli qiymatlar tirnoq ichida bo'lmasligi kerak.

    IN()

    Bu bir nechta qiymatlar bo'yicha namuna olish uchun foydalidir.

    LIKE

    Sizga "joker belgilar" so'rovlarini amalga oshirish imkonini beradi

    % belgisi "joker belgi" sifatida ishlatiladi. Ya'ni, uning o'rnida har qanday narsa bo'lishi mumkin.

    VaziyatBuyurtma berish

    Natijani qandaydir mezon bo'yicha tartiblangan shaklda olishni istasangiz

    Standart tartib ASC (eng kichikdan kattagacha). Buning aksi uchun DESC ishlatiladi.

    LIMIT ... OFSET ...

    Olingan natijalar sonini cheklashingiz mumkin.

    LIMIT 2 faqat dastlabki 2 ta natijani oladi. LIMIT 1 OFFSET 2 birinchi 2 tadan keyin 1 ta natija oladi. LIMIT 2, 1 bir xil ma'noni anglatadi (faqat avval ofset kelishiga e'tibor bering, keyin esa cheklash ).

    YANGILANISH: Jadvaldagi ma'lumotlarga o'zgartirishlar kiriting

    Ushbu so'rov jadvaldagi ma'lumotlarni o'zgartirish uchun ishlatiladi.

    Ko'pgina hollarda, u WHERE bandi bilan birgalikda ishlatiladi, chunki siz ma'lum ustunlarga o'zgartirish kiritishni xohlaysiz. Agar WHERE bandi bo'lmasa, o'zgarishlar barcha qatorlarga ta'sir qiladi.

    O'zgartirish kerak bo'lgan qatorlar sonini cheklash uchun LIMIT dan ham foydalanishingiz mumkin.

    O‘CHIRISH: Jadvaldan ma'lumotlarni olib tashlash

    Xuddi UPDATE kabi, bu so'rov WHERE bilan ishlatiladi:

    Jadval mazmunini o'chirish uchun siz shunchaki shunday qilishingiz mumkin:

    Foydalanuvchilardan O'chirish;

    Ammo undan foydalanish yaxshiroqdir TURNCATE

    O'chirishdan tashqari, bu so'rov qiymatlarni ham tiklaydi AUTO_INCREMENT va yana qatorlarni qo'shganda, ortga hisoblash noldan boshlanadi. OʻCHIRISH buni qilmaydi va ortga hisoblash davom etadi.

    String qiymatlari va maxsus so'zlarni o'chirish

    qator qiymatlari

    Ba'zi belgilar o'chirilishi kerak ( qochish ), yoki muammolar bo'lishi mumkin.

    Buning uchun teskari chiziq ishlatiladi.(\).

    Maxsus so'zlar

    Chunki MySQL da ko'plab maxsus so'zlar mavjud TANLASH yoki YANGILASH ), ulardan foydalanishda xatolikka yo'l qo'ymaslik uchun tirnoqlardan foydalanish kerak. Lekin oddiy iqtiboslar emas, bular(`).

    Ya'ni, siz " nomli ustun qo'shishingiz kerak bo'ladi. o'chirish ", buni shunday qilishingiz kerak:

    Xulosa

    Oxirigacha o'qiganingiz uchun rahmat. Umid qilamanki, ushbu maqola siz uchun foydali bo'ldi. Hali tugamadi! Davomi bor:).