JavaWeb(三)

一、DQL

DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)。

1.1、去除重复记录(DISTINCT)

SELECT DISTINCT 字段列表 FROM 表名;

查询xxl_job_group表中app_name和title字段的值并去重,

select distinct app_name,title

from xxl_job_group;

注意:这个查询出来的结果,只有当app_name、title完全一样才会去重。下面的结果就不会去重。

1.2 、起别名(AS)

AS 也可以省略

查询姓名、数学成绩、英语成绩。并通过as给math和english起别名(as关键字可以省略)

select name,math 数学成绩,english 英文成绩 from stu;

1.3、条件列表中的运算符

注意:null值的比较不能使用 = 或者 !=,需要使用 is 或者 is not

1.4、模糊查询(注意:%要在单引号里面)

(1)_ : 代表单个任意字符

(2)% : 代表任意个数字符

1.4.1、查询姓'马'的学员信息(名字由马开头的)
select * from stu where name like '马%';

1.4.2、查询姓名中包含'马',且不是第一个字开头的
select * from stu where name like '%马';

1.4.3、查询姓名中包含 '马' 的学员信息
select * from stu where name like '%马%';

1.4.4、查询第二个字是'花'的学员信息
select * from stu where name like '_花%';

1.5、排序查询

SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;

ASC : 升序排列 (默认值)

DESC : 降序排列

查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

select * from stu order by math desc , english asc ;

1.6、聚合函数

注意:null 值不参与所有聚合函数运算

统计班级一共有多少个学生

select count(id) from stu;

上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count(*) 来实现。* 表示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*)

1.7、分组查询

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];

注意:分组之后,查询的字段为聚合函数和分组字段查询其他字段无任何意义

表中的数据为

下面的sql语句中查询name就毫无意义:

select name, sex, avg(math) from stu group by sex;

得到查询出结果:

我们发现查询出来的name为好伟大卢本伟,这个对应的是sex为女和男时的第一个数据

也就是说查询的字段不是聚合函数也不是分组字段,那么查询出来的结果就是这个字段对应的第一笔数据,没有任何意义。

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的

select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;

where 和 having 区别:

执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。

1.8、limit的用法

select * from t_user limit 5;

从第一条开始取5条数据

Limit还有分页查询等用法,这里不做详细介绍。

分页查询 limit 是MySQL数据库的方言

Oracle 分页查询使用 rownum

SQL Server分页查询使用 top

总结:

查询SQL的书写顺序:

select-> from->where->group by->having->order by->limit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值