近期SQL笔记

近期SQL笔记

一些SQL查询语句记录

1.分页查询

sql 复制代码
SELECT * FROM tbl_note LIMIT 10 OFFSET 20

2.查询总条数

sql 复制代码
SELECT COUNT(*) FROM tbl_note;

3.多表视图

sql 复制代码
 SELECT note.id,
    note.title,
    note.description,
    note.url,
    note.createat,
    ct.name AS category,
    array_agg(tag.name) AS tags
   FROM tbl_notes note,
    tbl_tags tag,
    tbl_note_tag nt,
    tbl_categories ct
  WHERE note.id = nt.noteid AND tag.id = nt.tagid AND note.categoryid = ct.id
  GROUP BY note.id, note.title, note.description, note.url, ct.name;

4.模糊查询

sql 复制代码
SELECT * FROM tbl_note WHERE title LIKE '%测试标题%';

5.排序查询

sql 复制代码
SELECT * FROM tbl_note ORDER BY createat DESC;

补:插入多个表数据的函数

typescript 复制代码
CREATE OR REPLACE FUNCTION "public"."add_note"("param_title" varchar, "param_description" text, "param_url" varchar, "param_categoryid" varchar, "tags" _varchar)
  RETURNS TABLE("result" bool, "msg" text) AS $BODY$BEGIN
	-- Routine body goes here...
	DECLARE
  new_noteid VARCHAR;
  new_tagid VARCHAR;
	BEGIN
			INSERT INTO tbl_notes (title,description,url,categoryid) VALUES (param_title,param_description,param_url,param_categoryid) RETURNING id INTO new_noteid;
			FOR i IN 1..array_length(tags, 1) LOOP
				INSERT INTO tbl_tags(name) VALUES (tags[i]) ON CONFLICT (name) DO NOTHING RETURNING id INTO new_tagid;
				
				IF NOT FOUND THEN
				  SELECT id INTO new_tagid
				FROM tbl_tags
				  WHERE name = tags[i];
			  END IF;
				INSERT INTO tbl_note_tag (noteid,tagid) VALUES (new_noteid,new_tagid);
      END LOOP;
			
	
			RETURN QUERY SELECT TRUE as result,'add note success' as msg;
	EXCEPTION
	WHEN OTHERS THEN
			PERFORM write_log('add_note','Excepted error:'||SQLERRM);
			RETURN QUERY SELECT FALSE as result, 'Excepted error:'||SQLERRM;
	END;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000
相关推荐
JIngJaneIL1 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
微学AI2 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
廋到被风吹走2 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
zhdy567893 小时前
最简单方法 设置matlab坐标轴刻度标签的字号,设置坐标轴标题和图形标题,并指定字号。画出的图片背景设置为白色,
笔记
崇山峻岭之间3 小时前
Matlab学习笔记02
笔记·学习·matlab
木木em哈哈3 小时前
C语言多线程
笔记
有想法的py工程师3 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
Nandeska3 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河01043 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库
过期动态3 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql