Oracle查询两张表匹配数据实战(oracle 两张表匹配)

Oracle查询两张表匹配数据实战

在实际应用中,经常需要从多张表中查询匹配的数据。Oracle数据库提供了强大的查询语句来实现数据匹配的需求。本文将介绍Oracle查询两张表匹配数据的实战案例。

我们需要创建两个表,分别为“student”和“score”。表“student”包含学生的信息,包括学生编号(s_id)、学生姓名(s_name)、性别(s_gender)和出生日期(s_birthday)等;表“score”包含学生的成绩信息,包括学生编号(s_id)、课程编号(c_id)和成绩(score)等。创建表的SQL语句如下:

CREATE TABLE student (
s_id VARCHAR2(10) PRIMARY KEY,
s_name VARCHAR2(20) NOT NULL,
s_gender VARCHAR2(5) NOT NULL,
s_birthday DATE NOT NULL
);

CREATE TABLE score (
s_id VARCHAR2(10) NOT NULL,
c_id VARCHAR2(10) NOT NULL,
score NUMBER(3,1) NOT NULL,
PRIMARY KEY(s_id, c_id),
FOREIGN KEY(s_id) REFERENCES student(s_id)
);

接着,我们向表中插入一些测试数据。

INSERT INTO student(s_id, s_name, s_gender, s_birthday)
VALUES('001', '张三', '男', TO_DATE('1998-01-01', 'YYYY-MM-DD'));

INSERT INTO student(s_id, s_name, s_gender, s_birthday)
VALUES('002', '李四', '女', TO_DATE('1999-02-01', 'YYYY-MM-DD'));
INSERT INTO student(s_id, s_name, s_gender, s_birthday)
VALUES('003', '王五', '男', TO_DATE('2000-03-01', 'YYYY-MM-DD'));
INSERT INTO score(s_id, c_id, score) VALUES('001', '101', 88.5);
INSERT INTO score(s_id, c_id, score) VALUES('001', '102', 90.0);
INSERT INTO score(s_id, c_id, score) VALUES('002', '101', 75.5);
INSERT INTO score(s_id, c_id, score) VALUES('002', '102', 85.0);
INSERT INTO score(s_id, c_id, score) VALUES('003', '101', 92.0);

现在,我们需要查询所有学生的姓名和课程编号,以及他们的成绩(如果有成绩的话)。使用下面的SQL查询语句可以实现该功能:

SELECT s.s_name, sc.c_id, sc.score
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id;

使用LEFT JOIN连接学生表和成绩表,以学生表为左边表,成绩表为右边表。这样一来,即使有些学生在成绩表中没有对应的记录,他们也会被查询出来,只是成绩那一列显示为NULL。如果使用INNER JOIN连接两个表,则只会查询出有对应成绩的学生。

如果我们想要查询某个学生的所有成绩信息,则可以使用下面的SQL查询语句:

SELECT *
FROM score
WHERE s_id = '001';

这条SQL语句查询学生编号为“001”的所有成绩记录。如果我们想要查询某个学生的所有成绩信息和学生个人信息,则可以使用下面的SQL查询语句:

SELECT s.s_name, sc.c_id, sc.score
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id
WHERE s.s_id = '001';

这条SQL语句查询学生编号为“001”的学生信息和其所有的成绩信息。

Oracle查询两张表匹配数据是数据库中最基础的查询操作之一,在实际应用中经常会用到。熟练掌握Oracle查询两张表匹配数据的技巧,对于提高数据库查询效率和精准度非常有帮助。


数据运维技术 » Oracle查询两张表匹配数据实战(oracle 两张表匹配)