mysql学习第二天(DML语句的使用)

知识归纳:

1.分组

分组就是结合聚合函数来对数据进行分组统计. 关键字:group by

根据分组的列把数据进行分组,然后再分别进行统计。

/*统计男女学员各有多少*/

selectsex,count(*)  from student group by sex

/*统计每个年级各有多少学员*/

SELECTgid,count(*) from student group by gid;

/*统计每门科目的考试平均分*/

selectsubjectno,avg(studentresult) from result group by subjectno;

 

Having:在分组之后的结果中再一次进行数据的筛选。此关键字必须要结合分组来使用。

/*查询哪些学员在科目一参加了补考*/

selectstudentno, count(*) from result where subjectno = 1

group bystudentno having count(*)>1


2.模糊查询:

模糊查询就是指查询条件不确定的情况。

/*模糊查询

 %: 0-N任意字符

 _: 一个任意字符

 []:区间指定内的一个字符

*/

/*查询姓张的学员  like */

select * from student where name like '张_'

 

/*查询考试成绩在 70 - 90 之间的数据  between */

select * from result where studentResult>=70 andstudentResult<=90;

select * from result where studentResult between 70 and 90;

/*查询没有邮箱的学员信息 isnull 查询列值为 null 的数据*/

select * from student where email is null;

 

/*查询广州和深圳的学员信息  in */

select* from student where address in ('广州','深圳')


3.连接查询

连接查询:内连接,外连接(左连接,右连接),交叉连接

/*两种方式都是内连接:特点,两个表的前后顺序调换结果没有影响

建议用inner join ... on ...方式,性能好一些

外连接:左外连接

左外连接:左边的表是主表,右边的表是子表,主表的数据全部显示,子表的数据来填充,如果子表中没有相关的数据填充,则显示NULL


4.子查询

注意:表连接能实现的功能,子查询都能实现,但子查询实现的功能,表连接不一定能实现。

当查询结果只是作为查询条件时,选择用子查询,

当查询结果数据来自于多张表,选择用表连接。

子查询使用=>=< <= != 要保证子查询的返回结果只有一个值,

如果有多个值返回,则用只能用 in



5字符串函数





6.日期函数




练习:

/*1.查询20岁以下的学员信息*/

select *from student where year<20;

/*2.查询Java课程的考试成绩*/

select *from exam where SubjectName='Java';

/*3.查询女学员信息,包括(学号、姓名、年龄、性别)*/

select StudentNO,name,year,sex from studentwhere sex='女';

/*4.查询课时超过60的科目信息*/

select*from subject where ClassHour>60;

/*5.查询班级中姓张的单名的学员信息*/

select* from student where name like'张_';

/*6.查询考试成绩在70-80之间的数据*/

select*from exam where StudentResultBETWEEN 70 and 80;

/*7.查询广州、北京的学员信息*/

select*from student where address in('广州','北京');

/*8.查询没有邮箱地址的学员信息*/

select*from student where email is null;

/*9.查询Java考试后前3名的考试成绩*/

select subjectno ,StudentResult from exam

where subjectno='java' order byStudentResult desc limit 0,3 ;

/*10.         分页查询第3页的 学员信息 每页3条*/

select*from student limit 6,3;

/*11.查询本月生日的学员信息*/

select *from student where month(birthday)=month(now());

 

/*12.查询本周的开卡信息*/

select *from card where date between

date_add(curdate(),interval-(dayofweek(now())-1) day)

and date_add(curdate(),interval (7-dayofweek(now())) day)

order by date;

 

/*13.统计班级学员的平均年龄*/

select avg(year)'平均年龄'fromstudent;

/*14.统计所有科目的总课时数*/

select sum(ClassHour)'总课时' fromsubject;


你可能感兴趣的:(数据库)