用SQL语句操作oracle数据库--数据查询(上篇)

SQL操作Oracle数据库进行数据查询

Oracle 数据库是业界领先的关系型数据库管理系统之一,广泛应用于企业级应用和数据仓库等场景中。本篇博客将介绍如何使用 SQL 语句对 Oracle 数据库进行数据查询操作。

1.连接到数据库

在开始查询之前,需要使用合适的工具连接到 Oracle 数据库通常情况下,可以使用 SQLPlus 或 SQL Developer 等官方提供的工具来连接数据库。以下是一个示例 SLPlus 连接命令

sqlplus username/password@database

其中,username 是您的 Oracle 用户名,password 是密码,database 是要连接的数据库实例名。如果连接成功,则会显示一个 SQLPlus 命令行提示符。


2.编写查询语句

在连接到数据库后,可以使用 SQL 语句查询数据。
我们以以下的几二维表来作为查询对象
TABLE1:
student:
在这里插入图片描述
TABLE2:
course:
在这里插入图片描述
TABLE3:
selectedcourse:
在这里插入图片描述


单表查询:

本篇文章主要介绍单表查询,单表查询是指只涉及一个表的查询
(1)查询表中的全部列:

select * from student ;
select * from selectedcourse;
#注意不要遗忘末尾的分号

在这个示例中,我们使用 SELECT 语句分别查询表 studentselectedcourse 中的全部列,注意*号在此处代表表的所有属性
运行结果如下
在这里插入图片描述


(2)查询表中你指定的部分列:

SELECT courseID, courseName
FROM course;

运行结果如下:
在这里插入图片描述


(3)查询经过计算的值:
SELECT子句的目标列表达式不仅可以是表中的属性列,也可以是算术表达式、字符串常量、函数等。

SELECT userName,2023-birthYear 
FROM student;

在这个示例中,我们使用SELECT语句,计算出了所有学生的年龄,
输出结果如下:
在这里插入图片描述


(4)查询表中的若干元组(行):

- 消除取值重复的行:
两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行,可以使用DISTINCT来消除它们。

SELECT teacherID FROM course WHERE score=2;
SELECT DISTINCT teacherID FROM course WHERE score=2;

运行结果如下:
在这里插入图片描述
上例中我们查询了学分为2的课程对应的授课老师编号,并使用DISTINCT对元组进行了去重处理。


-查询满足指定条件的元组:
①指定范围型:

SELECT userName ,userID 
FROM student
WHERE collegeID=2;

SELECT userID, userName
FROM student
WHERE 2023-birthYear '年龄'<26;

SELECT userID,userName
FROM student
WHERE grade BETWEEN 60 AND 90;

运行效果如下:
在这里插入图片描述
上例中我们通过WHERE子句查询了符合相关条件的元组,例3中的谓词BETWEEN··AND···可用来查询属性值在某一指定范围内的元组,其中60是下限,90是上限,注意 该范围是闭区间,如果要查询指定属性值不在此范围内的元组,只需使用谓词NOT BETWEEN··AND···即可。


②确定集合型:
谓词IN可以用来查找属性值属于指定集合的元组IN实际上是多个OR的缩写。

SELECT userID,userName
FROM student
WHERE collegeID IN (1,3);

SELECT userID,userName
FROM student
WHERE collegeID NOT IN (1,3);

运行效果如下;
在这里插入图片描述
上例中我们使用谓词IN查询了属于1号学院或3号学院的学生学号以及不处于1号学院和3号学院的学生学号。


③字符匹配:
谓词LIKE可以用来进行字符串的匹配

SELECT * FROM student
WHERE userID LIKE '10001';


SELECT *FROM student
WHERE userName LIKE '谢%';

运行结果如下:
在这里插入图片描述
在上例中,我们使用谓词LIKE来查询学号为10001的学生元组,使用%来查询姓谢的学生的元组,注意%代表任意长度的字符串,如a%b代表以a开头以b结尾的所有字符串。_(下划线)代表任意的单个字符,如a_b代表以a开头以b结尾的所有3字符的任意字符串。(注意:数据库字符集为ASCII时一个汉字需要两个_;当字符集为GBK时只需要一个_)

特别地,如果用户要查询的字符串本身就含有%或_,这时就要使用ESCAPE '<换码字符>'短语对通配符进行转义处理。

SELECT *FROM course
WHERE courseName LIKE 'C语言$_程序设计' ESCAPE '$';

运行结果如下:
在这里插入图片描述


④ 涉及空值的查询:

SELECT courseID, studentID
FROM selectedcourse
WHERE mark IS NULL;

SELECT courseID, studentID
FROM selectedcourse
WHERE mark IS NOT  NULL;

运行结果如下;
在这里插入图片描述
上例中我们查询了没有相应课程成绩的学生姓名及学号,需要注意的是:IS 千万不能用=代替。


⑤多重条件查询:
多重条件查询,我们使用AND(相当于逻辑乘(交集运算))来连接各个条件。

SELECT * FROM student
WHERE grade>70 AND sex='男';

运行结果如下:
在这里插入图片描述
上例中我们查询了成绩在70分以上的男同学的元组。


⑥排序查询:
用户可以使用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认为升序排列。

SELECT * FROM student
ORDER BY grade DESC;


SELECT * FROM student
ORDER BY collegeID, grade DESC;

运行结果如下:
在这里插入图片描述
在上例中我们查询了全体学生的情况,查询结果按所在的系的系号升序排列,同一系的学生按成绩降序排列。


(5)聚集函数
为了进一步方便用户,增强检索功能,SQL提供了许多聚集函数,主要有:

聚集函数功能
COUNT(*)统计元组个数(*代表整个元组)
COUNT(DISTINCT / ALL <列名>)统计一列中值的个数
SUM(DISTINCT / ALL <列名>)对某一列的值求和(该列必须是数值型)
AVG(DISTINCT / ALL <列名>)对某一列的值求平均值(该列必须是数值型)
MAX(DISTINCT / ALL <列名>)取一列中的最大值
MIN(DISTINCT / ALL <列名>)取一列中的最小值
SELECT COUNT(*)
FROM student;


SELECT COUNT(DISTINCT collegeID)
FROM student;

SELECT AVG(grade)
FROM student;

SELECT SUM(grade)
FROM student;

SELECT MAX(grade)
FROM student;

SELECT MIN(grade)
FROM student;

运行结果如下:
在这里插入图片描述


通过本篇博客,您了解了如何使用 SQL 语句查询 Oracle 数据库中的数据。无论是基本查询还是高级查询,SQL 都提供了灵活和强大的功能,以满足各种数据分析和处理需求。为了充分利用这些功能,建议您深入学习 SQL 语言,并不断尝试实践和探索。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

由心同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值