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และ และพวกเขาเขียนตรงตามที่ฉันอธิบายไว้ที่นี่ ไม่มีหรือ_ORNOT&&||!

ลองเขียนแบบสอบถาม 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

ตอนนี้เรามาเขียนแบบสอบถามโดยที่เราเลือกพนักงานที่มีอายุnot20, 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จึงใช้งานได้ไม่เฉพาะกับสตริงเท่านั้น สิ่งที่ไม่สามารถ แต่ชื่นชมยินดี