将之前学习的数据库知识在整理下,主要是看的**《SQL必知必会》**。这本书不愧是经典,入门数据库真的完全足够啦!
数据库基础
数据库
保存有组织的数据的容器,通常是一个文件或者一组文件
表
结构化的文件,用来存储某种特定的数据
列和数据类型
列指的是表中的字段。所有的表都是有一个或者多个列组成的。表中的每列存储着某种特定的信息。数据库中的每个列对应着相应的字段类型。
行
表中的数据是按照行存储的。垂直为列,水平为行。行指的是表中的一个记录
主键
表中的每一行都应该有一列或者几列可以唯一标识自己。主键满足的条件是:
- 任意两行不具有相同的主键值
- 每行必须有一个主键值
- 主键列中的值不允许修改或者更新
- 主键值不能重用
创建表
1 | create table products( |
插入数据
1 | insert into customers(cust_id, |
检索数据select
1 | select prod_id, prod_name -- 检索部分或者全部字段信息 |
排序检索数据order by
主要使用的是order by
子句,在select
语句中是最后的位置。
按照字段排序
1 | select prod_name |
指定升降序
默认是asc
升序,降序是desc
。关键字只能够应用到直接作用于其前面的列名上。
1 | select prod_id, prod_name, prod_price |
笔记:order by 子句必须是select语句的最后语句
过滤语句where
order by
要在where
子句之后。
基础过滤
只需要搜索数据指定搜索条件,搜索条件也称之为过滤条件
1 | select prod_name, prod_price |
高级过滤
1 | select prod_name, prod_price |
笔记:and的优先级在or之前;如果同时存在最好加上圆括号来进行明确的分割。
1 | select prod_name, prod_price |
笔记:使用in的好处
- 语法清楚,更直观
- 求值顺序更容易管理
- in子句中可以包含更多其他的select子句,动态地建立where子句
1 | select prod_name, prod_price |
通配符使用like
使用通配符能够创建比较特定数据的搜索模式。通配符通常是用来匹配一部分的特殊字符,只能用于文本字段,非文本数据不能使用通配符搜索。
百分号%
匹配的是0个、1个或者多个字符
1 | select prod_id, prod_name |
短横线_
只能匹配单个字符,不能多也不能少
1 | select prod_id, prod_name |
方括号[]
方括号通配符通常是用来指定一个字符集,必须匹配指定位置的一个字符。使用^
可以进行取反操作。
1 | -- 找出名字是以J和M开头的人 |
笔记:使用通配符的技巧
- 不要过度使用
- 尽量不要把通配符置于开始处,速度慢
- 注意通配符的位置
计算相关
拼接concatenate
1 | select concat(vend_name, '(', vend_country, ')') |
笔记:
SQL
中使用RTRIM()
函数来去掉右边的空格;LTRIM
去掉左边;TRIM
去掉左右两边的空格
使用别名as
1 | select concat(vend_name, '(', vend_country, ')') |
笔记:别名最常用的功能是将多个单词的列名重命名为一个单词的名字
算术运算
对检索出的数据进行算术运算
1 | select prod_price, item_price, quantity, |
使用函数处理数据
去掉空格
- RTRIM:去掉右边
- LTRIM:去掉左边
- TRIM:去掉两边
文本处理
-
upper:将文本转化为大写
-
lower:将文本转化为小写
-
length:返回的是字符串长度
-
soundex:任何一个文本返回其
soundex
值(描述发音)
数值处理
ABS:绝对值
COS/SIN:余弦和正弦值
EXP:指数值
TAN:角度正切值
汇总和聚合
常见的聚合函数
函数 | 功能 |
---|---|
avg() | 平均值; 忽略列值为NULL的行 |
count() | 行数; count(*):统计所有的行数,包含列是NULL的行 count(column):特定的列进行统计,忽略NULL值 |
max() | 最大值 忽略列值为NULL的行 |
min() | 最小值 忽略列值为NULL的行 |
sum() | 某列值之和 忽略列值为NULL的行 |
1 | select avg(prod_price) as avg_price |
上面5个函数的使用方法:
- 对所有行执行计算,指定
all
或者不指定参数,因为是默认ALL - 只包含不同的列值,指定
DISTINCT
参数 DISTINCT
参数不能用于count(*)
,只能用于count(column)
指定特定字段
1 | select avg(distinct prod_price) as avg_price |
组合聚集函数
多个聚集函数同时使用
1 | select count(*) as num_items, |