一、设有成绩表如下所示
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 ;