问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

掌握非等值连接:从简单查询到复杂匹配的应用实例

创作时间:
作者:
@小白创作中心

掌握非等值连接:从简单查询到复杂匹配的应用实例

引用
CSDN
1.
https://blog.csdn.net/zgt_certificate/article/details/140912945

非等值连接(Non-Equi Join)

非等值连接(Non-Equi Join)是关系数据库中用于连接多个表的操作,其连接条件不局限于等号 (

),而是使用其他比较运算符,例如大于 (

)、小于 (
<
)、大于等于 (

)、小于等于 (
<=
)、不等于 (
<>
) 等。
这种连接类型通常用于需要复杂匹配条件的数据查询中,与等值连接相比,它提供了更广泛的匹配可能性。

非等值连接的语法

非等值连接通常使用 SQL 中的
JOIN
关键字,并结合合适的比较运算符。其基本语法如下:

SELECT 表1.字段1, 表2.字段2, ...
FROM 表1
JOIN 表2
ON 表1.字段 操作符 表2.字段;

非等值连接的场景及实例

场景 1:员工薪资级别查询

背景描述:在人力资源管理系统中,需要根据员工的薪水确定其薪资级别。假设有一个员工信息表和一个薪资级别表。

数据表结构

  1. 员工表 (employees):
employee_id
name
salary
1
小明
3000
2
小红
5000
3
小刚
7000
  1. 薪资级别表 (salary_grades):
grade_id
min_salary
max_salary
grade_name
1
0
3999
初级
2
4000
5999
中级
3
6000
7999
高级

SQL 查询

SELECT employees.name, employees.salary, salary_grades.grade_name
FROM employees
JOIN salary_grades
ON employees.salary BETWEEN salary_grades.min_salary AND salary_grades.max_salary;

结果集

name
salary
grade_name
小明
3000
初级
小红
5000
中级
小刚
7000
高级
  • 连接条件:使用了
    BETWEEN
    运算符来连接
    employees
    表和
    salary_grades
    表,即
    employees.salary
    的值必须在
    salary_grades.min_salary

    salary_grades.max_salary
    之间。
  • 结果:查询结果展示了每位员工的薪水以及相应的薪资级别。

场景 2:产品折扣应用

背景描述:在一个电子商务平台中,根据购买的商品数量来确定折扣。假设有一个订单表和一个折扣表。

数据表结构

  1. 订单表 (orders):
order_id
product_id
quantity
101
1
5
102
2
15
103
3
25
  1. 折扣表 (discounts):
discount_id
min_quantity
max_quantity
discount
1
1
10
5%
2
11
20
10%
3
21
30
15%

SQL 查询

SELECT orders.order_id, orders.quantity, discounts.discount
FROM orders
JOIN discounts
ON orders.quantity BETWEEN discounts.min_quantity AND discounts.max_quantity;

结果集

order_id
quantity
discount
101
5
5%
102
15
10%
103
25
15%
  • 连接条件:使用
    BETWEEN
    运算符来判断
    orders.quantity
    是否在
    discounts.min_quantity

    discounts.max_quantity
    之间,以确定适用的折扣。
  • 结果:查询结果显示每个订单对应的商品数量和可享受的折扣。

场景 3:学生成绩评估

背景描述:学校需要根据学生的总成绩判断其奖学金级别。假设有一个学生成绩表和一个奖学金级别表。

数据表结构

  1. 学生成绩表 (student_scores):
student_id
name
total_score
1
张三
75
2
李四
85
3
王五
95
  1. 奖学金级别表 (scholarship_levels):
level_id
min_score
max_score
level_name
1
0
79
三等奖
2
80
89
二等奖
3
90
100
一等奖

SQL 查询

SELECT student_scores.name, student_scores.total_score, scholarship_levels.level_name
FROM student_scores
JOIN scholarship_levels
ON student_scores.total_score BETWEEN scholarship_levels.min_score AND scholarship_levels.max_score;

结果集

name
total_score
level_name
张三
75
三等奖
李四
85
二等奖
王五
95
一等奖
  • 连接条件:使用
    BETWEEN
    运算符来确定
    student_scores.total_score
    是否在
    scholarship_levels.min_score

    scholarship_levels.max_score
    之间,以决定奖学金级别。
  • 结果:查询结果显示每个学生的总成绩和相应的奖学金级别。

场景 4:产品价格区间查询

背景描述:在销售系统中,需要根据产品的价格范围来分类产品。假设有一个产品表和一个价格区间表。

数据表结构

  1. 产品表 (products):
product_id
product_name
price
1
手机
1500
2
电脑
3000
3
电视
4500
  1. 价格区间表 (price_ranges):
range_id
min_price
max_price
range_name
1
0
1999
低价位
2
2000
3999
中价位
3
4000
5999
高价位

SQL 查询

SELECT products.product_name, products.price, price_ranges.range_name
FROM products
JOIN price_ranges
ON products.price BETWEEN price_ranges.min_price AND price_ranges.max_price;

结果集

product_name
price
range_name
手机
1500
低价位
电脑
3000
中价位
电视
4500
高价位
  • 连接条件:使用
    BETWEEN
    运算符来判断
    products.price
    是否在
    price_ranges.min_price

    price_ranges.max_price
    之间,以分类产品价格区间。
  • 结果:查询结果展示了每种产品的价格和所属的价格区间。

场景 5:车辆保险费率计算

背景描述:在车辆保险管理系统中,需要根据车辆的价格确定保险费率。假设有一个车辆表和一个保险费率表。

数据表结构

  1. 车辆表 (vehicles):
vehicle_id
model
price
1
轿车
80000
2
SUV
120000
3
跑车
200000
  1. 保险费率表 (insurance_rates):
rate_id
min_price
max_price
rate
1
0
100000
2%
2
100001
150000
3%
3
150001
250000
4%

SQL 查询

SELECT vehicles.model, vehicles.price, insurance_rates.rate
FROM vehicles
JOIN insurance_rates
ON vehicles.price BETWEEN insurance_rates.min_price AND insurance_rates.max_price;

结果集

model
price
rate
轿车
80000
2%
SUV
120000
3%
跑车
200000
4%
  • 连接条件:使用
    BETWEEN
    运算符来确定
    vehicles.price
    是否在
    insurance_rates.min_price

    insurance_rates.max_price
    之间,以计算保险费率。
  • 结果:查询结果显示每种车辆的价格和相应的保险费率。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号