SELECT`StudentNo`,`StudentResult`FROM result
-- 查询考试成绩在85~90之间的SELECT`StudentNo`,`StudentResult`FROM result
WHERE`StudentResult`>=85AND`StudentResult`<=90-- 模糊查询(区间)SELECT`StudentNo`,`StudentResult`FROM result
WHERE`StudentResult`BETWEEN80AND90-- 除了1001学生之外的学生成绩SELECT`StudentNo`,`StudentResult`FROM result
WHERE`StudentNo`!=1001SELECT`StudentNo`,`StudentResult`FROM result
WHERENOT`StudentNo`=1001
-- 联表查询-- 查询参加了考试得同学(学号,姓名,科目编号,分数)/*
1.分析需求,分析查询得字段来自哪些表,(连接查询)
2.确定使用哪种连接查询?7种
3.确定交叉点(这两个表种哪个字段是相同的)
判断条件:student表中的 StudentNo = result表中的 StudentNo
*/-- JOIN(连接的表) ON(判断的条件) 连接查询-- WHERE 等值查询SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student AS s
INNERJOIN result AS r
WHERE s.StudentNo = r.StudentNo
-- RIGHT JOINSELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student s
RIGHTJOIN result r
ON s.StudentNo = r.StudentNo
-- LEFT JOINSELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student s
LEFTJOIN result r
ON s.StudentNo = r.StudentNo
-- 查询缺考的同学SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student s
LEFTJOIN result r
ON s.StudentNo = r.StudentNo
WHERE StudentResult ISNULL-- 思考题(查询了参加考试的同学信息:学号,学生姓名,科目名称,分数)/*
1.分析需求,分析查询得字段来自哪些表,student,result,subject(连接查询)
2.确定使用哪种连接查询?7种
3.确定交叉点(这两个表种哪个字段是相同的)
*/SELECT s.StudentNo,StudentName,SubjectName,StudentResult
FROM student s
RIGHTJOIN result r
ON s.StudentNo = r.StudentNo
INNERJOIN`subject` sub
ON r.SubjectNo = sub.SubjectNo
练习
-- 查询学生所在的年级(学号,学生姓名,年级名称)SELECT`StudentNo`,`StudentName`,`GradeName`FROM`student` s
INNERJOIN`grade` g
ON s.GradeId = g.GradeId
-- 查询科目所属的年级(科目名称,年级名称)SELECT`SubjectName`,`GradeName`FROM`subject` s
INNERJOIN`grade` g
ON s.GradeID = g.GradeID
-- 查询参加了 高等数学-3 考试的同学信息:学号,学生姓名,科目名称,分数)SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`FROM`student` s
INNERJOIN`result` r
ON s.`StudentNo`= r.`StudentNo`RIGHTJOIN`subject` sub
ON r.`SubjectNo`= sub.`SubjectNo`WHERE`SubjectName`='高等数学-3'
4. 自连接
自连接:自己的表和自己的表连接,核心——一张表拆为两张一样的表即可
示例:
categoryid
pid
categoryName
2
1
信息技术
3
1
软件开发
4
3
数据库
5
1
美术设计
6
3
Web开发
7
5
PS技术
8
2
办公信息
拆分为两个表后如下:
categoryid
categoryName
2
信息技术
3
软件开发
5
美术设计
pid
categoryid
categoryName
3
4
数据库
3
6
Web开发
5
7
PS技术
2
8
办公信息
CREATETABLE`category`(`categoryid`INT(10)UNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'主题id',`pid`INT(10)NOTNULLCOMMENT'父id',`categoryName`VARCHAR(50)NOTNULLCOMMENT'主题名字',PRIMARYKEY(`categoryid`))ENGINE=INNODBAUTO_INCREMENT=9DEFAULTCHARSET=utf8
INSERTINTO`category`(`categoryid`,`pid`,`categoryName`)VALUE('2','1','信息技术'),('3','1','软件开发'),('4','3','数据库'),('5','1','美术设计'),('6','3','Web开发'),('7','5','PS技术'),('8','2','办公信息');-- 查询父子信息SELECT a.`categoryName`AS'父栏目',b.`categoryName`AS'子栏目'FROM`category`AS a,`category`AS b
WHERE a.`categoryid`= b.`categoryid`