select.sql
来自「postgresql8.3.4源码,开源数据库」· SQL 代码 · 共 205 行
SQL
205 行
---- SELECT---- btree index-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1--SELECT * FROM onek WHERE onek.unique1 < 10 ORDER BY onek.unique1;---- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1--SELECT onek.unique1, onek.stringu1 FROM onek WHERE onek.unique1 < 20 ORDER BY unique1 using >;---- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2--SELECT onek.unique1, onek.stringu1 FROM onek WHERE onek.unique1 > 980 ORDER BY stringu1 using <; ---- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |-- sort +1d -2 +0nr -1--SELECT onek.unique1, onek.string4 FROM onek WHERE onek.unique1 > 980 ORDER BY string4 using <, unique1 using >; ---- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |-- sort +1dr -2 +0n -1--SELECT onek.unique1, onek.string4 FROM onek WHERE onek.unique1 > 980 ORDER BY string4 using >, unique1 using <; ---- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |-- sort +0nr -1 +1d -2--SELECT onek.unique1, onek.string4 FROM onek WHERE onek.unique1 < 20 ORDER BY unique1 using >, string4 using <;---- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |-- sort +0n -1 +1dr -2--SELECT onek.unique1, onek.string4 FROM onek WHERE onek.unique1 < 20 ORDER BY unique1 using <, string4 using >;---- test partial btree indexes---- As of 7.2, planner probably won't pick an indexscan without stats,-- so ANALYZE first. Also, we want to prevent it from picking a bitmapscan-- followed by sort, because that could hide index ordering problems.--ANALYZE onek2;SET enable_seqscan TO off;SET enable_bitmapscan TO off;SET enable_sort TO off;---- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1--SELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10;---- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1--SELECT onek2.unique1, onek2.stringu1 FROM onek2 WHERE onek2.unique1 < 20 ORDER BY unique1 using >;---- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2--SELECT onek2.unique1, onek2.stringu1 FROM onek2 WHERE onek2.unique1 > 980;RESET enable_seqscan;RESET enable_bitmapscan;RESET enable_sort;SELECT two, stringu1, ten, string4 INTO TABLE tmp FROM onek;---- awk '{print $1,$2;}' person.data |-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |-- awk 'BEGIN{FS=" ";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data---- SELECT name, age FROM person*; ??? check if differentSELECT p.name, p.age FROM person* p;---- awk '{print $1,$2;}' person.data |-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |-- awk 'BEGIN{FS=" ";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |-- sort +1nr -2--SELECT p.name, p.age FROM person* p ORDER BY age using >, name;---- Test some cases involving whole-row Var referencing a subquery--select foo from (select 1) as foo;select foo from (select null) as foo;select foo from (select 'xyzzy',1,null) as foo;---- Test VALUES lists--select * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j) WHERE onek.unique1 = v.i and onek.stringu1 = v.j;-- a more complex case-- looks like we're coding lisp :-)select * from onek, (values ((select i from (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i) order by i asc limit 1))) bar (i) where onek.unique1 = bar.i;-- try VALUES in a subqueryselect * from onek where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99)) order by unique1;-- VALUES is also legal as a standalone query or a set-operation memberVALUES (1,2), (3,4+4), (7,77.7);VALUES (1,2), (3,4+4), (7,77.7)UNION ALLSELECT 2+2, 57UNION ALLSELECT * FROM int8_tbl;---- Test ORDER BY options--CREATE TEMP TABLE foo (f1 int);INSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);SELECT * FROM foo ORDER BY f1;SELECT * FROM foo ORDER BY f1 ASC; -- same thingSELECT * FROM foo ORDER BY f1 NULLS FIRST;SELECT * FROM foo ORDER BY f1 DESC;SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;-- check if indexscans do the right thingsCREATE INDEX fooi ON foo (f1);SET enable_sort = false;SELECT * FROM foo ORDER BY f1;SELECT * FROM foo ORDER BY f1 NULLS FIRST;SELECT * FROM foo ORDER BY f1 DESC;SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;DROP INDEX fooi;CREATE INDEX fooi ON foo (f1 DESC);SELECT * FROM foo ORDER BY f1;SELECT * FROM foo ORDER BY f1 NULLS FIRST;SELECT * FROM foo ORDER BY f1 DESC;SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;DROP INDEX fooi;CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);SELECT * FROM foo ORDER BY f1;SELECT * FROM foo ORDER BY f1 NULLS FIRST;SELECT * FROM foo ORDER BY f1 DESC;SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;---- Test some corner cases that have been known to confuse the planner---- ORDER BY on a constant doesn't really need any sortingSELECT 1 AS x ORDER BY x;-- But ORDER BY on a set-valued expression doescreate function sillysrf(int) returns setof int as 'values (1),(10),(2),($1)' language sql immutable;select sillysrf(42);select sillysrf(-1) order by 1;drop function sillysrf(int);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?