子查询:把内层的查询结果供外层使用,先执行内层,再执行外层,先做内层,再做外层
例:查询比Tom小的所有学生的信息
SELECT * FROM student WHERE birthday>
(
SELECT birthday FROM student WHERE name='Tom' 找出Tom的出生日期
);
存储过程:
CREATE PROCEDURE 存储过程名字(参数)
BEGIN BEGIN...END就类似于java方法的{}
SQL语句
END
调用存储过程:CALL 存储过程名;
删除存储过程:DROP PROCEDURE 存储过程名;
例:
CREATE PROCEDURE usp_maxMysqlScore()
BEGIN
SELECT subname,MAX(socre) FROM score INNER JOIN `subject`
ON score.subid=`subject`.subid
WHERE subname='MySQL';
END
CALL use_maxMysqlScore();
例如:查询某科考试没有及格的学生姓名,并获得参加考试的人数和未及格的人数。
-- 输入参数:科目名;IN输入参数
-- 输出参数:参加考试人数 未及格人数OUT输出参数:把执行结果返回给调用者
CREATE PROCEDURE usp_getCount(IN suname VARCHAR(20),OUT testCount INT,OUT notestCount INT)
BEGIN
-- 查询某科考试没有及格的学生姓名
SELECT name,socre FROM student INNER JOIN score ON student.stuid=score.stuid INNER JOIN `subject` ON score.subid=`subject`.subid WHERE subname=suname AND socre<60;
-- 参加考试的人数
SELECT COUNT(*) FROM `subject` INNER JOIN score ON `subject`.subid=score.su