1.视图:
create view view_name(<视图列表1>,<视图列表2>)
as
<select 查询语句>;
create
2.子查询:
all、any的使用
如果频繁使用某段SQL语句,可以使用视图;
如果使用不频繁,可以使用子查询。
使用子查询的注意事项:
1)all得到的是一个集合,要写第二种模式
a > 3*all(b) ×
a/3 > all(b) √
2)避免使用多层子查询,不易读懂
3)select 。。。 from 。。。子查询 as 子查询名称
注意as可以省略
3.关联子查询:
查找出每个课程中大于对应课程平均成绩的学生:
select 学号,课程号,成绩
from score as s1
where 成绩 > (
select avg(成绩) from score as s2 where s1.课程号 = s2.课程号 group by 课程号
);
请注意表别名的使用和有效范围。比如:s2这个表别名仅仅在这个子查询里面有效。
我们应该在什么情况下,使用关联子查询呢?
在每个组里进行比较的时候。
4.如何使用SQL解决业务问题:
--第一步:翻译成大白话
--第二步:写出分析思路
--第三步:写出对应的SQL子句
示例:哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
第一步:课程0002的全部成绩,比如是(10,30)
select 成绩 from score where 课程号 = '0002';
第二步:某个学生的成绩大于任意一个第一步里的成绩,就符合条件
select * from score where 成绩 > any(select 成绩 from score where 课程号 = '0002');
5.各种函数:
汇总函数:
count
算术函数:
round(数值,保留小数的位数):对数据进行四舍五入
abs(数值):绝对值
mod(被除数,除数)求余数
但是要注意不同数据库管理软件可能会略有不同。
字符串函数:
length():字符串长度
lower():大写转换成小写
upper():小写转换成大写
concat():字符串拼接
replace():字符串替换
substring():字符串截取
日期函数:
current_date:当前日期
current_time:当前时间
current_timestamp:当前日期和时间
year:日期的年份
month:日期的月份
day:日期的天
dayname:日期对应的星期几