数据单表查询

数据查询

  1. 能够熟练对数据进行各种查询操作
  2. 导语
    在数据库操作中,使用频率最多的是查询操作。

查询数据时,根据不同的需求,条件对数据库中的数据进行查询 ,并返回结果。

2 准备工作
在查询之前,首先要有数据表和相应的数据。

在 辅助资料中 有 school.sql 文件,通过导入该文件来快速准备数据。

导入之前需要先创建一个数据库
使用新创建的数据库
使用 source 文件地址 导入数据

  1. 查询指定字段
    查询数据库使用 select 命令。 这个命令相对比较复杂。可变化样式较多,这里分功能依次讲解。

查询数据表中所有数据 语法:select * from 表名

select * from t_student;

查询指定字段的显示 语法:select 字段1,字段2,… from 表名

select c_id,c_name,c_address from t_student;

  1. as 别名

在查询时,默认结果显示的字段和表中字段名相同,可以通过别名来修改显示的样式 语法:select 字段1 as 别名,字段2 别名,… from 表名

select c_id as 学号 ,c_name as 姓名 ,c_address 地址 from t_student;

在给字段起别名时,可以使用 as ,也可以直接在字段后跟别名,省略 as 。
5. 消除重复数据
在查询数据时,查询结果可能会有很多重复的数据,如果不想重复,可以使用 distinct 来实现去重。 语法:select distinct 字段名 from 表名

select distinct c_address from t_student;

注意:distinct 在去重时,会比较所有的指定字段,只有完全相同时才认为是重复的。
6. 条件查询 where 子句
查询数据时,需要根据不同的需求设置条件,通过 where 子句来设置查询条件 语法: select 字段,… from 表名 [where 字段 运算符 值];

select * from t_student where c_gender='男';
  1. 运算符
    where 条件中可以使用的运算符。

比较运算符

等于: =
大于: >
大于等于: >=
小于: <
小于等于: <=
不等于: != 或 <>

select * from t_student where c_age < 20;

逻辑运算符

and
or
not
select * from t_student where c_age < 20 and c_gender = ‘女’;

模糊查询

like
% 表示任意多个任意字符
_ 表示一个任意字符

select * from t_student where c_name like ‘孙’;
select * from t_student where c_name like ‘孙%’;
select * from t_student where c_name like ‘孙_’;

范围查询

in 表示在一个非连续的范围内 , 可以使用 or 实现
select * from t_students where id in(1,3,8);

between … and … 表示在一个连续的范围内,可以使用 and 实现 ```
空判断 在数据库中,允许在数据添加是没有数据,使用空值来表示。 空值不等于0,也不等于‘’,需要使用特殊的判断方式

判断空值
语法:is null

select * from t_student where c_age is null;

判断非空值 语法:is not null

select * from t_student where c_age is not null;

  1. 查询结果排序
    排序是一个在查询数据时非常重要的操作。比如买东西时,想按一定的条件进行有序显示。就需要使用排序

asc(默认) 升序 / desc 降序 语法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,…]

单字段排序

select * from t_student order by c_age;
select * from t_student order by c_age asc;
默认使用就是升序排序,可以不指定 asc ,效果相同。

多字段排序 可以对多个字段进行排序,只需将字段的排序方式依次写在 order by 后面即可,字段间使用逗号分隔

select * from t_student order by c_age desc,c_id asc;

  1. 分页查询
    查询数据库时,由于数据较多,在显示过程中不可能将数据全部显示。 可以使用分页查询,只显示指定的一部分数据 语法:select from 表名 limit start=0,count *说明

从start开始,获取count条数据
start默认值为0
需要获取数据的前n条的时候可以直接写 limit n

select * from t_student limit 3;
select * from t_student limit 2,3;

查询第 N 页 M 条数据,可以通过公式算出:(N - 1) * M

  1. 聚合函数
    在 MySQL 中提供了一些定义好的函数,利用这些函数提供对数据的统计功能。 常用的聚合函数如图:

sum 求和函数 对指定的字段求和

select sum(c_age) from t_student;

avg 求平均值函数 对指定字段求平均值

select avg(c_age) from t_student;

max 求最大值函数

select max(c_age) from t_student where c_gender = ‘男’;

min 求最小值函数

select min(c_age) from t_student where c_gender = ‘女’;

count 统计记录总数

select count() from t_student;
select count(
) from t_student where c_gender = ‘女’;

  1. 分组
    分组就是将相同数据放到一起进行处理。 单纯的分组是没有意义的,需要配合聚合函数一起使用。

语法: select 分组的字段名,聚合函数… from 表名 group by 分组字段名 having 分组后的条件

注意:在执行 group by 分组时,select 后只能有被分组的字段,不允许有其它字段,除非这些字段在聚合函数中

单字段分组

select c_gender from t_student group by c_gender;

多字段分组(了解)

可以对多个字段进行分组,作用同上,需要注意的是多字段时,只有对应字段完全相同,才能分为同一组

select c_gender,c_address from t_student group by c_gender,c_address;

group_concat()

作用:根据分组结果,使用group_concat()来获取分组中指定字段的集合

语法:group_concat(字段名)

select c_gender,group_concat(c_name) from t_student group by c_gender;s

分组和聚和函数使用

单纯的使用分组并没有实际意义,需要使用聚合函数对数据进行处理。

select c_gender,max(c_age),min(c_age),sum(c_age),avg(c_age),count(*) from t_student group by c_gender;
select c_gender,max(c_age),min(c_age),sum(c_age),avg(c_age),count(c_age) from t_student group by c_gender;

having条件子句 having 作用和 where 类似,用来去分组数据进行筛选 where 是对 form 表 中取数据时进行筛选 having 是对 group by 分组后的数据进行筛选 因为在执行顺序上,在执行 where 时,分组还没有执行 得先根据 where 的条件取出数据,才能去取出的数据进行分组。

select c_gender,group_concat(c_name) from t_student group by c_gender having c_gender = ‘女’;
select c_gender,group_concat(c_name) from t_student where c_age > 50 group by c_gender having c_gender = ‘女’;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值