目录
一、数据排序
1、基础排序
2、过滤筛选
3、多字段排序
4、区间判断
5、嵌套/多条件
6、 查询不重复记录
二、分组
1、对结果进行分组
三、限制
1、限制输出的结果记录
四、设置别名
1、对于列的别名
2、对于表的别名
四、视图
1、视图和表区别
2、联系
3、单表创建视图
五、查询
1、子查询
2、连接查询
①左外连接
②右外连接
③内连接
使用select语句可以将需要的数据那个mysql数据库中查询出来,在有主键的情况下,一般是按照主键ASCII码来进行排序(因为有字符集uft-8,所以不分大小写)。但如果不是主键我们又想排序,
如果对查询的结果进行排序,可以使用order by 语句来来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段。
select 字段1,字段2 from 表 order by 字段;
order by 字段 desc;
默认以主键排序,数字/字母。
加上desc后倒序排列。
order by还可以结合where进行条件过滤、筛选
select 字段1,字段2 from 表 where 字段=' 字段值' order by 字段;
也可以多个字段同时筛选,先排序第一个,在第一个的基础上排序第二个字段
select 字段1,字段2 from 表 order by 字段3,字段4;
and/or 用来表示且/或
select * from 表 where 字段条件 and/or 字段条件;
select * from 表 where 字段条件 and/or (字段条件 and/or 字段条件);
先判断括号里的,再判断外面的条件
通过sql查询出来的结果,还可以对其进行分组,使用group by 语句来实现,group by通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数count、求和sum、求平均数avg、最大值max、最小值min、group by分组的时候可以按一个或多个字段对结果进行分组处理
select count(字段1),字段2 from 表 where 条件判断 group by 字段3 order by count(字段1) asc;
在使用mysql select语句进行查询时,结果集返回的时所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到limit子句
select 字段1,字段2 from 表 limit 1,2
在mysql查询时,当表的名字比较长或者表内的某些字段比较长时,为了方便书写或者多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性。
select 字段 as alias_name from 表;
select 字段(s) from 表 as alias_name;
在使用as后,可以用alias_name代替表,其中as语句是可选的,as之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名或字段名是不会被改变的
这样查会发现test01表所有记录都会对应test02表的每条记录。
视图:优化操作+安全方案
数据库中的虚拟表,这张虚拟表中不包含真实数据,只是真实数据的一个映射
①视图是以及编译好的sql语句,而表不是
②视图没有实际的物理记录,而表有
③表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在
④视图是查看数据表的一种方法,可以查询数据表中某些字段组成的数据,只是一些sql语句的集合。从安全的角度来说,视图可以不给用户接触数据表,从而不知道表结构
⑤表属于全局模式中的表,是实表;试图属于局部模式的表,是虚表
⑥更新相互影响,视图无法删除数据
视图是在基本表之上建立的
create view v_score as select * from 表;
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。PS:子语句可以与主语句所查询的表相同,也可以是不同表
主语句:select id,name from test01 where id
子语句:select id from test where id<5
子语句中的sql语句是为了最后过滤出一个结果集,用于主语句的判断条件
MySQL的连接查询通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择的连接到选定的主表结果集上。
在from子句中使用left join 或者left outer join关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中所有行以及右表中符合条件的行。
select * from 表1 left join 表2 on 表1字段=表二字段;
表1是左表,表2是右表;右表和左表相差的数据全部用null代替
在from子句中使用right join 或者right outer join关键字来表示。右连接以右侧表为基础表,接收右表的所有行,并用这些行与左侧参考表中的记录进行匹配,也就是说匹配右表中所有行以及左表中符合条件的行。
select * from 表1 right join 表2 on 表1字段=表2字段;
MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在from子句中使用关键字inner join来连接多张表,并使用on子句设置连接条件,内连接是系统默认的表连接,所以在from子句后可以省略inner关键字,只是用关键字join。同时有多个表时,也可以连续使用inner goin来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表。
select 字段s from 表1 inner join 表2 on 表1字段 = 表2字段;
只显示选择的表中拥有选择的字段重合的部分数据