SELECT
Function
SELECT retrieves data from a table or view.
Serving as an overlaid filter for a database table, SELECT filters required data from the table using SQL keywords.
Precautions
Compared with the openGauss SELECT syntax, the SOUNDS LIKE syntax under the WHERE clause is added.
The new JOIN does not contain ON/USING. The effect is the same as that of CROSS JOIN.
The new PARTITION clause can be used to specify multiple partitions.
Syntax
- Querying data
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
{ * | {expression [ [ AS ] output_name ]} [, ...] }
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ [ START WITH condition ] CONNECT BY [NOCYCLE] condition [ ORDER SIBLINGS BY expression ] ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW {window_name AS ( window_definition )} [, ...] ]
[ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ]
[ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ]
[ LIMIT { [offset,] count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ {FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT ]} [...] ];
The specified query source from_item is as follows:
{[ ONLY ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ] [TIMECAPSULE {TIMESTAMP|CSN} expression] |( select ) [ AS ] alias [ ( column_alias [, ...] ) ] |with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ] |function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] ) |from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]}
The group clause is as follows:
( ) | expression | ( expression [, ...] ) | rollup_clause | CUBE ( { expression | ( expression [, ...] ) } [, ...] ) | GROUPING SETS ( grouping_element [, ...] )
The specified partition partition_clause is as follows:
PARTITION { ( partition_name [, ...] ) | FOR ( partition_value [, ...] ) }
NOTE: The specified partition applies only to ordinary tables.
The rollup_clause clause is as follows:
ROLLUP ( { expression | ( expression [, ...] ) } [, ...] ) | { expression | ( expression [, ...] ) } WITH ROLLUP
JOIN syntax
[JOIN | INNER JOIN] {ON join_condition | USING ( join_column [, ...] ) }
Parameter Description
WHERE clause
SOUNDS LIKE is a syntax of condition. For example, column_name sounds like 'character'; is equivalent to the comparison result of soundex(column_name) = soundex('character'). It is a Boolean value. It is used to query the data that meets the conditions through soundex processing.
NOTE:
For details about other parameters, see SELECT.
Examples
- Example of the SOUNDS LIKE: homophone column query
openGauss=# CREATE TABLE TEST(id int, name varchar);
openGauss=# INSERT INTO TEST VALUES(1, 'too');
openGauss=# SELECT * FROM TEST WHERE name SOUNDS LIKE 'two';
id | name
----+------
1 | too
(1 row)
- Use ROLLUP in the SELECT GROUP BY clause.
openGauss=# CREATE TABLESPACE t_tbspace ADD DATAFILE 'my_tablespace' ENGINE = test_engine;
CREATE TABLESPACE
openGauss=# CREATE TABLE t_with_rollup(id int, name varchar(20), area varchar(50), count int);
CREATE TABLE
openGauss=# INSERT INTO t_with_rollup values(1, 'a', 'A', 10);
INSERT 0 1
openGauss=# INSERT INTO t_with_rollup values(2, 'b', 'B', 15);
INSERT 0 1
openGauss=# INSERT INTO t_with_rollup values(2, 'b', 'B', 20);
INSERT 0 1
openGauss=# INSERT INTO t_with_rollup values(3, 'c', 'C', 50);
INSERT 0 1
openGauss=# INSERT INTO t_with_rollup values(3, 'c', 'C', 15);
INSERT 0 1
openGauss=# SELECT name, sum(count) FROM t_with_rollup GROUP BY ROLLUP(name);
name | sum
------+-----
a | 10
b | 35
c | 65
| 110
(4 rows)
openGauss=# SELECT name, sum(count) FROM t_with_rollup GROUP BY (name) WITH ROLLUP;
name | sum
------+-----
a | 10
b | 35
c | 65
| 110
(4 rows)
openGauss=# create table join_1(col1 int4, col2 int8);
openGauss=# create table join_2(col1 int4, col2 int8);
openGauss=# insert into join_1 values(1, 2), (3, 3);
openGauss=# insert into join_2 values(1, 1), (2, 3), (4, 4);
openGauss=# select join_1 join join_2;
col1 | col2 | col1 | col2
------+------+------+------
1 | 2 | 1 | 1
1 | 2 | 2 | 3
1 | 2 | 4 | 4
3 | 3 | 1 | 1
3 | 3 | 2 | 3
3 | 3 | 4 | 4
openGauss=# select join_1 inner join join_2;
col1 | col2 | col1 | col2
------+------+------+------
1 | 2 | 1 | 1
1 | 2 | 2 | 3
1 | 2 | 4 | 4
3 | 3 | 1 | 1
3 | 3 | 2 | 3
3 | 3 | 4 | 4
- Use the SELECT FROM PARTITION clause to specif multiple partitions.
openGauss=# create table multi_partition_select_test(C_INT INTEGER) partition by range(C_INT)
openGauss-# (
openGauss(# partition test_part1 values less than (400),
openGauss(# partition test_part2 values less than (700),
openGauss(# partition test_part3 values less than (1000)
openGauss(# );
CREATE TABLE
openGauss=# insert into multi_partition_select_test values(111);
INSERT 0 1
openGauss=# insert into multi_partition_select_test values(555);
INSERT 0 1
openGauss=# insert into multi_partition_select_test values(888);
INSERT 0 1
openGauss=# select a.* from multi_partition_select_test partition (test_part1, test_part2) a;
c_int
-------
111
555
(2 rows)