9.1 基本查询语句
SELECT语句功能强大,语法结构如下:
SELECT 列1,列2
FROM 数据表1,数据表2
WHERE ... #查询条件
GROUP BY ...#分组条件
ORDER BY ...#查询结果排序
LIMIT ...#限制查询输出的条数
9.1.1 使用SELECT * 查询所有列
9.1.2 使用SELECT C1,C2 查询一列或者多列
9.1.3 从一个或者多个表中获取数据
9.2 单表查询
9.2.1查询所有
SELECT * FROM 表名;
9.2.2 指定字段
SELECT 字段1,字段2 FROM 表名;
9.2.3 其他关键字
9.2.3.1 IN 和 NOT IN**
9.2.3.4 [NOT] BETWEEN ... AND...**(闭区间)
9.2.3.5 带有LIKE字符匹配查询
通配符:
- % 匹配一个或者多个字符,代表任意长度字符,长度可以为0;
- _ 匹配一个字符,中文和英文、数字都是指的一个字符
9.2.3.6 AND
9.2.3.7 OR
9.2.3.8 DISTINCT为字段筛选去重
9.2.3.9 ORDER BY 排序
- ASC = ASCEND
- DEC = DESCEND
9.2.3.10 GROUP BY
GROUP BY 的用法和数据透视表类似,用户统计某个字段下的聚合的一些信息。
9.2.3.11 LIMIT
- limit限制查询返回的记录的条数
- 多参数,LIMIT M,N,其中M是编号注意是从0开始,N是要查询的个数。
9.3 聚合函数查询
聚合函数,根据特定的计算方式,可以根据一组数据得出计算结果,如果存在有NULL的值,则不参与计算。
9.3.1 COUNT()函数
用于统计符合条件的值的个数。
增加自增字段
1)设置主键;2)设置自增;
9.3.2 SUM()函数
SUM函数用户计算莫格字段取值相加总和。
9.3.3 AVG()函数
9.3.4 MAX()函数 和 MIN()函数
9.4 连接查询
连接是把不同表的的记录连接到一起最普遍的方法。左连接返回包括左表中的所有记录和右表中连接字段相等的记录;右连接返回包括右表中的所有记录和左表中连接字段相等的记录;内连接只返回两个表中连接字段相等的行;全外连接返回左右表中所有的记录和左右表中连接字段相等的记录。
9.4.1 内连接查询
根据条件,返回相同的值的数据记录。
9.4.2 外连接查询
左连接和右连接,左连接 和 右连接,是指定以那个为基准,去查对应的数据,如果数据不存在,则为NULL。
左连接:先把usr_basic_info表放在左边,user_major放到右边,对应去查右边的数据,如果值右边就数据就为NULL;
有链接:先把user_major放到右边,对应去查usr_basic_info表中内容,如果没有数据内容,则为NULL;
9.4.3 复合条件连接查询
多条件的查询
9.4.4 交叉查询
1、交叉查询关键字为CROSS JOIN ,也可以不用关键字,直接使用逗号','来进行查询。
2、交叉查询返回的是 笛卡尔积
图片处处: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。
9.5.2 带比较运算符的子查询
9.5.3 EXISTS关键字 的子查询
EXISTS子句返回一个TRUE或者FALSE的值,如果是TRUE则执行主句,如果是FALSE不执行主查询语句。
同样也可以使用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]
9.5.3 ALL关键字 的子查询
和ANY类似,ALL关键字,要满足所有的条件,而不是任意的条件。
9.6 合并查询结果
将多个SELECT语句的结果合并显示出来,可以使用UNION 和 UNION ALL两个关键字,UNION合并会删除重复项,UNION ALL则会合并所有的结果。
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.1 为字段取别名
9.8 使用正则表达式进行查询
后续使用到后再补充。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!