3.1 Qiymatlarni taqqoslash: <, >, =, <>
SQL-so'rovlarini yozishda eng ko'p ishlatiladigan kalit so'zlardan biri WHERE kalit so'zidir. Shu bilan, MySQL ga qaysi jadvalning qaysi satrlarini filtrlaymiz (tanlaymiz) deb ko'rsatamiz.
WHERE kalit so'zidan keyin juda murakkab shartlarni yozishingiz mumkin. Bu shartda qaysi operatsiyalar bo'lishi mumkin?
| Operator | Izoh | Misol |
|---|---|---|
| < | Kichikroq | salary < 40000 |
| > | Katta | salary > 100000 |
| <= | Kichik yoki teng | age <= 25 |
| >= | Katta yoki teng | age >= 18 |
| = | Teng | occupation = ‘Dasturchi’ |
| <>, != | Teng emas | Year(join_date) != 2015 |
Java tilidan farqli o'laroq, bu yerda qat'iy tenglik uchun faqat bitta tenglik belgisi qo'llaniladi, ikki emas.
Agar siz qiymatlar teng emasligini tekshirmoqchi bo'lsangiz, buni ikki usulda qilishingiz mumkin: <> yoki != Birinchi yondashuv Pascal singari tillarda qo'llaniladi, ikkinchisi esa C++ va Java kabi tillar uchun xosdir.
SQL da tayinlash uchun := ishlatiladi, xuddi Pascal'da bo'lgani kabi, lekin tayinlash juda kam ishlatiladi.
Keling, 2015 yilda ishga olinmagan barcha xodimlarni ko'rsatadigan so'rov yozaylik.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 1 | Ivanov Ivan | Dasturchi | 100,000 | 25 | 2012-06-30 |
| 2 | Petrov Pyotr | Dasturchi | 80,000 | 23 | 2013-08-12 |
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
| 6 | Vasya | mushuk | 1,000 | 3 | 2018-01-01 |
3.2 Mantiqiy operatsiyalar AND, OR, NOT
Shuningdek, WHERE da mantiqiy operatsiyalar AND, OR va NOT ishlatish mumkin. Ular aynan mana shu tarzda yoziladi. Hech qanday &&, || yoki !
Keling, 20 yoshdan katta va maoshi 50K dan kam bo'lgan xodimlarni tanlaydigan SQL-so'rovini yozaylik.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
| 5 | Kirienko Anastasiya | Ofis-menejer | 40,000 | 25 | 2015-10-10 |
Juda oddiy. Keling, 100K dan ko'p maosh oladigan va direktor bo'lmagan xodimlarni tanlaymiz:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Direktor'
Bu yerda biz != belgisi o'rniga NOT operatorini ishlatdik.
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 1 | Ivanov Ivan | Dasturchi | 100,000 | 25 | 2012-06-30 |
3.3 BETWEEN: qiymatlar diapazoni
SQL da maxsus BETWEEN operatori ham mavjud bo'lib, u orqali o'zgaruvchi ikki qiymat oralig'ida yotadimi yoki yo'qmi tekshirishingiz mumkin. Bu operator mantiqiy ifodalarda ishlatiladi. Bunday operatorning umumiy ko'rinishi:
o'zgaruvchi BETWEEN quyi_chegara AND yuqori_chegara
Java tilidan farqli o'laroq, quyi va yuqori chegra ruxsat etilgan intervalga kiradi.
Keling bir misol yozaylik, bunda 40K dan 100K gacha maosh oladigan barcha xodimlarni tanlaymiz. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 1 | Ivanov Ivan | Dasturchi | 100,000 | 25 | 2012-06-30 |
| 2 | Petrov Pyotr | Dasturchi | 80,000 | 23 | 2013-08-12 |
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
| 5 | Kirienko Anastasiya | Ofis-menejer | 40,000 | 25 | 2015-10-10 |
BETWEEN operatori faqat raqamli turlarni emas, balki sanalar va hatto qator turlari ni qo'llab-quvvatlaydi. Qatorlar bilan ishlashda leksik buyruq ishlatiladi: aaba aabb oldidan keladi
3.4 IN: qiymatlar ro'yxati
Bundan tashqari, SQL da maxsus IN operatori mavjud bo'lib, u yordamida o'zgaruvchi berilgan ro'yxatda mavjud yoki yo'qligini tekshirishingiz mumkin. Bu operator mantiqiy ifodalarda ishlatiladi. Bunday operatorning umumiy ko'rinishi:
o'zgaruvchi IN (qiymat1, qiymat2, … qiymatN)
Keling, yoshi 20, 25 yoki 30 bo'lgan xodimlarni tanlaydigan so'rov yozamiz. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE age IN (20, 25, 30)
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 1 | Ivanov Ivan | Dasturchi | 100,000 | 25 | 2012-06-30 |
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
| 5 | Kirienko Anastasiya | Ofis-menejer | 40,000 | 25 | 2015-10-10 |
Endi esa keling, 20, 25 yoki 30 yoshda bo'lmagan xodimlarni tanlaydigan so'rov yozamiz. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 2 | Petrov Pyotr | Dasturchi | 80,000 | 23 | 2013-08-12 |
| 4 | Rabinovich Moysha | Direktor | 200,000 | 35 | 2015-05-12 |
| 6 | Vasya | mushuk | 1,000 | 3 | 2018-01-01 |
Barchasi kutilganidek ishladi. Ajoyib.
3.5 LIKE: qator shabloni
Va nihoyat yana bir muhim va juda tez-tez ishlatiladigan operator – LIKE. Bu qatorlarni taqqoslashda ishlatiladi. U orqali qator shabloni belgilashingiz mumkin. Bu operator mantiqiy ifodalarda ishlatiladi. Bunday operatorning umumiy ko'rinishi:
o'zgaruvchi LIKE 'shablon'
Shablonda maxsus belgilar ishlatilishi mumkin: % va _.
- Tagchiziq har qanday belgini anglatadi, har doim 1 ta.
- Foiz har qanday belgi va istalgan miqdorda (shu jumladan 0 marta) anglatadi.
Keling, familiyasi "I" harfi bilan boshlanadigan barcha odamlarni tanlaydigan so'rov yozamiz. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE name LIKE 'I%'
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 1 | Ivanov Ivan | Dasturchi | 100,000 | 25 | 2012-06-30 |
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
Endi vazifani biroz murakkablashtiramiz – ismda "o" harfi mavjud bo'lishi kerak va ism "a" bilan tugashi kerak. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE name LIKE '%o%a'
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 4 | Rabinovich Moysha | Direktor | 200,000 | 35 | 2015-05-12 |
Yaxshi, vazifani biroz murakkablashtiramiz. Keling, yoshi 3 raqami bilan boshlanadigan barcha xodimlarni tanlaymiz. So'rov quyidagicha bo'ladi:
SELECT * FROM employee WHERE age LIKE '3%'
Va so'rov natijasini quyidagicha olamiz:
| id | name | occupation | salary | age | join_date |
|---|---|---|---|---|---|
| 3 | Ivanov Sergey | Testchi | 40,000 | 30 | 2014-01-01 |
| 4 | Rabinovich Moysha | Direktor | 200,000 | 35 | 2015-05-12 |
| 6 | Vasya | mushuk | 1,000 | 3 | 2018-01-01 |
Bu orada, age ustunimiz int turiga ega, shuning uchun LIKE faqat qatorlar bilan ishlamaydi. Bu esa juda yoqimli.
GO TO FULL VERSION