欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MYSQL_入门查询

程序员文章站 2022-05-09 20:53:08
...

数据库操作概览

MYSQL_入门查询

内连接和外连接的区别

MYSQL_入门查询

where 查询语句-int和varchar

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

随机取出表中一条数据

MYSQL_入门查询

小白解法

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

MYSQL_入门查询
MYSQL_入门查询

 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  # 可有可无,默认升序排列
 ;

全连接得到的结果集
MYSQL_入门查询

我的测试_左连接

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

MYSQL_入门查询

查看帮助文档

mysql> help command_name;   # eg. help rand;

Shoulders of Giants

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

相关标签: 数据库