MySQL数据库表连接

  1. 两张表通过where连接
    格式:
    select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
    from 表名1,表名2
    where 表名1.列名1=表名2.列名1 【是两个表之间建立关系】

*表1的列名和表2的列的列名可以不一致,单数数据类型和内容得保持一致。

内连接查询:只关联与表中能够匹配的数据。比如表1的学号从1-10,表2的学号从1-9,那么最终只能查询到1-9的信息。

*

示例:

– 查询学生的学号、姓名、性别以及所在的班级名称和年级

select 学生信息表.学号,学生信息表.姓名,学生信息表.性别,班级表.班级名称,班级表.年级

from 学生信息表,班级表

where 学生信息表.班级编号=班级表.班级编号

MYSQL怎样连接两个表 mysql链接两个表_等值连接


如果某个列只在一个表中出现,不是两个表共同拥有的,可以直接写列名,不用写表名。

  1. 两张表通过inner join on 连接
    inner join on 分为两种:等值连接和非等值连接
    (1)等值连接:条件中只有‘=’
    (2)非等值连接,条件中除了等号外,还有> < >= <=等
    on 后面一般只写两个表的连接条件,如果有其他的条件,写再where后面

格式:
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
from 表名1,表名2
on 表名1.列名1 = 表名2.列名2
where 条件

示例:
(1)查询籍贯是beijing ,班级是以’pu’开头的学生的学号、姓名、性别、班级名称、年级。

select s.学号,姓名,性别,c.班级名称,年级
 from 学生信息表 s inner join 班级表 c
 on s.班级编号 = c.班级编号
 where s.籍贯 = ‘beijing’ and 班级名称 like ‘pu%’;

(2)查询成绩大于60的学生的个人情况:学号、姓名、性别、班级编号、成绩、并按照成绩降序排列。

select s.学号,姓名,性别,班级编号,sc.成绩
 from 学生信息表 s inner join 成绩表 sc
 on s.学号 = sc. 学号
 where sc.成绩>60
 order by sc.成绩 desc;
  1. 多表查询
    (1)where
    格式:
    select 表1.列名1,表1.列名2,表2.列名1,表2。列名2,表名3.列名1
    from 表1,表2,表3……
    where 表1.列名1=表2.列名1 and 表2.列名2=表3.列名1;
    【表2和表1、表3 关联的列可以不是同一个列】

示例:

select stu.姓名,stu.学号,性别,sc.成绩,cl.班级名称
 from 学生信息表 stu,成绩表 sc,班级表 cl
 where sc.学号= stu.学号 and stu.班级编号 = cl.班级编号;

(2)inner join on
格式:
select 表1.列名1,表1.列名2,表2.列名1,表2。列名2,表名3.列名1
from 表1 inner join 表2
on 表1.列名1 = 表2.列名2 inner join 表3
on 表2.列名2 = 表3.列名1 ;

示例:

select stu.姓名,stu.学号,性别,sc.成绩,cl.班级名称
 from 成绩表 sc inner join 学生信息表 stu
 on sc.学号 = stu.学号 inner join 班级表 cl
 on stu.班级编号 = cl.班级编号;
  1. 外连接
    左连接:对左表不加任何限制,也就是返回左表所有内容
    右连接:对右表不加限制,返回右表所有内容

如何区分左右表?
在from之后,先写的是左表,后写的是右表

格式
(1)左外部连接
select 表名 列名
from 表名1.left outer join 表名2 【outer可省略】
on 表名1.列名1 = 表名2.列名1

使用关键字LEFT OUTER JOIN关键字对两个表进行连接,左外连接的查询结果中包含指定左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有找到匹配的行,则结果集中的右表的相对应的位置为NULL.

示例:

select sc.姓名,学号,性别,cl.班级名称

from 学生信息表 sc left outer join 班级表 cl

on sc.班级编号 = cl.班级编号

MYSQL怎样连接两个表 mysql链接两个表_子查询_02

左表:

MYSQL怎样连接两个表 mysql链接两个表_等值连接_03

右表:

MYSQL怎样连接两个表 mysql链接两个表_mysql_04

  1. 子查询
    子查询在其他查询结果的基础上提供了一种有效的方式来表示where子句条件。
    子查询是可以嵌套在SELECT、INSERT、UPDATE、DELETE 语句中。
    子查询的SELECT查询总是使用圆括号括起来

格式:
select 列名 from 表名 where 列名 in (select 查询语句)

select 列名 from 表名 where 列名 in :(select 列名 from 表名 where 列名 in(select 列名 from 表名 where 条件));

示例:
– 查询ff所在班级的学生的信息

select sc.学号,姓名,性别,籍贯,cl.年级,班级名称
	from 学生信息表 sc , 班级表 cl
	where sc.班级编号 = cl.班级编号 and sc.班级编号 in (
	select 班级编号 from 学生信息表 where 姓名= 'ff')

MYSQL怎样连接两个表 mysql链接两个表_MYSQL怎样连接两个表_05


向成绩表2中插入成绩表中课程号为1001的数据

insert into 成绩表2 select 学号,课程号,成绩 from 成绩表 where 课程号 = ‘1001’;

-- 将c++班级的学生的成绩加3分
	select * from 班级表;
	select * from 成绩表;
	update 成绩表
	set 成绩= 成绩+3
	where 学号 in (select 学号 from 班级表 where 班级名称='c++');
– 删除c语言班级的学生的成绩
 select * from 班级表;
 select * from 成绩表;
 delete
 from 成绩表
 where 学号 in (select 学号 from 班级表 where 班级名称=‘c’)