DQL:数据库的查询语句初学
1.查询全表数据
在查询之前,我们需要先创建一个所需的表`
select *from 表名; [注意,实际开发中,写sql的时候,不能写**号,需要查询全表的时候,需要写全部的名称字段]
select
s.id as “编号”,
s.name as “姓名”,
s.age as “年龄”,
s.math as “地址”
from
表名 as s
2.查询部分字段,
查询指定字段 需求:查询出员工的编号以及员工的姓名,年龄,性别
select
s.id “员工id”,
s.name “员工姓名”,
s.age “员工年龄”,
s.sex “员工性别”
from
stu3 s;
去除他的重复性
select
distinct address
from stu3
3.查询的时候,可以将字段为整数类型进行求和(相加)
需求:查询员工的id,name,age,sex,以及数学和英语的总分;
select
id “编号”,
name “员工姓名”,
age “员工年龄”,
sex “员工的性别”,
(math+english) “总分”
from
stu3;
注意,在求和的时候,是两个整数类型在进行求和,但是如果其中一个整数字段里是空值(null),那么两者相加也就是(null),那么要解决这个问题的话,我们可以用到一个函数
select
id “编号”,
name “员工姓名”,
age “员工年龄”,
sex “员工的性别”,
(math+ifnull(english,0)) “总分”
from
stu3;
当我们加上这个ifnull()函数后,他会判断,如果,英语成绩是null的话,那么会吧他的null修改为0分
4.带条件查询
select 指定的字段 from 表名 where 条件
需求,查询出年龄大于等于20岁的员工姓名,年龄,性别以及总成绩:
select
name “姓名”,
age “年龄”,
sex “性别”,
(math+ifnull(english,0)) “总分”
from
stu3
where age<=20;
where的条件是可以跟多个的,并列条件或者或的条件(&& || )
需求:查询学生的年龄在20-30岁的学生所有消息
select
*
from
stu3
where
age >=20 && age<=30; --也可以写成age >=20 and age<=30;[and是mysql自己的语法]
还可以用:
where 字段名称 between 值1 and 值2 ;等价与字段名称>=值1 and字段名称<=值2;
需求,要查询学生年龄是18岁,或者20岁,或者45岁的学生信息
select
*
from
student3
where
age=18 || age=20 || age=45; --[和与一样,mysql有自己的或,or]
在上面的格式中,当有多个或的关系的时候,可以使用in集合语句
select
*
from
student3
where
age
in(18,20,45);
需求:查询出英语成绩为null的学生信息
select
id “编号”,
name “姓名”,
age “年龄”,
addres “地址”,
english “英语成绩”
from
student3
where
english is null; 如果要非空,则是is not full
5.模糊查询:关键字 like
select 指定字段列表 from 表名 where 字段名称 like ‘%字符%’
查询出所有姓马的同学
select
*
from
student3
where
name
like ‘%马%’; --%代表任意字符 __一个下划线代表一个任意字符串(包含关系)
6.聚合函数查询
coun(字段名称):查询当前表的记录数 字段名称一般是用非业务字段[如果有些字段中的值是null的话,是查不出来的,会使信息有误]
需求,使用英语字段来查询学生表中的总记录数
select
count(english) “总记录数” --如果此时,我们的english数据里,有null,则会少计算null的值,
count(ifnull(english,0)) “总数” --可以加ifnull来让他的期望值变为0
from
student3;
sum(字段名称):求和,针对某列字段值进行求和(int)
select
sum(math) “数学成绩总合”
sum(ifnull(english,0)) --如果里面有null的话,可以这样操作
from
student3;
avg(字段名称) 平均分
max和min max(字段名称),min(字段名称)最大值函数和最小值函数;
7.排序查询
键字 order by
select 字段列表 from 表名 order by 字段名称 排序顺序 [asc升序(默认为升) desc降序]
需求:学生的数学成绩升序排序,
select
*
from
student3
order by
math asc;
需求,查询数学成绩降序,英语成绩是升序的所有学生信息,如果数学成绩相同,则按照英语成绩排序规则进行操作
select
*
from
student3
order by math desc,english asc;
Homework
1.单表练习题
create table student(
id int, – id编号
name varchar(20), – 姓名
chinese int, – 语文
english int, – 英语
math int – 数学 );
insert into student(id,name,chinese,english,math) values(1,‘行哥’,89,78,90);
insert into student(id,name,chinese,english,math)
values(2,‘潘金莲’,67,53,95); insert into
student(id,name,chinese,english,math) values(3,‘凤姐’,87,78,77); insert
into student(id,name,chinese,english,math) values(4,‘旺财’,88,98,92);
insert into student(id,name,chinese,english,math)
values(5,‘白小黑’,82,84,67); insert into
student(id,name,chinese,english,math) values(6,‘白小黄’,55,85,45); insert
into student(id,name,chinese,english,math) values(7,‘范蹦蹦’,75,65,30);1.查询表中所有学生的信息。
2 查询表中所有学生的姓名和英语成绩。
SELECT * FROM student;
SELECT
NAME ‘名字’,
english ‘英语成绩’
FROM
stu
3 过滤表中重复数据。(去重的关键字 distinct)
SELECT DISTINCT
english
FROM
stu ;
4.统计每个学生的总分
SELECT
id’学号’,
NAME ‘姓名’,
(math+english+ chinese) ‘总分’
FROM
stu ;
5.在所有学生总分数上加10分特长分。
SELECT
id’学号’,
NAME ‘姓名’,
(math+english+ chinese+10) ‘总分’
FROM
stu;
6.使用别名表示学生分数。
7.查询姓名为行哥的学生成绩
SELECT *
FROM stu
WHERE NAME=‘行哥’;
8.查询英语成绩大于90分的同学
SELECT
id ‘学号’,
NAME ‘姓名’
FROM stu
WHERE english>90;
9.查询总分大于200分的所有同学
SELECT *
- FROM stu WHERE (chinese+english+math)>200;
10.查询英语分数在 80-90之间的同学。
SELECT *
FROM stu WHERE english>80 AND english<90;
11.查询数学分数为89,90,91的同学。
SELECT *
FROM stu
WHERE math IN(89,90,91);
12.查询所有姓白的学生英语成绩。
SELECT
id’学号’,
NAME ‘姓名’,
english
FROM stu
WHERE NAME LIKE ‘%白%’;
13.查询数学分>80并且语文分>80的同学
SELECT
id’学号’,
NAME ‘姓名’,
math ‘数学’,
chinese ‘语文’
FROM stu
WHERE math>80 AND chinese>80;
14.查询英语>80或者总分>200的同学
SELECT
id’学号’,
NAME ‘姓名’,
english ‘英语’,
(english+chinese+math)‘总分’
FROM stu
WHERE english>80 || (english+chinese+math)>80;
15.对数学成绩升序排序
SELECT *
FROM
stu
ORDER BY math ;
16.对总分降序排序,然后再按数学从高到低的顺序输出
SELECT *
FROM
stu
ORDER BY english+chinese+math DESC,math ;
17.对姓白的学生成绩排序输出(排序规则自己定义)
SELECT *
FROM
stu
WHERE NAME LIKE ‘%白__%’
ORDER BY english DESC,chinese,math DESC ;
18.查询数学成绩大于等于平均分的所有学生信息
SELECT *
FROM
stu
WHERE math >=(
SELECT
AVG(math)
FROM
stu
);
19.查询出英语成绩最高分的学生信息
SELECT
id’学号’,
NAME ‘姓名’,
english ‘英语’
FROM
stu
WHERE english=(
SELECT
MAX(english)
FROM
stu
);
20.模糊查询出学生姓名中第二个字是金的学生信息
SELECT *
FROM
stu
WHERE NAME LIKE ‘%_金%’ ;
21.查询出英语成绩平均分是多少
SELECT
AVG(english)‘英语平均分’
FROM
stu;
22.查询出数学总分是多少
SELECT
SUM(math) ‘数学总分’
FROM
stu ;
23.查询学生表中有多少条记录
SELECT
COUNT(id) ‘总记录数’
FROM
stu ;