目录
在数据库操作中,使用最频繁的是查询操作,由于内容比较琐碎繁杂,在想出更好的办法之前,使用缩进进行格式整理。
单表查询:
查询数据表中所有的数据:select * from 表名;
查询指定字段:select 字段1,字段2,...from 表名;
给字段起别名:select 字段1 as 别名1,字段2 as 别名2,...from 表名;(as可以省略)
消除重复数据:select distinct 字段名 from 表名;
带条件查询:select 字段1,字段2,...from 表名 where 条件;
where条件可以使用运算符:等于:= 大于:> 小于:< 大于等于:>= 大于等于:<=不等于:!=或<>
可以使用逻辑运算符:and or not
可以配合模糊查询:%表示任意多个任意字符,_表示一个任意字符,如:select 字段1,字段2,...from 表名 where 字段名 like 'x_x%';
范围查询:in表示在一个非连续的范围内,between...and...表示在一个连续范围内,如: select name from t_student where id in(1,5,9); select name from t_student where id between 2 and 5;
判断空值:空值不等于0,也不等于“”,如:select 字段名 from 表名 where 字段名 is null;
判断非空值,语法: is not null
对查询结果进行排序,order by 字段名 asc(默认升序)/desc(降序)
单字段排序:select * from 表名 order by 字段名 desc;
多字段排序:只需将字段的排序方式一次写在order by 后面即可,字段间用逗号分隔
分页查询:查询数据时由于数据较多,只显示一部分,需要获取数据的前n条的时候可以直接写 limit n,select * from t_student limit 2,3;从索引2开始,显示3条数据
聚合函数:MySQL中提供了一些定义好的函数,对数据进行统计
求和函数:sum,对指定字段求和,select sum(字段名) from 表名;
求平均值函数:avg
求最大值函数:max 如:select max(c_age) from t_student where c_gender = '男';
求最小值:min
统计记录总数:count
分组:分组 分组就是将相同数据放到一起进行处理。 单纯的分组是没有意义的,需要配合聚合函数一起使用。 语法: select 分组的字段名,聚合函数... from 表名 group by 分组字段名 having 分组后的条件
注意:在执行 group by 分组时,select 后只能有被分组的字段,不允许有其它字段,除非这些字段在聚合函数中
having: 作用和 where 类似,用来去分组数据进行筛选
group_concat(字段名):对分组的内容进行拼接
对t_student表中数据通过性别和住址分组,然后在查看各个住址人的姓名:
多表数据查询:
在数据库操作中,数据往往不是存在一张表中的,同一个项目中,根据设计范式,数据可能分散在不同的多张表中,这时查询数据时,就需要多表查询。
多表查询连接条件:在多表个表进行查询时,表与表之间应该是有有关系的,一般会以外键的形式来建立表间的关系。 查询时按照条件建立记录的匹配规则。 比如学生表中保存了学生的信息和所在班级的ID,班级表中保存了班级的信息。 在查询学生的班级信息时,可以通过学生表中的班级ID和班级表中的ID匹配进行查询,select t_student.c_name,t_class.c_name from t_student,t_class where t_student.c_class_id = t_class.c_id;
表别名:在多表操作时,由于表的名字比较长,在写SQL语句时非常不方便。可以在查询 时,给表起个别名,代替表名来操作,select ts.c_name as '姓名' , tc.c_name '班级名' from t_student as ts,t_class tc where ts.c_class_id = tc.c_id;
内连接查询:查询的结果为两个表匹配到的数据 语法:select * from 表1 inner join 表2 on 表1.字段名 运算符 表2.字段名,如:select ts.c_name, tc.c_name from t_student as ts inner join t_class tc on ts.c_class_id = tc.c_id;
左连接查询:查询的结果为根据左表中的数据进行连接,如果右表中没有满足条件的记录,则连接空值,如:select ts.c_name, tc.c_name from t_student as ts left join t_class tc on ts.c_class_id = tc.c_id;
右连接查询:查询的结果为根据右表中的数据进行连接,如果左表中没有满足条件的记录,则连接空值,如:select ts.c_name, tc.c_name from t_student as ts right join t_class tc on ts.c_class_id = tc.c_id;在实际工作中,右连接使用的非常少,因为左连接完全可以替代右连接,在连接过程中,只需要调整表的顺序即可。
子查询:在一个 select 语句中,嵌入了另外一个 select 语句,语法: select * from 表1 where 条件 运算符 (select 查询)
标量子查询:子查询返回数据(一行一列),充当数据源
如:查询班级中年龄大于平均年龄的学生信息步骤:1.查询班级学生平均年龄2.查询大于平均年龄的学生,select * from t_student where c_age > (select avg(c_age) from t_student);
列级子查询:子查询返回的结果是一列
行级子查询:子查询返回的结果是一行