SQL必知必会读书笔记

不同的DB语法格式不尽相同

不同的DB语法格式不尽相同,使用的时候百度吧。可参考菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html

第一课 了解SQL

术语

  • DataBase数据库
  • DataBaseManagementSystem
  • schema模式:描述数据库和表的布局及其特性的信息。(定义数据如何在表中存储,包括存储什么样的数据,数据怎么分解,各部分信息怎么命名)
  • row/record
  • primary key
  • clause子句,从句
    primary key的充分条件(即满足以下条件,该列可以作为主键):
  1. 唯一性:任何两行都不具有相同的主键
  2. 非NULL:每一行都必须有一个主键值
  3. 固定:主键列中的值不允许修改或者更新
  4. 不能重用:删除某条记录后,它的主键不能赋给新行

第二课 检索数据

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

使用说明

  1. ORDER BY子句需是最后一条子句
  2. 可以使用非选择的列进行排序
  3. 按多个列排序时的顺序:按规定进行
  4. 升序/降序: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,优点如下:

  1. 可以更直观清楚地看出合法选项有哪些
  2. 与其他AND、OR操作符组合使用时,求值顺序更容易管理
  3. IN操作符执行速度一般比一组OR更快
  4. IN可以包含其他SELECT语句,(子查询)

3、NOT操作符

第六课 使用通配符进行过滤

1、LIKE操作符

wildcard通配符
search pattern搜索模式

  • 配合%(匹配多个字符)、_(匹配单个字符)、[](待匹配指定字符集)使用

第七课 创建计算字段

什么是计算字段

目的:直接从DB中检索出转换、计算或格式化后的数据,而不用在客户端应用程序再进行格式化。
应用场景:

  1. 需要显示公司名(column1)、公司地址(column2);
  2. 列数据大小写混合,但要求输出全大写\小写
  3. 需要输出销售额,表里只存了单价(column1)、销售量(column2)
  4. 。。。
    字段(field)与列(column)基本同意,一般字段与计算字段一起使用,列一般指数据列

使用计算字段

1.拼接字段

拼接concatenate

  1. 拼接多个列成为一个列(计算字段)
  • 操作符+||、或者CONCAT子句(具体看使用的DBMS是什么)
  1. 去掉空格
    部分DBMS将多个列结合成一个计算字段时,可能会保存填充为列宽的文本值(直观来看就是多了一些空格)
  • 可以使用RTRM()函数去掉右边空格
  • LTRIM()函数去掉左边空格
  • TRIM()函数去掉左右两边空格
  1. 使用别名(alias)
    别名用AS关键字赋予,也称导出列(drived column)

2.执行算数计算

可以使用四则运算符号+-*/

第八课 使用函数处理数据

每一个DBMS都有特定的函数,注意自己使用的是什么DBMS也就意味着,SQL语句可以移植,但是SQL函数不可移植
可移植(portable)

函数分类

  1. 处理文本字符串的文本函数:删除值,填充值,大小写转换。。。
  2. 对数值数据进行算数操作的数值函数:返回绝对值,进行代数运算。。。
  3. 处理日期和时间并从中提取特定成分的日期和时间函数:时间间隔。。。
  4. 返回DBMS正使用的特殊信息的系统函数:用户登陆信息。。。

SOUNDEX()将任何文本串转换为描述其语音表示的字母数字模式,使得能对字符串进行发音比较而不是字母比较

第九课 汇总数据

聚集函数

**使用场景:**只关心数据统计信息,不必看具体数据明细
AVG()MIN()MAX()COUNT()SUM()函数

第十课 分组数据

GROUP BY子句
使用注意:

  • 可以包含任意数目的列,因而可以对分组进行嵌套
  • 若在该子句中嵌套了分组,数据将在最后制定的分组上进行汇总,即建立分组时,指定的所有列都一起计算(不能从个别的列返回数据)
    HAVING子句

第十一课 使用子查询

1.在WHERE子句中嵌套查询

  • 作为子查询的ELECT语句只能查询单个列,检索多个列会报错
    2.作为计算字段使用子查询

第十二课 联结表

关系表

关系表的设计需要将信息分解,一类信息一个表,各表之间通过某些共同的值互相关联。
在这里插入图片描述
如:供应商信息表与产品信息表,红色为PK

笛卡尔积

若未设置联结条件,则会返回笛卡尔积。
例如:48 * 255 = 12240
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第十八课 使用视图

视图 :虚拟的表,只包含使用时动态检索数据的查询。部分DBMS及早期版本不支持视图、或者支持视图的权限有限(只读,不可编辑)
使用视图时,注意性能问题

视图的优点

  1. 重用SQL语句
  2. 简化复杂的SQL操作,抽象
  3. 使用表的一部分而非整个表
  4. 保护数据,可以授予用户访问表特定部分的权限,不用访问整个表
  5. 更改数据格式和表示:视图可以返回和底层表的表示和格式不同的数据

视图创建常见规则和限制

得看具体的DBMS文档

  1. 视图名唯一:不能与别的表、视图重名
  2. 可以创建的视图数量没有限制
  3. 创建视图时,需要有足够的访问权限
  4. 视图可以嵌套,嵌套层数得看具体的DBMS
  5. 许多DBMS在视图查询中禁止使用ORDER BY子句
  6. 有些DBMS要求对返回的所有列进行命名,若列是计算字段,需使用别名
  7. 视图不能索引,也不能有关联的触发器或默认值
  8. 有些DBMS吧视图作为只读的查询:可以从视图中检索数据,但不能将数据写会底层表
  9. 有些DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入和更新。(不太理解,应该用不到)

1.创建视图

CREATE VIEW 
CREATE OR REPLACE VIEW
CREATE OR RELACE VIEW "schema_name"."view_name"
AS (
		~~~
		查询sql
		~~~
);

新建视图之前,可以先select一下自己要创建的视图,避免修改已有的同名视图

2.用视图重新格式化检索出的数据

3.使用视图过滤掉不想要的数据

WHERE子句也适用于视图,可以把视图看做表,一种特殊投影了的“表”
从视图检索数据时,若使用了一个WHERE子句,则两组WHERE子句(一组在视图中:创建视图时的,一组是传递给视图的:使用视图时的)将自动组合

第十九课 使用存储过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值