多表操作

 

外键     主表   从表   主表的主键  从表的主键被称为外键

(1)创建主表和从表,(2)给从表添加外键(必须和主表的主键类型一致)(3)声明外键约束(即外键的指向)

 

  • 一对多(分类和商品):在多的一方添加字段,并将多的一方的外键指向低的一方的主键

创建主表:

 create table category(cid varchar(32) PRIMARY KEY,cname varchar(100));

创建从表

create table product(pid varchar(32) PRIMARY KEY,name varchar(40), price double);

添加外键字段

alter table product add column category_id varchar(32);

添加约束(即产品中包含外键)

alter table product add constraint product_fk foreign key (category_id) references category(cid);

主表:                                                                                                            

从表

  •  多对多(订单和商品)

订单表

create table orders(oid varchar(32) PRIMARY KEY,totalprice double);

订单项表

create table orderitem(oid varchar(50),pid varchar(50));

订单表和订单项表外键的主外键关系

alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);

商品表和订单项表的主外键关系

 alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);

订单表

订单项表

  • 多表查询

内连接inner join(显示、隐式)   外连接outer join(左外连接、右外连接)

  1.  隐式内连接(distinct重复名称只显示一个)
    select distinct cname from category c,product p where c.cid = p.category_id

     

  2.  显式内连接(distinct重复名称只显示一个) 

    select distinct cname from category c inner join product p on c.cid = p.category

     

  3. 左外连接
    select cname,count(category_id) from category c left outer join product p on c.cid=p.category_id group by cname;

     

  • 子查询(一条语句查询结果作为另一条语句语法的一部分)
1 select * from product where category_id =(select cid from category where cname = '化妆品');
2 
3 select p.* from product p,category c where p.category_id=c.cid and c.cname='化妆品';

结果一样,1使用的是子查询,3使用的是隐式内连接

 

 

 
 

 

 
 

 

posted on 2019-05-26 16:01  v小巧v  阅读(162)  评论(0)    收藏  举报

导航