1.查询学生的学号,姓名,性别,电话,年纪名称
首先学生表中没有年纪名称,只有年纪编号,这里我们采用学生表和年纪表链接查询
使用 inner join 链接查询年纪表,使用on 指定链接查询的条件。
这里的含义是:当学神表的年纪编号等于年纪表的编号,返回 年纪表中对应的年纪名称;
SELECT studentno,studentName,sex,phone ,GradeName FROM student
INNER JOIN grade ON student.`gradeId`=grade.`GradeId`;
2.查询课程编号,课程名称。课时。年纪名称
SELECT SubjectId, ClassHour, GradeName FROM `subject` INNER JOIN grade ON subject.`GradeId`=grade.`GradeId`;
3.查询 考试编号 学生姓名,课程名称,考试成绩,考试时间
SELECT ResultId ,studentName,SubjectName,StudentResult,ExamDate FROM result
INNER JOIN student ON result.`StudentNo`=student.`studentno`
INNER JOIN `subject` ON result.`SubjectId`=subject.`SubjectId`;
4.查询 考试编号 学生姓名,学生所属年纪名称,课程名称,考试成绩,考试时间
SELECT ResultId ,studentName,SubjectName,Gradename,StudentResult,ExamDate FROM result
INNER JOIN student ON student.`studentno`= result.`StudentNo`
INNER JOIN `subject` ON result.`SubjectId`=subject.`SubjectId`
INNER JOIN grade ON student.`gradeId`=grade.`GradeId`;
5.查询考试编号,学生姓名,课程名称,课程所属年纪名称,考试成绩,考试时间
SELECT ResultId,studentName,Gradename,StudentResult,ExamDate FROM result
INNER JOIN student ON student.`studentno`= result.`StudentNo`
INNER JOIN `subject` ON result.`SubjectId`=subject.`SubjectId`
INNER JOIN grade ON subject.`gradeId`=grade.`GradeId`;
6.查询‘使用c#语言开发数据库应用系统“课程前三名的考试成绩,查询对应的学生姓名,考试成绩,考试时间”
SELECT studentName,StudentResult,ExamDate FROM result
INNER JOIN student ON result.`StudentNo`=student.`studentno`
INNER JOIN SUBJECT ON result.`SubjectId`=subject.`SubjectId`
WHERE subject.`SubjectId` ='1'
ORDER BY StudentResult DESC LIMIT 3;
7.查询学号,姓名,性别,电话,年纪编号,年纪名称,
#注意在表名称查询中,列如果唯一属于某个表,在查询时可以省略表明,列名
#如果某个列在两张表中都存在,就必须明确查询的该列属于那张表
SELECT studentno,studentName,sex,phone ,student.`gradeId`,GradeName FROM student
INNER JOIN grade ON student.`gradeId`=grade.`GradeId`;
SELECT studentno,studentName,sex,phone ,student.`gradeId`,GradeName FROM student
INNER JOIN grade ON student.`gradeId`=grade.`GradeId`;
1.查询参加过考试的学生姓名和电话
内连接查询时查询两张表中关联的数据
SELECT DISTINCT studentName,phone FROM student
INNER JOIN result ON student.`studentno`=result.`StudentNo`
2.查询没有参加过考试的学生姓名和电话
外连接查询,不仅返回两张表关联的数据,也返回不关联的数据
外连接查询,又分:左外链接和右外链接
RIGHT JOIN 右链接,右表所有的数据都返回
LEFT JOIN 左连接,左表所有的数据都返回
SELECT studentName,phone,StudentResult
FROM student LEFT JOIN result ON student.`studentno`=result.`StudentNo`;
1.查询 深入.NET平台和C#编程 考试前5名学生信息
SELECT * FROM student WHERE StudentNo IN(
SELECT StudentNo FROM result WHERE StudentResult IN(
SELECT StudentResult FROM result WHERE SubjectId IN(
SELECT SubjectId FROM SUBJECT WHERE SubjectName='深入.NET平台和C#编程'
)ORDER BY StudentResult DESC
)
)LIMIT 5 ;
1.字符串函数
CONCAT()字符串连接
SELECT CONCAT ('王','杰','杰');
SELECT * FROM student WHERE address LIKE CONCAT ('%','北京','%');
INSERT()字符串替换
从指定位置 开始删除指定长度的字符串
SELECT INSERT ('abcdefg',3,3,'');
删除的内容,可以公共函数的第四个参数指定替换的内容 3指的第三个开始,数后面4个,最后修改
SELECT INSERT ('abcdefg',3,4,'哈哈哈哈');
SELECT INSERT ('13770689489',3,5,'*****');
在查询语句中如何使用函数
SELECT studentName AS 姓名, INSERT (phone,4,5,'*****')AS 电话 FROM student;
LOWER()将字符串转为小写
SELECT LOWER ('aBcdefg');
UPPER()将字符串转为大写
SELECT UPPER ('aBcdefg');
SUBSTRING()字符串截取
重点(注意 这里3是位置,4是截取的长度)
SELECT SUBSTRING('abcdefg',3,4 );
如果只传位置,表示从当前位置从后面全部截取
SELECT SUBSTRING('abcdefg',3);
查询学生的性和名
SELECT SUBSTRING(studentName,1,1)as姓 ,SUBSTRING(studentName,2)AS 名 FROM student;
2.日期函数
CURDATE()获取当前日期
SELECT CURDATE();
CURTIME()获取当前时间
SELECT CURTIME();
NOW()获取当前日期和时间
SELECT NOW();
YEAR()获取年
SELECT YEAR(NOW());
MONTH()获取月
SELECT MONTH(NOW());
DAY()获取日
SELECT DAY(NOW());
HOUR()获取小时
SELECT HOUR(NOW());
MINUTE()获取分钟
SELECT MINUTE(NOW());
SECOND()获取秒
SELECT SECOND(NOW());
WEEK()获取周
SELECT WEEK(NOW());
DATEDIFF()获取两个日期间隔天数
SELECT DATEDIFF (NOW(),'2000-8-30');
#ADDDATE()指定的日期上增加天数
SELECT ADDDATE(NOW(),10);
3.数学函数
CEIL()向上取整
SELECT CEIL(55.1);
FLOOR()向下取整
SELECT FLOOR(55.9);
RAND()随机数
SELECT RAND()*10;
查询学生的姓名,年龄
SELECT studentName AS 姓名 ,CEIL (DATEDIFF(NOW(),bornDate)/365) AS 年龄 FROM student;
1.查询 s1年纪有多少学生
SELECT COUNT(*) FROM student WHERE GradeId=(
SELECT GradeId FROM grade WHERE GradeName='S1'
);
SELECT COUNT(*) AS 学生数量 FROM student
WHERE email IS NULL;
下面写法用于统计不为null的行数数量
SELECT COUNT(email)AS 学生数量 FROM student;
sum :用于求和
SELECT SUM( StudentResult)AS 总分 FROM result;
2. 查询白燕的sum总分,avg 平均分,max最大分,min最小分
SELECT SUM( StudentResult)AS 总分,FLOOR(AVG(StudentResult))AS 平均分
,MAX(StudentResult)AS 最大值,MIN(StudentResult)AS 最小值 FROM result WHERE StudentNo IN(
SELECT StudentNo FROM student WHERE studentName='白燕'
);