Mysql——查看大全
show查看语法:
-
show databases;
查看所有数据库名称,在表内也能查看到。
-
select database();
查看当前进入的数据库
-
show tables;
查看库中所有的表
-
show create table t1;
查看表结构。
desc查看语法:
-
desc t1;
1. field:字段
2. type:类型
3. null:能否为空,YES为能空,No为不能空
4. key:unique设置值,显示UNI时,设置为了不能重复字段。MUL时,为多字段联合唯一,需要使用show create来查看。PRI时,为设置主键字段。
5. default:设置默认值,NULL为未设置,当用值时,即默认值。
6. extra:
select 查看语法:
格式及先后顺序
select * from 表 where —— 基本格式
group by 或 having —— 分组
order bu 或 limit —— 排序
-
查看所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
-
查看表内容
selcet * from t1;
select 字段 from 表
select 字段,字段2 from 表
select 字段 as 新名字 from 表
select 字段 新名字 from 表
select distince 字段 from 表 # 去重
select 字段*10 from 表 #四则运算
where语句
-
比较运算
select * from 表名 where 字段名 >,<,=,!=运算符;
null判断只能使用 is null 或is not null 来判断。
-
范围筛选
多选一:
select * from 表名 where 字段名 in(筛选字段1,2,3,4,5);
筛选一个数值区间:
select * from 表名 where 字段名 between 10000 and 20000;
字符串的模糊查询:
select * from 表名 where 字段名 like'玄%';
%表示匹配任意长度的任意内容。
_ 表示任意一个字符。
正则匹配:
selcet * from 表名 where 字段名 regexp '正则';
逻辑运算
select * from 表名 where 字段名=20000 or,and,not 字段名=25000或in(1,2,3,4);
分组
1. 根据字段名的不同,进行保留,并且保留第一个不同的字段名。
select * from 表名 group by 字段名;
聚合
1. 单表查询中如果查看最大,最小值,只能显示正确数值,不能显示正确其他数值,需要使用多表查询。
count(计数)
非空则计数,为空显示null
select count(*)from 表名;
sum(求和)
select sum(字段名)from 表名;
avg(平均值)
select avg(字段名)from 表名;
分组聚合
having语句
1. 进行对分组(group by)后的过滤
2. 设置过滤条件,必须要有相对应的过滤字段才可以查找出来。
3. having中可以使用聚合函数。
4. having后面的条件要么是select的字段,要么是分组的字段。否则会报错
select 字段名 from 表名 group by 字段名 having count(*)>3;
select 字段名1,字段2 from 表名 having 字段名>18; #字段名需要对应起来。
order by排序语句
基本格式:
select * from 表名 order by 排序字段名;
1. 默认为升序排列(asc),最后加desc 可改为降序。
2. 可以在order by 字段名后继续加条件进行排序。(像排序性别,然后再排序薪资)
select * from 表名 order by 排序字段名,排序字段名2 desc;
limit 分页语句
1. 如果只需要排序前几名的,那么后面再跟limit 个数即可只显示几。
select * from 表名 order by 排序字段名,排序字段名2 desc limit 8;
2. 如果想要实现分页显示,并每页只有5个值的时候。
select * from 表名 order by 排序字段名 desc limit 0,5; #0表示从1开始取值,5表示只提取5个。
多表查询
一般情况下,在mysql中两张表是通过一对多的关系进行的连接:
select * from A,B;
A一项对应B的每一项,称之为笛卡尔积。
多表连接查询特点:
1. 两张表条件不匹配的项,不会出现在结果中。
2. 如果多表中有相同的名称字段,那么就需要进行对表的指定,如果没有那么就直接写字段即可。
内连接:inner join
两张表条件不匹配的项,不会出现在结果中。
select * from A inner join B on A.id = B.id;
select username,count_order from user inner join ( select uid,count(*) as count_order from orders group by uid) as o on user.uid = o.uid;
外连接
左外连接:
有限显示左表(A)的全部记录。如果无法匹配到B,那么就会显示为NULL。
select * from A left join B on A.id = B.id;
右外连接:
有限显示右表(B)的全部记录。如果无法匹配到A,那么就会显示为NULL。
select * from A right join B on A.id = B.id;
全外连接:
就是将左外和右外相连接起来。
select * from A left join B on A.id = B.id union select * from A right join B on A.id = B.id;
子查询:
指将一张表的查询结果,当成另一张表的关键字来进行再次查询。
select * from A where 条件=(select * from B...)
0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)