网站制作器,保定模板建站定制网站,郑州网页设计制作公司,建设厅网站关于建筑资质合并目录
一、本文前言
二、高效查询方式
1#xff09;指定指字段进行查看
2#xff09;对字段进行去重查看
3#xff09;where条件查询
4#xff09;and 和 or 进行逻辑关系的增加
5#xff09;查询取值列表中的数据
6#xff09;between的引用
7#xff09;like…目录
一、本文前言
二、高效查询方式
1指定指字段进行查看
2对字段进行去重查看
3where条件查询
4and 和 or 进行逻辑关系的增加
5查询取值列表中的数据
6between的引用
7like的查询方式
8排序方式进行查询
三、运用函数查询
1数据库中常用数学的函数
2聚合函数
3字符串函数
1去除字符 trim
2 截取 substr
3字段拼接
4返回字符长度 length
5替换 replace
四、高级查询语句
1GROUP BY用于分组和汇总
1汇总统计
2汇总并对其指定字段数字类进行累加
3汇总并对其指定字段数字类进行累加再进行降序
2HAVING 过滤
3别名设置查询
语法格式
1字段别名
编辑
2表别名
4表的自我连接
1无重复数值排名
2有重复数值排名
5子查询语句
子查询运用升级
6EXISTS
格式
五、表连接查询
1 内连接 inner join
2左连接 left join
3右连接 right join
六、view 视图的运用
1视图的创建
2 视图提供的后续便捷操作
3经典定义问题视图能否插入数据
七、UNION 联级
1UNION合并后去重
2UNION ALL合并后不去重
八、多种方式求表与表的交集值
1联级视图求交集值
2内连接求交集值
1不去重求交集
2去重求交集
3使用左连接求交集值
4使用右连接求交集
5使用子查询的方式求交集值
6取非交集值
九、case 条件选择查询语句
十、正则表达式的运用
1sql正则表达式的常见种类
2sql正则运用
探究空值NULL和无值 的区别 一、本文前言
数据库是用来存储数据更新查询数据的工具而查询数据是一个数据库最为核心的功能数据库是用来承载信息而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查询语句展开
为了下面查询语句的运用事先准备了两张表后续也会根据查询功能的运用会对表进行一些变动或则创建新表
CREATE TABLE info (id int(4) ,name char(4),height double
) ;CREATE TABLE info2 (name char(4) hobby char(10) date char(10)
) ; 二、高效查询方式
1指定指字段进行查看
select 字段1字段2 from 表名; 2对字段进行去重查看 SELECT DISTINCT 字段 FROM 表名; 3where条件查询 SELECT 字段 FROM 表名 WHERE 条件; 4and 和 or 进行逻辑关系的增加
SELECT 字段 FROM 表名 WHERE 条件1 AND 条件2; SELECT 字段 FROM 表名 WHERE 条件1 OR 条件2; 5查询取值列表中的数据 SELECT 字段 FROM 表名 WHERE 字段 IN (值1 值2 ...); #in,遍历一个取值列表 6between的引用 SELECT 字段 FROM 表名 WHERE 字段 BETWEEN 值1 AND 值2; 7like的查询方式
like查询通常会与通配符配合使用
%百分号表示零个、一一个或多个字符 _划线表示单个字符
select * from info2 where hobby like %ing;
select * from info2 where name like 小_; select * from info2 where name like _刚;select * from info2 where hobby like %ay%; 8排序方式进行查询
order by按关键字排序
注意
一般对数值字段进行排序如果对字符类型的字段进行排序则会按首字母排序 SELECT 字段 FROM 表名 [WHERE 条件] ORDER BY 字段 [ASC|DESC] ;#ASC是按照升序进行排序的是默认的排序方式。#DESC是按降序方式进行排序。 select * from info order by height;select * from info order by height asc;select * from info order by height desc; 三、运用函数查询
1数据库中常用数学的函数
数学函数作用abs(x)返回x的绝对值rand()返回0到1的随机数mod(x, y)返回x除以y以后的余数power(x, y)返回x的y次方round(x)返回离x最近的整数round(x, y)保留x的y位小数四舍五入后的值sqrt(x)返回x的平方根truncate(x, y)返回数字x截断为y位小数的值 #不四舍五入ceil(x)返回大于或等于x的最小整数floor(x)返回小于或等于x的最大整数greatest(x1,x2,...)返回集合中最大的值least(x1,x2,...)返回集合中最小的值
SELECT abs(-1),rand(), mod(5,3) ,power(2,3);SELECT truncate(1.89,2);
SELECT truncate(1.89,1); select ceil(1.76);
select floor(1.76); select greatest(1,2,3,55,12,55,61);
select least(1,2,3,55,12,55,61); 2聚合函数
聚合函数含义avg()返回指定列的平均值count()返回指定列中非 NULL 值的个数min()返回指定列的最小值max()返回指定列的最大值sum(字段)返回指定列的所有值之和
select avg(height) from info;select count(name) from info;
select count(*) from info; select max(height) from info;
select min(height) from info;
select sum(height) from info; 3字符串函数
字符串函数作用trim()返回去除指定格式的值concat(x,y)将提供的参数 x 和 y 拼接成一个字符串substr(x,y)获取从字符串 x 中的第 y 个位置开始的字符串跟substring()函数作用相同substr(x,y,z)获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串length(x)返回字符串 x 的长度replace(x,y,z)将字符串 z 替代字符串 x 中的字符串 yupper(x)将字符串 x 的所有字母变成大写字母lower(x)将字符串 x 的所有字母变成小写字母left(x,y)返回字符串 x 的前 y 个字符right(x,y)返回字符串 x 的后 y 个字符repeat(x,y)将字符串 x 重复 y 次space(x)返回 x 个空格strcmp(x,y)比较 x 和 y返回的值可以为-1,0,1reverse(x)将字符串 x 反转
1去除字符 trim SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);#[位置]值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 #[要移除的字符串]从字串的起头、结尾或起头及结尾移除的字符串。缺省时为空格。
select trim(leading s from swmming );
select trim(trailing g from swmming );
select trim(both l from lol ); 2 截取 substr
substr(x,y) #截取x字符串 从第y个开始截取到末尾substr(x,y,z) #截取x字符串 从第y个开始截取 截取长度为z
select substr(hobby,2) from info2;
select substr(hobby,3) from info2; select substr(hobby,2,5) from info2;select substr(hobby,4,6) from info2; 3字段拼接
① concat(x,y)
select concat(name,height) from info;② 使用 || 符号 #将info表中name字段值和height字段值拼接在一起。select name || height from info; #将info表中name字段值和height字段值拼接在一起且中间加空格。select name || || height from info; 4返回字符长度 length select length(hobby) from info2; 5替换 replace
select replace(name,小,大) from info2;四、高级查询语句
1GROUP BY用于分组和汇总
对GROUPBY后面的字段的查询结果进行汇总分组通常是结合聚合函数一起使用的
GROUP BY有一个原则凡是在GROUP BY后面出现的字段必须在SELECT 后面出现凡是在SELECT 后面出现的、且未在聚合函数中出现的字段必须出现在GROUP BY后面
1汇总统计
select name, count(name) from info group by name;2汇总并对其指定字段数字类进行累加
select name,sum(saving) from info3 group by name;3汇总并对其指定字段数字类进行累加再进行降序
select name,sum(saving) from info3 group by name order by sum(saving) desc; 2HAVING 过滤
用来过滤由GROUP BY语句返回的记录集通常与GROUP BY语句联合使用HAVING语句的存在弥补了WHERE 关键字不能与聚合函数联合使用的不足where只能对原表中的字段进行筛选不能对group by后的结果进行筛选 SELECT 字段1,SUM(字段2) FROM 表格名 GROUP BY 字段1 HAVING(函数条件) ;select name,sum(saving) from info3 group by name having sum(saving)1500;3别名设置查询
语法格式 SELECT 字段1,字段2 AS 字段2的别名 from 表名; #AS可以省略不写
1字段别名
select name,sum(saving) as total_saving from info3 group by name having sum(saving)1000;
select name,sum(saving) as total_saving from info3 group by name having total_saving1000; 2表别名
SELECT 表格别名.字段1 [AS] 字段别名 FROM 表格名 [AS] 表格别名; #AS可以省略不写 4表的自我连接
1无重复数值排名
对下面的表进行saving比较并且进行排名通过表的自我连接进行实现 表的自我连接达到排名的原理分析及操作思路
以上面的数据表为例假设共有四个人他们手中的金额各不相同。我们已经进行表的自我连接使用count计数只计数大于等于自身手上金额的人数比如2000的小明大于等于他的人数只有1个就计数值也可以当作他的排名再比如800的小红大于等于她的有4个人就该计数值为4同理可以证明她排名第四
select A.name,A.saving,count(A.saving) as rank from info3 as A,info3 as B where A.saving B.saving group by A.name,A.saving order by rank asc;2有重复数值排名
新需求表 select A.name,A.saving,count(A.saving) as rank from info3 as A,info3 as B where A.saving B.saving or (A.nameB.nameme and A.savingB.saving) group by A.name,A.saving order by rank asc; 5子查询语句
子查询连接表格在WHERE 子句或HAVING 子句中插入另一个SQL语句 SELECT 字段1 FROM 表格1 WHERE 字段2 [比较运算符] #外查询(SELECT 字段1 FROM 表格2 WHERE 条件) ; #内查询
普通的表数据连接
select * from info as A, info3 as B where A.nameB.name;子查询加入表连接
select * from info where name in(select name from info3 where saving 1000); 子查询运用升级
求“北京地区”的所有saving值之和 select sum(saving) from info3 where name in (select name from info where address北京);6EXISTS
用来测试内查询有没有产生任何结果类似布尔值是否为真。如果内查询有结果的话系统就会执行外查询中的SQL语句。若是没有结果的话那整个SQL语句就不会产生任何结果
格式 SELECT 字段1 FROM 表格1 WHERE EXISTS (SELECT * FROM 表格2 WHERE 条件); 五、表连接查询
MYSQL数据库中常用的表连接有三种
inner join(内连接)只返回两个表中联结字段相等的行有交集的值 left join(左连接)返回包括左表中的所有记录和右表中联结字段相等的记录A left join B A为左表B为右表 right join(右连接)返回包括右表中的所有记录和左表中联结字段相等的记录A right join B A为左表 B为右表 1 内连接 inner join
select * from info A inner join info3 B on A.name B.name; 其他实现内连接的方式 select * from info A, info3 B where A.nameB.name;select * from info A inner join info3 B using(name); 2左连接 left join
select * from info A LEFT JOIN info3 B on A.nameB.name; 3右连接 right join
select * from info3 A right join info B on A.nameB.name ;六、view 视图的运用
视图可以被当作是虚拟表或存储查询
视图跟表格的不同是表格中有实际储存数据记录而视图是建立在表格之上的一个架构它本身并不实际储存数据记录临时表在用户退出或同数据库的连接断开后就自动消失了而视图不会消失视图不含有数据只存储它的定义它的用途一般可以简化复杂的查询。 比如你要对几个表进行连接查询而且还要进行统计排序等操作写SQL语句会很麻烦的用视图将几个表联结起来然后对这个视图进行查询操作就和对一个表查询一样很方便
格式
CREATE VIEW 视图表名 AS SELECT 语句; #创建视图表
DROP VIEW 视图表名; #删除视图表
1视图的创建
创建需求独立创建一个视图用来统计info和info3 两张表之间先对name进行address的汇总再计算地区的saving之和 。要求体现出address 和sumsving 两个字段
create view v_address_saving as select A.address,sum(B.saving) total_saving from info A inner join info3 B on A.nameB.name group by address; 视图创建的数据验证 2 视图提供的后续便捷操作
视图的好处创建视图的过程虽然和高级查询语句通过两个select语句进行组合条件划分生成派生表一样过程是复杂的但是如果该查询操作是需要经常使用的创建视图就很有必要不仅能简化查询过程还能对该查询进行进一步操作而且十分简便
进一步需求 需要计算出苏州和上海两个地区的saving之和
select sum(total_saving) as suzhou_shanghai_saving from v_address_saving where address苏州or address上海; 3经典定义问题视图能否插入数据
视图能否插入数据要看情况而定
1如果视图表是两个表的连接查询比如视图的A字段来自A表B字段来自B表数据是无法插入的。因为表结构和原表不一致。视图中的字段是根据原表中某个字段通过函数运算产生的新字段而没有真正能够存储的字段所以该数据是无法插入的
2如果视图表结构与原表保持一致数据是可以插入的插入的数据是存储在原表中视图所更新出的数据其实是映射原表的数据 show create view 分析创建视图的过程 七、UNION 联级
UNION联集将两个SQL语句的结果合并起来两个SQL语句所产生的字段需要是同样的数据记录种类
1UNION合并后去重
生成结果的数据记录值将没有重复且按照字段的顺序进行排序。#合并后去重
格式[select 语句1] UNION [select 语句2];
select name from info union select name from info3; 2UNION ALL合并后不去重
select name from info union all select name from info3; 八、多种方式求表与表的交集值
1联级视图求交集值
create view v_info as select distinct name from info union all select distinct name from info3;
select name,count(*) from v_info group by name;select name from v_info group by name having count(*) 1; 2内连接求交集值
1不去重求交集
select A.name from info A inner join info3 B on A.nameB.name;
select A.name from info A inner join info3 B using(name); 2去重求交集
select distinct A.name from info A inner join info3 B using(name); 3使用左连接求交集值
select * from info A left join info3 B using(name);
select distinct A.name from info A left join info3 B using(name) where B.name is not null; 4使用右连接求交集 #使用右连接查出store_name字段的交集值之后去重select * from info A right join info3 B using(name);select distinct A.name from info A right join info3 B using(name) where A.name is not null;或select distinct A.name from info A right join info3 B on A.nameB.name where A.name is not null; 5使用子查询的方式求交集值
select distinct name from info where name in (select name from info3); 6取非交集值
1联级方法中 count*1 (2左右内连接 将is not null 改为 is null
3子查询 外连接查询 not in 内连接查询
九、case 条件选择查询语句 SELECT CASE (字段名)WHEN 条件1 THEN 结果1WHEN 条件2 THEN 结果2[ELSE 结果N]ENDFROM 表名;# 条件可以是一个数值或是公式。ELSE子句则并不是必须的。
mysql select address,case address- when 上海 then height-10- when 北京 then height5- else height10- end- new_height,name- from info; 十、正则表达式的运用
1sql正则表达式的常见种类
正则符号作用^匹配文本的开始字符$匹配文本的结束字符.匹配任何单个字符*匹配零个或多个在它前面的字符匹配前面的字符 1 次或多次字符串匹配包含指定的字符串l或“|”前面的不成立时就匹配后面的字符串[...]匹配字符集合中的任意一个字符[^...]匹配不在括号中的任何字符{n}匹配前面的字符串 n 次{n,m}匹配前面的字符串至少 n 次至多m 次
2sql正则运用
格式
select 字段 from 表名 where 字段 regexp 正则表达式; 探究空值NULL和无值 的区别
无值的长度为0不占用空间而NULL值的长度是NULL是占用空间的
IS NULL或者IS NOT NULL是用来判断字段是不是为NULL或者不是NULL不能查出是不是无值的
无值的判断使用 或者 来处理。代表不等于
在通过 count ()指定字段统计有多少行数时如果遇到NULL值会自动忽略掉遇到无值会加入到记录中进行计算