Bootstrap

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外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

;