DROP FUNCTION IF EXISTS `INTE_ARRAY`;
创新互联-专业网站定制、快速模板网站建设、高性价比五指山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式五指山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖五指山地区。费用合理售后完善,10年实体公司更值得信赖。
delimiter //
-- 集合交集检查函数
-- @param varchar(255) setA A 集合 如 "1,3,5,9"
-- @param varchar(255) setB B 集合 如 "8,2,3,7"
-- @return int(1) B 集合内单元在 A集合 内存在则返回 1 否则返回 0
CREATE FUNCTION `INTE_ARRAY` (setA varchar(255),setB varchar(255)) RETURNS int(1)
BEGIN
DECLARE idx INT DEFAULT 0 ; -- B 集合单元索引
DECLARE len INT DEFAULT 0;-- B 集合表达式长度
DECLARE llen INT DEFAULT 0;-- 最后检查位置
DECLARE clen INT DEFAULT 0;-- 当前检查位置
DECLARE tmpStr varchar(255);-- 临时检查数据集
DECLARE curt varchar(255);-- B 当前检查的单元
SET len = LENGTH(setB);
WHILE idx len DO
SET idx = idx + 1;
SET tmpStr = SUBSTRING_INDEX(setB,",",idx);
SET clen = LENGTH(tmpStr);
-- 获取当前 setB 中的单元
IF idx = 1 THEN SET curt = tmpStr;
ELSE SET curt = SUBSTRING(setB,llen+2,clen-llen-1);
END IF;
-- 检查是否存在于 setA 中
IF FIND_IN_SET(curt,setA) 0 THEN RETURN 1;
END IF;
-- 当前检查终点与上次检查终点相同则跳出
IF clen = llen THEN RETURN 0;
END IF;
SET llen = clen;
END WHILE;
RETURN 0;
END;
//
delimiter ;
select INTE_ARRAY("1,3,5,9","8,2,3,7") as is_inte_array;
--select INTE_ARRAY("1,3,5,9","2,8,6,10") as is_inte_array;
--select INTE_ARRAY("10,3,5,9","2,8,6,10") as is_inte_array;
--select INTE_ARRAY("1,30,5,9","2,8,6,10") as is_inte_array;
--select INTE_ARRAY("1,30,5,9","2,30,6,10") as is_inte_array;
SELECT语句的查询结果是记录的集合,多个SELECT语句的结果可进行集合操作
分类:
案例:查询中国的用户与其他年龄小于18岁的用户
并集
交集
差集
(1)查询表中全部信息:
select * from 表名
(2)查询表中指定列的信息:
select 列1,列2 from 表名
(3)去重:
select distinct 列... from 表名
(4)拼接结果:
select concat(列1,列2) from 表名
(5)设置别名(注意:关键字as可以省略)
select 列 as 别名 from 表名
select 列 别名 from 表名
(6)条件查询:
select 列... from 表名 where 条件
条件中比较运算符:(等于:= 大于: 大于等于:= 小于: 小于等于:= 不等于:!= 或 )
(7)where 列 比较运算符 值
注意:字符串、日期需使用单引号括起来
(8)逻辑运算符(并且:and或 或:or 非:not或!)
where 条件1 逻辑运算符 条件2
where not 条件
(9)范围查询:
where 列 between 条件1 and 条件2; //列在这个区间的值where 列 not between 条件1 and 条件2; //不在这个区间where !( 列 between 条件1 and 条件2 ); //同样表示不在这个区间
集合查询(判断列的值是否在指定的集合中):
where 列 in(值1,值2); //列中的数据是in后的值里面的where 列 not in(值1,值2); //不是in中指定值的数据
null值查询(注意:列中值为null不能使用=去查询):
where 列 is null; //查询列中值为null的数据
资料来源 网页链接
select *from emp where name in('张三','李四','王五');
如果()里面的是变量,可以用数组,只不过数组要处理一下
1、选中需要测试的数据库,并查看测试数据库表;由于表t_people_info中的id是主键,求id的个数即是求数据库表的总记录数,代码如下:
select count(id) from t_people_info;
2、查看数据库表t_people_info中年龄中最小值,需要用到集合函数min(),代码如下:
select min(p_age) from t_people_info;
3、查看数据库表t_people_info中年龄中最大值,需要用到集合函数max(),代码如下:
select max(p_age) from t_people_info;
4、查看数据库表t_people_info中年龄中平均值,需要用到集合函数avg(),代码如下:
select avg(p_age) from t_people_info;
5、若想统计t_people_info中的年龄的总和,用到集合函数sum(),
代码如下:
select sum(p_age) from t_people_info;
6、统计数据库表中记录个数,除了使用count(主键)外,可以使用count(1)、count(*)和count(0),
代码如下:
select count(1) from t_people_info;
select count(*) from t_people_info;
select count(0) from t_people_info;