常见基本语法使用
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
-- 使用having语句
SELECT
COUNT(UID),
DERP_NO
FROM
TEST_CUST_INFO
GROUP BY DERP_NO
HAVING COUNT(UID) > 10
函数
DELIMITER $$
USE `ifdp`$$
DROP FUNCTION IF EXISTS `queryChildrenOrganInfo`$$
CREATE DEFINER=`ifdp`@`%` FUNCTION `queryChildrenOrganInfo`(organNo VARCHAR(100)) RETURNS VARCHAR(4000) CHARSET utf8
BEGIN
DECLARE organNoList VARCHAR(4000);
DECLARE organNoes VARCHAR(4000);
SET organNoList='$';
SET organNoes = organNo;
WHILE CHAR_LENGTH(organNoes) > 0 DO
SET organNoList= CONCAT(organNoList,',',organNoes);
SELECT GROUP_CONCAT(organ_no) INTO organNoes FROM IFDP_SYS_ORGAN_BASE WHERE organ_status='1' AND FIND_IN_SET(parent_no,organNoes)>0;
END WHILE;
RETURN organNoList;
END$$
DELIMITER ;
存储过程
存储过程传多个参数?
- 返回一个值的存储过程,多个值类似;在后面加out;
DELIMITER $$
USE `ifdp`$$
DROP PROCEDURE IF EXISTS `removeCCCByUserNo`$$
CREATE DEFINER=`ifdp`@`%` PROCEDURE `removeCCCByUserNo`(IN userNo VARCHAR(64), OUT userCount INT UNSIGNED)
BEGIN
DELETE FROM CCC WHERE c2 = userNo;
SELECT COUNT(*) FROM CCC INTO userCount;
END$$
DELIMITER ;
- 返回一个结果集合
DELIMITER $$
USE `ifdp`$$
DROP PROCEDURE IF EXISTS `selectCCCResultSet`$$
CREATE DEFINER=`ifdp`@`%` PROCEDURE `selectCCCResultSet`()
BEGIN
-- 直接返回结果集合;不需要另外进行操作
SELECT * FROM CCC;
END$$
DELIMITER ;
游标
触发器
函数和存储过程之间的不同
- 存储过程的速度比较快,因为存储过程已经编译了;函数还没有进行编译
- 存储过程可以返回多个参数,函数只能返回一个参数(对象/值)
- 函数可以嵌入SQL中使用,可以在select中调用;存储过程不行
- 存储过程中不能再调用存储过程
- 自定义函数可以调用其他函数,也可以调用自己(递归)
网友评论