MySQL practice example (including stored procedures, subqueries)

  This blog is mainly used to show an example of MySQL practice. By practicing this example, you can achieve the effect of getting started with MySQL.
1. Requirements:
Design database table storage: (user test information)
user information, test time, test subjects and test scores, and your grade!

  1. Test data:
    U001, Zhang San, 1985-09-09, Guangzhou Tianhe,
    java, 80, basic class, exam time is 2014-01-01
    jsp, 90, employment class, exam time is 2014-03-01
    mysql, 90 , Employment class, exam time is 2014-04-04
    U002, Li Si, 1995-09-09, Guangzhou Yuexiu,
    java,67, Basic class, exam time is 2014-01-01
    mysql,90, Employment class, exam time For 2014-04-04
    ………….(Enter other records)

    Hint: Four tables are best (use constraints)

  2. Query requirements:
     1. Query the results of students whose student number is U001 taking the 2014-01-01 “java” course exam, and request to output the student’s name and score
     2. Query the location of the students who passed the exam (higher than 60 points). Name, , the learning stage to which they belong, the name of the exam subject, and the student's grades.

 Use sub-query to filter students whose birth date is older than "Li Si"
 Query the list of students with a score of 60-80 in the "java" course exam
 Query the highest and lowest scores in the latest "mysql" exam
 Query
 Requirement (stored procedure)  Count and display the average score
of 2014-04-04 mysql exam Poor test scores"

The SQL statement of MySQL is as follows:

-- 创建数据库
CREATE DATABASE IF NOT EXISTS test_message CHARACTER SET utf8;
USE test_message;
DROP TABLE user_test;
-- 创建用户考试信息表
CREATE TABLE user_test(
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id VARCHAR(8),
    test_date DATE,
    course_id INT,                            -- 外键,考试科目的
    math FLOAT(5,2),                            -- 考试成绩
    grade_id INT
);
DROP TABLE IF EXISTS course ;
-- 考试科目表
CREATE TABLE course(
    id INT PRIMARY KEY,
    course_name VARCHAR(40)
);
DROP TABLE IF EXISTS grade;
-- 年级表
CREATE TABLE grade(
    id INT PRIMARY KEY,
    grade_name VARCHAR(5)
);
DROP TABLE IF EXISTS user_message;
-- 用户信息表
CREATE TABLE user_message(
    id VARCHAR(8) PRIMARY KEY,
    user_name VARCHAR(10),
    user_birthday DATE,
    zone VARCHAR(20)
);
-- 创建用户考试信息表和用户表的外键
ALTER TABLE user_test ADD CONSTRAINT user_test_user_message_fk FOREIGN KEY(user_id) REFERENCES user_message(id);
-- 创建用户考试信息表和年级的外键
ALTER TABLE user_test ADD CONSTRAINT user_test_grade_fk FOREIGN KEY(grade_id) REFERENCES grade(id);
-- 创建用户考试信息表和科目的外键
ALTER TABLE user_test ADD CONSTRAINT user_test_course_fk FOREIGN KEY(course_id) REFERENCES course(id);
-- 插入用户表的数据
INSERT INTO user_message
            (id,
             user_name,
             user_birthday,
             zone)
VALUES ('U001',
        '张三',
        '1985-09-09',
        '广州天河'),
       ('U002',
        '李四',
        '1995-09-09',
        '广州越秀'),
        ('U003',
        '王五',
        '1996-09-08',
        '广州番禺');
-- 插入年级的数据
INSERT INTO grade
            (id,
             grade_name)
VALUES (1,
        '基础班'),
       (2,
        '就业班'),
        (3,
        '进阶版');
-- 插入科目表的数据
INSERT INTO course(id,course_name) VALUES(1,'java'),(2,'jsp'),(3,'mysql'),(4,'ajax'),(5,'html');

-- 插入用户考试信息表的数据
INSERT INTO user_test(
    user_id,
    test_date,
    course_id,                            -- 外键,考试科目的
    math,                            -- 考试成绩
    grade_id
    ) VALUES(
    'U001',
    '2014-01-01',
    '1',
    '80.00',
    '1'),(
    'U001',
    '2014-03-01',
    '2',
    '90',
    '2'),(
    'U001',
    '2014-04-04',
    '3',
    '85',
    '2'),(
    'U002',
    '2014-01-01',
    '1',
    '67',
    '1'),(
    'U002',
    '2014-04-04',
    '3',
    '90',
    '2'),(
    'U002',
    '2014-05-04',
    '2',
    '80',
    '2'),(
    'U003',
    '2014-06-04',
    '1',
    '80',
    '1'),(
    'U001',
    '2014-01-01',
    '2',
    '90',
    2),(
    'U001',
    '2014-04-04',
    '3',
    '96',
    2);
-- 查询用户考试信息表
SELECT * FROM user_test;

DELETE FROM user_test;

-- 查询需求
-- 1. 查询学号是U001的学生参加2014-01-01 “java”课程考试的成绩,要求输出学生姓名和成绩
-- 方法一
SELECT user_name,math FROM user_test,user_message,course WHERE user_message.id=user_test.user_id
AND user_test.course_id=course.id
AND user_test.user_id='U001' 
AND user_test.test_date='2014-01-01' 
AND course.course_name='java';
-- 方法二
SELECT user_name,math FROM user_test INNER JOIN user_message INNER JOIN course ON user_test.user_id=user_message.id
AND user_test.course_id=course.id
AND user_test.user_id='U001' 
AND user_test.test_date='2014-01-01' 
AND course.course_name='java';

-- 查询出通过考试(高于80分)的学员所在的姓名、、所属学学习阶段、考试科目名称、学员的成绩。
-- 用别名
SELECT user_name,grade_name,course_name,math FROM user_test t,user_message m,course c,grade g
WHERE t.user_id=m.id
AND t.course_id=c.id
AND t.grade_id=g.id
AND t.math>80;


-- 3利用子查询语句,筛选出生日期比“李四”大的学生
SELECT user_name FROM user_message WHERE user_birthday>(SELECT user_birthday FROM user_message WHERE user_name='李四');
SELECT * FROM user_message;

-- 4查询“java”课程考试成绩为60-80分的学生名单
SELECT user_name FROM user_test t,user_message m,course c WHERE t.course_id=c.id 
AND t.user_id=m.id
AND c.course_name='java'
AND t.math>=60
AND t.math<80;

-- 5查询参加最近一次“mysql”考试成绩最高分和最低分
SELECT MAX(math),MIN(math) FROM user_test t INNER JOIN course c ON t.course_id=c.id 
AND c.course_name='mysql'
AND test_date=(SELECT MAX(test_date) FROM user_test t INNER JOIN course c ON t.course_id=c.id 
AND c.course_name='mysql') 
ORDER BY math DESC;

-- 6.查询出基础班考试的平均成绩;
SELECT AVG(math) FROM user_test t INNER JOIN grade g ON t.grade_id=g.id
AND g.grade_name='基础班';
-- 分组查询
SELECT grade_name,AVG(math) FROM user_test t,grade g  WHERE t.grade_id=g.id GROUP BY g.grade_name; 
-- 7需求(存储过程)
-- 7.1统计并显示2014-04-04的mysql考试平均分

-- 7.2如果平均分在70以上,显示“考试成绩优秀”

-- 7.3 如果在70以下,显示“考试成绩较差”

-- 删除存储过程
DROP PROCEDURE pro_test;
-- 创建存储过程
DELIMITER $
CREATE PROCEDURE pro_test(OUT avg_math DOUBLE,OUT str VARCHAR(6))
BEGIN
  SELECT AVG(math) INTO avg_math FROM user_test t,course c WHERE t.course_id=c.id 
  AND t.test_date='2014-04-04'
  AND c.course_name='mysql';

  IF avg_math>=70 THEN
     SET str='考试成绩优秀';
  ELSE
     SET str='考试成绩较差';
  END IF;
END $
-- 执行存储过程
CALL pro_test(@avg_math,@str);
SELECT @avg_math,@str;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325772487&siteId=291194637