MySQL数据库——基础语句练习(一)

三道SQL基础练习题

一、设有成绩表如下所示

1.查询两门及两门以上不及格的学生姓名
2.查询学生平均分
3.查询姓名是张三的学生 成绩和
4.将学生信息按照 分数倒序
5.获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
6.查询两门及两门以上不及格同学的平均分。
编号  姓名  科目  分数
1    张三  数学  90
2    张三  语文  50
3    张三  地理  40
4    李四  语文  55
5    李四  政治  45
6    王五  政治  30
7    李四  数学  80
8    王五  语文  70

答:

#创建数据库
    CREATE DATABASE homework;
    USE homework;
#建表
    CREATE TABLE student(
    stuno INT NOT NULL,
    sname VARCHAR(20),
    ssubject VARCHAR(40),
    sgrade INT
    );
    SELECT * FROM student;
#添加数据
    INSERT INTO student VALUE 
    (1,'张三','数学',90),
    (2,'张三','语文',50),
    (3,'张三','地理',40),
    (4,'李四','语文',55),
    (5,'李四','政治',45),
    (6,'王五','政治',30),
    (7,'李四','数学',80),
    (8,'王五','语文',70);
    SELECT * FROM student;
-- 1.查询两门及两门以上不及格的学生姓名
    SELECT sname
    FROM student
    WHERE sgrade<60
    GROUP BY sname
    HAVING COUNT(*) >= 2 ;
-- 2.查询学生平均分
    SELECT sname,AVG(sgrade) 
    FROM student
    GROUP BY sname;
-- 3.查询姓名是张三的学生 成绩和
    SELECT sname,SUM(sgrade)
    FROM student 
    WHERE sname='张三';
-- 4.将学生信息按照 分数倒序
    SELECT * 
    FROM student
    ORDER BY sgrade DESC;
-- 5.获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
    SELECT sname
    FROM student
    WHERE sgrade IN (
        (SELECT MAX(sgrade)
        FROM student) ,
        (SELECT MIN(sgrade)
        FROM student)
    );

-- 6.查询两门及两门以上不及格同学的平均分。
    SELECT AVG(sgrade)
    FROM student
    WHERE sname IN (
        SELECT sname
        FROM student 
        WHERE sgrade<60
        GROUP BY sname
        HAVING COUNT(*)>=2 )
    GROUP BY sname ;

二、写出 SQL语句的格式 : 插入 ,更新 ,删除

  表名 user
  name  tel content date
  张三    13333663366  大专毕业   2006-10-11 
  张三    13612312331  本科毕业   2006-10-15 
  张四    021-55665566 中专毕业   2006-10-15
  (a).有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
  (b).请用sql语句把张三的时间更新成为当前系统时间 
  (c).请写出删除名为张四的全部记录

答:

#建表
    CREATE TABLE IF NOT EXISTS `user`(
        `name` VARCHAR(20),
        `tel` VARCHAR(20),
        `content` VARCHAR(30),
        `date` DATE
    ); 
    SELECT * FROM USER;
#添加数据
    INSERT INTO USER VALUES
    ('张三','13333663366','大专毕业','2006-10-11'),
    ('张三','13612312331','本科毕业','2006-10-15'),
    ('张四','021-55665566','中专毕业','2006-10-15')
    SELECT * FROM USER;
#有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
    INSERT INTO USER VALUES('小王','13254748547','高中毕业','2007-05-06');
    SELECT * FROM USER;
#请用sql语句把张三的时间更新成为当前系统时间 
    UPDATE `user` SET `date`=NOW() WHERE `name`='张三' ;
    SELECT * FROM USER;
#请写出删除名为张四的全部记录
    DELETE FROM `user` WHERE `name`='张四';
    SELECT * FROM USER;

三、写出 SQL语句的格式 :对emp表进行查询操作

  1.找出奖金高于工资的雇员 
  2.找出奖金高于工资60%的雇员
  3.找出部门10中所有经理和部门20中所有店员的信息
  4.薪资大于或等于2000的所有员工的信息。
  5.查询没有奖金或者奖金低于100的员工信息
  6.查询姓名不带”R”的员工姓名
  7.显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
  8.显示所有员工的姓名、工作和工资,按照工作的降序排序,若工作相同则按工资升序排序。

答:

USE emp;
-- 找出奖金高于工资的雇员 
SELECT * 
FROM emp
WHERE sal0) ;
-- 找出奖金高于工资60%的雇员
SELECT * 
FROM emp
WHERE sal*0.60) ;
-- 找出部门10中所有经理和部门20中所有店员的信息
SELECT * 
FROM emp
WHERE (job='clerk' AND deptno=20) OR (job='manager' AND deptno=10);
-- 薪资大于或等于2000的所有员工的信息。
SELECT * 
FROM emp
WHERE sal >= 2000;
-- 查询没有奖金或者奖金低于100的员工信息
SELECT * 
FROM emp
WHERE IFNULL(comm,0)<100 ;
-- 查询姓名不带”R”的员工姓名
SELECT * FROM emp 
WHERE ename NOT LIKE '%r%' ;
-- 显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
SELECT ename,hiredate
FROM emp
ORDER BY hiredate ;
-- 显示所有员工的姓名、工作和工资,按照工作的降序排序,若工作相同则按工资升序排序。
SELECT ename,job,sal
FROM emp
ORDER BY job DESC,sal ASC ;

你可能感兴趣的:(数据库)