学生数据库
姓刘:like '刘%' 包含刘 '%刘%' --------like后面的匹配串不含通配符才可以用=取代
降序:desc
一、单表查询
--. 列出同时选修“1”号课程和“2”号课程的所有学生的学号(自身连接);
select x.sno
from sc x,sc y
where x.sno=y.sno and x.cno='1'and y.cno='2'
--修改信息. 按照“性别、学号、姓名、年龄、院系”的顺序列出学生信息,其中性别按以下规定显示:性别为男显示为男 生,性别为女显示为女 生,其他显示为“条件不明”;(下面还可以补充条件where)
select 性别=case ssex
when '男' then '男 生'
when '女' then '女 生'
else '条件不明'
end,学号=sno,姓名=sname,年龄=sage,院系=sdept
from student
--、显示所有院系(要求不能重复,不包括空值),并在结果集中增加一列字段“院系规模”,
--其中若该院系人数>=5则该字段值为“规模很大”,若该院系人数大于等于4小于5则该字段值为“规模一般”, 若该院系人数大于等于2小于4则该字段值为“规模稍小”,否则显示“规模很小”
SELECT Sdept 学院,COUNT(*) 总人数,
规模=CASE
WHEN COUNT(*) >= 5 THEN '规模很大'
WHEN COUNT(*) >= 4 AND COUNT(*) <5 THEN '规模一般'
WHEN COUNT(*) >= 2 AND COUNT(*) < 4 THEN '规模稍小'
ELSE '规模很小'
END
FROM Student
WHERE Sdept is not null
GROUP BY Sdept
--(非49而4 9). 显示学号第八位或者第九位是1、2、3、4或者9的学生的学号、姓名、性别、年龄及院系;
关于like:若果like后面的匹配穿串不含通配符则等同于=
select *
from student
where sno like '_______[1-49]_' or sno like '________[1-49]'
--学生的解答1
select sno,sname,ssex,sage,sdept
from student
where sno like '_______[1,2,3,4,9]%' or sno like '________[1,2,3,4,9]%'
--(多解题). 列出同时选修“1”号课程和“2”号课程的所有学生的学号;
--解答1
SELECT sno
FROM sc
WHERE cno ='1' and sno in ( SELECT sno
FROM sc
WHERE cno = '2')
--解答2
select x.sno
from sc x,sc y
where x.sno=y.sno and x.cno='1'and y.cno='2'
--解答3
select distinct sno
from sc
where cno in('1','2')
group by sno having count(sno)>=2
关于group by
where中不可有聚集函数,select、having中还可有聚集函数,注意,在group by中select中要么是分组列要么是聚集函数
--、 列出有二门以上课程(含两门)不及格的学生的学号及不及格门数
SELECT Sno 学号, COUNT(*) 不及格门数
FROM SC
WHERE Grade < 60
GROUP BY Sno
HAVING COUNT(*) >= 2
图书销售数据库
--关于cube和rollup(类似分类)
cube强调性别在平均薪水
/*5、统计各部门不同性别,或各部门或不同性别或所有员工的平均薪水*/
SELECT dept 部门 ,sex 性别,AVG(salary) 平均薪水
FROM employee
GROUP BY dept,sex WITH CUBE
rollup强调部门后平均薪水
/*6、统计各部门不同性别或各部门或所有员工的平均薪水*/
SELECT dept 部门 ,sex 性别,AVG(salary) 平均薪水
FROM employee
GROUP BY dept,sex WITH ROLLUP