Oracle数据库语言?结构化查询语言SQL
作者:徐小闩 发布时间:[ 2016/8/23 11:01:19 ] 推荐标签:数据库 Oracle
3.条件
加查询条件是用来过滤数据的,过滤的基本单位是行,常见的关键字有:(> /< /= />= /<=/ !=/ <> /between..and.. /like/ in /all /any /exists/not exists等;多个条件的连接符有:andor!
示例:
--查询年龄大于28岁的所有学生的信息
SELECT * FROM student WHERE sage>28;
--查询年龄大于等于28岁的所有学生的信息;
SELECT * FROM student WHERE sage>=28;
--查询所有男生信息
SELECT * FROM student WHERE ssex='M';
SELECT * FROM student WHERE ssex!='F';
SELECT * FROM student WHERE ssex<>'F';
--查询学号比s0010靠前的学生的信息。
SELECT * FROM student WHERE sid<'s0010';
1)between..and..
语法格式:字段 between 值1 and 值2 等价于 字段>=值1 and 字段<=值2;是一个独立、完整的字段,不可拆分。
示例:--查询年龄在23-28岁之间(包含)的学生信息。
SELECT * FROM student WHERE sage>=23 AND sage<=28;
SELECT * FROM student WHERE sage BETWEEN 23 AND 28;
--查询年龄在23-28岁之间(包含)的女生信息。
SELECT * FROM student WHERE sage BETWEEN 23 AND 28 AND ssex='F';
SELECT * FROM student WHERE sage>=23 AND ssex='F'AND sage<=28;
2)like:实现的是模糊查询,一般来说会结合两个特殊符号使用,%通配符,匹配任意多个字符;_表示匹配一个字符。
示例:--查询所有姓张的同学信息。
SELECT * FROM student WHERE sname LIKE '张%';
--查询所有姓张,姓名总共为2个字的同学信息。
SELECT * FROM student WHERE sname LIKE '张_';
--查询所有姓张,姓名总共为3个字的同学信息。
SELECT * FROM student WHERE sname LIKE '张__';
SELECT * FROM student WHERE sname LIKE '%张';
3)in:是一种枚举用法,字段in(值1,值2,......,值n)等价于 字段=值1 or 字段=值2 or ... or 字段=值n。
示例:--查询年龄等于27岁或者28岁的学生的信息。
SELECT * FROM student WHERE sage=27 OR sage=28;
SELECT * FROM student WHERE sage IN (27,28);
4)distinct:用来修饰字段,表示查询、去除重复值。
示例:--查询所有选课了的学生的学号。
SELECT sid FROM score;
SELECT DISTINCT sid FROM score;
5)别名:可以应用在查询内容和来源中。
语法格式: 原名 as 别名,一般来说,as是省略的, 原名 别名。
示例:SELECT sname,sage FROM student;
SELECT sname as 姓名,sage 年龄 FROM student;
SELECT sname,sage+1 sage FROM student;
SELECT sname sage FROM student; --语法没问题,从应用层面是有问题的。查询学生姓名,但结果是列名改为了sage。
6)嵌套
SQL语句中,查询语句是可以被嵌套使用。嵌套是通过括号()实现。每一条查询语句的结果本身是一个表、是一些值的集合,可以被嵌套使用在值或者来源的部分。
--查询所有选修oracle课程的学生的姓名。
SELECT sname FROM student WHERE sid IN (SELECT sid FROM score WHERE cid=(SELECTcid FROM course WHERE cname='oracle'));
--查询某一位同学所选修的课程的名称。(已经学生姓名)
SELECT cname FROM course WHERE cid IN (SELECT cid FROM score WHERE sid in (SELECT sid FROM student WHERE sname='张三'));
7)all: 使用and来对表达式进行分解
--字段 > all(值1,值2,。。。,值N) 等价于: 字段>值1 and 字段>值2 and... and 字段>值N。
--字段 < all(值1,值2,。。。,值N) 等价于: 字段<值1 and 字段<值2 and... and 字段<值N。
示例:查询比所有女生年龄都大的男生信息。
SELECT * FROM student WHERE ssex='M' AND sage>39;
SELECT sage FROM student WHERE ssex='F'; --212539
SELECT * FROM student WHERE ssex='M' AND sage>ALL(SELECT sage FROM student WHERE ssex='F');
--等价于 SELECT *FROM student WHERE ssex='M' AND sage>21 AND sage>25 AND sage>39;
8)any: 是用or来对表达式进行分解
--字段 > any(值1,值2,。。。,值N) 等价于: 字段>值1 or 字段>值2 or ... or 字段>值N。
示例:--查询比任一女生年龄都大的男生信息。
SELECT * FROM student WHERE ssex='M' AND sage>ANY(SELECT sage FROM student WHERE ssex='F');
4.聚合函数(分组函数/组函数)
常见的聚合函数有:count()avg()min()max()sum(), 括号里加字段或字段表达式。
示例:--查询男生的数量
SELECT count(*) FROM student WHERE ssex='M';
--查询有成绩的学生的数量
SELECT count(distinct sid) FROM score;
--查询女生的小年龄
SELECT min(sage) FROM student WHERE ssex='F';
--查询某一位学生的平均成绩
SELECT avg(grade) FROM score WHERE sid='s0001';
--查询年龄大的学生的姓名
SELECT* FROM student WHERE sage=(SELECT max(sage) FROM student);
5.分组查询
语法格式: group by 分组字段
作用:表示会将表格中所有的数据按照分组字段进行分组处理、分组字段的值相同的行会被合并为一条记录、即一组;分组字段以外的字段是无法再被独立查询,只能通过聚合函数来实现查询,分组字段可以是多个,用逗号分隔。
示例:--查询男生和女生的数量
SELECT ssex,COUNT(*) FROM student GROUP BY ssex;
--查询男生和女生的平均年龄、大年龄、小年龄
SELECT ssex,AVG(sage),MAX(sage),min(sage) FROM student GROUP BY ssex;
--查询每一门课程被选的数量
SELECT cid,COUNT(DISTINCT sid) FROM score GROUP BY cid;
注意:where是发生在分组之前,having是发生在分组之后,意味分组函数是不能直接作为条件的值出现在where之后,但是可以出现在having之后。
示例:--查询所有科目都及格的学生的sid。
SELECT sid FROM score WHERE grade>=60 GROUP BY sid; --错误的写法,实现的是任意科目及格的学生。
SELECT sid FROM score GROUP BY sid HAVING MIN(grade)>=60; --先按学生分组,设定条件每个学生的低分要大于等于60.
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南