JavaRush /Kurslar /All lectures for UZ purposes /WHERE: SQL so'rovlaridagi shartlar

WHERE: SQL so'rovlaridagi shartlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

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.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION