SQL II

SQL II 多表操作

逻辑顺序

JOIN Queries

用来解决交叉表

将表进行叉乘之后再筛选

默认INNER JOIN

自然连接(Natural Join)

是关系型数据库中一种常用的连接操作,它在两个表中根据相同名称的列(通常是主键和外键)进行连接。自然连接会自动匹配两个表中列名相同的字段,并且去除重复的列。

自然连接的特点:

  1. 自动匹配列:自然连接会自动识别两个表中列名相同的列,并根据这些列进行连接。
  2. 去除重复列:在连接结果中,重复的列会被去除,避免出现冗余信息。
  3. 基于相等条件:自然连接的本质是基于列的相等进行连接。

Left Outer Join

左表不匹配的项也会出现一次,没有匹配的地方填充null

Right Outer Join

同理

Full Outer Join

left+right

alias

输出结果可以取别名

FROM里面也可以取别名

可以在select, where任意地方进行算数

其他功能

可以当个单纯的计算机

String Comparsion

正则表达式

基本正则表达式符号

  1. 字符匹配
    • 普通字符ab1A 都表示字符本身。
    • . :匹配除换行符以外的任何单个字符。例如,a.b 可以匹配 aabacba-b 等。
    • \ :用于转义特殊字符,例如 \\ 匹配反斜杠,\. 匹配点号。
  2. 字符类(Character classes)
    • [abc] :匹配字符 abc 中的任意一个。
    • [a-z]:匹配任何小写字母。
    • [0-9]:匹配任何数字。
    • [^abc] :匹配除了 abc 以外的任何字符。
    • \d :匹配任何数字,等价于 [0-9]
    • \w :匹配任何字母数字字符(包括下划线),等价于 [a-zA-Z0-9_]
    • \s:匹配任何空白字符,包括空格、制表符和换行符。
  3. 量词(Quantifiers)
    • \* :匹配前一个字符零次或多次。例如,a* 匹配零个或多个 a 字符。
    • + :匹配前一个字符一次或多次。例如,a+ 匹配一个或多个 a 字符。
    • ? :匹配前一个字符零次或一次。例如,a? 匹配零个或一个 a 字符。
    • {n} :精确匹配前一个字符出现的次数。例如,a{3} 只匹配 aaa
    • {n,} :匹配前一个字符出现至少 n 次。例如,a{2,} 匹配两个或更多 a 字符。
    • {n,m} :匹配前一个字符出现至少 n 次,最多 m 次。例如,a{2,4} 匹配 aaaaaaaaa
  4. 位置匹配符
    • ^ :匹配字符串的开头。例如,^abc 匹配以 abc 开头的字符串。
    • $ :匹配字符串的结尾。例如,abc$ 匹配以 abc 结尾的字符串。
    • \b :匹配单词边界。例如,\babc\b 匹配独立的 abc,不会匹配 xabcabcx
  5. 分组和选择
    • () :用来分组或捕获子表达式。例如,(abc) 捕获 abc 字符串。
    • | :表示"或"操作,匹配左边或右边的表达式。例如,a|b 匹配 ab
  6. 其他特殊字符
    • \d :匹配任何数字字符,等价于 [0-9]
    • \w :匹配任何字母数字字符,等价于 [a-zA-Z0-9_]
    • \s:匹配任何空白字符

set集合关系

UNION

UNION 是 SQL 中用于合并两个或多个查询结果的操作符。它允许你将多个 SELECT 语句的结果合并为一个结果集,返回的是一个去重后的集合。也就是说,UNION 会自动去除重复的行。如果你希望保留重复的行,可以使用 UNION ALL

INTERSECT

INTERSECT 是 SQL 中的一个集合运算符,用于返回两个查询结果集的交集。即,它只会返回两个 SELECT 查询结果中同时存在的行(即两个查询都返回的相同数据)。如果某个记录只在一个查询结果中出现,而在另一个查询结果中没有出现,INTERSECT 会把它排除在外。

  • INTERSECT ALL: min of cardinalities

EXCEPT

EXCEPT 是 SQL 中的一个集合操作符,用于返回第一个查询结果中有,但第二个查询结果中没有的记录。它基本上返回的是第一个查询和第二个查询的差集,即 SELECT 查询的结果集中,存在于第一个查询中而不存在于第二个查询中的行

  • EXCEPT ALL:difference of cardinalities <0的结果不输出

IN

WHERE里可以用IN后面跟一个集合(可以是subquery)

还可以写NOT IN不在这个集合里面

EXISTS

如果子查询里面有结果,就返回true(正常返回主查询)

如果子查询为空,主查询不返回东西

相当于一个函数每一个外部的都会放入子查询

ALL

ALL 是 SQL 中的一个关键字,用于与子查询一起使用,用来对比一个列的值与子查询返回的所有结果集合。ALL 可以用在 WHERE 子句中,通常与比较运算符(如 =, <, >, <=, >=, !=)配合使用。

CREATE VIEW

类似于编程中的函数 适合复杂查询分解成小部分

  1. 可以将复杂逻辑切换成简单部分
  2. 保证了安全性,只给予view的权限,不给表的权限
  3. 不会储存,而是每次都进行计算

可以就像使用常规表和查询一样

也可以不用view,只用一次的查询,可以直接放在from里

这个from里面的内容就是写的筛选出红色船有多少只 在from里面动态执行

WITH

后续可以复用的表

可以互相进行级联

NULL VALUE

SQL中的每一个数据类型都可以由null

如何判断NULL (转换成boolean值)

IS null

IS NOT null

聚合函数会自动忽略null

三值逻辑(Three-Valued Logic)

SQL 使用三值逻辑来处理 NULL,即除了 TRUEFALSE,还允许 UNKNOWN(未知)值。如果一个表达式涉及 NULL,结果通常为 UNKNOWN。这就是为什么在 NULL 和任何值进行比较时,不能直接得到 TRUEFALSE,而是得到 UNKNOWN

相关推荐
fen_fen4 小时前
Oracle建表语句示例
数据库·oracle
砚边数影5 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt5 小时前
Djiango配置Celery
数据库·sqlite
云小逸6 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
·云扬·6 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
肉包_5116 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总7 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
此刻你7 小时前
常用的 SQL 语句
数据库·sql·oracle
それども8 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·8 小时前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb