一、视图
含义:虚拟表,和普通表一样使用,通过表动态生成的数据。
创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
---|---|---|---|
视图 | CREATE VIEW | 没有(只保存了SQL逻辑) | 增删改查,一般不能增删改 |
表 | CREATE TABLE | 占用(保存了数据) | 增删改查 |
1.创建视图
CREATE VIEW 视图名
AS
查询语句;
2.视图的修改
方式一:
CREATE OR REPLACE VIEW 视图名
AS
查询语句;
方式二:
ALTER VIEW 视图名
AS
查询语句;
3.删除视图
DROP VIEW 视图名,视图名,......;
二、子查询
含义:出现在其他语句中的 SELECT语句,称为子查询或内查询。外部的查询语句,称为主查询或外查询。
按子查询出现的位置:
SELECT后面:仅支持标量子查询
FROM后面: 支持表子查询
★ WHERE或 HAVING后面: 标量子查询(单行) ★ 列子查询(多行) ★ 行子查询(用的较少)
EXISTS后面(相关子查询):表子查询 表子查询
按结果集的行列数不同:
- 标量子查询(结果集只有一行一列)
- 列子查询(结果集只有一列多行)
- 行子查询(结果集有一行多列)
- 表子查询(结果集一般为多行多列)
1.WHERE 或 HAVING后面:
- 标量子查询(单行子查询)
- 列子查询(多行子查询)
- 行子查询(多列多行)
特点:
①子查询放在小括号内
②子查询一般放在条件右侧
③标量子查询,一般搭配着单行操作符使用:> < >= <= = <>
列子查询,一般搭配着多行操作符使用:in、any/some、all
④子查询优先执行与主查询执行,主查询的条件用到了子查询的结果
2.SELECT后面:
仅仅支持标量子查询
3.FROM后面:
将子查询结果充当一张表,要求必须起别名
三、常见函数
1.字符函数:
LENGTH(): 获取参数值的字节个数
CONCAT(): 拼接字符串
UPPER() 大写, LOWER() 小写
SUBSTR() :截取字符
INSTR(): 返回子串第一次出现的索引,如果找不到返回0
TRIME() :去前后字符,默认去左右空格
LPAD(): 用指定的字符实现左填充指定长度
RPAD() :用指定的字符实现右填充指定长度
REPLACE() :替换
2.数学函数:
ROUND(): 四舍五入
CEIL() :向上取整,返回>=该参数的最小整数
FLOOR(): 向下取整,返回<=该参数的最大整数
TRUNCATE(): 截断
MOD() :取余
3.日期函数:
NOW() :返回当前系统日期+时间
CURDATE() :返回当前日期,不含时间
CURTIME(): 返回当前时间,不含日期
STR_TO_DATE(): 将日期格式的字符转换成指定格式的日期
DATE_FORMAT() :将日期转换成字符
四、练习
这里用between...and查找出的范围包括边界值,所以要+1和-1去掉边界值
select name,population
from world
where population between(
select population
from world
where name='Canada'
)+1 and(
select population
from world
where name='Poland'
)-1
注意使用concat()和round()函数来显示出百分比效果
select name,concat(round(population/(
select population
from world
where name='Germany'
)*100,0),'%')
from world
where continent='Europe'
字符串ASCII码排序
select continent,name
from world x
where name<=all(
select name
from world y
where x.continent = y.continent
)
select name,continent
from world x
where population>=all(
select population*3
from world y
where x.continent=y.continent
and x.name<>y.name
)