MySQL SQL 语句

结构化查询语言(Structured Query Language),是用于数据库中的标准数据查询语言,IBM 公司最早使用在其开发的数据库系统中。1986年10月,美国国家标准学会(ANSI) 对 SQL 进行规范后,以此作为关系式数据库管理系统的标准语言 (ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对 SQL 规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。-- wikipedia

Lowercase or Uppercase

SQL 语句关键字习惯上大写,初始原因是与表名区别,便于阅读

分组查询

" 单列分组
SELECT column1, aggregate_function(column1) AS total
FROM table_name
WHERE column_name operator value
GROUP BY column1 

" 多列分组
SELECT column1, column2, aggregate_function(column3) AS total
FROM table_name
WHERE column_name operator value
GROUP BY column1, column2

Aggregate function (合计函数) 包括计数(COUNT)、求和(SUM)、平均数(AVG)、最大值(MAX)、最小值(MIN)、第一个值(FIRST)、最后一个值(LAST)等。

由于 WHERE 关键字不能与合计函数一起使用,因此添加了 HAVING Clause(子句)。

SELECT column1, aggregate_function(column1) AS total
FROM table_name
WHERE column_name operator value
GROUP BY column1
AVING aggregate_function(column_name) operator value

参见:http://www.w3schools.com/sql/sql_groupby.asp

安全问题

由于 SQL 指令在部份高级使用时,语法会依照特定条件来变换,而且若是表格中的字段过多时,许多开发人员都会习惯以字符串组立的方式创建 SQL 指令,而且又使用系统管理员级的帐户连到数据库,因此让黑客有机会利用 SQL 的组立方式进行攻击,像是在指令中添加部份刺探性或破坏性的指令(例如 DROP TABLE、DROP DATABASE 或是 DELETE * FROM myTable 等具破坏性的指令),让数据库的数据或实体服务器被破坏,导致服务中断或是系统瘫痪等后果,此种攻击手法称为SQL注入。

目前实务上较有效的防御方法,就是全面改用参数化查询