Chapter 4. SQL �﷨

Table of Contents
4.1. �ʷ��ṹ
4.1.1. ��ʶ���͹ؼ���
4.1.2. ����
4.1.3. ������
4.1.4. �����ַ�
4.1.5. ע��
4.1.6. �ʷ����ȼ�
4.2. ֵ���ʽ
4.2.1. �ֶ�����
4.2.2. λ�ò���
4.2.3. �±�
4.2.4. �ֶ�ѡ��
4.2.5. ����������
4.2.6. ��������
4.2.7. �ۼ����ʽ
4.2.8. ����ת��
4.2.9. �����Ӳ�ѯ
4.2.10. ���鹹����
4.2.11. ���
4.2.12. ���ʽ�������

�������� SQL ���﷨�� ��Щ��������������µĻ�������Щ�����潫��ϸ���� SQL ����������ڶ�����޸����ݡ�

����Ҳ������Щ�Ѿ�����Ϥ SQL ���û���ϸ�Ķ����£���Ϊ��һЩ����͸����� SQL ���ݿ�֮��ʵ�ֵò���һ�£���������Щ������ PostgreSQL ���еġ�

4.1. �ʷ��ṹ

SQL ������һϵ��������ɡ� һ����������һϵ���Ǻ����ɣ� ��һ���ֺţ�";"����β�� ����������ֹҲ����һ�������Щ�Ǻ��ǺϷ���ȡ�����ض�������﷨��

�Ǻſ�����һ���ؼ����� һ����ʶ����һ�� ���Ű�Χ�ı�ʶ���� һ���ı�����������������������ַ����š� �Ǻ�ͨ���ɿհ׷ָ����ո�tab�����з���������������ڻ�����ʱ��Ҳ���Բ��� ��ͨ��ֻ��һ�������ַ���һЩ�����Ǻ�����������ʱ�򣩡�

���⣬�� SQL �����������ע���� ���Dz��ǼǺţ�����ʵ���ϵ�Ч�ڿհס�

���磬���������ǣ��﷨�ϣ��Ϸ��� SQL ���룺

SELECT * FROM MY_TABLE;
UPDATE MY_TABLE SET A = 5;
INSERT INTO MY_TABLE VALUES (3, 'hi there');

������������������У�ÿ��һ�У����ܲ���Ҫ����ô���� �������������һ�������������Ժ���ط��ѳɶ���У���

�������Щ�Ǻű�ʶ�����Щ�Dz�����������ĽǶȿ��ǣ� SQL �﷨�����Ƿdz�һ�¡�ͨ��ͷ�����Ǻ����������֣� ����������������ͨ������˵��һ��"SELECT"�� һ��"UPDATE"����һ��"INSERT"��� ������ UPDATE ��������Ҫ��һ�� SET ��ij��λ�ó��֣������������� INSERT ��Ҫ����һ�� VALUES ��������ÿ�������׼ȷ�﷨������ Part VI ����д��

4.1.1. ��ʶ���͹ؼ���

�������������� SELECT��UPDATE�� �� VALUES �����ļǺŶ����ؼ��������ӣ� Ҳ������Щ�� SQL �������й̶�����ĵ��ʡ� �Ǻ� MY_TABLE �� A ����ʶ�������ӡ� ����ʹ�����ǵ�����IJ�ͬ�����DZ�ʶ���ֶΣ������������ݿ��������֡� ��ˣ���ʱ��ֻ�Ǽ򵥵ؽ�����"����"�� �ؼ��ֺͱ�ʶ������ͬ���Ĵʷ��ṹ����˼��������û����ʶ��������֮ǰ���޷�����һ���Ǻ��DZ�ʶ���������֡� ������� Appendix C ���ҵ�һ���ؼ��ֵ������б�

SQL ��ʶ���͹ؼ��ֱ�����һ����ĸ��ͷ ��a-z �Լ����������ǵ���ĸ�Լ���������ĸ �����»��߿�ͷ ��_����ͷ����ʶ���͹ؼ����������ַ���������ĸ�����֣�0-9���� �����»��ߣ��� SQL ��׼���ᶨ��������ֻ������»��߿�ͷ���β�Ĺؼ��֡�

ϵͳʹ�ò����� NAMEDATALEN-1 ���ַ���Ϊ��ʶ���� �������������д���������֣������ǻᱻ�ضϡ�ȱʡʱ�� NAMEDATALEN �� 64����˱�ʶ����󳤶��� 63 �������������������⣬��ô������� src/include/postgres_ext.h ���޸� NAMEDATALEN ���ı�����

��ʶ���͹ؼ������ֶ��Ǵ�Сд�޹صġ����

UPDATE MY_TABLE SET A = 5;

Ҳ���Ե�Ч��д��

uPDaTE my_TabLE SeT a = 5;

һ�ֺ�ϰ���ǰѹؼ���д�ɴ�д�������ֵ���Сд��

UPDATE my_table SET a = 5;

���еڶ��ֱ�ʶ�����ָ���ʶ�� �����Ű�Χ�ı�ʶ���� ����ͨ����˫���ţ�" �� ���Χ�����ַ������γɵġ� �ָ���ʶ������һ����ʶ���������ǹؼ��֡���ˣ�������� "SELECT" ��ʾһ���ֶ����ֻ������ֽ� "SELECT" �ı���һ��û�����ŵ� SELECT ��������һ�������һ���֣���������������һ��������ֻ����ֶ������õĻ��ͻ����һ���������� ��������ӿ���������ı�ʶ����ôд��

UPDATE "my_table" SET "a" = 5;

���Ű�Χ�ı�ʶ�����԰��������ű���������κ������ַ��� Ҫ����һ��˫���ţ����ǿ���д����˫���š� �������ǾͿ��Թ�����Щԭ���Dz�����ı�����ֶ����֣� ������Щ�����հ׻���ŵ����֡��������������ɡ�

��һ����ʶ�������Ű�Χ������ͬʱҲ������Сд��أ���û�����Ű�Χ��������������ת��Сд�� ���磬������Ϊ��ʶ�� FOO��foo �� "foo" ��һ���� PostgreSQL���֣� �� "Foo" �� "FOO" �����������Լ�����֮�䶼�Dz�ͬ�ġ� ��PostgreSQL ���δ�����ŵ���������ת����Сд�� ��� SQL �Dz����ݵģ�SQL ��Ҫ��δ�����Ű�Χ��������������ת�ɴ�д�� ��� foo ���� "FOO"�� �������д����ֲ�ij�����ô���ǽ�����Ҫô���������Ű�Χ��ij�����֣�Ҫô�ͼ����������

4.1.2. ����

�� PostgreSQL ���������������͵ij����� �ַ�����λ��������ֵ�� ����Ҳ��������Ϊ��ȷ�����ͣ������Ϳ���ʹ�ø�׼ȷ�ı�����ʽ�Լ�����ͨ��ϵͳ����Ч�ش��� ��Щ��ѡ���ں����С��������

4.1.2.1. �ַ�������

SQL ���һ���ִ��ı����õ����ţ�'����Χ�������ַ����У� ���磬'This is a string'�� ���������ִ������ķ����� SQL ��׼����ġ� ���������͵��ִ�������Ƕ�뵥���ŵı�׼���ݵ��������������������ĵ����ű��磬'Dianne''s horse'�� ���⣬PostgreSQL ��������һ����б�ܣ�"\"�������ݵ����ţ� ���ͬһ���ִ�����д��'Dianne\'s horse'��

����һ�� PostgreSQL ��չ�ǻ�����ʹ�� C-���ķ�б�����ݣ� \b ��һ���˸�\f ��һ����ֽ��\n ��һ�����з��� \r ��һ���س���\t ��һ��ˮƽ�Ʊ������\xxx�� ���� xxx ��һ���˽��������Ƕ�Ӧ ASCII ����ַ����κ��������ڷ�б�ܺ�����ַ��������ı������� ��ˣ�Ҫ���ַ��������������б�ܣ������д������б�ܡ�

����Ϊ����ַ����ܳ������ַ��������С�

����ֻ��ͨ��������һ�����з��Ŀհ׷ָ����ַ��������ᱻ������һ�𣬲�����������д��һ���������� ���磺

SELECT 'foo'
'bar';

����

SELECT 'foobar';

��

SELECT 'foo'      'bar';

�ǷǷ����﷨���������΢��Щ�������Ϊ�� SQL �����ģ� PostgreSQL ��ѭ��׼����

4.1.2.2. ��Ԫ����Χ�ִ�����

���������ִ������ı�׼����ͨ�����ܷ��㣬��������ִ������ܶ൥���Ż��߷�б�ܣ� ��ô����ִ������ݿ��ܾͻ��úܿ�ɬ����Ϊÿ�������Ŷ�Ҫ�ӱ��� Ϊ�������ֳ����µIJ�ѯ���߿ɶ��ԣ�PostgreSQL ��������һ�ֳ���"��Ԫ����Χ"���ִ����������취�� һ��ͨ����Ԫ����Χ�������ִ�������һ����Ԫ���ţ�$����һ����ѡ����������ַ�"�Ǻ�"�� ����һ����Ԫ���ţ�һ������ִ������������ַ������У�һ����Ԫ���ţ��Լ�һ���Ϳ�ʼ�����Ԫ����Χ�ļǺ���ͬ�ļǺţ���һ����Ԫ������ɡ� ���磬������������ͬ�ķ���������Ԫ����Χ������ǰ������ӣ�

$$Dianne's horse$$
$SomeTag$Dianne's horse$SomeTag$

��ע�⣬����Ԫ����Χ���ִ�������ſ��Բ�������ʹ�á� ʵ���ϣ���һ����Ԫ����Χ���ִ��û��ʲô�ַ���Ҫ���ݣ� �ִ��������ǰ�����������д����б�ܲ�������ģ� ��Ԫ���Լ�Ҳ��������ģ��������ǺͿ���ǩ��һ����ƥ�䡣

���ǿ���ͨ���ڲ�ͬǶ�׼���ʹ�ò�ͬ����Ԫ�������ִ�������ʵ��Ƕ�ס� �������д���������ʱ�򡣱��磺

$function$
BEGIN
    RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
END;
$function$

������� $q$[\t\r\n\v\\]$q$ ��ʾһ����Ԫ����Χ���ִ��ı� [\t\r\n\v\\]�� �ں����屻 PostgreSQL ִ�е�ʱ��������ʶ������� ������Ϊ������в�ƥ��������Ԫ���ָ���$function$�� ����ֻҪ����������ִ�������ֻ�dz��������һЩ������ַ����ѡ�

����б�ǩ�Ļ���һ����Ԫ����Χ���ִ���ѭ�������Ű�Χ�ı�ʶ����ͬ�Ĺ��� ֻ�������ܰ�����Ԫ������ǩ�Ǵ�Сд��صģ���� $tag$String content$tag$ ����ȷ�ģ��� $TAG$String content$tag$ ���ԡ�

һ��������Źؼ��ֻ��߱�ʶ������Ԫ��Χ���ִ������ÿհ׸����� ������Ԫ����Χ�ָ������ᱻ��Ϊǰ���ʶ����һ���֡�

��Ԫ����Χ���� SQL ��׼��������д���ӵ��ִ��ı���ʱ����ͨ���ȱ�׼�ĵ������﷨�����㡣 ����������������������ִ�������ʱ������ã����羭���ڹ��̺�����������ġ� ����õ������﷨��ÿ������������ķ�б�ܶ�����д�ĸ�����������Ϊ�ִ��ı�������ʱ������Ϊ������ Ȼ���ں���ִ�е�ʱ�����ڲ��ִ���������ٴα�����Ϊһ����

4.1.2.3. �����

λ�����������������ڿ�����ǰ����һ�� B ����д��Сд������ͨ�ַ���������֮��û�пհף��� ���� B'1001'��λ������������õ��ַ�ֻ�� 0 �� 1��

���⣬λ������������ʮ�����Ʊ�ʾ��������������ʹ��ǰ׺�� X ����д����Сд�������磬X'1FF'�� ���ֱ�ʾ����Ч��һ��ÿ��ʮ������λ�ĸ�������λ��λ��������

������ʽ��λ����������������ͨ�ִ������������������� ��Ԫ����Χ��������λ��������

4.1.2.4. ��ֵ����

��ֵ������������ͨ�õ���ʽ��

digits
digits.[digits][e[+-]digits]
[digits].digits[e[+-]digits]
digitse[+-]digits

����� digits ��һ������ʮ����λ��0 �� 9���� �����С���㣬��ô������һλ��С����ǰ�����档���������ָ���ָ�����e������ô������һ��λ���������档 �ڳ����ﲻ���пո���������ַ�Ƕ�����ڡ� ��ע���κ�ǰ�������Ż��߸���ʵ���϶�����Ϊ�dz�����һ���֣� ����ʩ���ڳ�����һ����������

������һЩ�Ϸ�����ֵ���������ӣ�

42
3.5
4.
.001
5e2
1.925e-3

���һ����ֵ�����Ȳ�����С���㣬Ҳ������ָ���������� ��ô���������ֵ���Է���integer�����У�32λ���� ����Ϊ����integer���ͣ����������ֵ���Է��� bigint�У�64λ��������Ϊ���� bigint�� ������Ϊ���� numeric���͡�����С�����/��ָ���������ij������DZ���Ϊ��numeric���͡�

��һ����ֵ���������ʼ��������ֻ�����ͽ����㷨�Ŀ��ˡ� �ڴ��������¸ó�������ݻ������Զ�ǿ��ת��������ʵ����͡� ��Ҫʱ�������ͨ��ǿ������ת����һ����ֵ�������ض����������͡� ���磬�����ǿ��Ҫ���һ����ֵ��������real��float4������������ʱ��ôд��

REAL '1.23'  -- �ִ����
'1.23'::REAL -- PostgreSQL ����ʷԭ�򣩷��
     

��Щʵ����ֻ���������۵�ͨ��ת����������

4.1.2.5. �������͵ij���

�������Ƶij������������б�ʾ���е��κ�һ�������룺

type 'string'
'string'::type
CAST ( 'string' AS type )

���ִ��������ı������ݸ����ֽ� type �����͵�����ת�����̡� ������������͵�һ����������������ڸó����������͵����壬 ��ô��ȷ������ӳ�����ʡ�ԣ����磬�������ֱ�Ӹ���һ�����ֶε�ʱ�򣩣� ��������������Զ�ת����

�ִ�������������ͨ SQL ��ʾ��������Ԫ����Χ����д��

���ǻ������ú��������﷨����������ת����

typename ( 'string' )

��������������������������ʹ�ã����� Section 4.2.8 ��ȡϸ�ڡ�

::��CAST()���ͺ��������﷨Ҳ������������������ʽ������ʱ����ת���� �� Section 4.2.8 �����۵������� ���� type 'string' ����ʽֻ����������һ���ı����������͡� type 'string' ������һ�������������������������ͣ�Ҫ�� :: ���� CAST() ����һ�����鳣�������͡�

4.1.3. ������

һ������������� NAMEDATALEN-1 ��ȱʡ 63 ���ַ����������ַ������У�

+ - * / < > = ~ ! @ # % ^ & | ` ?

�������Բ����������м������ƣ�

  • -- �� /* ���ܳ����ڲ����������е��κεط�����Ϊ���ǻᱻ����ע�Ϳ�ʼ�Դ���

  • ���ַ������������� + �� - ������ �������������ٻ��������в�����֮һ��

    ~ ! @ # % ^ & | ` ?

    ���磬@- ������IJ��������֣� �� *- ���ǡ������������ PostgreSQL �ڲ�Ҫ��Ǻ�֮���пհ׵�����·��� SQL ���ݵIJ�ѯ��

����ʹ�÷� SQL ��׼�IJ��������ֵ�ʱ����ͨ����Ҫ�ÿհ׷ָ����ڵIJ������Ա������塣 ���磬����㶨����һ���� "@" ����Ŀ����������ô��Ͳ���д X*@Y������Ҫд�� X* @Y ��ȷ�� PostgreSQL ��������������������������һ����

4.1.4. �����ַ�

��Щ����ĸ�����ַ���һЩ���⺬�壬��˲��������������� ���ǵ��÷���ϸ�ڿ�������Ӧ�������﷨Ԫ�صĵط��ҵ��� ����ֻ���������ǵĴ��ں͸���һ����Щ�ַ���Ŀ�ġ�

  • ��Ԫ���ţ�$�������������������һ�������嶨�����׼���õ������ ��ʾ������λ�á���������������Ԫ���ſ�����һ����ʶ�����ֻ�����һ����Ԫ����Χ���ִ�������һ���֡�

  • Բ������()�����ڷ����ǿ�����ȼ���ʱ������ƽ��һ���� ��Щ������Բ��������Ϊһ���ض� SQL ����Ĺ̶��﷨��һ����Ҫ��ġ�

  • ��������[]������ѡȡ����Ԫ�ء� ���� Section 8.10 ��ȡ������Ϣ��

  • ���ţ�,��һЩ�﷨���������ڷָ�һ���б��Ԫ�ء�

  • �ֺţ�;������һ�� SQL ��� �����ܳ�����һ����������κεط����������Ű�Χ���������ַ����������߱�ʶ���á�

  • ð�� ��:�����ڴ�������ѡȡ"Ƭ��"�������� Section 8.10������һЩ SQL ���������Ƕ�� SQL ���� ð������ǰ׺��������

  • �Ǻ� ��* ��ijЩ�������ʾһ�����л���һ����������ֵ��ȫ���ֶΡ� �������ۼ����� COUNT �IJ���ʱ�������⺬�塣

  • ��� ��.�������ֳ���������ڷָ�ģʽ������ֶ����֡�

4.1.5. ע��

ע����������˫���߿�ͷ�����쵽��β�������ַ����У����磺

-- ���DZ�׼�� SQL92 ע��

���⣬������ʹ�� C-���Ŀ�ע�ͣ�

/* ����ע��
 * ����Ƕ�ס�/* Ƕ�׵Ŀ�ע�� */
 */

����ע���� /* ��ͷ����չ����Ӧ�� */����Щ��ע�Ϳ���Ƕ�ף����� SQL99 ��˵�������� ���� C ��һ����������ǿ���ע�͵�һ����Ѿ�������ע�͵Ĵ��롣

ע���ڽ�һ�����﷨����֮ǰ����������ɾ�����ÿհ״��档

4.1.6. �ʷ����ȼ�

Table 4-1 ��ʾ�� PostgreSQL ����IJ����������ȼ��͹����ԡ� �����������������ͬ�����ȼ����Ҷ���������ġ� ����������ܻ��в���ôֱ�۵���Ϊ�����磬���������� < �� > �Ͳ��������� <= �� >= ֮�����Ų�ͬ�����ȼ���ͬ���������˫Ŀ�͵�Ŀ���������ʹ�õ�ʱ�� ��ʱ��Ҳ��Ҫ��Բ����������

SELECT 5 ! - 6;

�ᱻ������

SELECT 5 ! (- 6);

��Ϊ��������֪�� ! ������˺�׺�������� ��������׺��������— ֪����ʱ��ֻ����̫���� — Ҫ�ڱ����л������Ҫ�����ԣ���Ҫд��

SELECT (5 !) - 6;

��������Ϊ��չ�Ը����Ĵ��ۡ�

Table 4-1. ���������ȼ����ݼ���

������/Ԫ������������
.����/�ֶ����ָ���
::��PostgreSQL-���е�����ת��������
[ ]������Ԫ��ѡ��
-����Ŀ����
^���ݲ���
* / %���ˣ�����ģ
+ -���ӣ���
IS IS TRUE, IS FALSE, IS UNKNOWN, IS NULL
ISNULL �����Ƿ�Ϊ��ֵ
NOTNULL �����Ƿ�Ϊ�ǿ�ֵ
���κ������ģ������������ı��غ��û����������
IN ���ϳ�Ա
BETWEEN ��Χ����
OVERLAPS ʱ�����ص�
LIKE ILIKE SIMILAR �ַ���ģʽƥ��
< > С�ڣ�����
=�����ڣ���ֵ
NOT���߼���
AND���߼���
OR���߼���

��ע����������ȼ�Ҳ�����ں������ᵽ��ͬ�������ò������û������������ ���磬�����ΪһЩ�ͻ��������Ͷ���һ�� "+" �������� ��ô�������õ� "+" ��������ͬ�������ȼ������������ʲô��

����� OPERATOR �﷨��ʹ����ģʽ���εIJ��������� ����

SELECT 3 OPERATOR(pg_catalog.+) 4;

��ô OPERATOR ����ͻ��� Table 4-1 ������Ϊ"�κ�����"��������ʾ��ȱʡ���ȼ��� ����ʲô�ض��IJ����������� OPERATOR()�����������