1、创建两张实验表
#创建学生表 create table if not exists student( stu_id int primary key comment‘学生编号主键‘, stu_name varchar(20)comment‘姓名‘, stu_age int comment‘年龄‘ )
#创建课程表
create table if not exists course(
course_id int primary key comment‘课程编号主键‘,
course_name varchar(20)comment‘课程名称‘,
course_stu int comment‘上这门课程的学生id‘
)
2、向表中插入如下数据
#给学生表添加几条数据 insert into student(stu_id,stu_name,stu_age)values(1,‘张三‘,22); insert into student(stu_id,stu_name,stu_age)values(2,‘李四‘,12); insert into student(stu_id,stu_name,stu_age)values(3,‘王五‘,33); insert into student(stu_id,stu_name,stu_age)values(4,‘赵六‘,23); #给课程表创建数据 insert into course(course_id,course_name,stu_id)values(1,‘英语‘,1); insert into course(course_id,course_name,stu_id)values(2,‘数学‘,2); insert into course(course_id,course_name,stu_id)values(3,‘语文‘,3); insert into course(course_id,course_name,stu_id)values(4,‘物理‘,2); insert into course(course_id,course_name,stu_id)values(5,‘语文‘,2);
查询两表关联列相等的数据
select * from student s INNER JOIN course c ON s.stu_id=c.course_stu;
如果后边不带ON 后边的条件查询的是笛卡尔积(图没截全)
#左连接student为主表且主表的据路全部展示从表没有的null值补全
select * from student s LEFT JOIN course c on s.stu_id=c.course_stu;
1、为了展示又连接以右表为主表我向course表中添加了一条与student表中的stu_id没有对应的记录
insert into course(course_id,course_name,stu_id)values(6,‘政治‘,5);
2、右连接sql
select * from student s right join course c on s.stu_id=c.course_stu;
mysql数据库始是没有全外连接查询的可以使用UNION关键字将左连接和右连接结合起来达到全外连接的效果
select * from student s right join course c on s.stu_id=c.course_stu UNION select * from student s LEFT JOIN course c on s.stu_id=c.course_stu;
通常不会在实际中运用
交叉连接 cross in,从一张表中循环取出每一条记录都去与另一张表中进行匹配(结果全部保留),连接本身字段就会增加,最终形成笛卡儿积。
#如果交换两张表的前后位置则查询的结果显示也会调换位置 select * from student cross join course;
原文:https://www.cnblogs.com/ErNan/p/11317513.html