MYSQL_入门查询
程序员文章站
2022-05-09 20:53:08
...
数据库操作概览
内连接和外连接的区别
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;