分组查询和聚合查询:
group by (列名)
根据查询的结果来进行分组,值相同的记录分到一组,然后针对每一组进行聚合。
目前表中,对容易一行进行分组操作都会去除重复名字项,同时将重复项打包进改组,例如:
此时的保安下就有两组数据如下:
此时进行全部选择显示操作的话只会显示改组下第一条数据的内容,如下:
注意分组后的筛选需要使用having,分组前的筛选则使用where放在group的前面,如下
having例子:
联合查询/多表查询
联合查询/多表查询是先让表进行笛卡尔积,然后加上连接条件和其他需求的条件。
select * from (表1),(表2);
以此来创建笛卡尔积
或者使用:
select * from (表1) join (表2);
这个时候就产生了两个表每个行乘积,两个表总和列的数据。
然后在进行链接,名字相同的情况下可以使用(表名).(列名) 的方式来进行筛选。
join可以使用on来达到一样效果,不用where:
实现查询每个同学所在班级:
内连接和外连接
当左边表的每条记录在右侧表都有所体现的时候,内连接和外连接基本上没有区别。
当表为这种情况下内外链接就没有什么区别
内连接的主要作用就是显示两张表同时存在的数据,也就是两张表交集。
左外连接中,即使右侧表对应数据为null也可以获取到
左右外连接区别就是以那一侧的表为主。
左右链接都有的链接称为全外连接,在mysql中是不存在的。
自连接就是自己和自己做笛卡尔积。需要起别名,如下:
子查询
select 列名 from 表名 where 条件 =(select 列名 from 表名 where 条件 = );
索引
show index from 表名;
查看索引
create index 索引名 on 表(列名):
创建索引
drop index 索引名 on 表(列名):
删除索引
索引背后的数据结构是B+树;