资讯专栏INFORMATION COLUMN

多表查询

ztyzz / 3417人阅读

摘要:微信公众号菜鸟永恒第章多表关系实战实战省和市方案多张表,一对多方案一张表,自关联一对多实战用户和角色比如演员和扮演人物多对多关系实战角色和权限比如公司职位和开除等权限多对多关系实战客户和联系人可选一对多一个客户服务于多个联系人第章多表查

微信公众号:菜鸟永恒

第1章 多表关系实战

1.1 实战1:省和市
 方案1:多张表,一对多

 方案2:一张表,自关联一对多

1.2 实战2:用户和角色 (比如演员和扮演人物)

 多对多关系
1.3 实战3:角色和权限 (比如公司职位和开除等权限)

 多对多关系

1.4 实战4:客户和联系人(可选)

 一对多:一个客户服务于多个联系人

第2章 多表查询

CREATE TABLE category (
cid int PRIMARY KEY ,
cname VARCHAR(50)
);
CREATE TABLE products(
pid int PRIMARY KEY ,
pname VARCHAR(50),
price INT,
flag VARCHAR(2), #是否上架标记为:1表示上架、0表示下架
category_id int,
CONSTRAINT products_fk FOREIGN KEY (category_id) REFERENCES category (cid)
);

2.1 初始化数据

分类

INSERT INTO category(cid,cname) VALUES("1","家电");
INSERT INTO category(cid,cname) VALUES("2","服饰");
INSERT INTO category(cid,cname) VALUES("3","化妆品");

商品

INSERT INTO products(pid, pname,price,flag,category_id) VALUES("1","联想",5000,"1",1);
INSERT INTO products(pid, pname,price,flag,category_id) VALUES("2","海尔",3000,"1",1);
INSERT INTO products(pid, pname,price,flag,category_id) VALUES("3","雷神",5000,"1",1);

INSERT INTO products (pid, pname,price,flag,category_id) VALUES("4","JACK JONES",800,"1",2);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES("5","真维斯",200,"1",2);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES("6","花花公子",440,"1",2);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES("7","劲霸",2000,"1",2);

INSERT INTO products (pid, pname,price,flag,category_id) VALUES("8","香奈儿",800,"1",3);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES("9","相宜本草",200,"1",3);

2.2 多表查询

交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]

 语法:select * from A,B;

内连接查询(使用的关键字 inner join -- inner可以省略)

 隐式内连接:select * from A,B where 条件;
 显示内连接:select * from A inner join B on 条件;

外连接查询(使用的关键字 outer join -- outer可以省略)

 左外连接:left outer join
 select * from A left outer join B on 条件;
 右外连接:right outer join
 select * from A right outer join B on 条件;

1.查询哪些分类的商品已经上架 隐式内连接

SELECT * FROM category c , products p

WHERE c.cid = p.category_id and p.flag = "1";
内连接

SELECT * FROM category c

INNER JOIN products p ON c.cid = p.category_id 
WHERE p.flag = "1";

2.查询所有分类的商品个数 左外连接

INSERT INTO category(cid,cname) VALUES(4,"奢侈品");
SELECT cname,COUNT(category_id) FROM category c

LEFT OUTER JOIN products p 
    ON c.cid = p.category_id 
GROUP BY cname;

2.3 子查询

子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
select ....查询字段 ... from ...表.. where ... 查询条件

3 子查询, 查询“化妆品”分类商品详情 隐式内连接

SELECT * FROM products p , category c

WHERE p.category_id=c.cid AND c.cname = "化妆品";
子查询 作为查询条件

SELECT * FROM products p

WHERE p.category_id = 
( 
    SELECT c.cid FROM category c 
        WHERE c.cname="化妆品"
);
##作为另一张表
SELECT * FROM products p , 
        (SELECT * FROM category WHERE cname="化妆品") c 
    WHERE p.category_id = c.cid;

查询“化妆品”和“家电”两个分类商品详情

SELECT * FROM products p

WHERE p.category_id in
( 
    SELECT c.cid FROM category c 
        WHERE c.cname="化妆品" or c.name="家电"
);

欢迎关注公众号:菜鸟永恒 点滴记录,共同进步。

立志想成为大牛的菜鸟一枚,将会记录Java技术知识,,不妨来扫描二维码关注一下!

                  欢迎加小编微信 拉你进新建的技术交流群

听说关注的人都变美变帅了

觉得我的文章写得不错,不妨点一下好看并分享给朋友!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32351.html

相关文章

  • JPA的多表复杂查询

    摘要:我将举几个栗子,来详细的说一下我自己在使用多表复杂查询的场景和想法。名字手机号这是一个单表的多条件复杂查询,由于是在几个属性中进行筛选,其中的属性的个数不知道有多少个,所以只需要利用查询就可以很方便的实现这个需求。 最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository接口 ,然后利用jpa的方法命名规范进行jpql查...

    chaos_G 评论0 收藏0
  • Java编程基础32——MySQL多表联查

    摘要:会创建多表及多表的关系多表之间的关系如何来维护添加外键约束从分类表中删除分类为信息删除失败首先得去表删除所有分类商品建数据库原则通常情况下一个项目应用建一个数据库多表之间的建表原则一对多建表原则在多的一方增加一个外键指向一的一方多对多建表原 SQL 会创建多表及多表的关系 1.多表之间的关系如何来维护 添加外键约束: foreign key alter table product...

    TANKING 评论0 收藏0
  • MySQL——多表查询

    摘要:多表查询笛卡尔积多表查询中,如果没有连接条件,则会产生笛卡尔积数学中的定义假设集合,集合,则两个集合的笛卡尔积为实际运行环境下,应避免使用笛卡尔积解决方案在加入有效的连接条件等值连接连接张表,需要个连接条件主键约束约束当前表中, 多表查询: select listname from tablename1,tablename2; 笛卡尔积 多表查询中,如果没有连接条件,则会产生笛卡尔积数...

    wind5o 评论0 收藏0
  • Oracle总结【SQL细节、多表查询、分组查询、分页】

    摘要:前言在之前已经大概了解过数据库和学过相关的知识点,但是太久没用过了,就基本忘了印象中就只有基本的语句和相关一些概念写下本博文的原因就是记载着一些以前没注意到的知识点以后或许会有用实例与数据库概念数据库服务器由两部分组成实例理解为对象看不见的 前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语...

    陈伟 评论0 收藏0
  • yii2 ActiveRecord多表关联以及多表关联搜索的实现

    摘要:今天把这个问题讲明白了,看看是怎么个多表关联以及如何去优化这个关联。现需要在列表展示表的来源渠道,且该渠道可搜索。关联表字段增加查询中的搜索模型也是通过实现的,该模型通过控制着哪个字段可搜索,哪个字段不可搜索。 作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留...

    venmos 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<