9.1 基本查询语句

SELECT语句功能强大,语法结构如下:

SELECT1,列2
FROM 数据表1,数据表2
WHERE ... #查询条件
GROUP BY ...#分组条件
ORDER BY ...#查询结果排序
LIMIT ...#限制查询输出的条数

9.1.1 使用SELECT * 查询所有列

img

9.1.2 使用SELECT C1,C2 查询一列或者多列

img

9.1.3 从一个或者多个表中获取数据

img

9.2 单表查询

9.2.1查询所有

SELECT * FROM 表名;

9.2.2 指定字段

SELECT 字段1,字段2 FROM 表名;

9.2.3 其他关键字

9.2.3.1 IN 和 NOT IN**

img

9.2.3.4 [NOT] BETWEEN ... AND...**(闭区间)

img

9.2.3.5 带有LIKE字符匹配查询

通配符:

  • % 匹配一个或者多个字符,代表任意长度字符,长度可以为0;
  • _ 匹配一个字符,中文和英文、数字都是指的一个字符
    img

9.2.3.6 AND

img

9.2.3.7 OR

img

9.2.3.8 DISTINCT为字段筛选去重

img

9.2.3.9 ORDER BY 排序

  • ASC = ASCEND
  • DEC = DESCEND
    img

9.2.3.10 GROUP BY

GROUP BY 的用法和数据透视表类似,用户统计某个字段下的聚合的一些信息。
img
img

9.2.3.11 LIMIT

  • limit限制查询返回的记录的条数
  • 多参数,LIMIT M,N,其中M是编号注意是从0开始,N是要查询的个数。
    img

9.3 聚合函数查询

聚合函数,根据特定的计算方式,可以根据一组数据得出计算结果,如果存在有NULL的值,则不参与计算。

9.3.1 COUNT()函数

用于统计符合条件的值的个数。
img

增加自增字段
1)设置主键;2)设置自增;
img
img

9.3.2 SUM()函数

SUM函数用户计算莫格字段取值相加总和。
img

9.3.3 AVG()函数

img

9.3.4 MAX()函数 和 MIN()函数

img

9.4 连接查询

连接是把不同表的的记录连接到一起最普遍的方法。左连接返回包括左表中的所有记录和右表中连接字段相等的记录;右连接返回包括右表中的所有记录和左表中连接字段相等的记录;内连接只返回两个表中连接字段相等的行;全外连接返回左右表中所有的记录和左右表中连接字段相等的记录。

9.4.1 内连接查询

根据条件,返回相同的值的数据记录。
img
img

9.4.2 外连接查询

左连接和右连接,左连接 和 右连接,是指定以那个为基准,去查对应的数据,如果数据不存在,则为NULL。
左连接:先把usr_basic_info表放在左边,user_major放到右边,对应去查右边的数据,如果值右边就数据就为NULL;
有链接:先把user_major放到右边,对应去查usr_basic_info表中内容,如果没有数据内容,则为NULL;
img
img

9.4.3 复合条件连接查询

多条件的查询
img

9.4.4 交叉查询

1、交叉查询关键字为CROSS JOIN ,也可以不用关键字,直接使用逗号','来进行查询。
2、交叉查询返回的是 笛卡尔积
image
图片处处:http://c.biancheng.net/view/7456.html
相当于python代码的遍历

'''
笛卡尔积
笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。

例如,有 A 和 B 两个集合,它们的值如下:
A = {1,2}
B = {3,4,5}

集合 A×B 和 B×A 的结果集分别表示为:
A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };

以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。

并且,从以上结果我们可以看出:
两个集合相乘,不满足交换率,即 A×B≠B×A。
A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。

多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。

总的循环次数为:axb次
输出:
{(2, 4), (1, 5), (1, 4), (2, 3), (2, 5), (1, 3)}
{(3, 1), (5, 1), (4, 2), (3, 2), (4, 1), (5, 2)}
'''
'''
笛卡尔积
笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。

例如,有 A 和 B 两个集合,它们的值如下:
A = {1,2}
B = {3,4,5}

集合 A×B 和 B×A 的结果集分别表示为:
A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };

以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。

并且,从以上结果我们可以看出:
两个集合相乘,不满足交换率,即 A×B≠B×A。
A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。

多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。

总的循环次数为:axb次
'''

def cartesian_product(a:set,b:set) -> set:
    '''求a和b的笛卡尔积'''
    res_set = set()

    for i in a:
        for j in b:
            res_set.add((i,j))
    return sorted(res_set)

if __name__ == '__main__':
    a = {1,2}
    b = {3,4,5}
    # a x b
    print(cartesian_product(a,b))

    # b x a
    print(cartesian_product(b,a))

输出:

[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]
[(3, 1), (3, 2), (4, 1), (4, 2), (5, 1), (5, 2)]

9.5 子查询

SELECT 语句的嵌套,主查询语句使用附属查询语句返回值进行嵌套查询。

9.5.1 关键字IN和NOT IN的子查询

IN语句适合子查询语句返回的值是多个值的形式,可以使用IN。
img
img

9.5.2 带比较运算符的子查询

img

9.5.3 EXISTS关键字 的子查询

EXISTS子句返回一个TRUE或者FALSE的值,如果是TRUE则执行主句,如果是FALSE不执行主查询语句。
img
同样也可以使用NOT EXISTS

9.5.3 ANY关键字 的子查询

如果返回的值是一个列表或者单个值,主查询语句中的条件,只要返回的值中任意一个条件满足,则该条件满足。

SELECT * FROM t1 WHERE c1 > ANY(SELECT c2 WHERE ....)
如果字句返回来的值是一个列表[33,44,56,77],而C1的值为[1,3,5,34,88 99],则可以查询到[34,88,99]

img

9.5.3 ALL关键字 的子查询

和ANY类似,ALL关键字,要满足所有的条件,而不是任意的条件。
img

9.6 合并查询结果

将多个SELECT语句的结果合并显示出来,可以使用UNION 和 UNION ALL两个关键字,UNION合并会删除重复项,UNION ALL则会合并所有的结果。
img
img

9.7 定义表和字段的别名

9.7.1 为表取别名

img

9.7.1 为字段取别名

img

9.8 使用正则表达式进行查询

后续使用到后再补充。

posted on   飞飞fly  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!



点击右上角即可分享
微信分享提示