以下信息来源于 SQL 样式指南 · SQL Style Guide ,仅做个人收集使用,如需阅读最新内容请点击链接跳转
SQL style guide SQL样式指南 这篇文档翻译自以署名-相同方式共享 4.0 国际协议 发布的http://www.sqlstyle.guide ,译文以原文同样的协议发布。
Overview 综述 你可以直接使用这些指导方针,或者fork 后创建自己的版本——最重要的是选择一套方针并严格遵守它。欢迎通过提交issue 或pull request 来提交建议或修复bug。
为了让阅读了Joe Celko的《SQL ProgrammingStyle 》的团队能更容易采用这套规则, 这套原则被设计成与该书的兼容的形式。该指南在某些领域严格一些,在另一些领域松懈一些。 当然该指南比Celko的书更简洁一些,因为Celko的书包含了一些趣闻和每一条原则后的理由。
将该文档的Markdown format 格式添加到项目代码库中或将该页面的链接发送给所有项目的参与者要比传阅实体书容易得多。
Simon Holywell 所著的《SQL样式指南》以署名-相同方式共享 4.0 国际协议 发布,改编自http://www.sqlstyle.guide 。
General 一般原则 Do 应该做的事情
使用一致的、叙述性的名称。
灵活使用空格和缩进来增强可读性。
存储符合ISO-8601 标准的日期格式(YYYY-MM-DD HH:MM:SS.SSSSS
)。
最好使用标准SQL函数而不是特定供应商的函数以提高可移植性。
保证代码简洁明了并消除多余的SQL——比如非必要的引号或括号,或者可以推导出的多余WHERE
语句。
必要时在SQL代码中加入注释。优先使用C语言式的以/*
开始以*/
结束的块注释,或使用以--
开始的行注释。
1 2 3 SELECT file_hash FROM file_system WHERE file_name = '.vimrc' ;
1 2 3 4 5 UPDATE file_system SET file_modified_date = '1980-02-22 13:19:01.00000' , file_size = 209732 WHERE file_name = '.vimrc' ;
Avoid 应避免的事情
驼峰命名法——它不适合快速扫描。
描述性的前缀或匈牙利命名法比如sp_
或tbl
。
复数形式——尽量使用更自然的集合术语。比如,用“staff”替代“employees”,或用“people”替代“individuals”。
需要引用号的标识符——如果你必须使用这样的标识符,最好坚持用SQL92的双引号来提高可移植性。
面向对象编程的原则不该应用到结构化查询语言或数据库结构上。
Naming conventions 命名惯例 General 一般原则
保证名字独一无二且不是保留字 。
保证名字长度不超过30个字节。
名字要以字母开头,不能以下划线结尾。
只在名字中使用字母、数字和下划线。
不要在名字中出现连续下划线——这样很难辨认。
在名字中需要空格的地方用下划线代替。
尽量避免使用缩写词。使用时一定确定这个缩写简明易懂。
1 2 SELECT first_name FROM staff;
Tables 表名
用集群名称,或在不那么理想的情况下,复数形式。如staff
和employees
。
不要使用类似tbl
或其他的描述性的前缀或匈牙利命名法。
表不应该同它的列同名,反之亦然。
尽量避免连接两个表的名字作为关系表(relationship table)的名字。与其使用cars_mechanics
做表名不如使用services
。
Columns 列名
总是使用单数形式。
避免直接使用id
做表的主标识符。
避免列名同表名同名,反之亦然。
总是使用小写字母,除非是特殊情况,如专有名词。
Aliasing or correlations 别名与关联名
应该与它们别名的对象或与它们代表的表达式相关联。
一般来说,关联名应该是对象名的第一个字母。
如果已经有相同的关联名了,那么在关联名后加一个数字。
总是加上AS
关键字,因为这样的显示声明易于阅读。
为计算出的数据命名时,用一个将这条数据存在表里时会使用的列名。
1 2 3 4 SELECT first_name AS fn FROM staff AS s1 JOIN students AS s2 ON s2.mentor_id = s1.staff_num;
1 2 SELECT SUM (s.monitor_tally) AS monitor_total FROM staff AS s;
Stored procedures 过程名
名字一定要包含动词。
不要附加sp_
或任何其他这样的叙述性前缀或使用匈牙利表示法。
下列后缀有统一的意义,能保证SQL代码更容易被理解。在合适的时候使用正确的后缀。
_id
独一无二的标识符,如主键。
_status
标识值或任何表示状态的值,比如publication_status
。
_total
总和或某些值的和。
_num
表示该域包含数值。
_name
表示名字。
_seq
包含一系列数值。
_date
表示该列包含日期。
_tally
计数值。
_size
大小,如文件大小或服装大小。
_addr
地址,有形的或无形的,如ip_addr
Query syntax 查询语句 Reserved words 保留字 保留字总是大写,如SELECT
和WHERE
。
最好使用保留字的全称而不是简写,用ABSOLUTE
而不用ABS
。
当标准ANSI SQL关键字能完成相同的事情时,不要使用数据库服务器相关的关键字,这样能增强可移植性。
1 2 3 SELECT model_num FROM phones AS p WHERE p.release_date > '2014-09-30' ;
White space 空白字符 正确地使用空白字符对清晰的代码十分重要。不要把代码堆再一起或移除自然语言中的空格。
Spaces 空格 用空格使根关键字都结束在同一列上。在代码中形成一个从上到下的“川流”,这样帮助读者快速扫描代码并将关键字和实现细节分开。川流在排版时应该避免,但是对书写SQL语句是有帮助的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 (SELECT f.species_name, AVG (f.height) AS average_height, AVG (f.diameter) AS average_diameter FROM flora AS f WHERE f.species_name = 'Banksia' OR f.species_name = 'Sheoak' OR f.species_name = 'Wattle' GROUP BY f.species_name, f.observation_date) UNION ALL (SELECT b.species_name, AVG (b.height) AS average_height, AVG (b.diameter) AS average_diameter FROM botanic_garden_flora AS b WHERE b.species_name = 'Banksia' OR b.species_name = 'Sheoak' OR b.species_name = 'Wattle' GROUP BY b.species_name, b.observation_date)
注意WHERE
和FROM
等关键字,都右对齐,而真实的列名都左对齐。
注意下列情况总是加入空格:
在等号前后(=
)
在逗号后(,
)
单引号前后('
),除非单引号后面是括号、逗号或分号
1 2 3 4 SELECT a.title, a.release_date, a.recording_date FROM albums AS a WHERE a.title = 'Charcoal Lane' OR a.title = 'The New Danger' ;
Line spacing 换行 总是换行的情况:
在AND
或OR
前。
在分号后(分隔语句以提高可读性)。
在每个关键词定以后。
将多个列组成一个逻辑组时的逗号后。
将代码分隔成相关联的多个部分,帮助提高大段代码的可读性。
让所有的关键字右对齐,让所有的值左对齐,在查询语句中间留出一个空隙。这样能提高速读代码的速读。
1 2 3 INSERT INTO albums (title, release_date, recording_date)VALUES ('Charcoal Lane' , '1990-01-01 01:01:01.00000' , '1990-01-01 01:01:01.00000' ), ('The New Danger' , '2008-01-01 01:01:01.00000' , '1990-01-01 01:01:01.00000' );
1 2 3 UPDATE albums SET release_date = '1990-01-01 01:01:01.00000' WHERE title = 'The New Danger' ;
1 2 3 4 5 SELECT a.title, a.release_date, a.recording_date, a.production_date FROM albums AS a WHERE a.title = 'Charcoal Lane' OR a.title = 'The New Danger' ;
Identation 缩进 为确保SQL的可读性,一定要遵守下列规则。
Joins Join语句 Join语句应该缩进到川流的另一侧并在必要的时候添加一个换行。
1 2 3 4 5 6 7 8 9 SELECT r.last_name FROM riders AS r INNER JOIN bikes AS b ON r.bike_vin_num = b.vin_num AND b.engine_tally > 2 INNER JOIN crew AS c ON r.crew_chief_last_name = c.last_name AND c.chief = 'Y' ;
Subqueries 子查询 子查询应该在川流的右侧对齐并使用其他查询相同的样式。有时候将右括号单独置于一行并同与它配对的左括号对齐是有意义的——尤其是当存在嵌套子查询的时候。
1 2 3 4 5 6 7 8 9 10 11 SELECT r.last_name, (SELECT MAX (YEAR (championship_date)) FROM champions AS c WHERE c.last_name = r.last_name AND c.confirmed = 'Y' ) AS last_championship_year FROM riders AS r WHERE r.last_name IN (SELECT c.last_name FROM champions AS c WHERE YEAR (championship_date) > '2008' AND c.confirmed = 'Y' );
尽量使用BETWEEN
而不是多个AND
语句。
同样地,使用IN()
而不是多个OR
语句。
当数据输出数据库时需要处理时,使用CASE
表达式。CASE
语句能嵌套形成更复杂的逻辑结构。
尽量避免UNION
语句和临时表。如果数据库架构能够不靠这些语句运行,那么多数情况下它就不应该依靠这些语句。
1 2 3 4 5 6 7 8 SELECT CASE postcode WHEN 'BN1' THEN 'Brighton' WHEN 'EH1' THEN 'Edinburgh' END AS city FROM office_locations WHERE country = 'United Kingdom' AND opening_time BETWEEN 8 AND 9 AND postcode IN ('EH1' , 'BN1' , 'NN1' , 'KW1' )
Create syntax 创建语句 声明模式信息时维护可读代码也很重要。所以列定义的顺序和分组一定要有意义。
在CREATE
定义中,每列要缩进4个空格。
Choosing data types 选择数据类型
尽量不使用供应商相关的数据类型——这些类型可不能能在老系统上使用。
只在真的需要浮点数运算的时候才使用REAL
和FLOAT
类型,否则使用NUMERIC
和DECIMAL
类型。浮点数舍入误差是个麻烦。
Specifying default values 指定默认类型
默认值一定与列的类型相同——如果一个列的类型是DECIMAL
那么就不要使用INTEGER
类型作为默认值。
默认值要紧跟类型声明并在NOT NULL
声明前。
Constraints and keys 约束和键 约束和键是构成数据库系统的重要组成部分。它们能很快地变得难以阅读和理解,所以遵从指导方针是很重要的。
Choosing keys 选择键 设计时应该谨慎选择构成键的列,因为键既明显影响着性能和数据完整性。
键在某种程度上应该是独一无二的。
该值在不同表中的类型应该相同并且尽量不会更改。
该值是否会无法通过某种标准格式(如ISO发布的标准)?如
尽量让键保持简单,但在适当情况下不要害怕使用复合键。
以上是定义数据库时合乎逻辑的平衡做法。当需求变更时,键也应该根据情况更新。
Defining constraints 定义约束 确定键后,就可以用约束和字值段验证来定义它们。
General 概述
表至少需要一个键来保证其完整性和可用性。
约束应该有名字,除了UNIQUE
、PRIMARY KEY
和FOREIGN KEY
之外。
Layout and order 布局和顺序
在CREATE TABLE
语句后先定义主键。
约束的定义应该紧跟它相应的列的定义后。
如果该约束与多个列相关,那么让它尽量离与其相关的列距离越近越好。实在不行就讲它放在表定义的最后。
如果是与整个表相关联表级别的约束,那么就将放在表的定义的最后。
按照字母顺序安排定义,ON DELETE
排在ON UPDATE
前。
有道理的话,把所有相关的语句对齐。比如,把所有NOT NULL
定义对齐到同一列。虽然这样的做法有些慢,但是能提高可读性。
Validation 校验
用LIKE
和SIMILAR TO
约束来保证格式已知字符串的数据完整性。
当数字的值的范围可以确定时,用CHECK()
来防止错误的值进入数据库或被错误地转换。大部分情况下至少要确认值要大于零。
CHECK()
约束应该在单独的语句中以便debug。
Example 1 2 3 4 5 6 7 8 CREATE TABLE staff ( PRIMARY KEY (staff_num), staff_num INT (5 ) NOT NULL , first_name VARCHAR (100 ) NOT NULL , pens_in_drawer INT (2 ) NOT NULL , CONSTRAINT pens_in_drawer_range CHECK (pens_in_drawer >= 1 AND pens_in_drawer < 100 ) );
Design to avoid
面向对象设计思想并不适用于关系型数据库——避免这个陷阱。
将值存入一列并将单位存在另一列。列的定义应该让自己的单位不言自明以避免在应用内进行合并。使用CHECK()
来保证数据库中的数据是合法的。
EAV (Entity Attribute Value) 表——用特殊的产品来处理无模式数据。
因为某些原因(如为了归档、为了划分跨国公司的区域)将能合并在一起的表分开。这样的设计导致以后必须使用UNION
操作而不能直接查询一个表。
附录 保留字参考 下表包含了ANSI SQL (92, 99 和 2003)、MySQL 3到5.x、PostgreSQL 8.1、MS SQL Server 2000、MS ODBC和Oracle 10.2中的关键字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 A ABORT ABS ABSOLUTE ACCESS ACTION ADA ADD ADMIN AFTER AGGREGATE ALIAS ALL ALLOCATE ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARE ARRAY AS ASC ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC ATTRIBUTE ATTRIBUTES AUDIT AUTHORIZATION AUTO_INCREMENT AVG AVG_ROW_LENGTH BACKUP BACKWARD BEFORE BEGIN BERNOULLI BETWEEN BIGINT BINARY BIT BIT_LENGTH BITVAR BLOB BOOL BOOLEAN BOTH BREADTH BREAK BROWSE BULK BY C CACHE CALL CALLED CARDINALITY CASCADE CASCADED CASE CAST CATALOG CATALOG_NAME CEIL CEILING CHAIN CHANGE CHAR CHAR_LENGTH CHARACTER CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME CHARACTER_SET_SCHEMA CHARACTERISTICS CHARACTERS CHECK CHECKED CHECKPOINT CHECKSUM CLASS CLASS_ORIGIN CLOB CLOSE CLUSTER CLUSTERED COALESCE COBOL COLLATE COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA COLLECT COLUMN COLUMN_NAME COLUMNS COMMAND_FUNCTION COMMAND_FUNCTION_CODE COMMENT COMMIT COMMITTED COMPLETION COMPRESS COMPUTE CONDITION CONDITION_NUMBER CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA CONSTRAINTS CONSTRUCTOR CONTAINS CONTAINSTABLE CONTINUE CONVERSION CONVERT COPY CORR CORRESPONDING COUNT COVAR_POP COVAR_SAMP CREATE CREATEDB CREATEROLE CREATEUSER CROSS CSV CUBE CUME_DIST CURRENT CURRENT_DATE CURRENT_DEFAULT_TRANSFORM_GROUP CURRENT_PATH CURRENT_ROLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TRANSFORM_GROUP_FOR_TYPE CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA DATABASE DATABASES DATE DATETIME DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION DAY DAY_HOUR DAY_MICROSECOND DAY_MINUTE DAY_SECOND DAYOFMONTH DAYOFWEEK DAYOFYEAR DBCC DEALLOCATE DEC DECIMAL DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED DEFINED DEFINER DEGREE DELAY_KEY_WRITE DELAYED DELETE DELIMITER DELIMITERS DENSE_RANK DENY DEPTH DEREF DERIVED DESC DESCRIBE DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DIAGNOSTICS DICTIONARY DISABLE DISCONNECT DISK DISPATCH DISTINCT DISTINCTROW DISTRIBUTED DIV DO DOMAIN DOUBLE DROP DUAL DUMMY DUMP DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELEMENT ELSE ELSEIF ENABLE ENCLOSED ENCODING ENCRYPTED END END - EXEC ENUM EQUALS ERRLVL ESCAPE ESCAPED EVERY EXCEPT EXCEPTION EXCLUDE EXCLUDING EXCLUSIVE EXEC EXECUTE EXISTING EXISTS EXIT EXP EXPLAIN EXTERNAL EXTRACT FALSE FETCH FIELDS FILE FILLFACTOR FILTER FINAL FIRST FLOAT FLOAT4 FLOAT8 FLOOR FLUSH FOLLOWING FOR FORCE FOREIGN FORTRAN FORWARD FOUND FREE FREETEXT FREETEXTTABLE FREEZE FROM FULL FULLTEXT FUNCTION FUSION G GENERAL GENERATED GET GLOBAL GO GOTO GRANT GRANTED GRANTS GREATEST GROUP GROUPING HANDLER HAVING HEADER HEAP HIERARCHY HIGH_PRIORITY HOLD HOLDLOCK HOST HOSTS HOUR HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND IDENTIFIED IDENTITY IDENTITY_INSERT IDENTITYCOL IF IGNORE ILIKE IMMEDIATE IMMUTABLE IMPLEMENTATION IMPLICIT IN INCLUDE INCLUDING INCREMENT INDEX INDICATOR INFILE INFIX INHERIT INHERITS INITIAL INITIALIZE INITIALLY INNER INOUT INPUT INSENSITIVE INSERT INSERT_ID INSTANCE INSTANTIABLE INSTEAD INT INT1 INT2 INT3 INT4 INT8 INTEGER INTERSECT INTERSECTION INTERVAL INTO INVOKER IS ISAM ISNULL ISOLATION ITERATE JOIN K KEY KEY_MEMBER KEY_TYPE KEYS KILL LANCOMPILER LANGUAGE LARGE LAST LAST_INSERT_ID LATERAL LEADING LEAST LEAVE LEFT LENGTH LESS LEVEL LIKE LIMIT LINENO LINES LISTEN LN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOCK LOGIN LOGS LONG LONGBLOB LONGTEXT LOOP LOW_PRIORITY LOWER M MAP MATCH MATCHED MAX MAX_ROWS MAXEXTENTS MAXVALUE MEDIUMBLOB MEDIUMINT MEDIUMTEXT MEMBER MERGE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT METHOD MIDDLEINT MIN MIN_ROWS MINUS MINUTE MINUTE_MICROSECOND MINUTE_SECOND MINVALUE MLSLABEL MOD MODE MODIFIES MODIFY MODULE MONTH MONTHNAME MORE MOVE MULTISET MUMPS MYISAM NAME NAMES NATIONAL NATURAL NCHAR NCLOB NESTING NEW NEXT NO NO_WRITE_TO_BINLOG NOAUDIT NOCHECK NOCOMPRESS NOCREATEDB NOCREATEROLE NOCREATEUSER NOINHERIT NOLOGIN NONCLUSTERED NONE NORMALIZE NORMALIZED NOSUPERUSER NOT NOTHING NOTIFY NOTNULL NOWAIT NULL NULLABLE NULLIF NULLS NUMBER NUMERIC OBJECT OCTET_LENGTH OCTETS OF OFF OFFLINE OFFSET OFFSETS OIDS OLD ON ONLINE ONLY OPEN OPENDATASOURCE OPENQUERY OPENROWSET OPENXML OPERATION OPERATOR OPTIMIZE OPTION OPTIONALLY OPTIONS OR ORDER ORDERING ORDINALITY OTHERS OUT OUTER OUTFILE OUTPUT OVER OVERLAPS OVERLAY OVERRIDING OWNER PACK_KEYS PAD PARAMETER PARAMETER_MODE PARAMETER_NAME PARAMETER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG PARAMETER_SPECIFIC_NAME PARAMETER_SPECIFIC_SCHEMA PARAMETERS PARTIAL PARTITION PASCAL PASSWORD PATH PCTFREE PERCENT PERCENT_RANK PERCENTILE_CONT PERCENTILE_DISC PLACING PLAN PLI POSITION POSTFIX POWER PRECEDING PRECISION PREFIX PREORDER PREPARE PREPARED PRESERVE PRIMARY PRINT PRIOR PRIVILEGES PROC PROCEDURAL PROCEDURE PROCESS PROCESSLIST PUBLIC PURGE QUOTE RAID0 RAISERROR RANGE RANK RAW READ READS READTEXT REAL RECHECK RECONFIGURE RECURSIVE REF REFERENCES REFERENCING REGEXP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY REINDEX RELATIVE RELEASE RELOAD RENAME REPEAT REPEATABLE REPLACE REPLICATION REQUIRE RESET RESIGNAL RESOURCE RESTART RESTORE RESTRICT RESULT RETURN RETURNED_CARDINALITY RETURNED_LENGTH RETURNED_OCTET_LENGTH RETURNED_SQLSTATE RETURNS REVOKE RIGHT RLIKE ROLE ROLLBACK ROLLUP ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROW_COUNT ROW_NUMBER ROWCOUNT ROWGUIDCOL ROWID ROWNUM ROWS RULE SAVE SAVEPOINT SCALE SCHEMA SCHEMA_NAME SCHEMAS SCOPE SCOPE_CATALOG SCOPE_NAME SCOPE_SCHEMA SCROLL SEARCH SECOND SECOND_MICROSECOND SECTION SECURITY SELECT SELF SENSITIVE SEPARATOR SEQUENCE SERIALIZABLE SERVER_NAME SESSION SESSION_USER SET SETOF SETS SETUSER SHARE SHOW SHUTDOWN SIGNAL SIMILAR SIMPLE SIZE SMALLINT SOME SONAME SOURCE SPACE SPATIAL SPECIFIC SPECIFIC_NAME SPECIFICTYPE SQL SQL_BIG_RESULT SQL_BIG_SELECTS SQL_BIG_TABLES SQL_CALC_FOUND_ROWS SQL_LOG_OFF SQL_LOG_UPDATE SQL_LOW_PRIORITY_UPDATES SQL_SELECT_LIMIT SQL_SMALL_RESULT SQL_WARNINGS SQLCA SQLCODE SQLERROR SQLEXCEPTION SQLSTATE SQLWARNING SQRT SSL STABLE START STARTING STATE STATEMENT STATIC STATISTICS STATUS STDDEV_POP STDDEV_SAMP STDIN STDOUT STORAGE STRAIGHT_JOIN STRICT STRING STRUCTURE STYLE SUBCLASS_ORIGIN SUBLIST SUBMULTISET SUBSTRING SUCCESSFUL SUM SUPERUSER SYMMETRIC SYNONYM SYSDATE SYSID SYSTEM SYSTEM_USER TABLE TABLE_NAME TABLES TABLESAMPLE TABLESPACE TEMP TEMPLATE TEMPORARY TERMINATE TERMINATED TEXT TEXTSIZE THAN THEN TIES TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TINYBLOB TINYINT TINYTEXT TO TOAST TOP TOP_LEVEL_COUNT TRAILING TRAN TRANSACTION TRANSACTION_ACTIVE TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK TRANSFORM TRANSFORMS TRANSLATE TRANSLATION TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM TRUE TRUNCATE TRUSTED TSEQUAL TYPE UESCAPE UID UNBOUNDED UNCOMMITTED UNDER UNDO UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNLOCK UNNAMED UNNEST UNSIGNED UNTIL UPDATE UPDATETEXT UPPER USAGE USE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_CODE USER_DEFINED_TYPE_NAME USER_DEFINED_TYPE_SCHEMA USING UTC_DATE UTC_TIME UTC_TIMESTAMP VACUUM VALID VALIDATE VALIDATOR VALUE VALUES VAR_POP VAR_SAMP VARBINARY VARCHAR VARCHAR2 VARCHARACTER VARIABLE VARIABLES VARYING VERBOSE VIEW VOLATILE WAITFOR WHEN WHENEVER WHERE WHILE WIDTH_BUCKET WINDOW WITH WITHIN WITHOUT WORK WRITE WRITETEXT X509 XOR YEAR YEAR_MONTH ZEROFILL ZONE