mysql多表查询

Posted 龙宝cl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql多表查询相关的知识,希望对你有一定的参考价值。

一 首先,建表的sql语句:

分页操作:使用limit(参数1,参数2)
    起始位置(参数1)=(第几页-1)*每页显示的条数(参数2)
    
1.分类表
create table category(
    cid varchar(32) primary key,
    cname varchar(100)
);

2.商品表
create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double,
    category_id varchar(32)
);

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


3.添加外键列
alter table product add category_id varchar(32);

4.添加约束
alter table product add constraint product_fk foreign key(category_id) references category(cid);

5.订单表
create table orders(
    oid varchar(32) primary key,
    totalprice double
);

6.订单项表
create table orderitem(
    oid varchar(50),
    pid varchar(50)
);

7.联合主键
alter table orderitem add primary key(oid,pid);

8.订单表和订单项表的主外键关系
alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);

9.商品表和订单项表的主外键关系
alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);



insert into category(cid,cname) values(\'c001\',\'家电\');
insert into category(cid,cname) values(\'c002\',\'服饰\');
insert into category(cid,cname) values(\'c003\',\'化妆品\');

insert into product(pid,pname,price,category_id) values(\'p001\',\'联想\',\'5000\',\'c001\');
insert into product(pid,pname,price,category_id) values(\'p002\',\'海尔\',\'5000\',\'c001\');
insert into product(pid,pname,price,category_id) values(\'p003\',\'雷神\',\'5000\',\'c001\');

insert into product(pid,pname,price,category_id) values(\'p004\',\'JACK JONES\',\'800\',\'c002\');
insert into product(pid,pname,price,category_id) values(\'p005\',\'真维斯\',\'200\',\'c002\');
insert into product(pid,pname,price,category_id) values(\'p006\',\'花花公子\',\'440\',\'c002\');
insert into product(pid,pname,price,category_id) values(\'p007\',\'劲霸\',\'2000\',\'c002\');

insert into product(pid,pname,price,category_id) values(\'p008\',\'香奈儿\',\'800\',\'c003\');
insert into product(pid,pname,price,category_id) values(\'p009\',\'相宜本草\',\'200\',\'c003\');



声明外键约束
1.从orderitem到product的关系
alter table orderitem add foreign key(pid) references product(pid);

二 添加外键

商品表和商品类别表的主外键关系
mysql> alter table product add constraint product_category_fk foreign key(category_id) references category(cid);

订单表和订单项表的主外键关系
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);

   

 

  补充:一对多,多对多,一对一 建表原则图解

  

 

 

 

三 多表查询

 1 交叉连接查询:得到的是两个表的乘积

mysql> select * from category,product;

 

 2 内连接查询 

  

   2.1隐式内连接

mysql> select * from category c,product p where c.cid=p.category_id;

  2.2 显示内连接 (inner 可省略)

mysql> select * from category c inner join product p on c.cid=p.category_id;

3 外连接查询

  

  3.1 左外连接(显示出了左边的表的全部以及和右边表的交集)

   

mysql> select * from category c left outer join product p on c.cid=p.category_id;

  3.2 右外连接(显示出了右边的表的全部以及和右边表的交集)

mysql> select * from category c right outer join product p on c.cid=p.category_id;

 

注:内连接与外连接的区别?

 

 

 

 四 子查询 

查询联想的类别是什么?

mysql> select cname from category where cid=(select category_id from product where pname=\'联想

 

 

 

以上是关于mysql多表查询的主要内容,如果未能解决你的问题,请参考以下文章

Mysql多表查询

Mysql笛卡尔积详解(附实现多表查询代码实现)

Hibernate的HQL多表查询

MySQL多表查询

mysql 多表联合查询语句怎么写

mybatis-基于xml的多表查询