连接查询
连接查询概述
- 内连接:连接两个表时,取的是两个表中都存在的数据(取交集)
- 左连接:连接两个表时,取的是左表中特有的数据,对于右表中不存在的数据,用null来填充。
- 右连接:连接两个表时,取的时右表中特有的数据,对于左表中不存在的数据,用null来填充。
- 数据准备
drop table if exists courses;
create table courses (
courseNo int(10) unsigned primary key auto_increment,
name varchar(10)
);
insert into courses values ('1', '数据库'), ('2', 'qtp'), ('3', 'linux'),
('4', '系统测试'), ('5', '单元测试'), ('6', '测试过程');
drop table if exists scores;
create table scores (
id int(10) unsigned primary key auto_increment,
courseNo int(10),
studentno varchar(10),
score tinyint(4)
);
insert into scores values ('1', '1', '001', '90'), ('2', '1', '002', '75'),
('3', '2', '002', '98'),('4', '3', '001', '86'),('5', '3', '003', '80'),
('6', '4', '004', '79'),('7', '5', '005', '96'),('8', '6', '006', '80');
内连接
-
语法格式
select * from 表名1 inner join 表名2 on 表1.列=表2.列;
- 查询的时两个表的交集的数据
- 表1的列与表2的列一定是存在关联关系
- 内连接连接时可以连接多个表
-
案例
-- 例1:查询学生信息及学生的成绩 select * from students inner join scores on students.studentNo=scores.studentNo; -- students 起别名为stu,scores起别名为sc select * from students as stu inner join scores as sc on stu.studentNo=sc.studentNo; -- 起别名可以不写as select * from students stu inner join scores sc on stu.studentNo=sc.studentNo; select * from students stu , scores sc where stu.studentNo=sc.studentNo; -- 例2:查询课程信息及课程的成绩 select * from courses cs inner join scores sc on cs.courseNo=sc.courseNo -- 例3、查询王昭君的成绩,要求显示姓名,课程号,成绩 select stu.name,sc.courseNo,sc.score from students stu inner join scores sc on stu.studentNo=sc.studentNo where stu.name='王昭君'
-- 1、查询学生信息及学生的课程对应的成绩 select * from students inner join scores on students.studentNo=scores.studentno inner join courses on scores.courseNo=courses.courseNo -- 2、查询所有学生的数据库成绩,要求显示姓名,课程名,成绩 select students.name,courses.name,scores.score from students inner join scores on students.studentNo=scores.studentno inner join courses on scores.courseNo=courses.courseNo -- 3、查询王昭君的数据库成绩,要求显示姓名,课程名,成绩 select students.name,courses.name,scores.score from students inner join scores on students.studentNo=scores.studentno inner join courses on scores.courseNo=courses.courseNo where students.name='王昭君' -- 4、 查询男生中最高成绩,要求显示姓名、课程名、成绩 select students.name,courses.name,scores.score from students inner join scores on students.studentNo=scores.studentno inner join courses on scores.courseNo=courses.courseNo where students.sex=