MYSQL_查询(附带案例:随机读取数据库一条数据)

数据库操作概览

在这里插入图片描述

内连接和外连接的区别

在这里插入图片描述

where 查询语句-int和varchar

  • 当 要查询的字段为int 类型数据,可以使用 where typeid='123' OR where typeid=123 均可查询到相应的记录
where b.VALUE!=A # 查询时候没有带引号,报错如下:
   	[Err] 1054 - Unknown column 'A' in 'where clause'

随机取出表中一条数据

在这里插入图片描述

小白解法

select * from test 
order by rand()
limit 1

大神解法

前情提要
NOTACK 表达式为何是这样

  • rand()的取值范围为[0,1)
  • 若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))
  • 产生[i,j]范围正整数:select round(rand()*(j-i+1)+i-0.5)

解法1

 -- GET FIVE RANDOM RECORDS
 SELECT *
FROM `table` AS t1 
	JOIN (
		SELECT ROUND(
			RAND() * (SELECT MAX(id) FROM `table`)
				) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC 
LIMIT 5;

"""
t2.id 可以得到随机的id
t1.id 获得table 表中的id值
然后通过t1.id>=t2.id 获取5条连续的记录
"""

解法1_SQL语句分析

  • NOTACK JOIN 为何可以和随机数结合,不可思议

解法2

SELECT * FROM `table`
WHERE id >= (
	SELECT floor(
		RAND() * (SELECT MAX(id) FROM `table`)
		)
		) 
ORDER BY id LIMIT 1;

如何实现由图1变成图2

在这里插入图片描述
在这里插入图片描述

 select distinct a.row, b.VALUE  
 # 全连接产生九条记录
 # 需要利用distinct 对(a.row,b.VALUE)整体去重
 from test a
 join test b
 where b.VALUE!='A'  # 去除b.value为A的
 order by a.row  # 可有可无,默认升序排列
 ;

全连接得到的结果集
在这里插入图片描述

我的测试_左连接

select *
 from test a
 left join test b on a.row=b.VALUE

在这里插入图片描述

查看帮助文档

mysql> help command_name;   # eg. help rand;

Shoulders of Giants

mysql rand()产生随机整数范围及方法
mysql随机查询若干条数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值