mysql 学习命令整理二

本文详细阐述了数据库中的表间关联,包括一对一、一对多、多对多的关系,以及外键约束的使用、级联操作和不同类型的连接查询(内连接、左连接、右连接)。讲解了如何通过SQL操作实现数据表之间的关联,并介绍了存储过程的基本概念。

表的关联关系:
  一对一关联:一个人只有有个身份证,一个身份证代表一个人
      1.两个表主键相同的数据为对应数据
      2.添加唯一外键关联
  一对多关联:班级-学生  一个班级包含多个学生
  多对一关联:班级-学生  多个学生在一个班级
      1.在多的一端添加外键,与一的一端主键进行关联
  
  多对多关联:学生-课程  一个学生可以选择多个课程,一门课程也可以有多个学生选择
     1.额外创建一张关系表来维护多对多关联,在关系表中定义2个外键,分别与两个数据表的主键进行关联
  
外键约束:
constraint  FK_STUDENT_CLASSES foreign key(cid) references calss(id)
            外键逻辑名称
 

 将一个列添加为外键约束与另一张表的主键进行关联后,这个外键约束添加的数据必须要在关联的主键字段中存在
      create table student (                       
        num char(8) not null primary key,
        name varchar(20) not null,
        gender char(2) not null,
        age int not null,
        tel char(11) not null unique,
        qq varchar(11),
        cid int,
        constraint  FK_STUDENT_CLASSES foreign key(cid) references calss(id)
       );

       create table class (
        classs varchar(20) not null,
        id int not null primary key        
      );
      
      
      插入数据:
      insert into class(calss,id) values('一班',1);
      insert into student(num,name,gender,age,tel,qq,cid) values('11','zhangsan','100','20','13333333333','888888','1');
      
先建表后添加外键约束:
     alter table student add constraint  FK_STUDENT_CLASSES foreign key(cid) references class(id);
删除外键约束:
     alter table student drop foreign key FK_STUDENT_CLASSES;

   
级联修改:ON UPDATE CASCADE :修改 ON DELETE CASCADE:删除
    班级id 被外键关联后,就不能修改和删除
    1.(如果要修改先设置cid为空,再修改id,再把cid改为id的值) 
    2.级联操作(
     alter table student drop foreign key FK_STUDENT_CLASSES;
     alter table student add constraint  FK_STUDENT_CLASSES foreign key(cid) references class(id) ON UPDATE CASCADE ON DELETE CASCADE;)
     
连接查询:
  内连接:INNER JOIN  只能查出相匹配的数据
    select 字段名 from tabname1 INNER JOIN  tabname2 ON 条件tabname1.id1 = tabname2.id2;
  
  左连接:LEFT JOIN   显示左表中的所有记录,如果右表有匹配数据,则显示,没有匹配数据则右表显示NULL
    select 字段名 from leftTable LEFT JOIN  rightTable ON 条件leftTable.id1 = rightTable.id2;
    
  右连接:RIGHT JOIN   显示右表中的所有记录,如果左表有匹配数据,则显示,没有匹配数据左表则显示NULL
    select 字段名 from leftTable RIGHT JOIN  rightTable ON 条件leftTable.id1 = rightTable.id2;  
    
数据表别名:如果再连接查询表中有相同的名字字段,可以使用 表名.字段名 进行区分,如果表名太长,不便于SQL语句编辑,可以使用表别名
 SELECT s.name,c.course_name FROM tb_students_info s INNER JOIN tb_course c  


套嵌查询/子查询:
  WHERE <表达式> <操作符> (子查询)
  单列多行:
  select * from student where cid IN (select * from class where id='1'); 查询id=1得学生
  select * from student where cid NOT IN (select * from class where id='1');查询id!=1得学生
  
  多条查询结果整合到一起
  select * from student where cid='1' UNION select * from student where cid='2'; 

  多行多列
  select * from (select * from student where num='1') t where t.cid = ‘1’;


存储过程,不是太懂???  下次再记录    
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值