前言
这个一个平平无奇的sql笔记,持续更新,哪里不会查哪里!
一、目录
1、取出指定条数的sql语句——LIMIT
# 取出180条数据 # LIMIT SELECT * from res_comment_detail WHERE brand_name ~ '德克士' LIMIT 180
2、随机读取数据——random()
# ORDER BY random() select * FROM res_comment_detail WHERE brand_name ~ '德克士' ORDER BY random() LIMIT 180
3、合并多个selecet语句的结果——union
# union操作符用于合并两个或者多个select语句的结果 # 需要注意的是,union内部的每个select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个select语句中的列的顺序必须相同。 SELECT * FROM table1 UNION SELECT * FROM table2; # 需要注意的是:如果还有许多限制条件,那么需要给table1整体加括号,并且必须记得要起一个别名,否则会报错。 select * FROM (select * FROM res_comment_detail WHERE brand_name ~ '康师傅' ORDER BY random() LIMIT 180) AS g UNION select * FROM (select * FROM res_comment_detail WHERE brand_name ~ '李先生' ORDER BY random() LIMIT 180) AS k
4、用于返回唯一不同的值——DISTINCT
# tips: 可以是 select DISTINCT brand_name......这种形式,也可以是下边这种形式。 select DISTINCT(brand_name) from public.res_comment_detail where general_label is null # notice:distinct关键字只能写在select子句的第一个字段前面,否则报错。
5、将查询结果插入到另一个表——INSERT
# 1、如果要插入的目标表不存在 # select * into 目标表 from 表 where ... # 2、如果要插入的目标表已经存在 # insert into 目的表 select * from 表 where 条件 # 3、如果是跨数据库操作 # select * into B.btable from A.atable where ...
6、分组查询——Group by
# 分组查询,通过一定的规则将一个数据集划分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理,即根据某个字段进行分组。 SELECT brand_name, sum(word_counts) from PUBLIC.res_words_day_sta_test_copy1 GROUP BY brand_name # notice:如果查询语句中包含有Gruop bu子句,那么select子句中只可以包含 聚合函数和Group by子句的分组列,其余内容不可以出现。
7、聚合函数
Count(): 统计分组后的记录数: 每一组有多少记录 Max(): 统计每组中非空的最大值 Min(): 统计非空的最小值 Avg(): 统计平均值 Sum(): 统计和 # eg: # 1、直接查询数量 select COUNT(name) FROM table WHERE batch_id ~ '2021-12' # 2、与Group by组合使用(查询每个名字在表中出现多少次) SELECT DISTINCT name,COUNT(name) FROM table WHERE batch_id ~ '2021-12' GROUP BY name
8、条件语句——having
# 为什么有了where条件语句还要使用having? # why?where关键字在使用集合函数时不能使用,而在having子句中可以使用聚合函数。一般与group by联合使用。 select name from table WHERE batch_id ~ '2021-12' group by name having count(name)>1
9、在pycharm里怎么写sql语句
# 1、用字符串函数join()连接sql语句 # notic:因为变量target_job是字符串类型,所以需要加转义字符\'。 # a = '' # sql = a.join(["select timeline from public.org_target_job_record where target_job = ", "\'", target_job, "\'", # " and target_type = ", "\'", target_type, "\'", " ORDER BY timeline DESC limit 1;"]) # 2、更简单的写法 # notic:在字符串前加f主要目的是使得格式化字符串的操作更加简便 # f-string:即被称之为格式化字符串常量,f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。 # advantage: 这样写的好处是可以在字符串中以大括号{}标明被替换的字段 sql = f"select timeline from public.org_target_job_record where target_job = '{target_job}' and target_type = '{target_type}' ORDER BY timeline DESC limit 1 "
10、创建临时表——(create temporary table)
# why? 在临时表上操作速度飞快,适合创建包含大量数据的临时表并且进行多次查询的情况。 # method: create temp temp_table as (select语句) create temp temp_table as select name, date from dish_table; # notice: 创建临时表之后,临时表将在你连接MySQL期间存在,当你断开时,MySQL将会自动删除表并且释放所用的空间。 # 当然,为了防止创建了同名表,我们需要首先删除。 drop table if exists temp_table;
参考文章:
总结
平平无奇的一天,又是玩游戏玩到忘了午休的一天。