MySQL数据库表连接
- 两张表通过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 学生信息表.班级编号=班级表.班级编号
如果某个列只在一个表中出现,不是两个表共同拥有的,可以直接写列名,不用写表名。
- 两张表通过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)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.班级编号;
- 外连接
左连接:对左表不加任何限制,也就是返回左表所有内容
右连接:对右表不加限制,返回右表所有内容
如何区分左右表?
在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.班级编号
左表:
右表:
- 子查询
子查询在其他查询结果的基础上提供了一种有效的方式来表示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')
向成绩表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’)