数据库标准语言SQL(五)——单表查询(一)
数据库标准语言SQL(五)——查询(一)
一.前言
在准备这一章的时候,需要提前插入数据。正巧我们老师也布置了一个类似任务,所以就把老师给的表内容拿过来插入,这里刚好由于手飘,打错了字,所以出现了一个小报错,不过这个报错很常见,所以拿来说说。 ORA-02291:违反完整约束条件 -未找到父项关键字 可以看到,我就是一开始在黄色部分的学号那里打错了,刚好,这个sno在student表,而要在SC表里面插入,所以由于依赖关系,在SC表里面插的东西在student里面没有,违反了依赖和约束条件,出错了。
好了,在介绍完这个报错以后,我们正式进入查询阶段,查询阶段是比较重要的部分,我感觉学会查询,你数据库操作部分基本上就能完成一半。下面开始了!
二.单表查询——查询涉及一个表
1.查询所有属性列
--单表查询-查询整个表 --select * from TABLEname --当然,你可以把*换成每一个列名, --不过我相信没有人愿意这样做 --查询SC表的内容 select * from sc;
我们可以看到,SC表的内容。但是注意看,因为我用到的可视化软件是PLSQL Developer 14 ,它显示的只是那个下拉框的一点点范围,我们可以点击那两个绿色按钮:分别是获取下一页和尾页。 我就插入了23条数据条目。所以这两个按钮效果一样,不过已经把数据给显示全了
2.查询部分指定的属性列
--查询全体学生的学号和姓名 --在student表内,查询对应属性列 select sno,sname from student;
3.查询经过计算的数据
--查询全体学生的姓名以及出生年份 --student表内只有年龄Sage这个属性列 --年份 = 2022-Sage select sname,2022-Sage from student; --优化,可以把2022-Sage改名为birthday select sname NAME,year of birth: Birth, 2022-sage Birthday from student; --加入对于院系Sdept的查询,而且结果要小写 --这个oracle里面,用lower()来标识小写 select sname NAME,year of birth: Birth, 2022-sage Birthday, lower(sdept) from student; --可以和上面的对照 select sname NAME,year of birth: Birth, 2022-sage Birthday, sdept from student;
4.查询部分元组
一般我们查询表的时候,往往就会查到好多重复的列。这是因为,我们在查询时候,有一个关键字DISTINCT,如果不指定,就默认为ALL,而ALL也可以直接缺省,等价于啥也不加。
--这两句等价 select all sno from sc; select sno from sc;
当我们加入关键字,使得这些重复行消除掉
select distinct sno from sc;
要让我们的查询结果更加贴心,就需要我们加入更多的条件,这里给大家展示一部分常用的查询条件,后面会一一给大家代码和示例
/*比较的方式查询*/ --查询计算机系全体学生名单 select sname ,sdept from student where sdept = CS; --查询年龄在20以下的学生姓名和年龄 select sname,sage from student where sage<20; --查询考试不及格学生的学号 select distinct sno,grade from sc where grade<60;
/*范围确定查询*/ --查询年龄在20-23(含20和23)的学生信息 select sname,sdept,sage from student where sage between 20 and 23; --查询不在20-23的 select sname,sdept,sage from student where sage not between 20 and 23;