zoukankan      html  css  js  c++  java
  • SQL 练习题

    -- 创建student表 和 score表

    CREATE TABLE Student (
    	Id INT ( 10 ) NOT NULL PRIMARY KEY UNIQUE auto_increment COMMENT '主键, 长度为10 , 不为空, 自增, 唯一 ',
    	studentName VARCHAR ( 20 ) NOT NULL COMMENT '姓名',
    	studentSex VARCHAR ( 4 ) COMMENT '性别',
    	studentBirth YEAR COMMENT '出生年月日',
    	department VARCHAR ( 20 ) NOT NULL COMMENT '院系名称',
    	studentAddress VARCHAR ( 50 ) COMMENT '家庭住址' 
    );
    CREATE TABLE Score (
    	Id INT ( 10 ) PRIMARY KEY NOT NULL UNIQUE auto_increment COMMENT '主键 自增 唯一 不为空 ',
    	studentId INT ( 10 ) NOT NULL COMMENT '学生Id',
    	courseName VARCHAR ( 20 ) COMMENT '课程名',
    	grade INT ( 10 ) COMMENT '分数' 
    );
    ALTER TABLE score ADD FOREIGN KEY ( studentId ) REFERENCES student ( Id );
    
    -- 向student表插入记录.
    INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
    INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
    INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
    INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
    INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
    INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
    -- 向score表插入记录.
    INSERT INTO score VALUES(NULL,901, '计算机',98);
    INSERT INTO score VALUES(NULL,901, '英语', 80);
    INSERT INTO score VALUES(NULL,902, '计算机',65);
    INSERT INTO score VALUES(NULL,902, '中文',88);
    INSERT INTO score VALUES(NULL,903, '中文',95);
    INSERT INTO score VALUES(NULL,904, '计算机',70);
    INSERT INTO score VALUES(NULL,904, '英语',92);
    INSERT INTO score VALUES(NULL,905, '英语',94);
    INSERT INTO score VALUES(NULL,906, '计算机',90);
    INSERT INTO score VALUES(NULL,906, '英语',85);
    
    -- 查询student表的所有记录.
    SELECT * FROM student;
    
    -- 查询student表的第二条到第四条记录.
    -- LIMIT M OFFSET N; M表示 一页返回多少数据 , N 表示从第几条开始返回.
    SELECT * FROM student LIMIT 3 OFFSET 1;
    
    -- 从student表查询所有学生的学号(Id),姓名(name)和院系(department)的信息.
    -- 注意 MySQL6 之前需要注意 ,  FROM之后  只能用字段别名, 但是6.0后 都可以用, 中文别名不能 当做变量使用.
    SELECT a.Id AS '学号',a.studentName AS '姓名',a.department AS '院系' FROM student as a WHERE a.department='中文系';
    
    -- 从student表中查询计算机系和英语系学生的信息.
    SELECT * FROM student AS a WHERE a.department='计算机系' OR a.department='英语系';
    SELECT * FROM student AS a WHERE a.department IN ('计算机系','英语系');
    
    -- 从student表中查询年龄在18~22岁学生的信息.
    -- 当前时间格式化. DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s');    %Y 2019 --- %y 19 --- %M July --- %W Monday 
    SELECT * FROM student WHERE YEAR(NOW())-student.studentBirth BETWEEN 28 AND 30;
    
    -- 从student表中查询 每个院系都有多少人.
    SELECT student.department '院系',COUNT(*) '总人数' FROM student GROUP BY student.department;
    
    -- 从score表中查询每个科目的最高分.
    SELECT score.courseName '科目', MAX(score.grade) '最高分' FROM score GROUP BY score.courseName;
    
    -- 查询李四的考试科目和成绩.  (注意 删改 需要临时表, 不然会报错)
    SELECT score.courseName '科目',score.grade '成绩' FROM score WHERE score.studentId=(SELECT student.Id FROM student WHERE student.studentName='李四');
    
    -- 用链接的方式查询所有学生的信息和考试信息.
    SELECT stu.Id '学号',stu.studentName '姓名',stu.studentSex '性别',DATE_FORMAT(NOW(),'%Y')-stu.studentBirth '年龄',stu.studentAddress '家庭住址',stu.department '所属学院', score.courseName '科目',score.grade '成绩' FROM student as stu INNER JOIN score ON stu.Id=score.studentId;
    
    -- 计算每个学生的总成绩
    SELECT stu.studentName '姓名',SUM(score.grade) '总成绩' FROM student as stu INNER JOIN score ON stu.Id=score.studentId GROUP BY stu.studentName;
    
    -- 每个科目的平均成绩
    SELECT score.courseName '科目',ROUND(AVG(score.grade),2) '平均成绩' FROM score GROUP BY score.courseName;
    
    -- 查询计算机低于95的学生的信息 (注意: 删改  需要创建临时表)
    SELECT * FROM student WHERE student.Id IN (SELECT score.studentId FROM score WHERE score.grade<=95 AND score.courseName='计算机');
    
    -- 查询同时参加计算机和英语考试学生的信息.   总计无敌宇宙大笨逼 写法.
    SELECT c.Id,c.department,c.studentAddress,c.studentName,c.studentSex,a.grade,a.courseName,c.studentBirth FROM score AS a INNER JOIN score AS b ON a.studentId=b.studentId INNER JOIN student AS c ON c.id=a.studentId WHERE a.courseName="计算机" AND b.courseName="英语";
    
    -- 将计算机成绩从高到低拍一拍.
    SELECT * FROM student INNER JOIN score ON student.Id=score.studentId WHERE score.courseName="计算机" ORDER BY grade DESC;
    
    -- 查询姓张或姓王同学的姓名,院系,考试科目和成绩.
    SELECT student.studentName '姓名',student.department '院系',score.courseName '考试科目',score.grade '成绩' FROM student INNER JOIN score ON student.Id=score.studentId WHERE student.studentName LIKE '张%' OR student.studentName LIKE '王%';
    
    -- 查询都是湖南的学生的姓名,年龄,院系和考试科目以及成绩.
    SELECT student.studentName '姓名',DATE_FORMAT(NOW(),'%Y')-student.studentBirth '年龄',student.department '院系',score.courseName '考试科目',score.grade '成绩' FROM student INNER JOIN score ON student.Id=score.studentId WHERE student.studentAddress LIKE '%湖南%';
    
  • 相关阅读:
    vmware fusion和mac共享目录
    安卓linker源码阅读01
    sublime text 快捷键
    eclipse使用经验汇总
    递归池:
    ubuntu下adb红米
    蛋疼问题汇总you must restart adb and eclipse
    JNI
    ARM寻址
    了解装饰器
  • 原文地址:https://www.cnblogs.com/A-FM/p/11153997.html
Copyright © 2011-2022 走看看