SQL语句补充

昨天写了sql语句的一些基本操作,今天来点升级版的

查询方式还有分页查询和多表查询等

首先分页查询:
有假分页(逻辑分页/内存分页)和真分页(物理分页/数据库分页)
假分页/逻辑分页/内存分页
一次性查询出所有的数据,存放到内存中(集合),每次翻页都是从内存中取出的指定的条数
特点:翻页很快,如果数据量很大,可能会造成内存溢出

真分页/物理分页/数据库分页
每次翻页都是从数据库中截取指定的条数,
\假设每次10条数据,
第一页查询0-9条,第二页10-19
分页:
语法:select *from 表名 limit ?,?;
第一个参数? (当期页数-1)*3
第二个参数?代表着的是实际页数要显示的数据条数(这一也要显示多少数据)
第一页select *from 表名 limit 0,3;(0,1,2)
第一页select *from 表名 limit 3,3;(3,4,5)
第一页select *from 表名 limit 6,3;(6,7,8)

说白了,就是在最后面加了一个 limit关键字 ,然后加点参数


多表查询
上一篇写的都是单表查询, 单表很明显不够用,所以:

单表查询: 从一张表中出查询所有数据
多表查询: 从多张表中查询数据

为什么要进行多表查询??:
例如:当前这个商品表dir_id描述当前商品信息,通过dir_id将所有商品的详细信息查询出来
多表查询–>联合查询
ps:多表查询最多就是两张表,

假如有俩表 表A和表B

selectfrom 表A,表B; //这样写就能从俩表里查询

但是啊,很明显查出来的是错的,这是为什么呢, —————————–笛卡尔积造成的

高数都学过, 这里就不 bb 笛卡尔积了

所以要解决这个问题就要———-设置外键约束
两个表中相关联的两个列,彼此作为等值连接既可以避免笛卡尔积

首先,需要干一件事,就是把数据库引擎改为InnoDB
若数据库中的表要支持外键,那么就需要当前表中使用储存引擎InnoDB

更改两个变量中的存储引擎(修改时要关闭所有表,不然可能更改失败)
用如下语句:

alter table  表A ENGINE = 'innodb';
alter table 表B ENGINE = 'innodb';

然后用代码:

CONSTRAINT `表A_ibfk_1` FOREIGN KEY (`dir_id`) REFERENCES `表B` (`id`)
//把AB两个表设置外键

其实用软件就可以改了,用啥代码啊 呸呸

ps: 开发中为了高性能,会故意删除外键约束,此时我们可以通过java代码进行合理的约束

设置好外键之后就可以进行外键连接了:
内连接查:是相对于外链接的
内连接查询分为两种
隐式内连接查询

selectfrom 表A,表B where A表.列 = B表.列;

显式内连接查询

selectfrom 表A join 表B on A表.列 = B表.列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值