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

相关推荐
ZWZhangYu38 分钟前
LangChain 构建向量数据库和检索器
数据库·langchain·easyui
feifeigo1232 小时前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
火龙谷3 小时前
【nosql】有哪些非关系型数据库?
数据库·nosql
焱焱枫4 小时前
Oracle获取执行计划之10046 技术详解
数据库·oracle
双力臂4045 小时前
MyBatis动态SQL进阶:复杂查询与性能优化实战
java·sql·性能优化·mybatis
qq_392397125 小时前
Redis常用操作
数据库·redis·wpf
A__tao7 小时前
一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
java·sql·mysql
一只fish7 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
花好月圆春祺夏安8 小时前
基于odoo17的设计模式详解---装饰模式
数据库·python·设计模式
A__tao8 小时前
SQL 转 Java 实体类工具
java·数据库·sql