SQL高级(二)

一.连接查询:将多张表联合查询(按照某个指定的条件进行拼接)

             1.连接查询的分类:交叉连接

                        1):交叉连接:从一张表中循环取出每一条记录,然后去另一张表中匹配(无条件匹配)

                              select * from student cross join class;     select * from student,my_class;

                        2):内连接:从左表中取出每一条记录去匹配右表中的数据

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

                              给标起别名进行查询:select * from student as s inner join my_class as my on s.id=my.id;

                              select s.id,s.name,s.sex,s.age,my.room,my.teacher from student as s inner join my_class as my where s.id=my.id;

                       3):外连接:以某张表为主取出里面每一条记录,去匹配另一张表不管是否匹配成功都会保留,能正确匹配保留,不能正确匹配至空。

                                1.left join:左外连接以左表为主

                                2.right join:右连接以右表为主

                                3.基本语法:左表   left/right   join  右表   on 左表.字段=右表.字段;

                                    select s.id,s.name,s.sex,s.age,my.room,my.teacher from student as s left/right join my_class as my on s.id=my.id;

                                    select * from student  left join my_class using(id);//使用using关键字可以将左右两表相同字段作为连接条件。

                       4):自然内连接:natural join,系统以字段自动匹配连接条件(如果有多个同名字段,那都将作为匹配条件),连接后会合并同名字段。

                                  1.自然内链接 左表 natural join 右表;

                                  2.自然外联结 左表 natural left/right 右表;

                                  select * from student natural left join my_class;

二.外键:一张表的非主键关联另一张表的主键,外键在子表中

                1.在创建表时增加外键:create table test_foreign(
                                -> id int(4) primary key auto_increment,
                                -> name char(8) comment ‘学生姓名’,
                                -> c_id int(4) not null,
                                -> foreign key(c_id) references my_class(id)
                                -> );

                 2.在创建表之后增加外键:alter table test_foreign add constraint c_id foreign key (c_id) references my_class (id);

                 3.删除外键:alter table test_foreign drop foreign key test_foreign_ibfk_1;

                 4.总结:对子表对父表(子表外键所在的表)

                               1):对子表进行约束,子表对数据进行(增改时),如果对应的外键字段在不到父表中找不到对应的匹配,操作会失败

                                    (约束对子表的数据操作)

                               2):对父表的约束进行读写操作时(删改涉及主键操作),如果对应的主键在子表中已经被引用,那么操作会失败

                               3):外键类型必须和父表中主键类型一致如果不一致外键不会创建成功                  

                               4):增加外键的字段(数据以存在),必须保证于主键数据相互对应。

                               5):外键的三种约束模式(针对父表约束)

                                               1.distract严格模式(默认约束):父表不能对删除或更新一个对子表已经引用的的数据

                                                2.cascade 级联模式:父表的操作子表也跟着操作,指标关联性数据被删除

                                                3.set null(制空模式):父表操作之后子表对应的数据被制空

                                        通常一个合理的做法(约束模式):删除时子表制空,更新时子表级联操作

                                        指定模式的语法:

                                                   foreign key(子表字段) reference 父表(主键字段) on delete 模式 update 模式;       

                                

    原文作者:SQL
    原文地址: https://blog.csdn.net/SuperstarSteven/article/details/79820515
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞