连接查询、自关联、子查询

连接查询

连接查询概述

  • 内连接:连接两个表时,取的是两个表中都存在的数据(取交集)
  • 左连接:连接两个表时,取的是左表中特有的数据,对于右表中不存在的数据,用null来填充。
  • 右连接:连接两个表时,取的时右表中特有的数据,对于左表中不存在的数据,用null来填充。

image-20240903090147845

image-20240903090308138

image-20240903090351846

image-20240903090447615

  • 数据准备
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');

image-20240903090855359

内连接

  • 语法格式

    select * from 表名1 inner join 表名2 on1.=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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值