您的位置:首页 > 数据库 > MySQL

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 ...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: