sql多表的CRUD

一、修改表-添加外键约束

外键约束:foreign key

   。给product中的这个cno添加一个外键约束

      alter table product add foreign key(cno) references category(cid);

   。从分类表中,删除分类为5信息

          。delete from category where cid=5;

          。首先得去product表,删除所有分类ID5商品

建立数据库原则:一个项目/应用 对应 一个数据库

多表之间得建表原则:

        1.一对多:商品和分类

             。建表原则:在多得一方添加一个外键,指向一的一方的主键

        2.多对多:老师和学生,学生和课程

            。建表原则:建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键分别指向原来的那两张表

        3.多对一

        4.一对一:在一个表中添加一个列(外键) 指向另一个表的主键

主键约束:默认就是不能为空,唯一

     。外键都是指向另一张表的主键

     。主键一张表只能有一个

唯一约束:列面的内容,必须是唯一,不能出现重复情况,为空

     。唯一约束不可以作为其他表的外键

     。可以有多个唯一约束

 

二、多表查询

- 交叉连接查询 笛卡尔积

select * from product;

select * from category;

笛卡尔积,查出来是两张表的乘积,查出来的结果没有意义

select * from product,category;

--过滤出有意义的数据

select * from product,category where cno=cid;

select * from product as p,category as c where p.cno=c.cid;

数据准备

insert into product values (null,'耐克蒂',998,null,null);

--内连接查寻

---隐式内连接

        select * from product as p,category as c where p.cno=c.cid;

---显式内连接

        select * from product  p inner join category  c on p.cno=c.cid;

区别:

隐式内连接:在查询出结果额基础上去做的where条件过滤

显示内连接:带着条件去查询结果,执行效高

--左外连接:会将左表中的所有的数据都查询出来,如果右表中没有对应的数据,用null代替

        select * from product  p left outer join category  c on p.cno=c.cid;

数据准备:

insert into category values (100,'电脑办公','电脑又出错');

--右外连接:会将右表中的所有的数据都查询出来,如果左表中没有对应的数据,用null代替

        select * from product  p right outer join category  c on p.cno=c.cid;

分页查询

     。每页数据3

     。起始索引从0

     。第一页:0

     。第二页:3

                起始索引:index代表显示第几页

                每页显示3条数据

                startIndex = (index-1)*3

第一个参数是索引

第二个参数显示的个数

select * from product limit 0,3;

select * from product limit 3,3;

 

--子查询

---查询分类名称为手机数码的所有商品

1.查询分类名为手机数码的ID

select cid from category where cname = '手机数码';

2.得出ID为1的结果

select * from product where cno = (select cid from category where cname='手机数码');

--查询出(商品名称,商品分类名称)信息

   --左连接

select p.pname,c.cname from product p left outer join category c on p.cno = c.cid;

   --子查询

select pname,(select cname from category c where p.cno=c.cid) as 商品分类名称 from product p;

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值