¾�ΥС�������ʸ�� �� 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

2.2. �ơ��֥뼰

�ơ��֥뼰�ǥơ��֥����ꤷ�ޤ����ơ��֥뼰�ˤ� FROM �礬���ꡢ���ץ����Ȥ��� WHERE �硢GROUP BY �硢HAVING ����դ��뤳�Ȥ��Ǥ��ޤ���ñ��ʥơ��֥뼰�ϡ�ñ�˥ǥ�������Τ�������ܥơ��֥�ȸƤФ��ơ��֥�򻲾Ȥ�������Ǥ��������������ޤ��ޤ���ˡ�Ǵ��ܥơ��֥���������ꡢ�Ȥ߹�碌���ꤹ�뤿�ṹ��ʣ���ʼ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���

�ơ��֥뼰�Υ��ץ����ǻ��ꤹ�� WHERE �硢GROUP BY �硢HAVING ��ϡ�FROM ����������줿�ơ��֥����Ф��Ƽ������Ѵ�����Ƽ¹Ԥ����ѥ��ץ饤��Ǥ�������餹�٤Ƥ��Ѵ��ˤ�ä���������������ơ��֥�ϡ���ɾ����������ꥹ�Ȥǻ��ꤵ�줿�褦�˽��ϹԤ򻻽Ф��뤿������ϹԤ��Ѱդ��ޤ���

2.2.1. FROM��

FROM ��ϡ�����ޤ�ʬ����줿�ơ��֥뻲�ȥꥹ�Ȥ�Ϳ������ 1 �İʾ�ʣ���ΤΥơ��֥뤫�顢1 �ĤΥơ��֥�����������ޤ���

FROM table_reference [, table_reference [, ...]]

�ơ��֥뻲�Ȥϡ��ơ��֥�̾���ޤ��ϡ����䤤��碌���ơ��֥��硢������ʣ�����Ȥ߹�碌�ʤɤ����������줿�ơ��֥�Ǥ���FROM ���ʣ���Υơ��֥뻲�Ȥ������硢�����ϡ����Ȥ� WHERE �硢GROUP BY �硢HAVING ��ˤ�ä��Ѵ�����������ơ��֥���뤿��Υ���������CROSS JOIN�������򻲾ȡˤǡ��ǽ�Ū�ˤϤ��٤ƤΥơ��֥뼰�η�̤Ȥʤ�ޤ���

�ơ��֥뻲�Ȥǡ��ơ��֥�ηѾ����ؤΥ����ѡ��ơ��֥��̾������ꤹ��ȡ��ơ��֥�̾������ ONLY ������ɤ��ʤ����ϡ��ơ��֥뻲�ȤϤ��Υơ��֥�����Ǥʤ����Υ��֥ơ��֥�˷Ѿ����줿���٤Ƥ�����������ޤ��������������Ȥϡ�̾������ꤷ���ơ��֥�˸��줿��Τߤ������������֥ơ��֥���ɲä��줿���̵�뤵��ޤ���

2.2.1.1. ���ơ��֥�

���ơ��֥�ϡ�2 �ĤΡʼ¡��ޤ��ϡ������˥ơ��֥뤫�顢���ε�§�˽��ä����������ơ��֥�Ǥ�����������INNER JOIN�ˡ���������OUTER JOIN�ˡ�����������CROSS JOIN�ˤ����ݡ��Ȥ���Ƥ��ޤ���

�����

���������
T1 CROSS JOIN T2

�ɤ� T1 �� T2 �ιԤ��Ȥ߹�碌�ˤĤ��Ƥ⡢T1 �Τ��٤Ƥ����³���� T2 �Τ��٤Ƥ����ޤ�Ԥ������ơ��֥�˴ޤޤ�ޤ���2 �ĤΥơ��֥뤬 N �Ԥ� M �Ԥǹ�������Ƥ���Ȥ���ȡ���礵�줿�ơ��֥�ιԿ���N��M �ԤȤʤ�ޤ������������� INNER JOIN ON TRUE ��Ʊ���Ǥ���

Tip: FROM T1 CROSS JOIN T2 �� FROM T1, T2 �������Ǥ���

�����դ����
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )
T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2

INNER �� OUTER �ϡ���ά��ǽ�Ǥ��� INNER ���ǥե���ȤȤʤ�ޤ���LEFT�� RIGHT��FULL �� OUTER JOIN �˻���Ǥ��ޤ���

������ϡ�ON �礫 USING ��ǻ��ꤹ�뤫���ޤ��ϰ���Ū�� NATURAL ���Ҥǻ��ꤵ��ޤ��������ϡ��ʲ��Ǿܤ�����������褦�ˡ�2�Ĥθ��Ȥʤ�ơ��֥�ΤɤιԤ�"���פ��뤫"����ޤ���

ON ��ϺǤ����Ū�ʷ����Ǥ��ꡢWHERE ��ǻȤ���Τ�Ʊ���֡�����ɾ�����Ȥʤ�ޤ���ON ��ɽ�����줿��ʬ�����Ȥʤ��硢T1 �� T2 ���б�����Ԥ��оݤȤʤ�ޤ���

USING ��ά��ˡ�Ǥ�������ϡ����ơ��֥뤬���̤ǻ��ĥ���ޤǶ��ڤ�줿��̾�Υꥹ�Ȥ��顢�ơ�������Ȥ߹�碌�򥤥�����Ȥ����������������ޤ�������ˡ�JOIN USING �ν��Ϥϡ�������ǥ�������Ȥʤä�����Ȥ߹�碌���Ф��ơ�1 �Ĥ��󤬤��ꡢ�ƥơ��֥��¾�Τ��٤Ƥ��󤬤��Τ���³���ޤ����ĤޤꡢUSING (a, b, c) �� ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) �������Ǥ�����������ON ��Ȥä����ϡ���̤ˤ����� a��b��c �� 2 �Ĥ���ˤʤ�ޤ�����USING ��Ȥ��Ȥ��줾�� 1 �Ĥ���ˤʤ�Ȥ����㳰������ޤ���

�Ǹ�� NATURAL �� USING ��ά�������Ǥ���2�Ĥ����ϥơ��֥��ξ���ˤ�����̾����ä�USING ��ꥹ�Ȥ�������ޤ���USING �Τ褦�ˡ���������Ͻ��ϥơ��֥�˰��٤��������ޤ���

�����դ� JOIN �ˤϼ��Τ�Τ�����ޤ���

��������INNER JOIN��

T1 �γ� R1 �Ԥ��Ф��ơ�T2 �ˤ����� R1 �Ȥη������������Ƥ���Ԥ�����礵�줿�ơ��֥�˴ޤޤ�ޤ���

����������LEFT OUTER JOIN��

�ޤ���������礬�Ԥ��ޤ������θ塢T2 ��Ǥ�դιԤǷ������������ʤ� T1 �γƹԤˤĤ��Ƥϡ�T2 ����� NULL �ͤȤ��ơ���礵�줿�ơ��֥����ޤ����������äơ�Ϣ�뤵�줿�ơ��֥�ϡ�̵����T1�ιԤ��줾��˾��ʤ��Ȥ�1�ĤιԤ�����ޤ���

����������RIGHT OUTER JOIN��

�ޤ���������礬�Ԥ��ޤ������θ塢T1 ��Ǥ�դιԤǷ������������ʤ� T2 �γƹԤˤĤ��Ƥϡ�T1 ����� NULL �ͤȤ��ơ���礵�줿�ơ��֥����ޤ�������Ϻ�����ȿ�ФǤ�����̤Υơ��֥�ϡ�T2�� �Ԥ�̵��������ޤ���

������������FULL OUTER JOIN��

�ޤ���������礬�Ԥ��ޤ������θ塢T1 �γƹԤǷ������������ʤ� T2 ��Ǥ�դιԤˤĤ��Ƥϡ�T2 ����� NULL �ͤȤ��Ʒ�礷�ޤ�������ˡ�T2 �γƹԤǷ������������ʤ� T1 ��Ǥ�դιԤˤĤ��Ƥϡ�T1 ����� NULL �ͤȤ��Ʒ�礷�ޤ���

���٤Ƥη��ϡ��ߤ���Ϣ�뤷���ꡢ����Ҥˤ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� T1 �� T2 �Τɤ��餫�����뤤��ξ���������ơ��֥�ˤʤ뤳�Ȥ�����ޤ���JOIN ��򾮤��ä��ǰϤ�Ƿ��ν��������Ǥ��ޤ��������ä����դ��ʤ���� JOIN ��Ϻ����鱦������Ҥˤ��ޤ���

2.2.1.2. ���䤤��碌��Subqueries��

�����ơ��֥����ꤹ�����䤤��碌�ϡ�ɬ�������ä��Ǥ�����ʤ���Фʤ�ޤ��󡣤ޤ���̾���ˤ�ɬ�� AS ���Ȥ�ʤ���Ф����ޤ����Section 2.2.1.3�򻲾ȡˡ�

FROM (SELECT * FROM table1) AS alias_name

������ϡ�FROM table1 AS alias_name��Ʊ���Ǥ�������˶�̣�����������Ȥ��ơ����䤤��碌�����롼�ײ��佸���ޤ�Ǥ����硢ñ����ˤޤȤ�뤳�ȤϤǤ��ʤ��Ȥ������Ȥ�����ޤ���

2.2.1.3. �ơ��֥�������̾

�ơ��֥��ʣ���ʥơ��֥뻲�Ȥϡ�������ν����������ơ��֥�򻲾Ȥ��뤿��˰��Ū��̾����Ϳ���뤳�Ȥ��Ǥ��ޤ���������ơ��֥����̾ ��table alias�ˤȸƤӤޤ���

FROM table_reference AS alias

�����ǡ�alias �Ϥɤ���̾Q�̻ҤǤ⤫�ޤ��ޤ�����̾�ϡ��䤤��碌�ǥơ��֥뻲�Ȥ򤹤�Ȥ��ο�����̾���ˤʤ�ޤ������ξ��ϡ����ꥸ�ʥ��̾���ǥơ��֥�򻲾Ȥ��뤳�ȤϤǤ��ʤ��ʤ�ޤ����Ĥޤꡢ�ʲ���ʸ�ϡ������� SQL �ι�ʸ�ǤϤ���ޤ���

SELECT * FROM my_table AS m WHERE my_table.a > 5;

���ξ�硢�ºݤˤϡ�FROM ��˰��ۤΥơ��֥뻲�Ȥ��ɲä���ޤ��ʤ���� SQL ɸ����Ф��� PostgreSQL ��ĥ�Ǥ��ˡ��Ĥޤꡢ���Τ褦���䤤��碌��񤤤���ΤȤ��ƽ�������ޤ���

SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a > 5;

�ơ��֥����̾�ϼ��ɽ�����ñ�ˤ��뤿��ˤ���ޤ������������Τ褦�ˡ�1 �ĤΥơ��֥뤬��ʬ���Ȥȷ�礹����ϡ�ɬ�ܤȤʤ�ޤ���

SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...

����ˡ��ơ��֥뻲�Ȥ����䤤��碌�ξ�����̾��ɬ�פˤʤ�ޤ���

�����ä��ϡ������ޤ�����ʤ�������˻Ȥ��ޤ������� SQL ʸ�ϡ���������Ȱۤʤꡢ���η�̤� b �Ȥ�����̾��Ϳ���ޤ���

SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...

FROM table_reference alias

���η��������˽񤤤���Τ������Ǥ���AS ������ɤϾ�ά��ǽ�Ǥ���

FROM table_reference [AS] alias ( column1 [, column2 [, ...]] )

���η����Ǥϡ��������������褦�ʥơ��֥�β�̾�˲ä��Ƥ���ˡ��ơ��֥����ϡ��Ϥ�Ǥ����䤤��碌����ǰ��Ū��̾���Ȥ���Ϳ�����ޤ����⤷���ºݤΥơ��֥뤬��������⾯�ʤ����������̾��Ϳ��������硢�Ĥ����ϲ�̾����ޤ��󡣤��ι�ʸ�ϡ����ʷ�礢�뤤�����䤤��碌���ä���Ω���ޤ���

��̾����JOIN ��η�̤Ȥ���Ŭ�Ѥ�����硢�����η����Τ����줫��Ȥ��ȡ���̾�� JOIN ����θ���̾���򱣤��ޤ������Ȥ��С��ʲ���ʸ�������� SQL ʸ�Ǥ���

SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...

���������ʲ���ʸ������������ޤ���

SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c

�ơ��֥����̾ A �ϡ���¦����̾ C �Ǥϻ��Ȥ��뤳�Ȥ��Ǥ��ޤ���

2.2.1.4. ��

FROM T1 INNER JOIN T2 USING (C)
FROM T1 LEFT OUTER JOIN T2 USING (C)
FROM (T1 RIGHT OUTER JOIN T2 ON (T1.C1=T2.C1)) AS DT1
FROM (T1 FULL OUTER JOIN T2 USING (C)) AS DT1 (DT1C1, DT1C2)

FROM T1 NATURAL INNER JOIN T2
FROM T1 NATURAL LEFT OUTER JOIN T2
FROM T1 NATURAL RIGHT OUTER JOIN T2
FROM T1 NATURAL FULL OUTER JOIN T2

FROM (SELECT * FROM T1) DT1 CROSS JOIN T2, T3
FROM (SELECT * FROM T1) DT1, T2, T3

�嵭�ϡ����ơ��֥��ʣ���������ơ��֥����Ǥ���AS �礬�ɤΤ褦�˲�̾�����뤤�ϡ������ơ��֥��̾�����դ��뤫������ˡ���ά��ǽ�ʥ���ޤǶ��ڤ�줿��̾��ɤΤ褦�˲�̾���뤫�����ܤ��Ƥ����������Ǹ�� 2 �Ĥ� FROM ��� T1��T2��T3 ����Ʊ�������ơ��֥����ޤ������䤤��碌�� DT1 ��̾���դ�����ݤ� AS ������ɤϾ�ά����Ƥ��ޤ�������ˡ�������ɤ� OUTER��INNER ���ά���뤳�Ȥ��Ǥ��ޤ���

2.2.2. WHERE ��

WHERE ��ι�ʸ�ϡ��ʲ��ΤȤ���Ǥ���

WHERE search_condition

search_condition �ˤϡ� Section 1.3 �����������boolean �����֤��ɤΤ褦��ɾ���������Ǥ��ޤ���

FROM ��ν���������ä���ˡ������ơ��֥�γƹԤϸ������Ⱦȹ礵��ޤ������η�̤����ξ�硢���ιԤϽ��Ϥ���ޤ��������Ǥʤ��ʤ��ʤ����̤����ޤ���NULL�Ρ˾��ϡ����ιԤϼΤƤ��ޤ�������Ū�˸������ϡ�FROM ����������줿�ơ��֥�Τɤ줫����򾯤ʤ��Ȥ⤤���Ĥ����Ȥ��ޤ�������ϡ�ɬ�ܤǤϤ���ޤ��󤬡��������ʤ��� FROM ��Ϥޤä�����̣���ʤ��ʤ�ޤ���

Note: ����JOIN�˹�ʸ���������������Ǥϡ�WHERE �������������η�������������ɬ�פ�����ޤ��������Ȥ��С��ʲ��� 3 �ĤΥơ��֥뼰�������Ǥ���

FROM a, b WHERE a.id = b.id AND b.val > 5

FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val > 5

FROM a NATURAL JOIN b WHERE b.val > 5

�ɤ��Ȥ����ϡ���˥������������Ǥ���FROM ��� JOIN ��ʸ�ϡ������餯��¾�����ʤؤΰܿ���������ޤ��󡣳������ˤĤ��Ƥϡ�FROM ��Ǥʤ���Фʤ�ʤ��������;�ϤϤ���ޤ��󡣳������� ON ��� USING ��ϡ�WHERE ���Ȥ������� ����ޤ������ʤ��ʤ顢�ǽ���̤���Ԥ������Ʊ�ͤˡ��ʥޥå����ʤ����ϹԤ��Ф���˹Ԥ��ɲä�Ԥ�����Ǥ���

FROM FDT WHERE
    C1 > 5

FROM FDT WHERE
    C1 IN (1, 2, 3)
FROM FDT WHERE
    C1 IN (SELECT C1 FROM T2)
FROM FDT WHERE
    C1 IN (SELECT C3 FROM T2 WHERE C2 = FDT.C1 + 10)

FROM FDT WHERE
    C1 BETWEEN (SELECT C3 FROM T2 WHERE C2 = FDT.C1 + 10) AND 100

FROM FDT WHERE
    EXISTS (SELECT C1 FROM T2 WHERE C2 > FDT.C1)

�嵭����ǡ�FDT �� FROM ����椫���������줿�ơ��֥�Ǥ���WHERE ��θ��������������ʤ��ä��Ԥϡ�FDT ����������ޤ���ɾ�����Ȥ��ƤΥ��������䤤��碌�λȤ��������ܤ��Ƥ���������¾���䤤��碌�Τ褦�ˡ����䤤��碌�ϡ�ʣ���ʥơ��֥뼰��Ȥ����Ȥ��Ǥ��ޤ������䤤��碌����ǤɤΤ褦�� FDT �����Ȥ���뤫�����դ��Ƥ��������� C1 �� FDT.C1 �Τ褦�˽������뤳�Ȥϡ�C1 �����䤤��碌�����ϥơ��֥뤫������������̾�Ǥ⤢��Ȥ��ˤ���ɬ�פǤ�����̾�ν����ϡ�ɬ�ܤξ��ǤϤʤ��Ƥ⡢���Τˤ��뤿�����Ω���ޤ�������ϡ���¦���䤤��碌����̾��ͭ���ϰϤ򡢤ɤΤ褦�ˤ�����¦���䤤��碌�ޤdz�ĥ���뤫�򼨤��ޤ���

2.2.3. GROUP BY ��� HAVING ��

WHERE �ե��륿���̤����塢�������줿���ϥơ��֥��GROUP BY ��ǥ��롼�ײ������ޤ���HAVING �����Ѥ������פʥ��롼�פ���������Ȥ��Ǥ��ޤ���

SELECT select_list
    FROM ...
    [WHERE ...]
    GROUP BY grouping_column_reference [, grouping_column_reference]...

GROUP BY ��ϡ��ơ��֥�������򤵤줿�����Ʊ���ͤ�ͭ����Ԥ�ޤȤ�ƥ��롼�ײ����뤿��˻��Ѥ���ޤ�����ORDER BY ��Ȥϰ㤤�˻��ꤵ�줿��ν��֤ϴط�����ޤ��󡣤�����Ū�ϡ����̤����ͤ���ĹԤ���ɽ�Ȥʤ� 1 �ĤΥ��롼�׹ԤؤޤȤ�뤳�Ȥˤ�ꡢ�ƥ��롼�פιԤ򸺤餹���Ȥˤ���ޤ�������ˤ�ꡢ���Ϥξ�Ĺ�٤��ӽ���������ˤޤ��������Υ��롼�פ�Ŭ�Ѥ���뽸�������ޤ���

���ä���ơ��֥뤬���롼�ײ������ȡ����롼�פ���ΤɤιԤ�Ȥ��Ф褤�Τ���ۣ��Ȥʤ�Τǡ����󼰤�����ƥ��롼�ײ��˻Ȥ��ʤ���ϻ��Ȥ��뤳�Ȥ��Ǥ��ޤ��󡣥��롼�פ��Ȥ˴��Τΰ�����ͤ���ĤΤǡ�����ꥹ�Ȥ���ɾ�����ǥ��롼�ײ����줿��ϻ��Ȥ��뤳�Ȥ��Ǥ��ޤ������롼�ײ��ǻȤ��ʤ���ν���ؿ��ϡ��ơ��֥����ΤǤϤʤ�1 �ĤΥ��롼�פǤ��ͤ�׻����ޤ������Ȥ��С����ʥ����ɤǥ��롼�ײ����줿�ơ��֥���Ф��� sum(sales) �ϡ������ʤ����夲��sales�˹�פǤ��ꡢ���٤Ƥ����ʤ����夲��פǤϤ���ޤ��󡣥��롼�ײ�����Ƥ��ʤ����׻���������ϥ��롼�פ���ɽ���ޤ��������롼�ײ�����Ƥ��ʤ���θ��̤��ͤϤ����ǤϤ���ޤ���

��򼨤��ޤ���

SELECT pid, p.name, (sum(s.units) * p.price) AS sales
  FROM products p LEFT JOIN sales s USING ( pid )
  GROUP BY pid, p.name, p.price;

������Ǥϡ�pid ��p.name �� p.price ���ɬ�� GROUP BY ��ǻ��ꤷ�ʤ���Ф����ޤ��󡣤ʤ��ʤ顢�����ϡ��䤤��碌����ꥹ�Ȥ���ǻȤ��Ƥ��뤿��Ǥ���s.units ��� GROUP BY �ǻ��ꤹ��ɬ�פϤ���ޤ��󡣤���ϡ����ʤ��Ȥ����夲�׻��ν���ؿ���sum()�� ��������ǻȤ��뤿��Ǥ��������ʤ��Ф��ơ����ʤΤ��٤Ƥ�����˴ؤ����׹Ԥ��֤���ޤ���

��̩�� SQL �Ǥϡ�GROUP BY �ϡ��������ơ��֥����ˤ�äƤΤߥ��롼�ײ��Ǥ��ޤ����� PostgreSQL �Ϥ�����䤤��碌����ꥹ�Ȥ���ˤ�륰�롼�ײ�������褦�˳�ĥ���Ƥ��ޤ���ñ�����̾������ˡ�ɾ�����ǥ��롼�ײ����뤳�Ȥ�Ǥ��ޤ���

SELECT select_list FROM ... [WHERE ...] GROUP BY ... HAVING boolean_expression

GROUP BY ���Ȥäƥ��롼�ײ����줿�ơ��֥�ǡ�����Υ��롼�פΤ�ɬ�פʾ�硢���롼�ײ����줿�ơ��֥뤫�����פʥ��롼�פ�����Τˡ�WHERE�� �Τ褦�� HAVING ���Ȥ����Ȥ��Ǥ��ޤ���PostgreSQL �Ǥ� HAVING ��� GROUP BY ��ʤ��˻Ȥ����Ȥ��Ǥ��ޤ��������ξ�硢�⤦1�Ĥ� WHERE ��Τ褦�˿����񤤤ޤ������Τ褦�� HAVING ��Ȥ��ݥ���Ȥ����ΤǤϤ���ޤ��󤬡��ܰ¤Ȥ��Ƥϡ�HAVING ��郎����ؿ��η�̤򻲾Ȥ���Ȥ������ȤǤ��������ޤ�Ǥ��ʤ�����ϡ�WHERE �����Ǥ�����Ū��ɽ������ޤ���

��򼨤��ޤ���

SELECT pid    AS "Products",
       p.name AS "Over 5000",
       (sum(s.units) * (p.price - p.cost)) AS "Past Month Profit"
  FROM products p LEFT JOIN sales s USING ( pid )
  WHERE s.date > CURRENT_DATE - INTERVAL '4 weeks'
  GROUP BY pid, p.name, p.price, p.cost
    HAVING sum(p.price * s.units) > 5000;

������Ǥϡ�WHERE ��ϥ��롼�ײ�����������ιԤ����򤷡����θ塢HAVING �礬��������ι�פ� 5,000 ����礭�����롼�פ���Ф��ޤ���