Oracle 数据库是业界领先的关系型数据库管理系统之一,广泛应用于企业级应用和数据仓库等场景中。本篇博客将介绍如何使用 SQL 语句对 Oracle 数据库进行数据查询操作。
在开始查询之前,需要使用合适的工具连接到 Oracle 数据库通常情况下,可以使用 SQLPlus 或 SQL Developer 等官方提供的工具来连接数据库。以下是一个示例 SLPlus
连接命令
sqlplus username/password@database
其中,username
是您的 Oracle 用户名,password
是密码,database
是要连接的数据库实例名。如果连接成功,则会显示一个 SQLPlus 命令行提示符。
在连接到数据库后,可以使用 SQL 语句查询数据。
我们以以下的几二维表来作为查询对象
TABLE1:
student:
TABLE2:
course:
TABLE3:
selectedcourse:
本篇文章主要介绍单表查询,单表查询是指只涉及一个表的查询
(1)查询表中的全部列:
select * from student ;
select * from selectedcourse;
#注意不要遗忘末尾的分号
在这个示例中,我们使用 SELECT 语句分别查询表 student
和selectedcourse
中的全部列,注意*
号在此处代表表的所有属性
运行结果如下
(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 语言,并不断尝试实践和探索。