今天来补充下MySQL中各种情况下需要使用到的查询语句:
增删查改的一个简单操作在这里
本章就是查询统计,其余操作看上面的文章
1 查询所有的库
使用SHOW语句找出在服务器上当前存在什么数据库:
show databases;
查询到库后可以需要先使用该库,才能对这个库里面的表进行操作:use 库名
2 查询所有的表
使用SHOW语句查询使用的库里面存在的表:
show tables;
3 查询表的结构
使用DESCRIBE+表名查询表结构:
describe vault
4 查询整张表数据
使用select语句查询出表里面所有数据:
select * from 表名
select * from vault
5 查询表中某一列的数据
使用select语句:
select 列名1,列名2 from 表名
(列名就是字段)
select id,vault_name from vault;
6 查询指定数据
使用select和条件where,进行查找:
比较运算符(大小比较):>、>=、=、、!>、!=10 AND age
select * from 表名 where 条件
select * from vault where vault_name='nas0518'
获取该条件的下的另一个字段数据
select 字段 from 表名 where 条件
select id from vault where vault_name='nas0518';
7 限制行数查询
使用limit语句,注意:mysql中没有top n语句的用法
select 字段1,字段2 from 表名 limit i,n
i表示从第i个开始,n表示往后查几个
select * from vault limit 3;
单独数字n,表示查询前n行
select * from vault limit 1,2;
mysql计数也是从0开始的,limit 1,2表示从第二行开始,往后取两位,不取第一行,所以select * from vault limit 0,2; 也是成立的
8 查询结果排序
语法:order by 字段 asc/desc
order by表示进行排序
asc:正序,递增
desc:反序,倒序,递减
select * from vault where updated_time>=1589861127 order by id desc;
对更新时间大于1589861127的数,安装id降序排列
9 分组查询
分组查询,这里信息量其实对于初学者来说,也比较大了,我就不再详细的写了,这里就说下简单的用法,下次专门补一个分组的详细用法
group by强调的是一个整体,就是组
group by + having 组合筛选数据
注意:having 条件的字段必须在前面查询筛选存在,否则语法错误
select id,vault_name,organization_name,region_name from backup_vault group by organization_name;
加having使用:
select id,vault_name,organization_name,region_name from backup_vault group by organization_name having id>=40;
若是想对结果进行排序或者其他操作,可以利用子查询加别名
mysql> select a.id,a.vault_name,a.organization_name,a.region_name
-> from
-> (select * from backup_vault order by id asc) as a
-> group by organization_name;
10 内连接查询
内连接查询返回的是同时满足两个结果集的记录。
使用inner join查询所有信息,inner可省略:
在这里说一下关联查询sql编写的思路,1,先确定所连接的表,2,再确定所要查询的字段,3,确定连接条件以及连接方式
格式:
select 表1.id,表2.name from 表1 join 表2 no 查询条件
mysql> select a.plan_name,b.vault_name
-> from backup_plan a
-> join backup_vault b
-> on a.organization_name=b.organization_name;
内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、、!。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
11 外连接查询
外连接分为左外连接和右外连接,分别以左表和右表作为主表匹配,保留主表中存在但另一张表中不存在的的数据。使用left join查询
格式:
select * from 表1(主) left join 表2 on 条件
mysql> select a.plan_name,b.vault_name
-> from backup_vault as b
-> left join backup_plan as a
-> on a.id =b.id;
右连接也是一样的,换一下主表和配表的位置,左外连接添加一个OUTER :left outer join
12 子查询:
子查询指一个查询语句嵌套在另一个查询语句内部的查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。
子查询中常用的关键字有in和exists,也可以使用比较运算符
in 子查询:
in子查询主要用于判断指定字段的值是否存在于子查询的结果集中。
如果子查询的记录较少,主查询的记录较多时使用in,因为这时用到了主表上的索引
exists子查询
exists子查询主要用于判断子查询的结果集是否为空。
如果子查询的记录较多,主查询的记录较少时使用exists,因为这时用到了子表上的索引。