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) //调用储存过程 更多java学习资料可关注:itheimaGZ获取(公冢号) |