數據庫操作概覽
內連接和外連接的區別
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;