SQL必知必会读书笔记

文章目录

  • **不同的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的充分条件(即满足以下条件,该列可以作为主键):
  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子句(一组在视图中:创建视图时的,一组是传递给视图的:使用视图时的)将自动组合

第十九课 使用存储过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58927.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python小demo】JOJO替身面板生成

文章目录 1 前言2 代码实现3 总结 1 前言 最近暑假在数模研赛备赛,情理之中地接触了一些图表。也是第一次才知道雷达图这么个图表形式,用于直观地评价多个变量或指标。看到雷达图,我不禁联想到了JOJO中的替身面板,于是兴起想用Py…

Java使用String来开发验证码

Java使用String来开发验证码 需求分析代码实现小结Time 需求分析 使用String来开发验证码。 实现随机产生验证码,验证码的每位可能是数字、大写字母、小写字母 根据需求分析,步骤如下: 1.首先,设计一个方法,该方法接收…

【深度学习】【风格迁移】Zero-shot Image-to-Image Translation

论文:https://arxiv.org/abs/2302.03027 代码:https://github.com/pix2pixzero/pix2pix-zero/tree/main 文章目录 Abstract1. Introduction相关工作3. Method Abstract 大规模文本到图像生成模型展示了它们合成多样且高质量图像的显著能力。然而&#x…

微服务——es数据聚合+RestClient实现聚合

数据聚合 聚合的种类 DSL实现Bucket聚合 如图所示,设置了10个桶,那么就显示了数量最多的前10个桶,品牌含有7天酒店的有30家, 品牌含有如家的也有30家。 修改排序规则 限定聚合范围 DSL实现Metrics聚合 如下案例要求对不同的品…

谷歌广告(Google ads)如何投放?新手必看的超全教程

Google是公认的全球最大的搜索引擎,同时,Google还通过旗下的 YouTube、Gmail、Google Play、Android等产品,汇集了海量的海外用户。对于跨境出海商家来说,谷歌广告是提高销售额、提高产品流量、拓展全球市场的重要推广渠道。 那么…

[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员

目录 1、前言 2、全缺省的构造函数 3、打印接口 4、拷贝构造 5、赋值运算符重载(operator) 5.1赋值重载是默认成员函数,重载格式: 5.2 赋值重载不能为全局函数 5.3 编译器默认生成 6、析构函数 7、operator> 8、ope…

ARCGIS地理配准出现的问题

第一种。已有省级行政区矢量数据,在网上随便找一个相同省级行政区图片,利用地理配准工具给图片添加坐标信息。 依次添加省级行政区选择矢量数据、浙江省图片。 此时,图层默认的坐标系与第一个加载进来的省级行政区选择矢量数据的坐标系一致…

命令模式(C++)

定义 将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 应用场景 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比…

【vue3-element-admin】ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码

前言 本文介绍 vue3-element-admin 如何通过ESLint 检测 JS/TS 代码、Prettier 格式化代码、Stylelint 检测 CSS/SCSS 代码和配置 EditorConfig 来全方位约束和统一前端代码规范。 ESLint 代码检测 ESLint 可组装的JavaScript和JSX检查工具,目标是保证代码的一致…

3.1 C++ 继承、继承方式 3.2 C++继承后的构造函数执行顺序

继承、继承方式 代码复用的方法&#xff1a;组合 &#xff08;has a&#xff09;&#xff1b;继承 &#xff08;is a&#xff09; 继承是提高代码复用性 继承规则&#xff1a; #include<iostream> using namespace std; class A { public:int a_num11;static void …

ADB连接安卓手机提示unauthorized

近期使用airtest进行自动化测试时&#xff0c;因为需要连接手机和电脑端&#xff0c;所以在使用adb去连接本人的安卓手机vivo z5时&#xff0c;发现一直提示unauthorized。后来经过一系列方法尝试&#xff0c;最终得以解决。 问题描述&#xff1a; 用数据线将手机接入电脑端&…

RISC-V云测平台:Compiling The Fedora Linux Kernel Natively on RISC-V

注释&#xff1a;编译Fedora&#xff0c;HS-2 64核RISC-V服务器比Ryzen5700x快两倍&#xff01; --- 以下是blog 正文 --- # Compiling The Fedora Linux Kernel Natively on RISC-V ## Fedora RISC-V Support There is ongoing work to Fedora to support RISC-V hardwar…