读书笔记:《SQL 必知必会》
Opened this issue · 0 comments
astak16 commented
- 表是一种结构化的文件,可用来存储某种特定类型的数据,表是某种特定数据类型的结构化清单
- 通配符
%
有个例外,不会匹配到null
的行,比如:name = '%'
,匹配不到name = null
的数据 select curdate()
返回当前日期和时间- 文本处理函数
- 去除两边空格:
trim()
,去掉右边的空格:rtrim()
,去除左边的空格:ltrim()
right(str, index)
,获取str
的第index
位右边的字符串,index
从0
开始- 比如:
select right('abcdefg', 3) // efg
- 比如:
left(str, index)
,获取str
的第index
位左边的字符串,index
从0
开始- 比如
select left('abcdefg', 3) // abc
- 比如
soundex(str)
根据发音匹配文本,如果发音差不多则返回1
否则返回0
select soundex('Michael Green') = soundex('Michelle Green')
- 去除两边空格:
- 聚合函数
avg()
忽略列值为null
的行count()
count(1)
或者count(*)
不会忽略列值为null
的行count(col_name)
会忽略列值为null
的行
max()
忽略列值为null
的行- 如果是文本,返回排序后的该列最后一行
min()
忽略列值为null
的行- 如果是文本,返回排序后的该列第一行
sum()
忽略列值为null
的行
这五个聚合函数,默认是all
,如果只计算不同的值,指定distinct
,- 如果使用
distinct
必须使用列名,不能用*
或者表达式
where
在数据分组前进行过滤,having
在数据分组后进行过滤where
用于标准的行级过滤having
需要配合group by
使用
- 子查询是嵌套在其他查询中的查询
union
- 可以对第一个名使用别名,最后输出的结果是使用
product_name
select product_name ... union select productName ...
- 从结果集中自动去除重复的行,如果需要匹配所有的行应该使用
union all
- 可以对第一个名使用别名,最后输出的结果是使用
- 插入数据,
insert into ...
insert into <table_name>( ... ) select ...
可以将select
语句的结果插入表中
- 创建表
create table ...
create table <table_name> as select ...
可以将select
语句的结果创建一张新表
- 在使用
update
或delete
时,不要省略where
子句- 如果想删除所有的行,可以使用
truncate table <table_name>
- 在使用
update
或delete
时,先用select
进行测试,保证过滤的结果是正确的
- 如果想删除所有的行,可以使用