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随机查询若干条数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章