8.2 Sql 之聚合函数:
聚合函数是对一组值执行计算并返回单一的值的函数, 它经常与 SELECT 语句的 GROUP BY 子句一同使用。
1).AVG 返回指定组中的平均值, 空值被忽略; COUNT 返回指定组中项目的数量。
例: select prd_no,avg(qty) from sales group by prd_no
2). MAX 返回指定数据的最大值; MIN 返回指定数据的最小值; SUM 返回指定数据的和, 只能用于数
字列, 空值被忽略。
例: select prd_no,max(qty) from sales group by prd_no
3) 使用 group by 子句对数据进行分组; 对 group by 子句形成的组运行聚集函数计算每一组的值; 最后
用 having 子句去掉不符合条件的组; having 子句中的每一个元素也必须出现在 select 列表中。 有些数
据库例外, 如 oracle.
例: select prd_no,max(qty) from sales group by prd_no having prd_no>10
8.3 Sql 之 SQL 注入
举例:
select admin from user where username='admin' or 'a'='a' and passwd=''or 'a'='a'
防止 SQL 注入, 使用预编译语句是预防 SQL 注入的最佳方式, 如
select admin from user where username=? And password=?
使用预编译的 SQL 语句语义不会发生改变, 在 SQL 语句中, 变量用问号? 表示。 像上面例子中, username
变量传递的'admin' or 'a'='a' 参数, 也只会当作 username 字符串来解释查询, 从根本上杜绝了 SQL 注
入攻击的发生。
注意: 使用 mybaits 时 mapper 中#方式能够很大程度防止 sql 注入, $方式无法防止 sql 注入.
8.4 SQL Select 语句完整的执行顺序:
from--->where--->group by--->having--->计算所有的表达式--->order by--->select 输出 8.5 什么是存储过程? 它有什么优点?
答: 存储过程是一组予编译的 SQL 语句,
它的优点有:
允许模块化程序设计, 就是说只需要创建一次过程, 以后在程序中就可以调用该过程任意次。
允许更快执行, 如果某操作需要执行大量 SQL 语句或重复执行, 存储过程比 SQL 语句执行的要快。
减少网络流量, 例如一个需要数百行的 SQL 代码的操作有一条执行语句完成, 不需要在网络中发
送数百行代码。
更好的安全机制, 对于没有权限执行存储过程的用户, 也可授权他们执行存储过程。
1) MySQL 存储过程的创建
(1). 格式
MySQL 存储过程创建的格式:
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
SQL 语句代码块
END
举例:
CREATE PROCEDURE proc1(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM user;
END
(了解) (2). 参数: MySQL 存储过程参数有三种类型: in、 out、 inout。
如果仅仅想把数据传给 MySQL 存储过程, 那就使用“in” 类型参数; 如果仅仅从 MySQL 存储过程返回值,
那就使用“out” 类型参数; 如果需要把数据传给 MySQL 存储过程, 还要经过一些计算后再传回给我们,
此时, 要使用“inout” 类型参数。
(3). Mysql 调用储存过程
Set @n=1 //声明变量
Call procName(@n) //调用储存过程 |
|