
以下Sql语句所用到的表:

1. 视图
(1)定义
视图可被看成是虚拟表或存储查询。表中存放的是实际数据,视图中存放的是sql查询语句,使用视图时,会运行视图里的sql查询语句,创建出一张临时表。
(2)语法
create view 视图名称(<视图列名1>,<视图列名2>,…)
as
<select 查询语句>;(3)例子
①创建视图
create view 按性别汇总(性别,人数)
as
select 性别,count(*)
from student
group by 性别;②使用视图【在from子句中,使用视图名称代替表名称】
select 性别,人数
from 按性别汇总;(4)作用
- 数据庞大时,使用视图帮助我们提高效率。
- 视图中的数据随着原表的变化自动更新,保证数据的最新状态。
- 视图不需要保存数据,可以节省存放数据设备的空间。
(5)注意事项
- 避免在视图的基础上再去创建视图,多重视图会降低sql的性能和效率。
- 不能往视图里插入数据,不然会报错。
2. 子查询
(1)标量(单行)子查询
通过比较运算符、between连接起来的嵌套查询,子查询的结果只能返回单个值。
①查找大于平均成绩学生的学号和成绩
select 学号,成绩
from score
where 成绩>(select avg(成绩)
from score);②查找处于差生(成绩<=60)和优等生(成绩>=80)之间成绩学生的学号和成绩
select 学号,成绩
from score
where 成绩 between (select avg(成绩)
from score
where 成绩<=60) and(select avg(成绩)
from score
where 成绩>=80);③查找学生的学号、成绩和平均成绩
select 学号,成绩,(select avg(成绩)
from score) as 平均成绩
from score;(2)多行子查询
通过in、any、all连接起来的嵌套查询,子查询的结果返回多行。
①哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
select 学号,成绩
from score
where 成绩>any(select 成绩
from score
where 课程号='0002');②查询选了2门以上课程的学生的学号、姓名和性别
select 学号,姓名,性别
from student
where 学号 in (select 学号
from score
group by 学号
having count(*)>2);③查询学生表中年龄最大的学生信息
方法1:
select *
from student
where 出生日期<=all(select 出生日期
from student);
方法2:
select *
from student
where 出生日期<=(select min(出生日期)
from student);(3)关联子查询
在每个组里进行比较时,需要用到关联子查询。
例子:查找出每个课程中,大于对应课程平均成绩的学生
select *
from score as a
where 成绩>(select avg(成绩)
from score as b
where b.课程号 = a.课程号);(4)总结

3. SQL运行顺序

4. 如何用SQL解决业务问题
(1)步骤
- 第1步:翻译成大白话;
- 第2步:写出分析思路;
- 第3步:写出对应的sql语句。
(2)例子
哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
1)第1步:翻译成大白话
- ①课程0002的全部成绩;
- ②条件:某个学生的成绩大于任意一个①里的成绩。
2)第2步:写出分析思路


3)第3步:写出对应的sql语句

5. 函数查询
(1)汇总函数

(2)算数函数

(3)字符串函数

(4)日期函数

25万+




被折叠的 条评论
为什么被折叠?



