用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:
用SQL语句操作oracle数据库--数据查询(上篇)_第1张图片
TABLE2:
course:
用SQL语句操作oracle数据库--数据查询(上篇)_第2张图片
TABLE3:
selectedcourse:
用SQL语句操作oracle数据库--数据查询(上篇)_第3张图片


单表查询:

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

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

在这个示例中,我们使用 SELECT 语句分别查询表 studentselectedcourse 中的全部列,注意*号在此处代表表的所有属性
运行结果如下
用SQL语句操作oracle数据库--数据查询(上篇)_第4张图片


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

SELECT courseID, courseName
FROM course;

运行结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第5张图片


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

SELECT userName,2023-birthYear 
FROM student;

在这个示例中,我们使用SELECT语句,计算出了所有学生的年龄,
输出结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第6张图片


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

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

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

运行结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第7张图片
上例中我们查询了学分为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;

运行效果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第8张图片
上例中我们通过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);

运行效果如下;
用SQL语句操作oracle数据库--数据查询(上篇)_第9张图片
上例中我们使用谓词IN查询了属于1号学院或3号学院的学生学号以及不处于1号学院和3号学院的学生学号。


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

SELECT * FROM student
WHERE userID LIKE '10001';


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

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

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

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

运行结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第11张图片


④ 涉及空值的查询:

SELECT courseID, studentID
FROM selectedcourse
WHERE mark IS NULL;

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

运行结果如下;
用SQL语句操作oracle数据库--数据查询(上篇)_第12张图片
上例中我们查询了没有相应课程成绩的学生姓名及学号,需要注意的是:IS 千万不能用=代替。


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

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

运行结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第13张图片
上例中我们查询了成绩在70分以上的男同学的元组。


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

SELECT * FROM student
ORDER BY grade DESC;


SELECT * FROM student
ORDER BY collegeID, grade DESC;

运行结果如下:
用SQL语句操作oracle数据库--数据查询(上篇)_第14张图片
在上例中我们查询了全体学生的情况,查询结果按所在的系的系号升序排列,同一系的学生按成绩降序排列。


(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数据库--数据查询(上篇)_第15张图片


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

你可能感兴趣的:(数据库,oracle,sql)