影刀RPA 影刀中的SQL查询大全:从简单查询到多表联查
影刀RPA 影刀中的SQL查询大全从简单查询到多表联查作者林焱影刀内置了SQLite指令但很多新手只会最简单的SELECT *。这篇把RPA场景中最常用的SQL语句整理出来——不是数据库教科书而是你在写影刀流程时打开就能抄的速查表。基础查询-- 查全部SELECT*FROMproducts;-- 查特定列SELECTname,priceFROMproducts;-- 条件筛选SELECT*FROMproductsWHEREprice100;-- 多条件SELECT*FROMproductsWHEREprice100ANDstock0;SELECT*FROMproductsWHEREcategory数码ORcategory家电;-- 模糊搜索SELECT*FROMproductsWHEREnameLIKE%手机%;-- 排序SELECT*FROMproductsORDERBYpriceDESC;-- 降序SELECT*FROMproductsORDERBYsalesASC;-- 升序-- 取前N条SELECT*FROMproductsORDERBYsalesDESCLIMIT10;聚合统计-- 计数SELECTCOUNT(*)FROMorders;SELECTcategory,COUNT(*)ascntFROMproductsGROUPBYcategory;-- 求和SELECTSUM(amount)FROMordersWHEREdate2024-06-01;-- 平均值SELECTAVG(price)FROMproductsWHEREcategory数码;-- 最大值/最小值SELECTMAX(price),MIN(price)FROMproducts;[video(video-9wo1KKmt-1784060842079)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架)]-- 分组统计RPA最常用SELECTcategory,COUNT(*)astotal,AVG(price)asavg_price,SUM(stock)astotal_stockFROMproductsGROUPBYcategoryHAVINGtotal5-- 只显示商品数大于5的分类ORDERBYtotalDESC;去重与数据清洗-- 查重复数据SELECTname,COUNT(*)ascntFROMproductsGROUPBYnameHAVINGcnt1;-- 去重查询SELECTDISTINCTcategoryFROMproducts;-- 找NULL值SELECT*FROMproductsWHEREpriceISNULL;SELECT*FROMproductsWHEREdescriptionISNULLORdescription;-- 替换NULLSELECTname,COALESCE(price,0)aspriceFROMproducts;多表联查-- 内连接只返回两表都匹配的SELECTo.order_id,p.name,o.quantityFROMorders oINNERJOINproducts pONo.product_idp.id;-- 左连接返回左表全部右表没匹配的填NULLSELECTp.name,o.order_idFROMproducts pLEFTJOINorders oONp.ido.product_id;-- 子查询SELECTname,priceFROMproductsWHEREprice(SELECTAVG(price)FROMproducts);-- 联合查询两个表结构相同上下拼接SELECTname,priceFROMproducts_2023UNIONALLSELECTname,priceFROMproducts_2024;数据操作增删改-- 插入INSERTINTOproducts(name,price,stock)VALUES(新产品,99.00,50);-- 批量插入影刀采完数据后写入INSERTINTOdaily_sales(date,product,sales)VALUES(2024-06-26,商品A,100),(2024-06-26,商品B,85);-- 更新UPDATEproductsSETprice129.00WHEREid1;-- 条件更新UPDATEproductsSETstockstock-1WHEREidIN(1,2,3);-- 删除DELETEFROMproductsWHEREstock0;-- 清空表保留结构DELETEFROMtemp_data;RPA场景常用SQL-- 增量更新新数据插入冲突则更新INSERTORREPLACEINTOproducts(id,name,price)VALUES(1,商品A,99.00);-- 查今天的记录SELECT*FROMordersWHEREdateDATE(now);-- 查最近7天SELECT*FROMordersWHEREdateDATE(now,-7 days);-- 查本月SELECT*FROMordersWHEREstrftime(%Y-%m,date)strftime(%Y-%m,now);-- 数据对比昨天和今天的差异SELECTtoday.product,today.sales-yesterday.salesaschangeFROMdaily_sales todayLEFTJOINdaily_sales yesterdayONtoday.productyesterday.productANDyesterday.dateDATE(now,-1 days)WHEREtoday.dateDATE(now);踩坑实录坑1SQLite的日期函数和其他数据库不同MySQL用NOW()SQLite用DATE(now)。DATE_ADD在SQLite中不存在用DATE(now, 7 days)。坑2字符串拼接用 || 而不是 SELECT 商品 || name FROM products;对。SELECT 商品 name会得到数字0。坑3SQLite的LIKE默认不区分大小写英文字母TEMU店群矩阵自动化运营核价报活动WHERE name LIKE apple%能匹配 “Apple” 也匹配 “apple”。但中文字符是区分大小写的虽然中文没有大小写。坑4sqlite3默认自动提交影刀的SQLite执行完INSERT/UPDATE/DELETE自动提交不需要手动commit。但如果用Python的sqlite3模块每次修改后需要conn.commit()。坑5大量写入时性能低SQLite一次INSERT一条在循环里会很慢。用executemany()批量插入速度提升几十倍data[(1,A,99),(2,B,199),...]cursor.executemany(INSERT INTO products VALUES (?,?,?),data)写在最后SQL是RPA数据处理的基本功。90%的数据操作SQL都能搞定不需要写Python循环去处理列表。掌握上述SQL语句你就不需要为了按分类统计或查重复数据去写一堆Python代码了。