博客
关于我
MySQL(4)运算符 | 关联查询详解
阅读量:801 次
发布时间:2023-02-13

本文共 2658 字,大约阅读时间需要 8 分钟。

MySQL 运算符与关联查询指南

一、MySQL 运算符

1. 算术运算符

MySQL支持常见的算术运算符,包括加、减、乘、除、模运算。需要注意的是,除法默认会返回浮点数结果,若需要整数结果,可以使用DIV函数。

  • 例子
    • 筛选出 eid 是偶数的员工:
      SELECT eid FROM t_employee WHERE eid % 2 = 0;
    • 查看每天的基本工资值,每个月按22天算:
      SELECT eid, basic_salary / 12 AS "日薪" FROM t_salary;
    • 计算基本工资(假设 performance_salary 表存在):
      SELECT eid, basic_salary + performance_salary * (1 + commission_pct) FROM t_salary;

2. 比较运算符

比较运算符用于筛选数据,常用的包括等于、不等于、大于、小于等于等操作。注意 NULL 值的处理,建议使用 IS NULLIS NOT NULL 来判断,而不是直接比较 NULL 与其他值。

  • 例子
    • 查询 basic_salary 不等于 10000 的员工信息:
      SELECT eid, basic_salary FROM t_salary WHERE basic_salary != 10000;
    • 查询 commission_pct 等于 0.40 的员工信息:
      SELECT eid, commission_pct FROM t_salary WHERE commission_pct = 0.40;
    • 查询 commission_pct 等于 NULL 的员工信息:
      SELECT eid, commission_pct FROM t_salary WHERE commission_pct IS NULL;

3. 逻辑运算符

逻辑运算符用于组合多个条件,常用来筛选复杂的数据。AND 用于同时满足多个条件,OR 用于满足任意一个条件。NOT 用于否定条件。

  • 例子
    • 查询性别为男且在1990年前出生的员工信息:
      SELECT * FROM t_employee WHERE gender = '男' AND birthday < '1990-01-01';
    • 查询职位编号为 1 或 2 的员工基本薪资:
      SELECT eid, basic_salary FROM t_salary WHERE job_id = 1 OR job_id = 2;

4. 范围与集合

BETWEEN 用于在两个值之间筛选数据,NOT BETWEEN 用于排除该范围。INNOT IN 则用于筛选集合中的元素。

  • 例子
    • 查询基本薪资在 9000 到 12000 之间的员工信息:
      SELECT eid, basic_salary FROM t_salary WHERE basic_salary BETWEEN 9000 AND 12000;
    • 查询 eid 为 1、3、5 的员工基本薪资:
      SELECT eid, basic_salary FROM t_salary WHERE eid IN (1, 3, 5);

5. 模糊查询

LIKE 和通配符 %_ 用于进行模糊查询,匹配部分字符。NOT LIKE 则用于排除不符合的结果。

  • 例子
    • 查询名字中包含“冰”的员工信息:
      SELECT * FROM t_employee WHERE ename LIKE '%冰%';
    • 查询姓李且名字只有一个字的员工信息:
      SELECT * FROM t_employee WHERE ename LIKE '李_';

6. 位运算符

位运算符用于对二进制数据进行操作,常见的包括按位与、或、异或、取反等操作。

  • 例子
    • 查询 2 与 3 的按位与、或、异或结果:
      SELECT 2 & 3, 2 | 3, 2 ^ 3, ~3;

二、关联查询

关联查询用于从多个表中获取相关数据,常见的有内连接、外连接和自连接等。

1. 笛卡尔积

笛卡尔积是将两张或多张表的所有行组合在一起,通常会因为缺少关联条件而导致大量冗余数据。

  • 例子
    • 查询员工姓名和部门名称(没有关联条件):
      SELECT ename, dname FROM t_employee, t_department;

2. 关联条件

关联条件可以通过 WHEREONUSING 等方式指定。WHERE 可用于所有关联类型,而 ONUSING 只能与 JOIN 结合使用。

  • 例子
    • 将关联条件放在 WHERE 后面:
      SELECT ename, dname FROM t_employee, t_department WHERE t_employee.dept_id = t_department.did;
    • 将关联条件放在 ON 后面(显式内连接):
      SELECT ename, dname FROM t_employee INNER JOIN t_department ON t_employee.dept_id = t_department.did;

3. 内连接(INNER JOIN)

内连接用于保留仅有匹配的行,通常用于两个表之间的关联。

  • 例子
    • 查询员工姓名和部门名称(显式内连接):
      SELECT ename, dname FROM t_employee INNER JOIN t_department ON t_employee.dept_id = t_department.did;

4. 外连接(OUTER JOIN)

外连接用于保留没有匹配的行,通常用于左连接或右连接。

  • 左外连接(LEFT JOIN)示例
    SELECT emp.ename, mgr.ename FROM t_employee AS empLEFT JOIN t_employee AS mgr ON emp.mid = mgr.eid;

5. 自连接

自连接用于将同一张表视为两个不同的表进行操作。

  • 例子
    • 查询员工姓名及其领导姓名(仅显示有领导的员工):
      SELECT emp.ename, mgr.ename FROM t_employee AS empLEFT JOIN t_employee AS mgr ON emp.mid = mgr.eid;

希望这些内容能帮助你更好地理解和使用MySQL运算符及关联查询!

转载地址:http://nedfk.baihongyu.com/

你可能感兴趣的文章
openlayers 入门教程(四):layers 篇
查看>>
OpenLayers 项目分析(三)-OpenLayers中定制JavaScript内置类
查看>>
Openlayers下载与加载geoserver的wms服务显示地图
查看>>
Openlayers中使用Cluster+Overlay实现点击单个要素和聚合要素时显示不同弹窗
查看>>
Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
查看>>
Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合
查看>>
Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
查看>>
Openlayers中使用Overlay实现点击要素弹窗并且弹窗随之移动
查看>>
Vmware系列&虚拟机系列【仅供参考】:使用vCenter Auto Deploy制作ESXI系统封装(适合高版本vSphere)
查看>>
Openlayers中加载GeoJson文件显示地图
查看>>
Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
查看>>
Openlayers中加载Geoserver切割的EPSG:900913离线瓦片地图并显示
查看>>
Openlayers中多图层遮挡时调整图层上下顺序
查看>>
Openlayers中实现地图上添加一条红色直线
查看>>
Openlayers中将某个feature置于最上层
查看>>
Openlayers中点击地图获取坐标并输出
查看>>
Openlayers中设置定时绘制和清理直线图层
查看>>
Openlayers入门教程 --- 万字长篇
查看>>
Openlayers图文版实战,vue项目从0到1做基础配置
查看>>
OpenLayers学习三:地图旋转及地图跳转到某一点的方式(以类为接口)
查看>>