Mysql(6) 初级使用二 两张表之间的查询与更新
2015-05-05 16:46
323 查看
1.将A表中的数据整理后放入B表中:
count() 是个聚合函数 作用是求表的所有记录数select * from 表名 这个是查询表的所有记录
select count(*) from 表名 这个是查询表的所有记录数
insert into tableB(service_user,count) select service_user,count(service_user) from tableA group by service_user;
SELECT counter,count(counter) FROM think_qoe_service_user GROUP BY counter;
2.查询:存在一个表而不在另一个表中的记录
原文A,B两表,找出ID字段中,存在A表但是不存在B表的数据:
方法一:效率低
select distinct A.ID from A where A.ID not in (select ID from B);
方法二:效率中等
使用left join…on… “B.ID isnull”表示左连接之后在B.ID字段为null的记录left join:从左表返回所有的行,即使在右表中没有匹配的行。
select A.ID from A left join B on A.ID=B.ID where B.ID isnull
方法三:(速度最快)
select * from B where (select count(1) as num from A where A.ID=B.ID ) =0
count(1):计算第一行的列数(也就是数据的记录数)
count(*):也是计算数据的记录数,会自动优化指定到哪一个字段。
具体到我自己:
存在两个表中都有相同service_user的记录
1.用 in
select service_user from A where A.service_user in ( select distinct service_user from B )
0.14s
2. 用 left join
select service_user from A left join B on A.service_user=B.service_user where B.service_user is not null
0.356s,结果比较混乱,没继续下去。
3. 内部也用where
select service_user from A where ( select count(1) from B where A.service_user=B.service_user )>0
0.401s
用一张表的数据更新另一张表(同一张表同理)
UPDATE QQQ Q, YYY Y SET Q.id=Y.id WHERE Y.SERVICE_USER=Q.SERVICE_USER
#从一张表中取出group by后统计数据,再插入到其他表中(也可以插入到A表本身) UPDATE bbb B, ( SELECT A.SERVICE_USER,count(*) c FROM aaa A GROUP BY A.SERVICE_USER )C SET B.USER_NUM=C.c WHERE B.SERVICE_USER=C.SERVICE_USER
#用一张表的数据更新同一张表的其他字段 UPDATE aaa A, ( SELECT A.SERVICE_USER,count(*) c FROM aaa A #不能直接写A GROUP BY A.SERVICE_USER )C SET A.USER_NUM=C.c WHERE A.SERVICE_USER=C.SERVICE_USER
删除同一张表中的重复数据
delete FROM userinfoJiNan where userid not in ( select * FROM ( select max(userid) u from userinfoJiNan group by userid )B ) #如果not in 后面的表加上表名就报错了,如:where userid not in (...)C 就是错的 #mysql 不允许同一张表边查找边更新(删除),所以要新建临时表 # 上面的代码有问题,不应该都用userid,应该用 select * from ( select id from userinfoJiNan group by userid ) 然后 where id not in ...
相关文章推荐
- mysql 在查询或更新时使用mysql变量 实现动态列值
- mysql update 更新两张表的查询结果
- mysql 跨数据库 查询,更新 federated引擎使用记录
- Mysql无法使用范围查询列之后的其他索引列(以及5.6版本的ICP)
- php使用mysql和mysqli连接查询数据
- mysql 查询关联更新数据
- MYSQL索引问题:索引在查询中如何使用?(转载)
- 合理使用MySQL索引建立高质量查询语句
- mysql备份和还原数据库及慢查询日志使用
- mysql使用索引为什么查询速度变快很多?
- MySql查询两个时间点之间的日期列表
- mysql中左连接,右连接,内连接查询,以及与where之间关系
- [MySQL优化案例]系列 -- 无法使用查询缓存
- mysql 更新带子查询(注意)
- 【转载】Mybatis使用MySQL模糊查询…
- 使用Mysql 数据库 查询不懂时间段(如:今天、昨天、本周、本月、上一月 、今年)
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm
- Linux命令:MySQL系列之三--mysql数据类型及SQL结构化查询语句使用
- Android开发之--- 使用RxBus实现页面之间的数据实时更新
- mysql中使用FIND_IN_SET查询在逗号隔开的字符串中符合多个ID的数据