数据库标准语言SQL(五)——查询(一)

一.前言

在准备这一章的时候,需要提前插入数据。正巧我们老师也布置了一个类似任务,所以就把老师给的表内容拿过来插入,这里刚好由于手飘,打错了字,所以出现了一个小报错,不过这个报错很常见,所以拿来说说。

ORA-02291:违反完整约束条件 -未找到父项关键字

mysql 联表 IN查询索引_sql


mysql 联表 IN查询索引_mysql 联表 IN查询索引_02


可以看到,我就是一开始在黄色部分的学号那里打错了,刚好,这个sno在student表,而要在SC表里面插入,所以由于依赖关系,在SC表里面插的东西在student里面没有,违反了依赖和约束条件,出错了。

好了,在介绍完这个报错以后,我们正式进入查询阶段,查询阶段是比较重要的部分,我感觉学会查询,你数据库操作部分基本上就能完成一半。下面开始了!

二.单表查询——查询涉及一个表

1.查询所有属性列

--单表查询-查询整个表
--select * from TABLEname
--当然,你可以把*换成每一个列名,
--不过我相信没有人愿意这样做
--查询SC表的内容
select * from sc;

我们可以看到,SC表的内容。但是注意看,因为我用到的可视化软件是PLSQL Developer 14 ,它显示的只是那个下拉框的一点点范围,我们可以点击那两个绿色按钮:分别是获取下一页和尾页。

mysql 联表 IN查询索引_sql_03


我就插入了23条数据条目。所以这两个按钮效果一样,不过已经把数据给显示全了

mysql 联表 IN查询索引_Sage_04

2.查询部分指定的属性列

--查询全体学生的学号和姓名
--在student表内,查询对应属性列
select sno,sname from student;

mysql 联表 IN查询索引_数据库开发_05

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;

mysql 联表 IN查询索引_数据库_06


mysql 联表 IN查询索引_数据库_07


mysql 联表 IN查询索引_mysql 联表 IN查询索引_08

4.查询部分元组

一般我们查询表的时候,往往就会查到好多重复的列。这是因为,我们在查询时候,有一个关键字DISTINCT,如果不指定,就默认为ALL,而ALL也可以直接缺省,等价于啥也不加。

--这两句等价
select all sno from sc;
select sno from sc;

mysql 联表 IN查询索引_mysql 联表 IN查询索引_09


当我们加入关键字,使得这些重复行消除掉

select distinct sno from sc;

mysql 联表 IN查询索引_mysql 联表 IN查询索引_10


要让我们的查询结果更加贴心,就需要我们加入更多的条件,这里给大家展示一部分常用的查询条件,后面会一一给大家代码和示例

mysql 联表 IN查询索引_Sage_11

/*比较的方式查询*/
--查询计算机系全体学生名单
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;

mysql 联表 IN查询索引_sql_12

mysql 联表 IN查询索引_数据库_13

mysql 联表 IN查询索引_数据库_14

/*范围确定查询*/
--查询年龄在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;

mysql 联表 IN查询索引_Sage_15