SQL中表的联结

1. 表的联结

今天面试的时候,问到了关于数据库操作的一些知识。因为时间太久,基本都忘光了。尤其是JOIN操作,基本完全没有想出来,弄的非常尴尬。

为了使事情尽量简单,先假设有三张Table

#1. student

+----+-------+
| id | name |
+----+-------+
| 1 | Harry |
| 2 | Merry |
| 3 | Henry |
| 4 | Terry |
| 5 | Jerry |
+----+-------+
5 rows in set

#2. course

+------+
| id |
+------+
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
| 0 |
+------+

#3. classroom

+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+

再使用“存储过程”来方便地填充这些表

delimiter $$
create procedure add5cols()
    begin
        declare n int default 10;
        while n > 0
        do
            set n = n - 1;
            insert into course (id) values (n);
        end while;
    end $$
call add5cols();

 

JOIN常用的有三种

 

#1. CROSS JOIN

select * from student, course;

叉联结,是一种返回笛卡尔积的联结方式,如

如果联结的两个表之间没有任何关联(如上),则结果为(左表行数X右表函数)。

 

#2. LEFT JOIN

select * from student left join course on student.id=course.id;

左联结,需要指定是依据哪一个属性联结

如果左边属性值的个数要多于右边,那么会创造出一些空行(值为null)

#3. RIGHTJOIN

同上, 示例为左边匹配的值小于右边的情况。

select * from student right join course on course.id=student.id;

 

 

 

#4. INNER JOIN

一种是未指定过依据的JOIN

select * from student inner join course;

效果等同于CROSS JOIN;

 

一种是指定了依据的JOIN

select * from student inner join course on student.id=course.id;

可见效果等同于LEFT JOIN

 

posted @ 2020-02-23 20:26  AcodingDog  阅读(203)  评论(0)    收藏  举报