¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

SELECT

名前

SELECT, TABLE, WITH -- �ơ��֥�⤷���ϥӥ塼����Ԥ򸡺�����

概要

[ WITH [ RECURSIVE ] with_query [, ...] ]SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ [ AS ] output_name ] [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]

������from_item�ϰʲ��Τ����줫�Ǥ���


    [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    ( 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 [, ...] ) ]

�ޤ�with_query�ϰʲ����̤�Ǥ���

    with_query_name [ ( column_name [, ...] ) ] AS ( select )

TABLE { [ ONLY ] table_name [ * ] | with_query_name }

����

SELECT��0�İʾ�Υơ��֥뤫��Ԥ��֤��ޤ��� SELECT�ΰ���Ū�ʽ����ϰʲ����̤�Ǥ���

  1. WITH�ꥹ����Τ��٤Ƥ��䤤��碌���׻�����ޤ��� �����ϼ¼���FROM�ꥹ���⤫�黲�Ȳ�ǽ�ʰ���ơ��֥�Ȥ����󶡤���ޤ��� FROM���2��ʾ廲�Ȥ����WITH�䤤��碌�ϰ��٤Τ߷׻�����ޤ��� �ʸ�Ҥ�WITH���򻲾Ȥ��Ƥ�����������

  2. FROM�ꥹ�Ȥˤ��������Ǥ��׻�����ޤ� ��FROM�ꥹ�Ȥ����Ǥϼ¥ơ��֥뤫���ۥơ��֥�Τ����줫�Ǥ��ˡ� FROM�ꥹ�Ȥ�ʣ�������Ǥ����ꤵ�줿��硢�����ϥ�������礵��ޤ� �ʸ�Ҥ�FROM���򻲾Ȥ��Ƥ��������ˡ�

  3. WHERE�礬���ꤵ�줿��硢�����������ʤ��Ԥ����ƽ��Ϥ����������ޤ� �ʸ�Ҥ�WHERE���򻲾Ȥ��Ƥ��������ˡ�

  4. GROUP BY�礬���ꤵ�줿��硢1�Ĥޤ���ʣ�����ͤ����˹礦�Ԥ��Ȥ˥��롼�פ�ʬ���ƽ��Ϥ���ޤ��� HAVING�礬���ꤵ�줿��硢���ꤷ�������������ʤ����롼�פϼ�������ޤ� �ʸ�Ҥ�GROUP BY����HAVING���򻲾Ȥ��Ƥ��������ˡ�

  5. �ºݤˤϡ����򤵤줿�ƹԤ��Ф��ơ�SELECT���ϼ�����Ѥ��Ʒ׻�������̤ιԤ����Ϥ���ޤ� �ʸ�Ҥ�SELECT�ꥹ���򻲾Ȥ��Ƥ��������ˡ�

  6. UNION��INTERSECT��EXCEPT�黻�Ҥ���Ѥ���ȡ�ʣ����SELECTʸ�ν��Ϥ�1�Ĥη�̽���ˤޤȤ�뤳�Ȥ��Ǥ��ޤ��� UNION�黻�Ҥϡ�ξ���η�̽����¸�ߤ���Ԥȡ������η�̽����¸�ߤ���Ԥ������֤��ޤ��� INTERSECT�黻�Ҥϡ�ξ���η�̽����¸�ߤ���Ԥ��֤��ޤ��� EXCEPT�黻�Ҥϡ��ǽ�η�̽���ˤ��ꡢ2���ܤη�̽���ˤʤ��Ԥ��֤��ޤ��� ALL�����ꤵ��ʤ��¤ꡢ������ξ��⡢��ʣ����Ԥϼ�������ޤ� �ʸ�Ҥ�UNION����INTERSECT����EXCEPT���򻲾Ȥ��Ƥ��������ˡ�

  7. ORDER BY�礬���ꤵ�줿��硢�֤����Ԥϻ��ꤷ�����֤ǥ����Ȥ���ޤ��� ORDER BY�����ꤵ��ʤ����ϡ������ƥब�׻������Ǹ��Ĥ������֤ǹԤ��֤���ޤ� �ʸ�Ҥ�ORDER BY���򻲾Ȥ��Ƥ��������ˡ�

  8. DISTINCT�Ϸ�̤����ʣ�Ԥ�������ޤ��� DISTINCT ON�ϻ��ꤷ�����Ƥμ��˰��פ���Ԥ�������ޤ��� ALL�Ǥϡ���ʣ�Ԥ�ޤᡢ���Ƥθ���Ԥ��֤��ޤ��ʤ��줬�ǥե���ȤǤ��� �ܤ����ϡ���Ҥ�DISTINCT���򻲾Ȥ��Ƥ��������ˡ�

  9. LIMIT�ʤޤ���FETCH FIRST�ˤ��뤤��OFFSET�礬���ꤵ�줿��硢SELECTʸ�Ϸ�̹Ԥΰ���ʬ�Τߤ��֤��ޤ� �ʾܤ����ϡ���Ҥ�LIMIT���򻲾Ȥ��Ƥ��������ˡ�

  10. FOR UPDATE�ޤ���FOR SHARE�����ꤹ��ȡ�SELECTʸ�ϰ���³���Ԥ��빹��������������Ԥ���å����ޤ� �ʾܤ����ϡ���Ҥ�FOR UPDATE/FOR SHARE���򻲾Ȥ��Ƥ��������ˡ�

SELECT���ޥ����ǻȤ����󤽤줾����Ф���SELECT���¤�ɬ�פǤ��� FOR UPDATE�ޤ���FOR SHARE����Ѥ���ˤϡ�����ˡ�������Ǥ���褦�˳ƥơ��֥�Ǿ��ʤ��Ȥ�1����Ф����UPDATE���¤�ɬ�פǤ���

�ѥ�᡼��

WITH��

WITH��ˤ����䤤��碌���̾���ˤ�껲�Ȳ�ǽ�ʡ�1�İʾ�����䤤��碌����ꤹ�뤳�Ȥ��Ǥ��ޤ��� ���䤤��碌�ϼ¼�Ū�˼��䤤��碌�δ֤ΰ��Ū�ʥơ��֥뤫�ӥ塼�Τ褦��ư��ޤ���

�ʥ������޽������ʤ���̾�����WITH�䤤��碌�ǻ��ꤷ�ʤ���Фʤ�ޤ��� ��ά��ǽ�Ǥ�������̾�Υꥹ�Ȥ���ꤹ�뤳�Ȥ�Ǥ��ޤ��� ������ά����ȡ���̾�����䤤��碌������ꤵ��ޤ���

RECURSIVE�����ꤵ���ȡ����䤤��碌�ϼ��Ȥ�̾���ˤ�껲�Ȥ��뤳�Ȥ��Ǥ��ޤ��� �����������䤤��碌�ϰʲ��Τ褦�ʷ����Ǥʤ���Фʤ�ޤ���

non_recursive_term UNION [ ALL ] recursive_term

�����ǺƵ�Ū�ʼ��ʻ��Ȥ�UNION�α��դ˸���ʤ���Фʤ�ޤ��� �䤤��碌������1�ĤκƵ�Ū�ʼ��ʻ��ȤΤߤ�������ޤ���

RECURSIVE�ˤ�¾�ˤ⡢WITH�䤤��碌������̤�Ǥʤ��Ƥ⹽��ʤ��Ȥ������̤�����ޤ��� �䤤��碌�ϥꥹ�Ȥθ�ˤ����̤Τ�Τ򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ��� �ʤ�������󤹤뻲�Ȥ����Ū�ʻ��Ȥϼ�������Ƥ��ޤ��󡣡� RECURSIVE���ʤ��ȡ�WITH�䤤��碌�ϼ��䤤��碌�����̤���WITH�䤤��碌�Τ�����WITH�ꥹ�Ȥ������ˤ����ΤΤߤ򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ���

WITH�䤤��碌��ͭ�Ѥ������ϡ� ����餬���䤤��碌��ʣ���󻲾Ȥ��Ƥ����Ȥ��Ƥ⡢���䤤��碌�μ¹���������٤Τ�ɾ����������Ǥ���

�ɲþ���ˤĤ��Ƥ�項7.8�򻲾Ȥ��Ƥ���������

FROM��

FROM��ˤ�SELECT���оݤȤʤ륽�����ơ��֥��1�İʾ���ꤷ�ޤ��� ʣ���Υ����������ꤵ�줿��硢��̤����ƤΥ�������ľ�ѡʥ��������ˤȤʤ�ޤ��� ���������̾����������դ��ơ�ľ�ѤΤ����������֤��褦�˷�̹Ԥ���ꤷ�ޤ���

FROM��ˤϰʲ������Ǥ����Ǥ��ޤ���

table_name

��¸�Υơ��֥�⤷���ϥӥ塼��̾���Ǥ��ʥ������޽���̾��ġˡ� ONLY�����ꤵ�줿��硢���Υơ��֥�Τߤ�������󤵤�ޤ��� ONLY�����ꤵ��ʤ���硢�ơ��֥�Ȥ����Ѿ��������ƤΥơ��֥뤬������󤵤�ޤ���

alias

��̾��ޤ�FROM�����ƥ������̾�Ǥ��� ��̾�ϡ������ʷ�ˤ��뤿�ᡢ�⤷���ϡ����ʷ���Ʊ���ơ��֥��ʣ���󥹥���󤹤���ˤ�ۣ�椵��ʤ�������˻Ȥ��ޤ��� ��̾�����ꤵ��Ƥ�����ϡ�������̾�ˤ�äƼºݤΥơ��֥�̾�ޤ��ϴؿ�̾�������˱�����ޤ��� �㤨�С�FROM foo AS f�Ȼ��ꤵ��Ƥ����硢�ʹߤ�SELECTʸ�ǤϤ���FROM�����ƥ��foo�ǤϤʤ�f�Ȥ��ƻ��Ȥ���ɬ�פ�����ޤ��� �ơ��֥����̾������С����Υơ��֥��ʣ�������̾�����֤������������̾�ꥹ�Ȥ򵭽Ҥ��뤳�Ȥ��Ǥ��ޤ���

select

FROM��Ǥϡ���SELECT��Ȥ����Ȥ��Ǥ��ޤ��� SELECT���ޥ�ɤμ¹��桢��SELECT�ν��Ϥϰ���ơ��֥�Ǥ��뤫�Τ褦��ư��ޤ��� ��SELECT�ϳ�̤ǰϤޤ�ʤ���Фʤ�ޤ��󡣤ޤ���ɬ����̾��Ϳ���Ƥ����ʤ���Фʤ�ޤ��� VALUES���ޥ�ɤ򤳤��ǻ��Ѥ��뤳�Ȥ�Ǥ��ޤ���

with_query_name

WITH�䤤��碌�ϡ��䤤��碌��̾������������ơ��֥�̾�Ǥ��뤫�Τ褦�ˡ�̾���򵭽Ҥ��뤳�Ȥǻ��Ȥ���ޤ��� �ʼºݤˤ�WITH�䤤��碌�ϼ��䤤��碌���оݤȤ���ơ��֥��Ʊ��̾���μ¥ơ��֥���ä��ޤ��� ɬ�פʤ�Хơ��֥�̾�򥹥����޽������뤳�Ȥ�Ʊ��̾���μ¥ơ��֥�򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ����� �ơ��֥��Ʊ�ͤ���ˡ����̾���󶡤��뤳�Ȥ��Ǥ��ޤ���

function_name

FROM��Ǥϡ��ؿ��ƤӽФ�����Ѥ��뤳�Ȥ��Ǥ��ޤ� �ʤ�����ä˴ؿ�����̥��åȤ��֤�����ͭ�ѤǤ�����Ǥ�դδؿ�����Ѥ��뤳�Ȥ�Ǥ��ޤ��ˡ� SELECT���ޥ�ɤμ¹���ϡ����δؿ��η�̤ϰ���ơ��֥�Ǥ��뤫�Τ褦��ư��ޤ��� �ޤ�����̾����Ѥ��뤳�Ȥ�Ǥ��ޤ��� ��̾�����ꤵ��Ƥ���С�����������̾�ꥹ�Ȥ���ꤷ�ơ��ؿ���ʣ�緿������ͤ�°�����Ф�������̾���󶡤��뤳�Ȥ�Ǥ��ޤ��� �ؿ���record�ǡ��������֤����������Ƥ�����ϡ���̾���ʤ��AS������ɤȡ������³����column_name data_type [, ... ]���Ȥ���������������ꥹ�Ȥ�ɬ�פǤ��� ������ꥹ�Ȥϡ��ؿ��ˤ�ä��֤����ºݤ���ο�����ӥǡ������˰��פ��Ƥ��ʤ���Фʤ�ޤ���

join_type

�ʲ��Τ����줫�Ǥ���

  • [ INNER ] JOIN

  • LEFT [ OUTER ] JOIN

  • RIGHT [ OUTER ] JOIN

  • FULL [ OUTER ] JOIN

  • CROSS JOIN

INNER�����OUTER��緿�Ǥϡ��������ʤ����NATURAL, ON join_condition��USING (join_column [, ...])�Τ����줫1�ĤΤߤ���ꤹ��ɬ�פ�����ޤ��� ���줾��ΰ�̣�ϸ�Ҥ��ޤ��� CROSS JOIN�Ǥϡ������ζ�򵭽Ҥ��ʤ��Ƥ⹽���ޤ���

JOIN��ϡ�2�Ĥ�FROM�����ƥ�����դ��ޤ��� ����Ҥν��֤���뤿��ˡ�ɬ�פʤ�г�̤���Ѥ��Ƥ��������� ��̤��ʤ��ȡ�JOIN�Ϻ����鱦������Ҥˤ��ޤ��� �ɤΤ褦�ʾ��Ǥ�JOIN�ϡ�����ޤ�ʬ����줿FROM���ܤ��⶯������դ�������ޤ���

CROSS JOIN��INNER JOIN��ľ�Ѥ�1���������ޤ�������ϡ�FROM�κǾ�̤�2�Ĥι��ܤ��礷����̤�Ʊ��Ǥ��� ���������ʻ��ꤹ��С˷����ˤ�ä����¤򤫤��뤳�Ȥ��Ǥ��ޤ��� CROSS JOIN��INNER JOIN ON (true)�������Ǥ��ꡢ���ˤ�äƺ�������ԤϤ���ޤ��� �����η�緿�ϵ��Ҿ���ص��Τ���������Ѱդ���Ƥ��ޤ��� �������äơ��̾��FROM��WHERE��¹Ԥ��ʤ���в���Ԥ��ޤ���

LEFT OUTER JOIN�ϡ����˹礦ľ�Ѥ����ƤιԡʤĤޤꡢ���η��������������Ƥ��Ȥ߹�碌�ˤ˲ä�����¦�ơ��֥����ǡ���¦�ơ��֥�ˤϷ������������Ԥ�¸�ߤ��ʤ��ä��ԤΥ��ԡ����֤��ޤ��� ���κ�¦�ơ��֥�ιԤ����̤Υơ��֥�����˳�ĥ���뤿��ˡ���¦�ơ��֥뤬������ˤ�NULL�ͤ���������ޤ��� �ޥå�����Ԥ������ϡ�JOIN�缫�Ȥξ��Τߤ���θ����뤳�Ȥ����դ��Ƥ��������� ¾�γ��������ϸ��Ŭ�Ѥ���ޤ���

�դˡ�RIGHT OUTER JOIN�ϡ����Ƥη��Ԥȡ���¦�ơ��֥�����ƤϤޤ��Τ��ʤ��ä���¦�ιԡʺ�¦��NULL�dz�ĥ����Ƥ��ޤ��ˤ�1�Ԥ��Ĥ��֤��ޤ��� �����Υơ��֥�������ؤ����LEFT OUTER JOIN���Ѵ��Ǥ���Τǡ�RIGHT OUTER JOIN�ϵ��Ҿ���ص���ޤ뤿���Ѱդ���Ƥ���˲᤮�ޤ���

FULL OUTER JOIN�ϡ����Ƥη��Ԥ˲ä������פ��ʤ��ä���¦�ιԡʱ�¦��NULL�dz�ĥ�ˡ����פ��ʤ��ä���¦�ιԡʺ�¦��NULL�dz�ĥ�ˤ������֤��ޤ���

ON join_condition

join_condition�ϡ����ˤ����ƤɤιԤ����פ��뤫����ꤹ�롢boolean�����ͤ��֤����Ǥ���WHERE���������Ƥ��ޤ��ˡ�

USING ( join_column [, ...] )

USING ( a, b, ... )���ON left_table.a = right_table.a AND left_table.b = right_table.b ...�ξ�ά���Ǥ��� USING�����������ξ���ǤϤʤ������Τߤ����ν��Ϥ˴ޤޤ�뤳�Ȥ��̣���ޤ���

NATURAL

NATURAL�ϡ�2�ĤΥơ��֥����Ʊ��̾������ĹԤ����ƻ��ꤷ��USING�ꥹ�Ȥξ�ά���Ǥ���

WHERE��

WHERE����̾�ʲ��η����Ȥʤ�ޤ��ʤ��ζ�Ͼ�ά��ǽ�Ǥ��ˡ�

WHERE condition

condition�ϡ�ɾ���η�̤Ȥ���boolean�����֤�Ǥ�դμ��Ǥ��� ���ξ����������ʤ��Ԥ����ƽ��Ϥ����������ޤ��� ���Ƥ��ѿ��˼ºݤιԤ��ͤ��������ơ����������֤���硢���ιԤϾ����������Ȥߤʤ���ޤ���

GROUP BY��

GROUP BY����̾�ʲ��η����Ȥʤ�ޤ��ʤ��ζ�Ͼ�ά��ǽ�Ǥ��ˡ�

GROUP BY expression [, ...]

GROUP BY�ϡ����롼�ײ��Τ����Ϳ����줿����ɾ��������̤�Ʊ���ͤˤʤä��Ԥ�1�ĤιԤˤޤȤ�뵡ǽ������ޤ��� expression�ˤϡ��������̾�����������SELECT�ꥹ�ȹ��ܡˤ�̾��/���������뤤����������ͤ�׻�����Ǥ�դμ����뤳�Ȥ��Ǥ��ޤ��� Ƚ�Ǥ��Ĥ��ʤ����ϡ�GROUP BY��̾���Ͻ�����̾�ǤϤʤ�������̾�Ȥ��Ʋ�ᤵ��ޤ���

����ؿ������Ѥ��줿��硢�ƥ��롼��������ƤιԤ��оݤ˷׻����Ԥ�졢��̤Ȥ��ƥ��롼�פ��Ȥ��ͤ���������ޤ� �ʰ���GROUP BY���ʤ���С�����ؿ������򤵤줿���ƤιԤ��оݤ˷׻���Ԥ���1�Ĥ��ͤ��������ޤ��ˡ� GROUP BY��¸�ߤ����硢����ؿ������ʳ��ǡ����롼�ײ�����Ƥ��ʤ���򻲾Ȥ���SELECT�ꥹ�Ȥ�̵���ˤʤ�ޤ��� ���롼�ײ�����Ƥ��ʤ���ˤĤ����֤�����ͤ�ʣ�����ͤˤʤäƤ��ޤ���ǽ�������뤫��Ǥ���

HAVING��

HAVING���̾�ʲ��η��ˤʤ�ޤ��ʤ��ζ�Ͼ�ά��ǽ�Ǥ��ˡ�

HAVING condition

condition��WHERE��ǻ��ꤹ���Τ�Ʊ���Ǥ���

HAVING�ϡ����롼�ײ����줿�Ԥ���ǡ������������ʤ��Ԥ��������ǽ������ޤ��� HAVING��WHERE�ϼ��������ۤʤ�ޤ��� WHERE����GROUP BY��Ŭ�����˸ġ��ιԤ��Ф��ƥե��륿��ݤ���Τ��Ф���HAVING�ϡ�GROUP BY��Ŭ�Ѹ���������줿���롼�ײ����줿�Ԥ��Ф��ƥե��륿�򤫤��ޤ��� condition��ǻ��Ѥ�����ϡ�����ؿ���ǻ��Ѥ��줿��Τ���������롼�ײ����줿����դ˻��Ȥ����ΤǤʤ���Фʤ�ޤ���

HAVING�礬����ȡ�GROUP BY�礬�ʤ��ä��Ȥ��Ƥ��䤤��碌�ϥ��롼�ײ����줿�䤤��碌�ˤʤ�ޤ��� GROUP BY�������ʤ��䤤��碌������ؿ���ޤ����Ʊ�ͤǤ��� ���򤵤줿�ԤϤ��٤ơ�1�ĤΥ��롼�פ���������ΤȤߤʤ���ޤ����ޤ���SELECT�ꥹ�Ȥ�HAVING��Ǥϡ�����ؿ������Ϥ���ơ��֥��󤷤����Ȥ��뤳�Ȥ��Ǥ��ޤ��� ���������䤤��碌�Ǥϡ�HAVING�����ξ��ˤ�ñ��ιԤ򡢿��ʳ��ξ���0�Ԥ���Ϥ��ޤ���

WINDOW��

��ά��ǽ��WINDOW��ΰ���Ū�ʹ�ʸ�ϰʲ����̤�Ǥ���

WINDOW window_name AS ( window_definition ) [, ...]

������window_name�ϡ����ΤΤ��Υ�����ɥ������OVER��ǻ��Ȥ��뤳�Ȥ��Ǥ���̾���Ǥ��� �ޤ���window_definition�ϰʲ����̤�Ǥ���

[ existing_window_name ]
[ PARTITION BY expression [, ...] ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ frame_clause ]

existing_window_name�����ꤵ�줿��硢�����WINDOW�ꥹ�Ȥ����ˤ�����ܤ򻲾Ȥ��ʤ���Фʤ�ޤ��� ������������ɥ��Ϥ����ϰϻ����򤽤ι��ܤ��饳�ԡ����ޤ��� �������礬���ä�����Ʊ�ͤǤ��� ���ξ�硢������������ɥ��Ǥ��ȼ���PARTITION BY�����ꤹ�뤳�ȤϤǤ��ޤ��� �ޤ������ԡ����줿������ɥ���ORDER BY������ʤ����Τ�ORDER BY����ꤹ�뤳�Ȥ��Ǥ��ޤ��� ������������ɥ��Ͼ���ȼ��Υե졼������Ѥ��ޤ��� ���ԡ����줿������ɥ��ϥե졼������ꤷ�ƤϤʤ�ޤ���

PARTITION BY�ꥹ�Ȥ����Ǥ�GROUP BY�������ǤȤۤȤ��Ʊ���褦�˲�ᤵ��ޤ��� ��������������Ͼ��ñ��ʼ��Ǥ��ꡢ�������̾�����ֹ�ǤϤʤ����Ȥ��ۤʤ�ޤ��� ¾�ˤ�㤤�����ꡢ�����μ��ϡ��̾��GROUP BY��Ǥϵ�����ʤ�������ؿ���ޤ�뤳�Ȥ��Ǥ���Ȥ������Ǥ��� ���롼�ײ�����ӽ�������θ�˥�����ɥ�������ư��뤿�ᡢ�����Ǥϵ�����Ƥ��ޤ���

Ʊ�ͤˡ�ORDER BY�ꥹ�Ȥ����Ǥ�ORDER BY�������ǤȤۤȤ��Ʊ���褦�˲�ᤵ��ޤ��� �����������μ��Ͼ��ñ��ʼ��Ǥ��ꡢ�������̾�����ֹ�ǤϤʤ����Ȥ��ۤʤ�ޤ���

��ά��ǽ��frame_clause�ϡ��ʤ��٤ƤǤϤ���ޤ��󤬡˥ե졼��˰�¸���륦����ɥ��ؿ��Ѥ�������ɥ��ե졼����������ޤ��� ������ɥ��ե졼��ϡ��䤤��碌�γƹ�(���ߤι��ȸƤФ�ޤ�)�˴�Ϣ����Ԥν���Ǥ��� frame_clause�ϰʲ��Τ����줫���뤳�Ȥ��Ǥ��ޤ���

[ RANGE | ROWS ] frame_start
[ RANGE | ROWS ] BETWEEN frame_start AND frame_end

������frame_start��frame_end�ϰʲ��Τ����줫���뤳�Ȥ��Ǥ��ޤ���

UNBOUNDED PRECEDING
value PRECEDING
CURRENT ROW
value FOLLOWING
UNBOUNDED FOLLOWING

frame_end����ά���줿���ǥե���Ȥ�CURRENT ROW�Ȥʤ�ޤ��� frame_start��UNBOUNDED FOLLOWING�Ȥ��뤳�Ȥ��Ǥ��ʤ���frame_end��UNBOUNDED PRECEDING�Ȥ��뤳�Ȥ��Ǥ��ʤ�������ӡ���Υꥹ�Ȥ�frame_end�������frame_start����������˹Ԥ����Ȥ��Ǥ��ʤ��Ȥ������¤�����ޤ��� �㤨��RANGE BETWEEN CURRENT ROW AND value PRECEDING�ϵ�����ޤ���

�ǥե���ȤΥե졼�ಽ���ץ�����RANGE UNBOUNDED PRECEDING�Ǥ��� �����RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW��Ʊ���ǡ� �ѡ��ƥ���������Ƭ����ORDER BY����ˤ����븽�ߤιԤκǸ�Υԥ��ޤǤΤ��٤ƤιԤ�ե졼��Ȥ��ޤ�(ORDER BY���ʤ���Ф��٤ƤιԤ��̣���ޤ�)�� ����Ū��UNBOUNDED PRECEDING�ϥե졼�ब�ѡ��ƥ���������Ƭ����Ϥޤ뤳�Ȥ��̣����Ʊ�ͤ�UNBOUNDED FOLLOWING�ϥե졼�ब�ѡ��ƥ������κǽ��Ԥǽ���뤳�Ȥ��̣���ޤ�(RANGE�⡼�ɤ�ROWS���ϴط�����ޤ���)�� ROWS�⡼�ɤǤϡ�CURRENT ROW�ϥե졼�ब���ߤιԤǻϤޤ롢�ޤ��Ͻ���뤳�Ȥ��̣���ޤ�����RANGE�⡼�ɤǤϡ��ե졼�ब���ߤιԤ�ORDER BY����ˤ�����ǽ�Υԥ��ޤ��ϺǸ�Υԥ��ǻϤޤ롢�ޤ��Ͻ���뤳�Ȥ��̣���ޤ��� �������Ǥ�value PRECEDING�����value FOLLOWING�Ȥ������櫓��ROWS�⡼�ɤ����ǵ�����ޤ��� �����ϡ����ߤιԤβ������ޤ��ϲ��Ը�˥ե졼�ब�Ϥޤ�ޤ��Ͻ���뤳�Ȥ򼨤��ޤ��� value���������Ǥʤ���Фʤ餺���ѿ�������ؿ���������ɥ��ؿ���ޤ�뤳�ȤϤǤ��ޤ��� �����ͤ�NULL�ޤ�������뤳�ȤϤǤ��ޤ��� �����������ߤιԼ��Ȥ����򤹤를�����뤳�Ȥ��Ǥ��ޤ���

ORDER BY����ˤ�ꤽ�ιԤ��դ˽���դ��Ǥ��ʤ���硢ROWS��ͽ���Ǥ��ʤ���̤�⤿�餹��ǽ�������뤳�Ȥ����դ��Ʋ������� RANGE�ϡ�ORDER BY����ˤ�����ԥ��Ȥʤ�Ԥ�Ʊ���˰����롢�Ĥޤ�Ǥ�դ�2�ĤΥԥ��ϥե졼�����ξ���Ȥ�¸�ߤ��뤫��¸�ߤ��ʤ����Τ����줫�Ȥʤ뤳�Ȥ��μ¤ˤʤ�褦���߷פ���Ƥ��ޤ���

WINDOW�����Ū�ϡ��䤤��碌��SELECT�ꥹ���ޤ���ORDER BY���˵��ܤ����������ɥ��ؿ���ư����ꤹ�뤳�ȤǤ��� �����δؿ��Ϥ���OVER��ˤ�����̾����WINDOW��ι��ܤ򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ��� ������WINDOW��ι��ܤ�¾�ǻ��Ȥ���ƤϤʤ�ޤ��� �䤤��碌��ǻ��Ѥ���ʤ��ä���Τϡ�ñ��̵�뤵��ޤ��� ������ɥ��ؿ��ƤӽФ���OVER��ǥ�����ɥ������ľ�ܵ��ꤹ�뤳�Ȥ��Ǥ��ޤ��Τǡ�WINDOW��������Ȥ鷺�˥�����ɥ��ؿ�����Ѥ��뤳�Ȥ��Ǥ��ޤ��� ������WINDOW��ϡ�Ʊ��������ɥ������ʣ���Υ�����ɥ��ؿ���ɬ�פȤ������������̤�ʤ����Ȥ��Ǥ��ޤ���

������ɥ��ؿ��˴ؤ���ܺ٤ˤĤ��Ƥ�項3.5��項4.2.8��項7.2.4�򻲾Ȥ��Ƥ���������

SELECT�ꥹ��

SELECT�ꥹ�ȡ�SELECT��FROM�δ֤ˤ��륭����ɡˤϡ�SELECTʸ�ν��ϹԤ�������뼰����ꤹ���ΤǤ��� ���μ��Ǥϡ�FROM��ǽ��������򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ����̾�ϼºݤ˻��Ȥ��ޤ��ˡ� AS output_name����Ѥ���ȡ�������˸���̾���Ȥ��̤�̾�����դ��뤳�Ȥ��Ǥ��ޤ���

�ơ��֥�ξ���Ʊ�ͤˡ�SELECT�ν�����Ϥ��٤�̾��������ޤ��� ��ñ��SELECT�Ǥϡ�����̾�������ɽ���ѤΥ�٥���դ��뤿��˻��Ѥ��������Ǥ��� ������SELECT���絬�Ϥ��䤤��碌�����䤤��碌�Ǥ����硢�絬�Ϥ��䤤��碌¦�����䤤��碌���������줿���ۤΥơ��֥����̾�Ȥ��Ƥ���̾�������Ȥ���ޤ��� ������Ȥ��ƻ��Ѥ��뤿���̾������ꤹ�뤿��ˤϡ��󼰤θ��AS output_name�ȵ��Ҥ��Ƥ��������� �ʴ�˾������̾��PostgreSQL�Υ�����ɡ�付録C�򻲾ȡˤ˰��פ��ʤ����ˤΤ�AS���ά���뤳�Ȥ��Ǥ��ޤ��� ���褢�����륭����ɤ��ɲä������뤿��ˡ����AS�򵭽Ҥ��롢���뤤�ϡ�����̾����Ű�����dz�뤳�Ȥ�侩���ޤ����� ��̾����ꤷ�ʤ���硢̾����PostgreSQL�ˤ�꼫ưŪ���դ����ޤ��� �󼰤�ñ����󻲾ȤǤ���С��Ĥ�����̾���Ϥ������̾����Ʊ����ΤǤ��� ���ʣ���ʾ��Ǥϡ��̾�?columnN?�Τ褦�����������̾�����դ����ޤ���

ORDER BY���GROUP BY���������ͤ򻲾Ȥ�����⡢������̾����ѤǤ��ޤ��� ��������WHERE��HAVING��Ǥϻ��ѤǤ��ޤ��󡣤����Ǥϼ���񤫤ʤ���Фʤ�ޤ���

�ꥹ�Ȥˤϡ����򤵤줿�Ԥ����Ƥ����ɽ����ά���Ȥ��ơ����ǤϤʤ�*�Ƚ񤯤��Ȥ��Ǥ��ޤ��� �ޤ������Υơ��֥��ͳ�褹����Τߤ�ɽ����ά���Ȥ��ơ�table_name.*�Ƚ񤯤��Ȥ�Ǥ��ޤ��� ���Τ褦�ʾ�硢AS�ˤ�꿷����̾������ꤹ�뤳�ȤϤǤ��ޤ��� ������̾�ϥơ��֥����̾��Ʊ��ˤʤ�ޤ���

UNION��

UNION���̾�ʲ��η����Ȥʤ�ޤ���

select_statement UNION [ ALL ] select_statement

select_statement�ˤϡ�ORDER BY��LIMIT��FOR UPDATE��FOR SHARE�������ʤ�Ǥ�դ�SELECTʸ������ޤ� ��ORDER BY��LIMIT�ϡ���̤ǰϤ��ʣ���Ȥ�����Ϳ���뤳�Ȥ��Ǥ��ޤ��� ��̤��ʤ���硢�����ζ�ϱ�¦���֤��줿���ϼ��ǤϤʤ���UNION�η�̤��Ф���Ŭ�Ѥ���Ƥ��ޤ��ޤ��ˡ�

UNION�黻�Ҥϡ�2�Ĥ�SELECTʸ���֤��Ԥ��½����������ޤ��� �����½���ˤϡ�2�Ĥ�SELECTʸ�η�̽���Τ����줫�ʤޤ���ξ���ˤ�¸�ߤ���Ԥ����ƴޤޤ�Ƥ��ޤ��� UNION��ľ�ܤΥ��ڥ��ɤȤʤ�SELECTʸƱ�Τ��֤�����ϡ�Ʊ���Ǥʤ���Фʤ�ޤ��󡣤ޤ����б�������Υǡ������ˤϸߴ�����¸�ߤ���ɬ�פ�����ޤ���

ALL���ץ���󤬻��ꤵ��Ƥ��ʤ��¤ꡢUNION�η�̤ˤϽ�ʣ�Ԥϴޤޤ�ޤ��� ALL����ꤹ��Ȥ��Τ褦�ʽ�ʣ����Ԥ��ޤ��� �ʤ������äơ��̾�UNION ALL��UNION��꤫�ʤ��®�Ǥ��� �Ǥ������ALL����Ѥ��Ƥ��������ˡ�

1�Ĥ�SELECTʸ��ʣ����UNION�黻�Ҥ������硢��̤��ʤ��¤ꡢ�����Ϻ����鱦��ɾ������ޤ���

�������Ǥϡ�UNION�η�̤�UNION���Ф������Ϥˡ�FOR UPDATE�ޤ���FOR SHARE����ꤹ�뤳�ȤϤǤ��ޤ���

INTERSECT��

INTERSECT���̾�ʲ��η����Ȥʤ�ޤ���

select_statement INTERSECT [ ALL ] select_statement

select_statement�ˤϡ�ORDER BY��LIMIT��FOR UPDATE��FOR SHARE�������ʤ���Ǥ�դ�SELECTʸ������ޤ���

INTERSECT�ϡ�2�Ĥ�SELECTʸ���֤��Ԥ��ѽ����׻����ޤ��� �����ѽ���˴ޤޤ��Τϡ�2�Ĥ�SELECTʸ�η�̽����ξ����¸�ߤ���ԤǤ���

ALL���ץ�������ꤷ�ʤ��¤ꡢINTERSECT�η�̤˽�ʣ�Ԥϴޤޤ�ޤ��� ALL�����ꤵ�줿��硢��¦�ơ��֥��m�ġ���¦�ơ��֥��n�Ĥν�ʣ������Ԥϡ���̽���Ǥ�min(m,n)�Ľи����ޤ���

1�Ĥ�SELECTʸ��ʣ����INTERSECT�黻�Ҥ������硢��̤��ʤ��¤ꡢ�����Ϻ����鱦��ɾ������ޤ��� INTERSECT��UNION���⶯������դ�������ޤ��� �ĤޤꡢA UNION B INTERSECT C ��A UNION (B INTERSECT C)�Ȳ�ᤵ��ޤ���

�������Ǥϡ�INTERSECT�η�̤�INTERSECT���Ф������Ϥˡ�FOR UPDATE�ޤ���FOR SHARE����ꤹ�뤳�ȤϤǤ��ޤ���

EXCEPT��

EXCEPT���̾�ʲ��η����Ȥʤ�ޤ���

select_statement EXCEPT [ ALL ] select_statement

select_statement�ˤϡ�ORDER BY��LIMIT��FOR UPDATE��FOR SHARE�������ʤ���Ǥ�դ�SELECTʸ������ޤ���

EXCEPT�ϡ���¦��SELECTʸ�η�̤ˤ�¸�ߤ�����¦��SELECTʸ�η�̤ˤ�¸�ߤ��ʤ��Ԥν�����������ޤ���

ALL���ץ���󤬻��ꤵ��Ƥ��ʤ��¤ꡢEXCEPT�η�̤ˤϽ�ʣ�Ԥϴޤޤ�ޤ��� ALL�������硢��¦�ơ��֥��m�ġ���¦�ơ��֥��n�Ĥν�ʣ������Ԥϡ���̽���Ǥ�max(m-n,0)�Ľи����ޤ���

1�Ĥ�SELECTʸ��ʣ����EXCEPT�黻�Ҥ������硢��̤��ʤ��¤ꡢ�����Ϻ����鱦��ɾ������ޤ��� EXCEPT�η���դ��ζ�����UNION��Ʊ���Ǥ���

�������Ǥϡ�EXCEPT�η�̤�EXCEPT���Ф������Ϥˡ�FOR UPDATE�ޤ���FOR SHARE����ꤹ�뤳�ȤϤǤ��ޤ���

ORDER BY��

ORDER BY����̾�ʲ��η����Ȥʤ�ޤ��ʤ��ζ�Ͼ�ά��ǽ�Ǥ��ˡ�

ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...]

ORDER BY���Ȥ��ȡ���̹Ԥ���ꤷ������ʣ���ġˤ˽��äƥ����Ȥ��뤳�Ȥ��Ǥ��ޤ��� �Ǥ⺸¦�μ���Ȥä���Ӥ�����̡�2�ĤιԤ���������Ƚ�Ǥ��줿���ϡ�1�ı�¦�μ���Ȥä���Ӥ��ޤ������η�̤���������С�����˼��μ��˿ʤߤޤ��� ���ꤷ�����Ƥμ�����������Ƚ�Ǥ��줿���ϡ������˰�¸�������֤��֤���ޤ���

expression�ˤϡ��������SELECT�ꥹ�ȹ��ܡˤ�̾���ޤ��Ͻ��������뤤���������ͤ�����������Ǥ�դμ����뤳�Ȥ��Ǥ��ޤ���

�����ϡ�������ΰ��֡ʺ����鱦�˳�����Ƥ��ޤ��ˤ򼨤��ޤ��� �����Ȥ��ȡ���դ�̾��������ʤ���ν����������뤳�Ȥ��Ǥ��ޤ��� AS�����Ѥ���н������̾���������Ƥ뤳�Ȥ��Ǥ���Τǡ�����Ϥɤ����Ƥ�ɬ�פʵ�ǽ�Ȥ����櫓�ǤϤ���ޤ���

�ޤ���ORDER BY��ˤϡ�SELECT���ϥꥹ�Ȥ˽и����ʤ����ޤࡢǤ�դμ�����ѤǤ��ޤ��� �������äơ��ʲ���ʸ��ͭ���Ǥ���

SELECT name FROM distributors ORDER BY code;

��������UNION��INTERSECT��EXCEPT�η�̤�ORDER BY��Ŭ�Ѥ�����ϡ����ϻ��ѤǤ������������̾���������Τߤ����Ǥ���Ȥ������¤�����ޤ���

ORDER BY�μ��Ȥ��ƽ�����̾��������̾��ξ���˰��פ���ñ�ʤ�̾����Ϳ����줿��硢ORDER BY�Ϥ���������̾�Ȥ��ư����ޤ��� ����ϡ�Ʊ�������ˤ�����GROUP BY������Ȥ�ȿ�ФǤ��� ����������ϡ�ɸ��SQL�Ȥθߴ������ݻ����뤿���ȯ�����Ƥ��ޤ���

ORDER BY���Ǥ�դμ��θ�ˡ���ά��ǽ�ʥ������ASC�ʾ���ˡ�DESC�ʹ߽�ˤ��ղä��뤳�Ȥ��Ǥ��ޤ��� ���꤬�ʤ���С��ǥե���Ȥ�ASC�������ΤȤ��ư����ޤ��� ����¾���������ꤹ��黻��̾��USING��˻��ꤹ����ˡ�⤢��ޤ��� �������黻�Ҥϲ��餫��B-Tree�黻��²�ξ��ʤ�ޤ�����ʤ�黻�ҤǤʤ���Фʤ�ޤ��� �̾ASC��USING <�ȡ�DESC��USING >��Ʊ���Ǥ� �ʤ��������桼������ǡ������κ������ˤϡ��ǥե���ȤΥ����Ƚ��������뤳�Ȥ��Ǥ��ޤ����ޤ����ۤʤ�̾���α黻�Ҥ��б��դ����뤳�Ȥ�Ǥ��ޤ��ˡ�

NULLS LAST�����ꤵ���ȡ�NULL�ͤϤ��٤Ƥ���NULL�ͤθ�˥����Ȥ���ޤ��� NULLS FIRST�����ꤵ���ȡ�NULL�ͤϤ��٤Ƥ���NULL�ͤ����˥����Ȥ���ޤ��� �ɤ������ꤵ��ʤ����Υǥե����ư��ϡ�����Ū���뤤�ϰ���Ū��ASC�ξ���NULLS LAST��DESC���ξ���NULLS FIRST�Ǥ��� �ʤ������äơ��ǥե���ȤǤϡ�NULL����NULL�����礭���ͤǤ��뤫�Τ褦��ư��ޤ����� USING�����ꤵ���ȡ��ǥե���Ȥ�NULL�ν���ϡ��黻�Ҥ����ʤ�黻�Ҥ���ʤ�黻�Ҥˤ�ä��Ѥ��ޤ���

����դ����ץ�����ľ���α黻�ҤˤΤ�Ŭ�Ѥ���ޤ��� ���Ȥ��С�ORDER BY x, y DESC��ORDER BY x DESC, y DESC��Ʊ��ΰ�̣�ǤϤ���ޤ���

ʸ�����ǡ����Ǥϡ��ǡ����١����κ������˷��ꤵ�������������ξȹ��˽��äƥ����Ȥ���ޤ���

DISTINCT��

DISTINCT�����ꤵ���ȡ���ʣ����Ԥ����Ʒ�̥��åȤ���������ޤ� �ʤ��줾��1�ԤΤߤ��ݻ�����ޤ��ˡ� ALL�Ϥ���ȿ�Фǡ����ƤιԤ��ݻ�����ޤ��� �ǥե���ȤϤ�����Ǥ���

DISTINCT ON ( expression [, ...] )�ϳƹԽ������ǡ����ꤷ��������������ɾ�������ǽ�ιԤΤߤ��ݻ����ޤ��� DISTINCT ON���ϡ���Ҥ�ORDER BY��Ʊ����§�ǰ����ޤ��� �ƽ����"�ǽ�ι�"�ϡ�ORDER BY����Ѥ�����Ū�ιԤ��μ¤˺ǽ�˸����褦�ˤ��ʤ��¤�ͽ¬���뤳�ȤϤǤ��ޤ��� �㤨�С�������ϳ������κǿ��ε��ݾ������Ф��ޤ���

SELECT DISTINCT ON (location) location, time, report
    FROM weather_reports
    ORDER BY location, time DESC;

ORDER BY����Ѥ��Ƴ���������֤ˤ�äƹ߽�˥����Ȥ��ʤ���С��������ˤĤ�����������󤬤��ĤΤ�Τ��Ϥ狼��ޤ���

DISTINCT ON�˻��ꤹ�뼰��ORDER BY�κǤ⺸¦�μ��Ȱ��פ��ʤ���Фʤ�ޤ��� ORDER BY��ϡ��̾��DISTINCT ON���롼�פ���ǤιԤ�ͥ���̤���ꤹ���ɲ�Ū�ʼ���ޤߤޤ���

LIMIT��

LIMIT���2�Ĥ���Ω�������礫�鹽������ޤ���

LIMIT { count | ALL }
OFFSET start

count�ˤ��֤����Ԥκ�����򡢰�����start�ˤϹԤ��֤��Ϥ���������Ф��Կ�����ꤷ�ޤ��� ξ���Ȥ���ꤵ�줿��硢start��ʬ�����Ф��졢�������������count�Ԥ��֤���ޤ���

count����NULL��ɾ�����줿��硢LIMIT ALL�Ȥ��ơ��Ĥޤ�����̵���Ȥ��ư����ޤ��� start��NULL��ɾ�����줿��硢OFFSET 0��Ʊ�ͤ˰����ޤ���

SQL:2008�Ǥ�Ʊ�����Ȥ�¸�����ۤʤ빽ʸ��Ƴ������ޤ����� PostgreSQL�Ǥ⥵�ݡ��Ȥ��Ƥ��ޤ��� �ʲ��ι�ʸ�Ǥ���

OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY

ɸ��˽�����OFFSET��ϡ�FETCH���Ʊ���˻��Ѥ����硢����������¸�ߤ��ʤ���Фʤ�ޤ��� ������PostgreSQL�ϸ�̩�ǤϤʤ����ɤ��餬��Ǥ������ޤ��� ROW�����ROWS��������FIRST�����NEXT�ϰ�̣���ʤ�ñ��ǡ����ζ�˱ƶ���Ϳ���뤳�ȤϤ���ޤ��� ���ι�ʸ�ǡ�start�ޤ���count��ñ�������ʳ�����Ѥ����硢�ۤȤ�ɤξ��˳�̤�ɬ�פˤʤ�ޤ��� FETCH��count���ά����ȡ��ǥե���Ȥ�1�ˤʤ�ޤ���

LIMIT��Ȥ����ϡ���̹Ԥ��դʽ��֤˶�������ORDER BY���Ȥ��Ȥ褤�Ǥ��礦�� �������ʤ��ȡ��䤤��碌��̤Τɤ���ʬ���֤����Τ����狼��ޤ��� 10��20���ܤޤǤ���Ϥ���Ȥ��Ƥ⡢�ɤν��֤��¤٤�����10��20���ܤʤΤǤ��礦���� ORDER BY����ꤷ�ʤ��¤ꡢ�Ԥ��֤������֤������Ǥ���

�䤤��碌�ץ��ʤ��䤤��碌�ײ������������LIMIT���θ����Τǡ�LIMIT��OFFSET�λ���ˤ�äưۤʤä��ײ�����뤳�Ȥˤʤ�Ǥ��礦���ײ褬�ۤʤ�С��ۤʤ���֤ǹԤ��֤�ޤ��� �������äơ�LIMIT/OFFSET�ͤ��ѹ��ˤ�äưۤʤ��̹Ԥ����򤷤褦�Ȥ���ȡ�ORDER BY�ǽ�����¤��ؤ��ʤ��¤ꡢ̷�⤷����̤��֤����Ȥˤʤ�ޤ��� ����ϥХ��ǤϤ���ޤ��� ��SQL�ϡ�ORDER BY�ǽ�������椵��ʤ��¤ꡢ�䤤��碌��̤��֤��������«���ʤ��פȤ������¤������ε���ʤΤǤ���

��̩Ū����ʬ����������������ORDER BY���ʤ���С�Ʊ��LIMIT�䤤��碌�򷫤��֤��¹Ԥ��Ƥ�ơ��֥�Ԥ���ۤʤ���ʬ���礬���Ф�����ǽ�����餢��ޤ��� �����֤��ޤ�����������Զ��ǤϤ���ޤ��� �����������˳��ꤷ����̤�ñ���ݾڤ���Ƥ��ʤ��ΤǤ���

FOR UPDATE/FOR SHARE��

FOR UPDATE�ϰʲ��η����Ȥʤ�ޤ���

FOR UPDATE [ OF table_name [, ...] ] [ NOWAIT ]

������Ϣ����FOR SHARE��ϰʲ��η����Ȥʤ�ޤ���

FOR SHARE [ OF table_name [, ...] ] [ NOWAIT ]

FOR UPDATE����Ѥ���ȡ��䤤��碌�ˤ�äƸ������줿�Ԥ������Ѥ˥��å�����ޤ��� ����ˤ�ꡢ���ԤΥȥ�󥶥�����󤬽�λ����ޤǤϡ������ιԤ�¾�Υȥ�󥶥������ˤ�ä��ѹ����줿�������줿�ꤹ�뤳�Ȥ��ʤ��ʤ�ޤ��� �Ĥޤꡢ���ԤΥȥ�󥶥�����󤬽�λ����ޤǤϡ�¾�Υȥ�󥶥�����󤬤����ιԤ��Ф���UPDATE��DELETE��SELECT FOR UPDATE���Ԥ��Ƥ���ݤ���ޤ��� �ޤ���¾�Υȥ�󥶥�����󤫤��UPDATE��DELETE��SELECT FOR UPDATE�ˤ�ä����򤷤��Ԥ����å�����Ƥ����硢SELECT FOR UPDATE��¹Ԥ��褦�Ȥ���ȡ�SELECT FOR UPDATE�Ϥ��Υȥ�󥶥�����󤬽�λ����Τ��ԤäƤ��顢���θ�Ԥ���å����ƹ������줿�Ԥ��֤��ޤ��ʹԤ�������줿�����֤��ޤ���ˡ� ������SERIALIZABLE�ȥ�󥶥������������Ǥϡ����å��оݤιԤ��ȥ�󥶥�����󳫻ϻ������ѹ�����Ƥ�����硢���顼��ȯ�����ޤ��� 第13章�򻲾Ȥ��Ƥ���������

FOR SHARE��Ʊ�ͤ˿��񤤤ޤ��������ꤹ��Ԥ��Ф���¾Ū���å����������ΤǤϤʤ���ͭ���å���������������ۤʤ�ޤ��� ��ͭ���å��ˤ�ꡢ¾�ȥ�󥶥������ˤ�뤽�ιԤ��Ф���UPDATE��DELETE��SELECT FOR UPDATE���ϥ֥��å�����ޤ��� ��������¾�ȥ�󥶥������ˤ��SELECT FOR SHARE�����ɤ��ޤ���

¾�Υȥ�󥶥������Υ��ߥåȤ��Ե����뤳�Ȥʤ�����ʤ��ˤϡ�NOWAIT���ץ�������Ѥ��Ƥ��������� NOWAIT�Ǥϡ�����ԤΥ��å���¨�¤˳����Ǥ��ʤ�����ʸ���Ե������ˡ����顼����𤷤ޤ��� NOWAIT�Ϲԥ�٥���å��ˤΤߤ�Ŭ�Ѥ�����������դ��Ƥ��������� �Ĥޤꡢɬ�פ�ROW SHARE�ơ��֥��٥���å����̾��̤����ˡ�� 第13章�򻲾ȡˤdz�������ޤ��� �⤷���ơ��֥��٥�Υ��å����Ե������˳������ʤ���Фʤ�ʤ��ΤǤ���С��ǽ��LOCK��NOWAIT���ץ�������Ѥ��Ƥ���������

FOR UPDATE�ޤ���FOR SHARE�������Υơ��֥뤬���ꤵ��Ƥ�����ϡ����Υơ��֥�ιԤΤߤ����å�����ޤ��� SELECT���¾�Υơ��֥���̾��̤���ɤ߹��ޤ�ޤ��� �ơ��֥�ꥹ�Ȥ�����ʤ�FOR UPDATE�⤷����FOR SHARE��ϡ�����ʸ�ǻ��Ѥ���뤹�٤ƤΥơ��֥�˱ƶ���Ϳ���ޤ��� FOR UPDATE�⤷����FOR SHARE���ӥ塼�ޤ������䤤��碌�ǻ��Ѥ��줿��硢���Υӥ塼�����䤤��碌�ǻ��Ѥ���뤹�٤ƤΥơ��֥�˱ƶ���Ϳ���ޤ��� ������FOR UPDATE/FOR SHARE�ϼ��䤤��碌�ǻ��Ȥ����WITH�䤤��碌�ˤ�Ŭ�Ѥ���ޤ��� WITH�䤤��碌��Ǥιԥ��å���Ԥ��������ϡ�WITH�䤤��碌���FOR UPDATE�ޤ���FOR SHARE����ꤷ�Ƥ���������

�ۤʤ���å�������ۤʤ�ơ��֥�˻��ꤹ��ɬ�פ�����С�ʣ����FOR UPDATE��FOR SHARE��򵭽Ҥ��뤳�Ȥ��Ǥ��ޤ��� FOR UPDATE���FOR SHARE���ξ���ǡ�Ʊ��Υơ��֥�򵭽Ҥ����ʤޤ��ϰ���Ū�˱ƶ���Ϳ����줿�˾�硢FOR UPDATE�Ȥ��ƽ�������ޤ��� Ʊ�ͤˡ�����ơ��֥�˱ƶ���Ϳ�����Τ����줫��NOWAIT�����ꤵ�줿��硢���Υơ��֥��NOWAIT�Ȥ��ƽ�������ޤ���

FOR UPDATE�����FOR SHARE�ϡ��֤����Ԥ��ơ��֥�ΤɤιԤ��б�����Τ������Τ˼��̤Ǥ��ʤ����ˤϻ��Ѥ��뤳�Ȥ��Ǥ��ޤ��� �㤨�С�����ˤϻ��ѤǤ��ޤ���

FOR UPDATE�ޤ���FOR SHARE��SELECT�䤤��碌�κǾ�̥�٥��¸�ߤ����硢���å��оݹԤ��䤤��碌���֤��Ԥ����Τ˰��פ��ޤ��� ����䤤��碌��ξ�硢���å��оݹԤ��֤������Ԥ˴�Ϣ����ԤȤʤ�ޤ��� ����ˡ����ʥåץ���åȤ򹹿���������䤤��碌�����������ʤ��ʤä������֤���ʤ��ʤ�ޤ������䤤��碌�Υ��ʥåץ���åȻ������䤤��碌�����������Ԥ���å�����ޤ��� LIMIT�����Ѥ��줿��硢���¤��������Ԥ��֤����ȥ��å������ϻߤޤ�ޤ��� �ʤ�������OFFSET�ˤ�����Ф��줿�Ԥϥ��å�����뤳�Ȥ����դ��Ƥ����������� Ʊ�ͤˡ�FOR UPDATE�ޤ���FOR SHARE�����������䤤��碌�ǻ��Ѥ��줿��硢��������ˤ��ºݤ˼�������Ԥޤ��ϲ��˽������줿�ԤΤߤ����å�����ޤ���

FOR UPDATE�ޤ���FOR SHARE����SELECT��¸�ߤ����硢���å��оݹԤ����䤤��碌�γ�¦���䤤��碌���֤����ԤȤʤ�ޤ��� ��¦���䤤��碌����ξ�郎���䤤��碌�¹Ԥκ�Ŭ���˻��Ѥ�����ǽ��������ޤ��Τǡ�����ˤ����䤤��碌���Τθ������󼨤���Ԥ�꾯�ʤ��ʤ뤫�⤷��ޤ��� �㤨�С�

SELECT * FROM (SELECT * FROM mytable FOR UPDATE) ss WHERE col1 = 5;

�ϡ����䤤��碌��Ǥ�ʸ���Ȥ��ƾ�郎���ܤ���Ƥ��ʤ��Ƥ⡢col1 = 5����ĹԤΤߤ����å�����ޤ���

注意

�Ԥ���å����Ƥ����Υ����֥ݥ���Ȥ�PL/pgSQL�㳰�֥��å��Ǥ��ιԤ��Խ����뤳�Ȥ��򤱤Ƥ��������� ��Υ�����Хå��ǥ��å��������Ƥ��ޤ��ޤ��� �ʲ�����򼨤��ޤ���

BEGIN;
SELECT * FROM mytable WHERE key = 1 FOR UPDATE;
SAVEPOINT s;
UPDATE mytable SET ... WHERE key = 1;
ROLLBACK TO s;

ROLLBACK�塢�Ԥϡ������֥ݥ�������Υ��å����줿�������ξ��֤���餺���¼����å�����ޤ��� ���ߤΥȥ�󥶥������ǥ��å����줿�Ԥ��������줿�������줿�ꤷ�����䡢��ͭ���å�����¾���å��˸��夷����硢����ϴ����Ǥ��� ���٤Ƥξ��ˤ����ơ������Υ��å����֤�˺����Ƥ��ޤ��� �ȥ�󥶥�����󤬤��θ塢���Υ��å����ޥ�ɤ�³�������δ֤ξ��֤˥�����Хå�������硢���ιԤϥ��å�����Ƥ��ʤ����֤Ȥ��Ƹ���ޤ��� ����ϼ����������Ǥ��ꡢ�����PostgreSQL��꡼���ǽ�������ͽ��Ǥ���

注意

ORDER BY���FOR UPDATE/SHARE�����Ѥ���SELECT���ޥ�ɤǤϡ�����̤�ˤʤ�ʤ��Ԥ��֤���ǽ��������ޤ��� ORDER BY���ǽ��Ŭ�Ѥ���뤿��Ǥ��� ���Υ��ޥ�ɤϷ�̤򥽡��Ȥ��ޤ��������θ塢1�Ԥޤ���ʣ���ιԤΥ��å��������֥��å�������ǽ��������ޤ��� ����SELECT�Υ֥��å���������줿�����ǡ�����դ��оݤ����ͤΰ������ѹ�����Ƥ��뤫�⤷��ޤ��� ����ˤ�ꤳ�������Ԥ��ʸ������ͤȤ��������ǤϽ���̤�ǤϤ���ޤ������˽���̤�˸���ޤ��� ɬ�פ˱����ơ�����ϰʲ��Τ褦�����䤤��碌���FOR UPDATE/SHARE��򵭽Ҥ��뤳�Ȥǡ����򤹤뤳�Ȥ��Ǥ��ޤ���

SELECT * FROM (SELECT * FROM mytable FOR UPDATE) ss ORDER BY column1;

����ϡ��Ǿ�̥�٥�ˤ�����FOR UPDATE�ϼºݤ��֤����ԤΤߤ���å�����Τ��Ф��ơ���̤Ȥ���mytable�Τ��٤ƤιԤ���å����뤳�Ȥ����դ��Ƥ��������� ����ϡ��ä�ORDER BY��LIMIT�䤽��¾�����¤��Ȥ߹�碌�Ƥ����硢��ǽ���礭�ʰ㤤�����߽Ф���ǽ��������ޤ��� ���Τ��ᡢ���ε�ˡ�ϡ�����դ��оݤ�����Ф���Ʊ���¹Ԥι��������ꤵ�졢���ġ���̩�˥����Ȥ��줿��̤��׵ᤵ�����ˤΤ߿侩����ޤ���

TABLE���ޥ��

TABLE name

�Ȥ������ޥ�ɤϰʲ��ȴ�����Ʊ���Ǥ���

SELECT * FROM name

����ϡ��Ǿ�̤Υ��ޥ�ɤȤ��Ƥ�ʣ�����䤤��碌�ΰ����Ȥ������Ϥ��ά���빽ʸ�ΰ��Ȥ��Ƥ���Ѥ��뤳�Ȥ��Ǥ��ޤ���

��

films�ơ��֥��distributors�ơ��֥�ȷ�礷�ޤ���

SELECT f.title, f.did, d.name, f.date_prod, f.kind
    FROM distributors d, films f
    WHERE f.did = d.did

       title       | did |     name     | date_prod  |   kind
-------------------+-----+--------------+------------+----------
 The Third Man     | 101 | British Lion | 1949-12-23 | Drama
 The African Queen | 101 | British Lion | 1951-08-11 | Romantic
 ...

���ƤαDz��len����פ�kind��ˤ�äƷ�̤򥰥롼�ײ����ޤ���

SELECT kind, sum(len) AS total FROM films GROUP BY kind;

   kind   | total
----------+-------
 Action   | 07:34
 Comedy   | 02:58
 Drama    | 14:28
 Musical  | 06:42
 Romantic | 04:38

���ƤαDz��len����פ�kind��ˤ�äƷ�̤򥰥롼�ײ�������פ�5���֤�꾯�ʤ����롼�פι�פ�ɽ�����ޤ���

SELECT kind, sum(len) AS total
    FROM films
    GROUP BY kind
    HAVING sum(len) < interval '5 hours';

   kind   | total
----------+-------
 Comedy   | 02:58
 Romantic | 04:38

���ˡ���̤�2���ܤ����name�ˤ����Ƥ˴�Ť��ƥ����Ȥ�����ˡ��2���㼨���ޤ���

SELECT * FROM distributors ORDER BY name;
SELECT * FROM distributors ORDER BY 2;

 did |       name
-----+------------------
 109 | 20th Century Fox
 110 | Bavaria Atelier
 101 | British Lion
 107 | Columbia
 102 | Jean Luc Godard
 113 | Luso films
 104 | Mosfilm
 103 | Paramount
 106 | Toho
 105 | United Artists
 111 | Walt Disney
 112 | Warner Bros.
 108 | Westward

������ϡ�distributors�ơ��֥��actors�ơ��֥���½�������������ˡ�򼨤��Ƥ��ޤ�������ˡ�ξ���Υơ��֥�Ƿ�̤�W�Ȥ���ʸ���ǻϤޤ�ԤΤߤ˸��ꤷ�Ƥ��ޤ��� ��ʣ���ʤ��ԤΤߤ�ɬ�פʤΤǡ�ALL������ɤϾ�ά����Ƥ��ޤ���

distributors:               actors:
 did |     name              id |     name
-----+--------------        ----+----------------
 108 | Westward               1 | Woody Allen
 111 | Walt Disney            2 | Warren Beatty
 112 | Warner Bros.           3 | Walter Matthau
 ...                         ...

SELECT distributors.name
    FROM distributors
    WHERE distributors.name LIKE 'W%'
UNION
SELECT actors.name
    FROM actors
    WHERE actors.name LIKE 'W%';

      name
----------------
 Walt Disney
 Walter Matthau
 Warner Bros.
 Warren Beatty
 Westward
 Woody Allen

���ˡ�FROM����Ǥδؿ��λ�����ˡ�ˤĤ��ơ�������ꥹ�Ȥ�������Ȥʤ�����ξ������򼨤��ޤ���

CREATE FUNCTION distributors(int) RETURNS SETOF distributors AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors(111);
 did |    name
-----+-------------
 111 | Walt Disney

CREATE FUNCTION distributors_2(int) RETURNS SETOF record AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors_2(111) AS (f1 int, f2 text);
 f1  |     f2
-----+-------------
 111 | Walt Disney

�ʲ�����Ǥϴ�ñ��WITH��λ�����ˡ�򼨤��ޤ���

WITH t AS (
    SELECT random() as x FROM generate_series(1, 3)
  )
SELECT * FROM t
UNION ALL
SELECT * FROM t

         x          
--------------------
  0.534150459803641
  0.520092216785997
 0.0735620250925422
  0.534150459803641
  0.520092216785997
 0.0735620250925422

WITH�䤤��碌�����٤���ɾ������뤳�Ȥ����դ��Ƥ��������� ���Τ���3�ĤΥ�������ͤ�2�Ĥν�������뤳�Ȥˤʤ�ޤ���

�ʲ�����Ǥ�WITH RECURSIVE����Ѥ��ơ�ľ�ܤ���������ɽ�����ʤ��ơ��֥뤫�顢���Ȱ�Mary�Ρ�ľ�ܤޤ��ϴ���Ū�ʡ������Ȥ��δ����٤򸫤Ĥ��Ф��ޤ���

WITH RECURSIVE employee_recursive(distance, employee_name, manager_name) AS (
    SELECT 1, employee_name, manager_name
    FROM employee
    WHERE manager_name = 'Mary'
  UNION ALL
    SELECT er.distance + 1, e.employee_name, e.manager_name
    FROM employee_recursive er, employee e
    WHERE er.employee_name = e.manager_name
  )
SELECT distance, employee_name FROM employee_recursive;

�����³����UNION��������䤤��碌�κƵ���ʬ�Ȥ����Ƶ��䤤��碌��ŵ��Ū�ʹ�ʸ�����դ��Ƥ��������� �䤤��碌�κƵ���ʬ�Ϻǽ�Ū�ˤϥ��ץ���֤��ʤ����Ȥ�μ¤ˤ��Ƥ��������� ����ʤ����䤤��碌��̵�¤˥롼�פ��ޤ��� �ʤ��¿������ˤĤ��Ƥ�項7.8�򻲾Ȥ��Ƥ�����������

�ߴ���

�����ʤ��顢SELECTʸ��ɸ��SQL�ȸߴ���������ޤ��� ����������ĥ��ǽ��¸�����Ƥ��ʤ���ǽ�⤤���Ĥ�����ޤ���

FROM��ξ�ά

PostgreSQL�Ǥϡ�FROM����ά���뤳�Ȥ��Ǥ��ޤ��� ����ˤ�äơ��ʲ��Τ褦��ñ��ʼ���׻������뤳�Ȥ��Ǥ��ޤ���

SELECT 2+2;

 ?column?
----------
        4

¾��SQL�ǡ����١����Ǥϡ����Τ褦��SELECT��Ԥ�����ˤϥ��ߡ���1�ԥơ��֥��Ȥ�ʤ���Фʤ�ޤ���

FROM��λ��꤬�ʤ���硢�䤤��碌�Ǥϥǡ����١����ơ��֥�򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ��� �㤨�С��ʲ����䤤��碌��̵���Ǥ���

SELECT distributors.* WHERE distributors.name = 'Westward';

PostgreSQL��꡼��8.1������ޤǤǤϡ��������������䤤��碌������դ����䤤��碌�ǻ��Ȥ���ƥơ��֥���Ф������Ū�ʹ��ܤ��䤤��碌��FROM����ɲä��Ƥ��ޤ����� ����ϵ�����ʤ��ʤ�ޤ�����

AS������ɤξ�ά

ɸ��SQL�Ǥϡ���ά��ǽ�ʥ������AS�ϡ���������̾��ͭ������̾�ʤĤޤ�ͽ��ѤߤΥ�����ɤȰۤʤ��Τ��٤ơˤǤ�����Ͼ�ˡ�������̾��������ʤ����Ȥ��Ǥ��ޤ��� PostgreSQL�ˤ�¿����궯�����¤�����ޤ��� ��������̾��ͽ��Ѥߤ��ݤ��˴ؤ�餺���餫�Υ�����ɤ˰��פ������AS��ɬ�פǤ��� �侩���������ˡ�ϡ�����Υ�����ɤ��ɲäȶ��礹���ǽ����������AS����Ѥ��롢�ޤ��Ͻ�����̾����Ű�����dz�뤳�ȤǤ���

FROM���ܤˤ�����ɸ�प���PostgreSQL�Ǥϡ�̤ͽ��Υ�����ɤǤ�����̾������AS���ά���뤳�Ȥ��Ǥ��ޤ��� ����������ʸ�������ޤ��ˤʤ뤿�ᡢ����̾�Ǥϸ���Ū�ǤϤ���ޤ���

ONLY�ȳ��

ɸ��SQL�Ǥϡ�SELECT * FROM ONLY (tab1), ONLY (tab2) WHERE ...�Τ褦�ˡ�ONLY��³���ơ��֥�̾��������̤Ǥ����뤳�Ȥ��׵ᤷ�ޤ��� PostgreSQL�ǤϤ���⥵�ݡ��Ȥ��ޤ�������̤��ά���뤳�Ȥ�Ǥ��ޤ��� �ʤ�������ONLY���ץ����򥵥ݡ��Ȥ��뤹�٤Ƥ�SQL���ޥ�ɤ�Ʊ�ͤ�Ŭ�Ѥ���ޤ�����

GROUP BY��ORDER BY�ˤ��������Ѳ�ǽ��̾������

ɸ��SQL-92�Ǥϡ�ORDER BY��ǻ��ѤǤ���Τϡ�������̾�������ΤߤǤ��ꡢGROUP BY��ǻ��ѤǤ���Τϡ�������̾����ʤ뼰�ΤߤǤ��� PostgreSQL�ϡ������ζ��ξ��������Ǥ���褦�˳�ĥ����Ƥ��ޤ� �ʤ������������Ƥ����������ɸ��β�᤬���Ѥ���ޤ��ˡ� ����ˡ�PostgreSQL�ǤϤɤ���ζ�ˤ�Ǥ�դμ������Ǥ��ޤ��� ���ǻȤ���̾���ϡ���˽�����̾�ǤϤʤ��������̾���Ȥߤʤ���뤳�Ȥ����դ��Ƥ���������

SQL:1999�ʹߤǤϡ�SQL-92�Ȥξ�̸ߴ������ޤä����ʤ���¿���ۤʤ���������Ѥ���Ƥ��ޤ��� ���������ۤȤ�ɤξ�硢PostgreSQL��SQL:1999��Ʊ����ˡ��ORDER BY��GROUP BY���ᤷ�ޤ���

WINDOW�������

ɸ��SQL�Ǥϥ�����ɥ��Ѥ�frame_clause���ץ����򤵤���󶡤��ޤ��� ���ߤ�PostgreSQL�ǤϾ�ҤΥ��ץ����Τߤ򥵥ݡ��Ȥ��ޤ���

LIMIT�����OFFSET

LIMIT�����OFFSET���PostgreSQL�ȼ��ι�ʸ�Ǥ�����MySQL�Ǥ���Ѥ���Ƥ��ޤ��� LIMIT�������������褦�ˡ�ɸ��SQL:2008�ˤ�Ʊ����ǽ��OFFSET ... FETCH {FIRST|NEXT} ...��Ƴ������ޤ����� ���ι�ʸ��IBM DB2�Ǥ���Ѥ���Ƥ��ޤ��� ��PostgreSQL�Ǥ����ѤǤ��ޤ��󤬡�Oracle�Ѥ˳�ȯ���줿���ץꥱ�������Ǥϡ������ζ�ε�ǽ��������뤿��ˤ褯��ư���������rownum���ޤ��Ȥ������������Ѥ��ޤ�����

FOR UPDATE�����FOR SHARE

FOR UPDATE��ɸ��SQL��¸�ߤ��ޤ�����ɸ��Ǥϡ�DECLARE CURSOR�Υ��ץ����Ȥ��Ƥ���������Ƥ��ޤ��� PostgreSQL�Ǥϡ���SELECT�ʤ�Ǥ�դ�SELECT�ǵ�����ޤ��� ����ϳ�ĥ�Ǥ��� FOR SHARE�ΰ�������NOWAIT���ץ�����ɸ��ˤϤ���ޤ���

��ɸ���

DISTINCT ON���ɸ��SQL�Ǥ��������Ƥ��ޤ���