3.1 การเปรียบเทียบค่า: <, >, =, <>
หนึ่งในคำหลักทั่วไปที่ใช้เมื่อเขียนแบบสอบถาม SQL คือWHERE
. ด้วยความช่วยเหลือที่เราบอก MySQL แถวตารางที่เราต้องการกรอง (เลือก)
หลังคำหลักWHERE
คุณสามารถเขียนเงื่อนไขที่ซับซ้อนและยุ่งยากได้ ดังนั้นการดำเนินการใดที่สามารถมีเงื่อนไขนี้ได้
โอเปอเรเตอร์ | คำอธิบาย | ตัวอย่าง |
---|---|---|
< | น้อย | เงินเดือน < 40000 |
> | มากกว่า | เงินเดือน > 100,000 |
<= | น้อยกว่าหรือเท่ากัน | อายุ <= 25 |
>= | มากกว่าหรือเท่ากัน | อายุ >= 18 |
= | เท่ากับ | อาชีพ = 'โปรแกรมเมอร์' |
<>, != | ไม่เท่ากับ | ปี(join_date) != 2015 |
ซึ่งแตกต่างจากภาษา Java เพื่อความเท่าเทียมกันอย่างเคร่งครัด อักขระเท่ากับหนึ่งตัวถูกใช้ที่นี่ และไม่ใช่สองตัว
หากคุณต้องการตรวจสอบว่าค่าไม่เท่ากันคุณสามารถทำได้สองวิธี: วิธี <>
แรก!=
ใช้ในภาษาเช่น Pascal วิธีที่สองใช้ทั่วไปสำหรับภาษาเช่น C ++ และจาวา
สำหรับการมอบหมายใน SQL จะใช้:=
เหมือนกับภาษาปาสคาล แต่การมอบหมายนั้นใช้น้อยมาก
ลองเขียนแบบสอบถามที่เราแสดงพนักงานทั้งหมดที่ไม่ได้รับการว่าจ้างในปี 2558
SELECT * FROM employee WHERE YEAR(join_date) != 2015
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
1 | อีวานอฟ อีวาน | โปรแกรมเมอร์ | 100,000 | 25 | 2555-06-30 |
2 | เปตรอฟ เปตรอฟ | โปรแกรมเมอร์ | 80,000 | 23 | 2013-08-12 |
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
6 | วาสก้า | แมว | 1,000 | 3 | 2018-01-01 |
3.2 การดำเนินการทางตรรกะ AND, OR, NOT
คุณ ยัง สามารถ WHERE
ใช้การดำเนินการทางตรรกะAND
และ และพวกเขาเขียนตรงตามที่ฉันอธิบายไว้ที่นี่ ไม่มีหรือ_OR
NOT
&&
||
!
ลองเขียนแบบสอบถาม SQL โดยเราเลือกพนักงานที่มีอายุมากกว่า 20 ปีและรับเงินเดือนน้อยกว่า 50K
SELECT * FROM employee WHERE age > 20 AND salary < 50000
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
5 | คิเรียนโก อนาสตาเซีย | ผู้จัดการสำนักงาน | 40,000 | 25 | 2015-10-10 |
ง่ายเกินไป ลองเขียนแบบสอบถามที่เราเลือกพนักงานที่ได้รับมากกว่า 100K และไม่ได้ทำงานเป็นผู้อำนวยการ:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
ที่นี่เรา!=
ใช้ตัวดำเนินการ แทนสัญลักษณ์โดย NOT
เฉพาะ
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
1 | อีวานอฟ อีวาน | โปรแกรมเมอร์ | 100,000 | 25 | 2555-06-30 |
3.3 ระหว่าง: ช่วงค่า
นอกจากนี้ใน SQL ยังมีตัวดำเนินการพิเศษBETWEEN
ที่คุณสามารถตรวจสอบว่าตัวแปรอยู่ระหว่างสองค่าหรือไม่ ตัวดำเนินการนี้ใช้ในนิพจน์บูลีน รูปแบบทั่วไปของตัวดำเนินการดังกล่าวคือ:
variable BETWEEN bottom line AND top_bound
ในกรณีนี้ ไม่เหมือนกับภาษา Java ทั้งขอบเขตด้านล่างและด้านบนจะรวมอยู่ในช่วงเวลาที่อนุญาต
ลองเขียนตัวอย่างโดยเราเลือกพนักงานทุกคนที่มีเงินเดือนตั้งแต่ 40K ถึง 100K คำขอจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
1 | อีวานอฟ อีวาน | โปรแกรมเมอร์ | 100,000 | 25 | 2555-06-30 |
2 | เปตรอฟ เปตรอฟ | โปรแกรมเมอร์ | 80,000 | 23 | 2013-08-12 |
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
5 | คิเรียนโก อนาสตาเซีย | ผู้จัดการสำนักงาน | 40,000 | 25 | 2015-10-10 |
โอเปอเรเตอร์BETWEEN
ไม่รองรับประเภทตัวเลขเท่านั้น แต่ยังรองรับวันที่และแม้แต่ประเภทสตริงด้วย ในกรณีของการทำงานกับสตริง จะใช้ลำดับศัพท์: aaba มาก่อน aabb
3.4 IN: รายการค่าต่างๆ
นอกจากนี้ SQL ยังมีโอเปอเรเตอร์พิเศษIN
ซึ่งคุณสามารถตรวจสอบว่ามีตัวแปรอยู่ในรายการที่ระบุหรือไม่ ตัวดำเนินการนี้ใช้ในนิพจน์บูลีน รูปแบบทั่วไปของตัวดำเนินการดังกล่าวคือ:
variable IN (value 1 , value 2 , ... value N)
ลองเขียนแบบสอบถามโดยเราเลือกพนักงานที่มีอายุ 20, 25 หรือ 30 ปี คำขอจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE age IN (20, 25, 30)
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
1 | อีวานอฟ อีวาน | โปรแกรมเมอร์ | 100,000 | 25 | 2555-06-30 |
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
5 | คิเรียนโก อนาสตาเซีย | ผู้จัดการสำนักงาน | 40,000 | 25 | 2015-10-10 |
ตอนนี้เรามาเขียนแบบสอบถามโดยที่เราเลือกพนักงานที่มีอายุnot
20, 25 หรือ 30 ปี แบบสอบถามจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
2 | เปตรอฟ เปตรอฟ | โปรแกรมเมอร์ | 80,000 | 23 | 2013-08-12 |
4 | ราบิโนวิช มอยชา | ผู้อำนวยการ | 200,000 | 35 | 2015-05-12 |
6 | วาสก้า | แมว | 1,000 | 3 | 2018-01-01 |
ทุกอย่างทำงานได้ตามที่คาดไว้ ความงาม.
3.5 LIKE: รูปแบบสตริง
และสุดท้าย ตัวดำเนินการที่สำคัญและใช้บ่อยมากอีกตัวหนึ่ง - LIKE
. ใช้เมื่อเปรียบเทียบสตริง สามารถใช้เพื่อกำหนดรูปแบบสตริงได้ ตัวดำเนินการนี้ใช้ในนิพจน์บูลีน รูปแบบทั่วไปของตัวดำเนินการดังกล่าวคือ:
variable LIKE 'sample'
สามารถใช้อักขระพิเศษในรูปแบบ: %
และ_
- ขีดล่างหมายถึงอักขระใด ๆ เสมอ 1 ชิ้น
- เปอร์เซ็นต์หมายถึงอักขระใดๆ และจำนวนครั้งใดๆ (รวมถึง 0 ครั้ง)
ลองเขียนแบบสอบถามที่จะเลือกทุกคนที่มีนามสกุลขึ้นต้นด้วยตัวอักษร "I" คำขอจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE name LIKE 'I%'
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
1 | อีวานอฟ อีวาน | โปรแกรมเมอร์ | 100,000 | 25 | 2555-06-30 |
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
ตอนนี้มาทำให้งานซับซ้อนขึ้น - ชื่อควรมี "o" และชื่อควรลงท้ายด้วย "a" คำขอจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE name LIKE '%o%a'
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
4 | ราบิโนวิช มอยชา | ผู้อำนวยการ | 200,000 | 35 | 2015-05-12 |
เอาล่ะมาทำให้มันยากขึ้นอีกหน่อย กรองพนักงานทุกคนที่อายุขึ้นต้นด้วยเลข "3" ออก คำขอจะมีลักษณะดังนี้:
SELECT * FROM employee WHERE age LIKE '3%'
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | อาชีพ | เงินเดือน | อายุ | เข้าร่วม_วันที่ |
---|---|---|---|---|---|
3 | อีวานอฟ เซอร์เกย์ | เทสเตอร์ | 40,000 | สามสิบ | 2014-01-01 |
4 | ราบิโนวิช มอยชา | ผู้อำนวยการ | 200,000 | 35 | 2015-05-12 |
6 | วาสก้า | แมว | 1,000 | 3 | 2018-01-01 |
อย่างไรก็ตาม คอลัมน์อายุของเรา เป็นประเภท int
ดังนั้นLIKE
จึงใช้งานได้ไม่เฉพาะกับสตริงเท่านั้น สิ่งที่ไม่สามารถ แต่ชื่นชมยินดี
GO TO FULL VERSION