文章目录
- **不同的DB语法格式不尽相同**
- 第一课 了解SQL
- 术语
- 第二课 检索数据
- 语法格式
- 检索列
- 检索唯一不同值
- 限制结果(数量)
- 第三课 排序检索数据
- 使用说明
- 第四课 过滤数据
- WHERE子句操作符
- 第五课 高级数据过滤
- 1、组合WHERE子句
- 2、IN操作符
- 3、NOT操作符
- 第六课 使用通配符进行过滤
- 1、LIKE操作符
- 第七课 创建计算字段
- 什么是计算字段
- 使用计算字段
- 1.拼接字段
- 2.执行算数计算
- 第八课 使用函数处理数据
- 函数分类
- 第九课 汇总数据
- 聚集函数
- 第十课 分组数据
- 第十一课 使用子查询
- 第十二课 联结表
- 关系表
- 笛卡尔积
- 第十八课 使用视图
- 视图的优点
- 视图创建常见规则和限制
- 1.创建视图
- 2.用视图重新格式化检索出的数据
- 3.使用视图过滤掉不想要的数据
- 第十九课 使用存储过程
不同的DB语法格式不尽相同
不同的DB语法格式不尽相同,使用的时候百度吧。可参考菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html
第一课 了解SQL
术语
- DataBase数据库
- DataBaseManagementSystem
- schema模式:描述数据库和表的布局及其特性的信息。(定义数据如何在表中存储,包括存储什么样的数据,数据怎么分解,各部分信息怎么命名)
- row/record
- primary key
- clause子句,从句
primary key的充分条件(即满足以下条件,该列可以作为主键):
- 唯一性:任何两行都不具有相同的主键
- 非NULL:每一行都必须有一个主键值
- 固定:主键列中的值不允许修改或者更新
- 不能重用:删除某条记录后,它的主键不能赋给新行
第二课 检索数据
SELECT语句使用 DISTINCT子句 TOP、LIMIT子句
语法格式
检索列
SELECT columns[] FROM table_name
- columns[]:1、多个列名,中间用
,
隔开;2、所有列,使用通配符*
检索唯一不同值
SELECT DISTINCT column_name From table_name
DISTINCT关键字作用于所有列,不仅仅是跟在其后的那一列,若其后有两个列名,两列数据不完全相同,则所有数据都会检索
限制结果(数量)
SELECT TOP row_quantity * FROM table_name
第三课 排序检索数据
ORDER BY
使用说明
- ORDER BY子句需是最后一条子句
- 可以使用非选择的列进行排序
- 按多个列排序时的顺序:按规定进行
- 升序/降序:ASC、DESC
特殊的写法:
SELECT col_name1,col_name2,col_name3,col_name4 FROM table_name ORDER BY 2,3
等价于
SELECT col_name1,col_name2,col_name3,col_name4 FROM table_name ORDER BY col_name2,col_name3
第四课 过滤数据
WHERE子句
search criteria/filter condition
WHERE子句操作符
大于、小于,BETWEEN AND等
第五课 高级数据过滤
1、组合WHERE子句
AND、OR子句
AND优先级一般比OR高,可以使用括号
2、IN操作符
相当于OR,优点如下:
- 可以更直观清楚地看出合法选项有哪些
- 与其他AND、OR操作符组合使用时,求值顺序更容易管理
- IN操作符执行速度一般比一组OR更快
- IN可以包含其他SELECT语句,(子查询)
3、NOT操作符
第六课 使用通配符进行过滤
1、LIKE操作符
wildcard通配符
search pattern搜索模式
- 配合
%
(匹配多个字符)、_
(匹配单个字符)、[]
(待匹配指定字符集)使用
第七课 创建计算字段
什么是计算字段
目的:直接从DB中检索出转换、计算或格式化后的数据,而不用在客户端应用程序再进行格式化。
应用场景:
- 需要显示公司名(column1)、公司地址(column2);
- 列数据大小写混合,但要求输出全大写\小写
- 需要输出销售额,表里只存了单价(column1)、销售量(column2)
- 。。。
字段(field)与列(column)基本同意,一般字段与计算字段一起使用,列一般指数据列
使用计算字段
1.拼接字段
拼接concatenate
- 拼接多个列成为一个列(计算字段)
- 操作符
+
、||
、或者CONCAT子句
(具体看使用的DBMS是什么)
- 去掉空格
部分DBMS将多个列结合成一个计算字段时,可能会保存填充为列宽的文本值(直观来看就是多了一些空格)
- 可以使用
RTRM()
函数去掉右边空格 LTRIM()
函数去掉左边空格TRIM()
函数去掉左右两边空格
- 使用别名(alias)
别名用AS
关键字赋予,也称导出列(drived column)
2.执行算数计算
可以使用四则运算符号+
、-
、*
、/
第八课 使用函数处理数据
每一个DBMS都有特定的函数,注意自己使用的是什么DBMS也就意味着,SQL语句可以移植,但是SQL函数不可移植
可移植(portable)
函数分类
- 处理文本字符串的文本函数:删除值,填充值,大小写转换。。。
- 对数值数据进行算数操作的数值函数:返回绝对值,进行代数运算。。。
- 处理日期和时间并从中提取特定成分的日期和时间函数:时间间隔。。。
- 返回DBMS正使用的特殊信息的系统函数:用户登陆信息。。。
SOUNDEX()
将任何文本串转换为描述其语音表示的字母数字模式,使得能对字符串进行发音比较而不是字母比较
第九课 汇总数据
聚集函数
**使用场景:**只关心数据统计信息,不必看具体数据明细
AVG()
、MIN()
、MAX()
、COUNT()
、SUM()
函数
第十课 分组数据
GROUP BY子句
使用注意:
- 可以包含任意数目的列,因而可以对分组进行嵌套
- 若在该子句中嵌套了分组,数据将在最后制定的分组上进行汇总,即建立分组时,指定的所有列都一起计算(不能从个别的列返回数据)
HAVING子句
第十一课 使用子查询
1.在WHERE子句中嵌套查询
- 作为子查询的ELECT语句只能查询单个列,检索多个列会报错
2.作为计算字段使用子查询
第十二课 联结表
关系表
关系表的设计需要将信息分解,一类信息一个表,各表之间通过某些共同的值互相关联。
如:供应商信息表与产品信息表,红色为PK
笛卡尔积
若未设置联结条件,则会返回笛卡尔积。
例如:48 * 255 = 12240
第十八课 使用视图
视图
:虚拟的表,只包含使用时动态检索数据的查询。部分DBMS及早期版本不支持视图、或者支持视图的权限有限(只读,不可编辑)
使用视图时,注意性能问题
视图的优点
- 重用SQL语句
- 简化复杂的SQL操作,
抽象
- 使用表的一部分而非整个表
- 保护数据,可以授予用户访问表特定部分的权限,不用访问整个表
- 更改数据格式和表示:视图可以返回和底层表的表示和格式不同的数据
视图创建常见规则和限制
得看具体的DBMS文档
- 视图名唯一:不能与别的表、视图重名
- 可以创建的视图数量没有限制
- 创建视图时,需要有足够的访问权限
- 视图可以嵌套,嵌套层数得看具体的DBMS
- 许多DBMS在视图查询中禁止使用ORDER BY子句
- 有些DBMS要求对返回的所有列进行命名,若列是计算字段,需使用别名
- 视图不能索引,也不能有关联的触发器或默认值
- 有些DBMS吧视图作为只读的查询:可以从视图中检索数据,但不能将数据写会底层表
- 有些DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入和更新。(不太理解,应该用不到)
1.创建视图
CREATE VIEW
CREATE OR REPLACE VIEW
CREATE OR RELACE VIEW "schema_name"."view_name"
AS (
~~~
查询sql
~~~
);
新建视图之前,可以先select一下自己要创建的视图,避免修改已有的同名视图
2.用视图重新格式化检索出的数据
3.使用视图过滤掉不想要的数据
WHERE子句也适用于视图,可以把视图看做表,一种特殊投影了的“表”
从视图检索数据时,若使用了一个WHERE子句,则两组WHERE子句(一组在视图中:创建视图时的,一组是传递给视图的:使用视图时的)将自动组合