2e6d18e7dc
* feat(pgsql: upgrade keywords and refresh them to parser file): pgsql * feat(pgsql: check create table's syntax): pgsql * feat(pgsql: check and update drop syntax): pgsql: check and update drop syntax * feat: pgsql: check create's sql syntax and update g4 file * feat: pgsql:complete other's sql and syntax except select, insert, drop * feat: pgsql: update create, delete, insert, select, update and others' syntax * test: pgsql: update alter's sql * feat: pgsql: update syntax g4 file * feat: pgsql: upgrade keywords to without '_P' in lexer and parser file * docs: pgsql: update copyright and Reference of parser and lexer --------- Co-authored-by: zhaoge <>
176 lines
5.7 KiB
SQL
176 lines
5.7 KiB
SQL
-- SELECT
|
|
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression) SELECT ALL random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) UNION ALL (SELECT * FROM others) ORDER BY salary DESC LIMIT ALL OFFSET start FETCH NEXT ROWS ONLY FOR UPDATE;
|
|
|
|
WITH query_name (id) AS (SELECT id FROM table_expression) SELECT DISTINCT random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) INTERSECT DISTINCT (SELECT * FROM others) ORDER BY salary ASC LIMIT ALL OFFSET start FETCH NEXT ROW ONLY FOR NO KEY UPDATE;
|
|
|
|
WITH query_name (id) AS (SELECT id FROM table_expression) SELECT DISTINCT ON (col1) random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) EXCEPT (SELECT * FROM others) ORDER BY salary USING > NULL FIRST LIMIT 40 OFFSET start FETCH NEXT ROW ONLY FOR SHARE;
|
|
|
|
WITH query_name (id) AS (SELECT id FROM table_expression) SELECT DISTINCT ON (col1) random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) EXCEPT (SELECT * FROM others) ORDER BY salary USING > NULL FIRST LIMIT 40 OFFSET start FETCH NEXT ROW ONLY FOR KEY SHARE OF table_name NOWAIT;
|
|
|
|
-- SELECT INTO
|
|
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression)
|
|
SELECT DISTINCT ON (col2)
|
|
INTO TEMPORARY TABLE new_table
|
|
FROM from_item
|
|
WHERE name2=name1
|
|
GROUP BY name
|
|
HAVING s > 8
|
|
WINDOW window_name AS ( RANGE UNBOUNDED PRECEDING )
|
|
INTERSECT DISTINCT (SELECT * FROM tb)
|
|
ORDER BY expression_1 USING > NULLS FIRST
|
|
LIMIT ALL
|
|
OFFSET start ROW
|
|
FETCH FIRST 234 ROWS ONLY
|
|
FOR UPDATE OF table_name NOWAIT;
|
|
|
|
-- The Most Easy
|
|
SELECT * ;
|
|
|
|
-- Querying a Table
|
|
|
|
SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
|
|
|
|
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
|
|
|
|
SELECT * FROM weather
|
|
WHERE city = 'San Francisco' AND prcp > 0.0;
|
|
|
|
SELECT * FROM weather
|
|
ORDER BY city;
|
|
|
|
SELECT * FROM weather
|
|
ORDER BY city, temp_lo;
|
|
|
|
SELECT DISTINCT city
|
|
FROM weather;
|
|
|
|
SELECT DISTINCT city
|
|
FROM weather
|
|
ORDER BY city;
|
|
|
|
-- Joins Between Tables
|
|
SELECT weather.city, weather.temp_lo, weather.temp_hi,
|
|
weather.prcp, weather.date, cities.location
|
|
FROM weather NATURAL LEFT OUTER JOIN cities
|
|
WHERE cities.name = weather.city;
|
|
|
|
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
|
|
W2.city, W2.temp_lo AS low, W2.temp_hi AS high
|
|
FROM weather W1 NATURAL RIGHT OUTER JOIN weather W2
|
|
WHERE W1.temp_lo < W2.temp_lo
|
|
AND W1.temp_hi > W2.temp_hi;
|
|
|
|
SELECT *
|
|
FROM weather w NATURAL FULL OUTER JOIN cities c
|
|
WHERE w.city = c.name;
|
|
|
|
SELECT *
|
|
FROM weather w CROSS JOIN cities c
|
|
WHERE w.city = c.name;
|
|
|
|
-- Aggregate Functions
|
|
|
|
SELECT city, max(temp_lo)
|
|
FROM weather
|
|
WHERE city LIKE 'S%'
|
|
GROUP BY city
|
|
HAVING max(temp_lo) < 40;
|
|
|
|
-- Window Functions
|
|
|
|
SELECT depname, empno, salary, enroll_date
|
|
FROM
|
|
(SELECT depname, empno, salary, enroll_date,
|
|
rank() OVER (PARTITION BY depname ORDER BY salary DESC, empno) AS pos
|
|
FROM empsalary
|
|
) AS ss
|
|
WHERE pos < 3;
|
|
|
|
SELECT sum(salary) OVER w, avg(salary) OVER w
|
|
FROM empsalary
|
|
WINDOW w AS (PARTITION BY depname ORDER BY salary DESC);
|
|
|
|
SELECT name, altitude
|
|
FROM ONLY cities
|
|
WHERE altitude > 500;
|
|
|
|
SELECT name, altitude
|
|
FROM cities*
|
|
WHERE altitude > 500;
|
|
|
|
SELECT c.tableoid, c.name, c.altitude
|
|
FROM cities c
|
|
WHERE c.altitude > 500;
|
|
|
|
-- Overview
|
|
WITH query_name (id) AS (SELECT id FROM table_expression) SELECT random() FROM table_expression ORDER BY salary DESC
|
|
|
|
-- Partitioning and Constraint Exclusion
|
|
SET constraint_exclusion = on;
|
|
SELECT count(*) FROM measurement WHERE logdate >= DATE '2008-01-01';
|
|
|
|
-- Table Functions
|
|
|
|
SELECT * FROM foo
|
|
WHERE foosubid IN (
|
|
SELECT foosubid
|
|
FROM getfoo(foo.fooid) z
|
|
WHERE z.fooid = foo.fooid
|
|
);
|
|
|
|
SELECT *
|
|
FROM dblink('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc')
|
|
AS t1(proname name, prosrc text)
|
|
WHERE proname LIKE 'bytea%';
|
|
|
|
-- The Schema Search Path
|
|
SELECT 3 OPERATOR(pg_catalog.+) 4;
|
|
|
|
|
|
-- Monetary Types
|
|
SELECT '12.34'::float8::numeric::money;
|
|
|
|
-- Binary Data Types
|
|
SELECT '\xDEADBEEF';
|
|
|
|
-- bytea Escape Format
|
|
SELECT 'abc \153\154\155 \052\251\124'::bytea;
|
|
|
|
-- Date/Time Types Interval Input
|
|
SELECT EXTRACT(days from '80 hours'::interval);
|
|
|
|
-- Text Search Types
|
|
SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;
|
|
|
|
SELECT $$the lexeme ' ' contains spaces$$::tsvector;
|
|
|
|
SELECT $$the lexeme 'Joe''s' contains a quote$$::tsvector;
|
|
|
|
SELECT 'a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12'::tsvector;
|
|
|
|
SELECT to_tsvector('english', 'The Fat Rats');
|
|
|
|
SELECT 'fat & rat & ! cat'::tsquery;
|
|
|
|
SELECT to_tsquery('Fat:ab & Cats');
|
|
|
|
-- Arrays --Accessing Arrays
|
|
SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];
|
|
|
|
SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';
|
|
|
|
-- Arrays -- Searching in Arrays
|
|
SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR
|
|
pay_by_quarter[2] = 10000 OR
|
|
pay_by_quarter[3] = 10000 OR
|
|
pay_by_quarter[4] = 10000;
|
|
|
|
-- Array Input and Output Syntax
|
|
SELECT f1[1][-2][3] AS e1, f1[1][-1][5] AS e2
|
|
FROM (SELECT '[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[] AS f1) AS ss;
|
|
|
|
-- Containment
|
|
SELECT int4range(10, 20) @> 3;
|
|
|
|
-- Object Identifier Types
|
|
SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass; |