43-Mavzu: SELECT, FROM ifodalari. Reja: 1. SQL da SELECT iborasi sintaksisi: 2. SELECT expressions 3. FROM tables
SQL da SELECT iborasi sintaksisi:
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]];
Parametrlar yoki argumentlar
ifodalar
Qabul qilmoqchi bo'lgan ustunlar yoki hisoblar. Barcha ustunlarni tanlash uchun * dan foydalaning.
jadvallar
Yozuvlarni olmoqchi bo'lgan jadvallar. FROM bandida kamida bitta jadval bo'lishi kerak.
WHERE shartlari
Majburiy emas. Yozuvlarni tanlash uchun bajarilishi kerak bo'lgan shartlar. Hech qanday shartlar taqdim etilmasa, barcha yozuvlar tanlanadi.
Ifodasi bo'yicha TARTIBI
Majburiy emas. Natijalar to'plamidagi yozuvlarni saralash uchun ishlatiladigan ifoda. Agar bir nechta ifoda berilgan bo'lsa, qiymatlar vergul bilan ajratilishi kerak.
ASC
Majburiy emas. ASC natija to'plamini ifoda bo'yicha o'sish tartibida tartiblaydi . Agar hech qanday modifikator provayder bo'lmasa, bu standart xatti-harakatlardir.
DESC
Majburiy emas. DESC natija to'plamini ifoda bo'yicha kamayish tartibida tartiblaydi .
Misollar uchun DDL/DML
Agar siz ushbu qoʻllanmaga amal qilmoqchi boʻlsangiz, jadvallarni yaratish uchun DDL va maʼlumotlarni toʻldirish uchun DML ni oling. Keyin o'zingizning ma'lumotlar bazangizdagi misollarni sinab ko'ring!
DDL/DML oling Misol - Jadvaldagi barcha maydonlarni tanlang
Keling, jadvaldagi barcha maydonlarni tanlash uchun SQL SELECT operatoridan qanday foydalanishni ko'rsatadigan misolni ko'rib chiqaylik.
Ushbu misolda bizda quyidagi ma'lumotlarga ega mijozlar deb nomlangan jadval mavjud :
customer_id
familiya
ism
sevimli_veb-sayt
4000
Jekson
Jo
tehonthenet.com
5000
Smit
Jeyn
digminecraft.com
6000
Fergyuson
Samantha
bigactivities.com
7000
Reynolds
hamma
checkyourmath.com
8000
Anderson
Peyj
NULL
9000
Jonson
Derek
tehonthenet.com
Endi mijozlar jadvalidagi barcha ustunlarni tanlash orqali SELECT iborasi qanday ishlashini ko'rsatamiz . Quyidagi SELECT bayonotini kiriting:
Urunib ko'r SELECT *
FROM customers
WHERE favorite_website = 'techonthenet.com'
ORDER BY last_name ASC;
2 ta yozuv tanlanadi. Bu siz ko'rishingiz kerak bo'lgan natijalar:
customer_id
familiya
ism
sevimli_veb-sayt
4000
Jekson
Jo
tehonthenet.com
9000
Jonson
Derek
tehonthenet.com
Ushbu misolda biz sevimli_veb-sayt " techonthenet.com " bo'lgan mijozlar jadvalidagi barcha maydonlarni ko'rishni xohlayotganimizni bildirish uchun * dan foydalandik . Natijalar to'plami familiya bo'yicha o'sish tartibida tartiblangan.
Misol - Jadvaldan alohida maydonlarni tanlang
Jadvaldagi barcha maydonlardan farqli o'laroq, jadvaldan alohida maydonlarni tanlash uchun SQL SELECT iborasidan ham foydalanishingiz mumkin.
Ushbu misolda bizda quyidagi ma'lumotlarga ega etkazib beruvchilar deb nomlangan jadval mavjud :
Endi jadvaldan alohida ustunlarni tanlash uchun SELECT operatoridan qanday foydalanishni ko'rsatamiz. Quyidagi SELECT bayonotini kiriting:
Urunib ko'r SELECT supplier_name, city
FROM suppliers
WHERE supplier_id > 500
ORDER BY supplier_name ASC, city DESC;
4 ta yozuv tanlanishi kerak. Bu siz ko'rishingiz kerak bo'lgan natijalar:
yetkazib beruvchi_nomi
shahar
Dole oziq-ovqat kompaniyasi
Westlake qishlog'i
Elektron san'at
Redwood shahri
Gullar Oziq-ovqatlar
Tomasvil
SC Jonson
Ildiz
Bu misol yetkazib beruvchilar jadvalidagi yetkazib beruvchilar_ nomi va shahar maydonlarini qaytaradi, bunda yetkazib beruvchilar_id qiymati 500 dan katta boʻladi. Natijalar yetkazib beruvchi_ nomi boʻyicha oʻsish tartibida va keyin shahar boʻyicha kamayish tartibida tartiblanadi.
Misol - Bir nechta jadvallardan alohida maydonlarni tanlang
Bir nechta jadvallardan maydonlarni olish uchun SQL SELECT iborasidan ham foydalanishingiz mumkin.
Ushbu misolda bizda quyidagi ma'lumotlarga ega buyurtmalar deb nomlangan jadval mavjud :
order_id
customer_id
buyurtma_sanasi
bitta
7000
2016-04-18
2
5000
2016-04-18
3
8000
2016-04-19
4
4000
20.04.2016
besh
NULL
2016-05-01
Va quyidagi ma'lumotlarga ega bo'lgan mijozlar chaqirilgan jadval :
customer_id
familiya
ism
sevimli_veb-sayt
4000
Jekson
Jo
tehonthenet.com
5000
Smit
Jeyn
digminecraft.com
6000
Fergyuson
Samantha
bigactivities.com
7000
Reynolds
hamma
checkyourmath.com
8000
Anderson
Peyj
NULL
9000
Jonson
Derek
tehonthenet.com
Endi buyurtmalar va mijozlar jadvallaridan ustunlarni tanlaylik. Quyidagi SELECT bayonotini kiriting:
Urunib ko'r SELECT orders.order_id, customers.last_name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id
WHERE orders.order_id <> 1
ORDER BY orders.order_id;
3 ta yozuv tanlanadi. Bu siz ko'rishingiz kerak bo'lgan natijalar:
order_id
familiya
2
Smit
3
Anderson
4
Jekson
Ushbu SELECT misoli ikkita jadvalni birlashtiradi va bizga buyurtmalar jadvalidagi order_id va mijozlar jadvalidagi familiyani ko'rsatadigan natijalar to'plamini beradi . Har safar SELECT iborasida ustundan foydalanganda, ustun qaysi jadvalga tegishli ekanligida noaniqlik boʻlsa, ustunga jadval nomini qoʻyamiz (masalan, orders . order_id ).
Agar siz buyurtmalar jadvalidagi barcha maydonlarni, so'ngra mijozlar jadvalidagi familiya maydonini tanlamoqchi bo'lsangiz, quyidagi SELECT iborasini kiritasiz:
Urunib ko'r SELECT orders.*, customers.last_name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id
WHERE orders.order_id <> 1
ORDER BY orders.order_id;
3 ta yozuv tanlanadi. Bu siz ko'rishingiz kerak bo'lgan natijalar:
order_id
customer_id
buyurtma_sanasi
familiya
2
5000
2016-04-18
Smit
3
8000
2016-04-19
Anderson
4
4000
20.04.2016
Jekson
Bu misolda biz buyurtmalar jadvalidagi barcha maydonlarni tanlashni xohlayotganimizni bildirish uchun buyurtmalar . * dan foydalanamiz va keyin mijozlar jadvalidan familiya maydonini tanlaymiz .
44-Mavzu: SQL yordamida tanlash so‘rovlari WHERE, BETWEEN Reja: 1. 2. 3. BETWEEN predikati bilan eng oddiy so'rovlarda tekshirilayotgan ustun uchun interval chegaralari bevosita raqamli qiymatlarni ko'rsatish orqali belgilanadi.
Misol 1. Shunday qilib, biz kompaniyaning ma'lumotlar bazasi va xodimlarning ish haqi to'g'risidagi ma'lumotlarni o'z ichiga olgan xodimlar jadvali bilan ishlamoqdamiz.
ID
Ism
Ish haqi
bitta
Sanders
18357.5
2
oyoq
15430.0
3
Marenghi
17506.8
4
Doktor
12322.4
besh
Faktor
16228.7
6
Junkers
16232.8
7
Oy nuri
21500.6
8
Aisen
19540.7
to'qqiz
MakGregor
15790.8
Maoshi 16 000 dan 18 000 gacha bo'lgan xodimlarni ko'rsatish talab qilinadi. BETWEEN predikati bilan quyidagi so'rovni yozamiz:
16000 dan 18000 gacha
bo'lgan maoshi bo'lgan
xodimlardan
*
TANlang
So'rov quyidagi natijalar jadvalini ishlab chiqaradi:
ID
Ism
Ish haqi
3
Marenghi
17506.8
besh
Faktor
16228.7
6
Junkers
16232.8
2- misol.Ma’lumotlar bazasi va jadval 1-misoldagi bilan bir xil.Maoshi 16000 dan 18 000 gacha bo‘lgan intervaldan tashqarida bo‘lgan xodimlarni ko‘rsatish talab qilinadi.BETWEEN predikati bilan quyidagi so‘rovni yozamiz, undan oldin NOT kalit so‘zini qo‘yamiz:
Maoshi 16000 dan 18000 gacha
bo'lmagan
xodimlardan
*
TANLANING _
So'rov quyidagi natijalar jadvalini ishlab chiqaradi:
ID
Ism
Ish haqi
bitta
Sanders
18357.5
2
oyoq
15430.0
4
Doktor
12322.4
7
Oy nuri
21500.6
8
Aisen
19540.7
to'qqiz
MakGregor
15790.8
BETWEEN bilan so'rovlar: ichki so'rovlar tomonidan berilgan interval
BETWEEN bilan so'rovlarda tekshirilayotgan ustun uchun interval chegaralari, uni ichki so'rovlar bilan belgilangan ba'zi shartlar bilan o'rnatish orqali aniq o'tkazib yuborilishi mumkin.
Misol 3. Biz Xodimlar bazasi bilan ishlashni davom ettiramiz. Ish haqi o'rtacha va maksimal o'rtasidagi intervalda bo'lgan xodimlarni ko'rsatish talab qilinadi. Biz quyidagi so'rovni yozamiz, unda chegaralar o'rnatilgan so'rovlar bilan o'rnatiladi:
*
Xodimlardan ish
haqini
( Xodimlardan AVG (ish haqi) TANLASH )
VA
( Xodimlardan MAX (ish haqi ) ni tanlang )
Shartlar so'rovni bajarish natijasida qaysi jadval qatorlarini ko'rsatishni belgilash imkonini beradi. Ular WHERE buyrug'i bilan kerakli ustunlar va jadvallar ko'rsatilgandan keyin o'rnatiladi.
Ko'pgina so'rovlarni kompilyatsiya qilishda tanlov sharti qo'shiladi. Ular ma'lum tanlov parametrlarini belgilash orqali keraksiz chiziqlarni filtrlash imkonini beradi. Natijada siz katta jadvallardan kerakli qatorlarni tezda tanlashingiz mumkin. Bu ma'lumotlar bazasi uchun so'rovlar tilini yaratishda asosiy g'oya edi.
Biz oldingi bobdagi kabi misollar uchun bir xil jadvaldan foydalanamiz :
raqam (modda raqami )
sarlavha
(sarlavha)
narx
(narx)
bitta
Choynak
300
2
Kubok
yuz
3
Bir qoshiq
25
4
Plita
yuz
Misol. 100 rubllik tovarlarni tanlash uchun siz shartni belgilashingiz kerak:
SELECT * FROM goods WHERE price = 100
Bu yerda SELECT va FROM bandlari qaysi jadvallardan qaysi ustunlarni chiqarishni belgilaydi.
WHERE - tanlash sharti ko'rsatilayotganligini bildiruvchi buyruq.
narx = 100 - qatorni tanlash mezoni.
Bunday so'rov shartni qoniqtirmaydigan barcha qatorlarni o'chiradi. Natijada quyidagi ma'lumotlar to'plami bo'ladi:
Operator
Ma'nosi
=
tenglik
>
Ko'proq
<
Kamroq
!=
teng emas
>=
dan katta yoki teng
<=
dan kam yoki teng
Shartlarni qurish uchun boshqa operatsiyalar mavjud. Ammo bu haqda keyinroq.
Bundan tashqari, bir nechta shartlarni o'rnatish qobiliyatini ta'kidlash kerak. Masalan, siz 2 dan katta va narxi 100 dan kam bo'lgan barcha mahsulotlarni tanlashingiz kerak:
SELECT * FROM goods WHERE num > 2 AND price < 100
Bu yerda AND buyrug'i mantiqiy AND operatori bo'lib, birinchi shart rost VA ikkinchi shart ham to'g'ri bo'lgan qatorlarni tanlash kerakligini ko'rsatadi. Jadvaldan faqat bitta qator bu shartlarga to'g'ri keladi.