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 表名;

分组聚合

1. 执行顺序,总是先执行where 再执行group by分组,所以要根据分组后再过滤的情况,那么只能使用having语句。
select 字段名,count(*)from 表名 group by 字段名;
 

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分析

 

posted @   新兵蛋Z  阅读(541)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示