展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

MySQL基础(二)

查询

简单查询

select 字段 from 表名;

限定查询

select 列名 from 表名 {where 条件}
is not null is null
WHERE 列名 [NOT] BETWEEN 取值1 AND 取值2
WHERE {条件} [OR|AND] {条件}
SELECT * FROM user WHERE uid [NOT] IN (2,3,5)

模糊查询

[NOT] LIKE '%字符串_' // %表示任意字符,_表示单个字符,?表示单个字符
!= > <

排序

SELECT 列名 FROM 表名 {WHERE 条件} ORDER BY 排序字段 ASC|DESC // 排序放在最后

分组

// 配合聚合函数使用,根据一个或多个列对结果集进行分组;例如对同一类别的字段进行求和操作
select 列名1, sum() as 数量之和 from 表名 group by 列名1
// 过滤:where 是在分组前过滤数据,where条件不能包含聚组函数 having 在分组之后过滤数据,条件中经常包含聚组函数
select 列名 from 表名 having num > 10;

多表查询

SELECT 列名1 别名1, 列名2 别名2 FROM 表名1 别名1, 表名2 别名2 {WHERE 连接条件 and 普通条件} {ORDER BY 排序字段 ASC|DESC}
// 能使用join...on 直接连接的都可以使用普通关联查询where,反之不行
select a.ename, b.deptno from emp e, dept b where e.deptno = b.deptno;
select a.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;
//直接连接 join...on = 内连接 inner join...on
//交叉连接,例如查询两张表,同时保留相同字段
SELECT * FROM emp CROSS JOIN dept;
//自然连接 NATURAL JOIN去掉重列
SELECT * FROM emp NATURAL JOIN dept;
//USING用于指定两个表之间的连接字段
SELECT * FROM emp JOIN dept USING(deptno);
//不等连接
select a.ename, d.deptno from emp e inner join dept d on e.deptno <> d.deptno;
//左连接 left join...on
//右连接 right join...on
//外连接 left outer join...on right outer join...on
//全连接:合并两张表的查询结果
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
//自连接:将一个表当成两个表进行连接查询
SELECT e1.Name AS employee_name FROM Employee AS e1, Employee AS e2 WHERE e1.ManagerId=e2.Id AND e1.Salary>e2.Salary

子查询

// 将查询结果当作一张表作为另一张表的查询
select e.ename, e.sal, b.deptno from emp as e , (select deptno, avg(sal) as sal from emp group by deptno) as b where e.deptno = b.deptno and e.sal > b.sal;

分页

//LIMIT [位置偏移量] <行数>
SELECT * FROM students_info LIMIT 4; //查询前四条数据
SELECT * FROM students_info LIMIT 3,5; //从第四条开始查询5条数据

分组函数

Count():计数
Max():求最大值
Min():求最小值
Avg():求平均值
Sum():求和
SELECT avg(sal),sum(sal) FROM emp WHERE deptno=20 // 例如查询部门编号为20的平均薪资及求和

执行过程

select from where group by having union order by limit

其他

alter table 表名 change id id int primary key auto_increment; // id设置为自动增长
ALTER TABLE `table_name` MODIFY COLUMN `CreateTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ; // 插入数据时自动填充时间
ALTER TABLE `table_name` MODIFY COLUMN `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ; // 更新数据时自动填充时间
posted @   DogLeftover  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示

目录导航