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隨機查詢若干條數據

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