mysql数据库常规操作3

简单查询

sql 复制代码
 select [distinct]
 * | [as 别名] ,列名 [as 别名]
 from 表;
 说明:
 distinct : 表示去重,对输出的结果进行去重操作
 *:表示所有的字段
 | :表示 或者的意思,左边和右边的内容  不能在一个表中重复出现

条件查询

mysql 复制代码
# 条件查询where子句语法
   select
        字段1
        字段2
   from 表名
   where 条件

含有运算符的查询

mysql 复制代码
# and 连接多个条件
select
    字段1,
    字段2,
    ...
from 表名
where 条件1
    and 条件2
    and 条件3
    ...;
# OR 或运算(满足任一条件即可)
select
    字段1,
    字段2
from 表名
where 条件1
    or 条件2
    or 条件3;
    
# NOT 非运算(取反,排除条件)
select
    字段1,
    字段2
from 表名
where not 条件;

select
    字段1,
    字段2
from 表名
where 字段 not in (值1, 值2, 值3);

select
    字段1,
    字段2
from 表名
where 字段 not between 值1 and 值2;

select
    字段1,
    字段2
from 表名
where 字段 is not null;

# IN 在集合中(多值等于判断的简写)
select
    字段1,
    字段2
from 表名
where 字段 in (值1, 值2, 值3);

-- BETWEEN...AND... 范围判断
select
    字段1,
    字段2
from 表名
where 字段 between 值1 and 值2;

-- LIKE 模糊匹配
select
    字段1,
    字段2
from 表名
where 字段 like '模式%';

select
    字段1,
    字段2
from 表名
where 字段 like '%模式';

select
    字段1,
    字段2
from 表名
where 字段 like '%模式%';

select
    字段1,
    字段2
from 表名
where 字段 like '_单字符';

# IS NULL / IS NOT NULL 空值判断
select
    字段1,
    字段2
from 表名
where 字段 is null;

select
    字段1,
    字段2
from 表名
where 字段 is not null;
运算符类型 符号 / 关键字 说明 示例
比较运算 =><>=<=<>/!= 等于、大于、小于、不等于... WHERE age >= 18WHERE status != 0
范围运算 BETWEEN ... AND ... 在指定数值 / 日期范围内 WHERE amount BETWEEN 100 AND 500
集合运算 IN (值 1, 值 2...) 匹配集合中的任意值 WHERE id IN (1,3,5)
空值判断 IS NULL / IS NOT NULL 判断字段是否为 NULL (不能用 =) WHERE remark IS NULL
模糊查询 LIKE 搭配通配符 % (任意字符)、_ (单个字符) WHERE name LIKE '张%' (姓张)、WHERE name LIKE '张_' (张 + 1 个字符)
逻辑运算 ANDORNOT 多条件组合 (且 / 或 / 非) WHERE age > 18 AND status = 1

注意避坑

  • NULL 判断必须用 IS NULL:

    WHERE remark = NULL

    WHERE remark IS NULL

  • 数值 vs 字符串:

    若字段是字符串类型(如 varchar),数值条件需加引号

    WHERE id = '123'

  • BETWEEN 包含边界:

BETWEEN 100 AND 500等价于>=100 AND <=500

  • 使用null是is null,and 的优先级高于or.

查询排序

mysql 复制代码
select [distinct]
    * | 列名 [as 别名],列名 [as 别名]
from 表
[where 条件]
-- 排序操作
[order by 排序字段1 [ASC | DESC] [,排序字段2 [ASC | DESC]
....] ];
-- ASC:升序(默认)
-- DESC:降序

聚合查询

聚合函数 :之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,聚合查询是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空 (NULL) 值。

常用聚合函数 作用
count() 统计指定列不为 NULL 的记录行数;
sum() 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0
max() 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg() 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0
函数 执行逻辑
count(*) 统计满足 WHERE 条件的所有行(包括字段为 NULL 的行),是 SQL 标准语法,数据库会做最优优化。
count(1) 不读取表的任何字段,而是给每一行「标记一个数字 1」,统计有多少个「1」(等价于统计行数),同样包含 NULL 行。
mysql 复制代码
# COUNT 统计记录数
select
    count(*) as 总记录数
from 表名;

select
    count(字段名) as 非空记录数
from 表名;

select
    count(distinct 字段名) as 去重后数量
from 表名;


# SUM 求和
select
    sum(数值字段) as 总和
from 表名;


# AVG 平均值
select
    avg(数值字段) as 平均值
from 表名;


# MAX 最大值
select
    max(数值字段) as 最大值
from 表名;


# MIN 最小值
select
    min(数值字段) as 最小值
from 表名;


# 聚合函数 + WHERE 条件过滤
select
    count(*) as 满足条件的记录数
from 表名
where 条件;

cast转换类型函数

CAST 是数据类型转换函数,用于将一种数据类型的值转换为另一种数据类型。

mysql 复制代码
# CAST 基础语法
select
    cast(字段名 as 数据类型) as 别名
from 表名;

分组查询

mysql 复制代码
# GROUP BY 基础分组
select
    分组字段,
    聚合函数(字段) as 别名
from 表名
group by 分组字段;


# GROUP BY 多字段分组
select
    分组字段1,
    分组字段2,
    聚合函数(字段) as 别名
from 表名
group by
    分组字段1,
    分组字段2;
    
# GROUP BY + WHERE 先过滤再分组
select
    分组字段,
    count(*) as 数量
from 表名
where 条件
group by 分组字段;


#having 用法
select
   分组字段,
   count(*) as 数量
from 表名
group by 分组字段
having 聚合条件;

分组必聚合

先明确 WHEREHAVING 的核心差异:

特性 WHERE HAVING
作用时机 分组之前筛选数据 分组之后筛选数据
操作对象 原始表的行数据(普通字段) 分组后的聚合结果(聚合函数)
是否能使用聚合函数 不可以 可以

询问式插入

mysql 复制代码
insert into 目标表
select
   字段1,
   字段2,
   ...
from 来源表
where 条件;
仅插入数据(表已存在) SELECT FROM INSERT INTO 表名 SELECT ... FROM ...
操作目标 核心关键词 完整语法结构
建表 + 插入数据(表不存在) AS SELECT FROM CREATE TABLE 表名 AS SELECT ... FROM ...

查询代码关键词执行优先级顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

分页查询mysql⽅⾔limit

mysql 复制代码
-- MySQL分⻚查询:
-- 语法: limit [start,] num
-- start: 默认从 0开始 表⽰ 表中的第⼀条数据 每⻚的起始值: 计算公式 (N -1) * 每⻚条数 N表⽰第⼏⻚
-- num: 获取多少条 (每⻚显⽰的条数)
-- 放置位置: 整个SQL语句的最后⾯

外键约束

mysql 复制代码
create table 子表(
    字段1 数据类型,
    字段2 数据类型,
    ...
    constraint 外键名称 foreign key (子表字段) references 父表(父表主键)
);

内连接查询(inner join)

mysql 复制代码
select
    表1.字段1,
    表1.字段2,
    表2.字段1,
    ...
from 表1
inner join 表2 on 表1.关联字段 = 表2.关联字段
where 条件;
# 作用:返回两个表中匹配的记录,不匹配的记录不显示(取交集)

左连接查询(left join)

mysql 复制代码
select
    表1.字段1,
    表1.字段2,
    表2.字段1,
    ...
from 表1
left join 表2 on 表1.关联字段 = 表2.关联字段
where 条件;
# 作用:返回左表所有记录,右表匹配的记录显示,不匹配的显示NULL(以左表为主)

右连接查询(right join)

mysql 复制代码
select
    表1.字段1,
    表1.字段2,
    表2.字段1,
    ...
from 表1
right join 表2 on 表1.关联字段 = 表2.关联字段
where 条件;
# 作用:返回右表所有记录,左表匹配的记录显示,不匹配的显示NULL(以右表为主)

子查询

mysql 复制代码
select
    表1.字段1,
    表1.字段2,
    (select 字段 from 表2 where 条件) as 别名,
    ...
from 表1
where 表1.字段 运算符 (select 字段 from 表2 where 条件);

三种常见子查询格式:

1. 子查询当条件(where后)

mysql 复制代码
select
    字段1,
    字段2,
    ...
from 表1
where 字段 > (select 字段 from 表2 where 条件);
# 作用:子查询结果作为主查询的过滤条件

2. 子查询当来源(from后)

mysql 复制代码
select
    t.字段1,
    t.字段2,
    ...
from (select 字段 from 表2 where 条件) as t
where 条件;
# 作用:子查询结果作为临时表供主查询使用

3. 子查询当字段(select后)

mysql 复制代码
select
    字段1,
    (select 字段 from 表2 where 表2.关联字段 = 表1.关联字段) as 别名,
    ...
from 表1
where 条件;
# 作用:子查询结果为每行动态计算一个字段值
相关推荐
亮子AI2 小时前
【PostgreSQL】如何清空数据库?
数据库·postgresql·oracle
2401_851272992 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
pupudawang2 小时前
Spring boot启动原理及相关组件
数据库·spring boot·后端
zklgin2 小时前
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
android·sql·mysql
xmlhcxr2 小时前
Redis
java·数据库·redis
数据知道2 小时前
MongoDB地理位置数据处理:GeoJSON格式与空间查询技巧
数据库·mongodb
晓纪同学2 小时前
ROS2 -06-动作
java·数据库·python·算法·机器人·ros·ros2
2401_857865232 小时前
用Python破解简单的替换密码
jvm·数据库·python
LSL666_2 小时前
Redis值数据类型——String
数据库·redis·缓存·数据类型