DQL语言
QDL语言
DQL(Data Query Language)数据查询语言用来进行数据库中数据的查询,常用的关键字为----select
语法:
select 字段名,字段名,...... ,字段名 from 表名 [where 条件语句]
举个例子:
-- 查询product表中所有记录 select * from product; -- 查询product表中pid和pname字段 select pid,pname from product; -- 查询结果是表达式(运算查询):将所有商品的价格+10元进行显示. select price+10 from product; -- 查询商品名称为“花花公子”的商品所有信息: select * from product where pname ='花花公子';
排序
查询数据时,我们会把查询的结果按照某些字段排序。
默认:升序。
asc:指定列按升序排序。
desc:指定列按降序排序。
语法:
order by 列名A,列名B 按照列名A升序,当列名A相同时按照列名B升序 order by 列名A desc,列名B 按照列名A降序,当列名A相同时按照列名B升序 order by 列名A,列名B desc 按照列名A升序,当列名A相同时按照列名B降序 order by 列名A desc,列名B desc 按照列名A降序,当列名A相同时按照列名B降序
查询语法:
select 字段名,字段名,字段名,......,from 表名 [where 条件] [order by 字段1,字段2,....]
举个例子:
-- 查询学生信息--按照年龄排序[asc升序默认] [desc降序] select * from tbl_student order by age desc,classId desc;
select 字段 as 别名, 字段 as 别名 from 表名
注意:数据库中as可以省略。
举个例子:
-- 查询学生表中sname起别名姓名,age起别名年龄 select sname as 姓名, age 年龄 from tbl_student;
select distinct 字段名,字段名,.....,from 表名
分页查询
MySQL中分页需要使用关键字-----limit
语法:
select 字段名,字段名,字段名 from 表名 [where 条件] [order by 字段] limit 起始记录,条数
找规律:
-- 查询第一页每页显示4 select * from tbl_student limit 0,4; -- 查询第二页每页显示4 select * from tbl_student limit 4,4; -- 查询第三页每页显示4 select * from tbl_student limit 8,4; -- 查询第四页每页显示4 select * from tbl_student limit 12,4; -- 可以看见起始记录与条数之间存在一定的规律 -- 规律: select * from 表名 limit (page-1)*pageSize,pageSize; -- page:表示第几页 -- pageSize: 表示每页显示的记录个数
举个例子:
-- 查询tb_teacher表第二页的数据。每页显示5个。 select * from tb_teacher limit 5,5
-- 求choose_course的成绩和 最高成绩 最小成绩 统计表中记录的条数 平均值 select sum(score),max(score),min(score),count(*),avg(score) from choose_course;
select 分组字段 , 聚合函数 from 表名 group by 分组的字段,分组的字段
注意一点:select 后只能跟分组字段和聚合函数。
举个例子:
-- 求tbl_student中学生的个数. select classId 班级号, count(*) 人数 from tbl_student group by classId
分组后,如果想要条件查询时需要使用关键字----having
select 分组字段名,聚合函数 from 表名 [group by 字段名] [having 条件语句]
举个例子:
-- 根据tb_student表中通过学院分组查询人数大于5的学院 select college , count(*) 人数 from tb_student group by college having count(*)>5
having和where的区别
from > where > group (含聚合函数)> having > order > select > limit
从执行顺序中可以看到,where执行顺序要在group之前,所以where语句无法对group by分组的内容进行过滤,所以这时可以使用having 语句进行过滤