【MySQL】数据表的常用查询操作

版权声明:欢迎交流,转载请注明出处。 https://blog.csdn.net/u013034226/article/details/82957728

目录

单表查询:

多表数据查询:

在数据库操作中,使用最频繁的是查询操作,由于内容比较琐碎繁杂,在想出更好的办法之前,使用缩进进行格式整理。


单表查询:


查询数据表中所有的数据: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);

        列级子查询:子查询返回的结果是一列

        行级子查询:子查询返回的结果是一行

猜你喜欢

转载自blog.csdn.net/u013034226/article/details/82957728