MySQL中使用ON子句进行精准查询(mysql中on子句查询)
MySQL中使用ON子句进行精准查询
在MySQL中,ON子句可以用于在执行JOIN操作时筛选出符合条件的记录,从而进行精准的数据查询。在实际应用中,ON子句被广泛地应用于各种类型的查询操作中,帮助用户快速地准确地获取所需的数据。
为了更好地演示ON子句的使用方法,我们先创建一个包含两个表的简单数据库。表名分别为“students”和“courses”。其中“students”表包含学生的信息,包括学生ID和姓名;“courses”表包含课程的信息,包括课程ID和课程名称。这两个表之间的关系是:一个学生可以参加多门课程,一门课程可以有多名学生参加。因此,我们可以通过一个中间表“selection”来连接这两个表,中间表中包含学生ID和课程ID,对应着学生所选的课程。
下面是创建数据库的SQL语句:
CREATE DATABASE Test;
USE Test;
CREATE TABLE students (
stu_id INT NOT NULL AUTO_INCREMENT,
stu_name VARCHAR(20),
PRIMARY KEY (stu_id)
);
CREATE TABLE courses (
cou_id INT NOT NULL AUTO_INCREMENT,
cou_name VARCHAR(20),
PRIMARY KEY (cou_id)
);
CREATE TABLE selection (
sel_id INT NOT NULL AUTO_INCREMENT,
stu_id INT NOT NULL,
cou_id INT NOT NULL,
PRIMARY KEY (sel_id),
FOREIGN KEY (stu_id) REFERENCES students(stu_id),
FOREIGN KEY (cou_id) REFERENCES courses(cou_id)
);
接下来,我们向“students”和“courses”表中插入一些测试数据,并向“selection”表中添加一些学生选课的记录:
INSERT INTO students (stu_name) VALUES (‘Tom’),(‘Jerry’),(‘Marry’),(‘John’),(‘Mike’);
INSERT INTO courses (cou_name) VALUES (‘Math’),(‘Chinese’),(‘English’),(‘Physics’),(‘Chemistry’);
INSERT INTO selection (stu_id,cou_id) VALUES (1,1),(1,2),(1,3),(2,1),(3,3),(3,4),(4,1),(4,3),(5,2),(5,3),(5,5);
现在,我们就可以通过使用ON子句来执行各种类型的查询操作了。以下是几个典型的例子:
1、基本的INNER JOIN查询
SELECT students.stu_id, students.stu_name, courses.cou_id, courses.cou_name
FROM students
INNER JOIN selection ON students.stu_id = selection.stu_id
INNER JOIN courses ON selection.cou_id = courses.cou_id;
这条查询语句将返回以下结果:
+——-+———-+——–+———–+
| stu_id| stu_name | cou_id | cou_name |
+——-+———-+——–+———–+
| 1 | Tom | 1 | Math |
| 1 | Tom | 2 | Chinese |
| 1 | Tom | 3 | English |
| 2 | Jerry | 1 | Math |
| 3 | Marry | 3 | English |
| 3 | Marry | 4 | Physics |
| 4 | John | 1 | Math |
| 4 | John | 3 | English |
| 5 | Mike | 2 | Chinese |
| 5 | Mike | 3 | English |
| 5 | Mike | 5 | Chemistry |
+——-+———-+——–+———–+
这个查询结果显示了所有学生所选的课程,其中“stu_id”和“cou_id”是分别属于“students”和“courses”表的字段,而“stu_name”和“cou_name”则是通过JOIN操作联合起来的结果。
2、利用WHERE和ON子句实现查询条件筛选
SELECT students.stu_id, students.stu_name, courses.cou_id, courses.cou_name
FROM students
INNER JOIN selection ON students.stu_id = selection.stu_id AND students.stu_name = ‘Tom’
INNER JOIN courses ON selection.cou_id = courses.cou_id AND courses.cou_name = ‘Math’;
这个查询语句用到了WHERE和ON子句的组合操作,只返回了学生姓名为Tom,所选的课程为Math的记录。通过添加WHERE条件实现精准查询,可以提高数据查询的效率。
3、多表联合查询
SELECT students.stu_name, courses.cou_name
FROM students
LEFT JOIN selection ON students.stu_id = selection.stu_id
LEFT JOIN courses ON selection.cou_id = courses.cou_id
WHERE students.stu_name IS NULL OR courses.cou_name IS NULL;
这条查询语句通过LEFT JOIN实现了多表联合查询,并过滤掉了那些学生姓名或课程名称为空的记录。
ON子句是MySQL中非常强大和灵活的查询工具。通过灵活运用,我们可以实现各种类型的精准查询操作,从而更好地满足我们的数据需求。