当前位置: 首页 > news >正文

MySQL基本查询

一.create

1.1 单行数据 + 全列插入

1.2 多行数据 + 指定列插入

1.3插入否则更新

1.4替换

二.Retrieve

2.1.SELECT列

2.1.1全列查询

2.1.2指定列查询

2.1.3查询字段为表达式

2.1.4 为查询结果指定别名

2.1.5结果去重

2.2WHERE 条件

2.2.1比较运算符

2.2.3逻辑运算符

2.3结果排序

2.4 筛选分页结果

三.Update

四.Delete

4.1删除数据

4.2截断表

五.聚合函数


一.create

语法:

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

案例:

-- 创建一张学生表
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '学号',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);

1.1 单行数据 + 全列插入

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
-- 注意,这里在插入的时候,也可以不用指定id,mysql会使用默认的值进行自增。
INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');

1.2 多行数据 + 指定列插入

-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO students (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');
SELECT * FROM students;

1.3插入否则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败

可以选择性的进行同步更新操作 语法

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';

-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新

1.4替换

-- 主键 或者 唯一键 没有冲突,则直接插入;

-- 主键 或者 唯一键 如果冲突,则删除后再插入

二.Retrieve

2.1.SELECT列

语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
案例
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);
INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30
);

2.1.1全列查询

通常情况下不建议使用 * 进行全列查询

1. 查询的列越多,意味着需要传输的数据量越大;

2. 可能会影响到索引的使用。

 

2.1.2指定列查询

指定列的顺序不需要按定义表的顺序来

2.1.3查询字段为表达式

表达式不包含字段

表达式包含一个字段

表达式包含多个字段

2.1.4 为查询结果指定别名

语法:
SELECT column [AS] alias_name [...] FROM table_name;

2.1.5结果去重

2.2WHERE 条件

2.2.1比较运算符

运算符描述示例
=等于,判断列值是否与指定值相等SELECT * FROM users WHERE age = 25;
!= 或 <>不等于,判断列值是否与指定值不相等SELECT * FROM products WHERE price != 100;
>大于,判断列值是否大于指定值SELECT * FROM orders WHERE total_amount > 500;
<小于,判断列值是否小于指定值SELECT * FROM employees WHERE salary < 3000;
>=大于等于,判断列值是否大于或等于指定值SELECT * FROM students WHERE score >= 80;
<=小于等于,判断列值是否小于或等于指定值SELECT * FROM tasks WHERE duration <= 2;
BETWEEN检查列值是否在指定的范围内(包含边界值)SELECT * FROM flights WHERE departure_time BETWEEN '2025-01-01' AND '2025-12-31';
IN检查列值是否在指定的列表中SELECT * FROM cities WHERE country IN ('China', 'USA', 'UK');
LIKE用于模糊匹配字符串,常与通配符 %(匹配任意数量的任意字符)和 _(匹配单个任意字符)搭配使用SELECT * FROM customers WHERE name LIKE 'J%';
IS NULL检查列值是否为 NULLSELECT * FROM employees WHERE manager_id IS NULL;
IS NOT NULL检查列值是否不为 NULLSELECT * FROM products WHERE description IS NOT NULL;

2.2.3逻辑运算符

运算符描述示例
AND逻辑与,连接两个条件,只有当两个条件都为真时,整个条件才为真SELECT * FROM employees WHERE department = 'Sales' AND salary > 5000;
OR逻辑或,连接两个条件,只要其中一个条件为真,整个条件就为真SELECT * FROM products WHERE price < 100 OR category = 'Electronics';
NOT逻辑非,对一个条件取反SELECT * FROM users WHERE NOT age = 25;

2.3结果排序

语法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

2.4 筛选分页结果

-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

三.Update

语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [ LIMIT ...]

四.Delete

4.1删除数据

语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

4.2截断表

语法:

TRUNCATE [TABLE] table_name

1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;

2. 实际上MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚

3. 会重置 AUTO_INCREMENT

五.聚合函数

COUNT([DISTINCT] expr) 返回查询到的数据的 数量

SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义

AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义

MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义

MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义

相关文章:

  • LeetCode[15]三数之和
  • OpenAI重磅回归开源!首发推理模型不限商用,直面DeepSeek挑战
  • 操作系统高频(六)linux内核
  • 交叉熵损失
  • leetcode25.k个一组翻转链表
  • (二十六)Dart 中泛型的使用与优势
  • WEB安全--SQL注入--无列名注入
  • 本地合并多个仓库,保留Commit历史
  • MyBatis choose when otherwise
  • 算法设计学习2
  • 【FreeRtos】任务调度器可以被挂起吗?
  • 【配电网】基于差分进化算法的含DG配电网无功优化模型
  • python技巧:自动控制高低温箱,通过串口输入命令,生成16进制字符串,并计算CRC16。
  • 4.1-3 模拟器
  • C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
  • 计算机网络知识点汇总与复习——(一)计算机网络体系结构
  • 【408--考研复习笔记】计算机网络----知识点速览
  • Base64编码的优缺点
  • Redis原理:rename命令
  • 玩机搞机基本常识-------安卓机型各种root方式面面观 选择适合自己机型的root方式
  • 病重老人被要求亲自取钱在农业银行门口去世?株洲警方介入
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?
  • 4月新增社融1.16万亿,还原地方债务置换影响后信贷增速超过8%
  • A股午后拉升,沪指收复3400点:大金融发力,两市成交超1.3万亿元
  • 4月份全国企业销售收入同比增长4.3%
  • 阿尔巴尼亚执政党连续第四次赢得议会选举,反对党此前雇用特朗普竞选经理