select语句练习
1. 统计某个学生学了几门课
select count(course_no) from choose join student on choose.student_no = student.student_no where student_name = '张三';
2. 统计某个学生学了哪几门课
select course_name from course join choose on choose.course_no = course.course_no join student on choose.student_no = student.student_no where student_name = '张三';
3. 统计几个学生选了某门课
select count(student.student_no) from student join choose on choose.student_no = student.student_no join course on choose.course_no = course.course_no where course_name = 'java程序设计';
4. 统计哪个课程学生已经选满
select course_name, up_limit from choose join course on course.course_no = choose.course_no join teacher on teacher.teacher_no = course.teacher_no group by course.course_no having up_limit = count(*);
5. 统计选修人数少于30的所有课程信息
select course_no from course join choose on course.course_no = choose.course_no join student on choose.student_no = student.student_no group by course_no having count(*) < 30;
6. 统计没有任何学生选某门课的课程信息
select course.course_no from course join choose on choose.course_no = course.course_no where not exists (select course_no from choose join student on student.student_no = choose.student_no);
7. 统计一门课已有多少人选,还可以让多少人选
select count(student_no), up_limit-count(student_no) having_choose_num from choose join course on choose.course_no= course.course_no group by course_no;
使用正则表达式模糊查询
实现模式匹配功能,有点像like
语法:
字段名 [not] regexp [binary] '正则表达式';
. 匹配任意单个字符
^ 匹配字符串开始的部分
$ 匹配字符串结尾的部分
[字符集合或数字集合] 匹配方括号中的任意字符用‘-’表示范围,e.g.[abc]匹配a或b或c,[a-z]表示任意字母
[^字符集合或数字集合] 匹配字符串除了方括号内的任何字符
string1|string2 匹配字符串1或字符串2
* 匹配0个或多个*前面的字符,e.g.s*表示0个或多个s
+ 匹配1个或多个*前面的字符,e.g.s*表示1个或多个s
? 匹配0个或多个*前面的字符,e.g.s?表示0个或多个s
string{n} 表示n个string
string{m,n}表示最少m个string,最多n个string
e.g
检索含有java的course_name
select * from course where course_name regexp 'java';
等价于
select * from course where course_name like '%java%';
检索以程序设计结尾的course_name
select * from course where course_name regexp '程序设计$';
检索以j开头,以程序设计结尾的course_name
select * from course where course_name regexp '^j.程序设计$';
检索以5517或5516开头,后面4个数字的student_no
select * from student where student_no regexp '^551[78][0-9]{4}';