MySQL 语句备忘

删除重复记录的方法,转自:
http://dadloveu.blog.51cto.com/715500/196309

找出每个学生的第一个订单
select * from duplicate where id in(select min(id) from duplicate group by name);
生成新表:
create table duplica select * from duplicate where id in(select min(id) from duplicate group by name);
表改名:
alter table duplica rename to duplicate;
别忘了设置主键:
alter table duplicate modify id int(2) not null primary key auto_increment;

 

 

跨数据库操作
mysql> create database web;
mysql> create table test.tableName (name int,pwd int);
mysql> create table web.table (name int,pwd int);
mysql> insert into test.tableName (name,pwd) select name,pwd from web.table ;
mysql> select version();

 

判断一个数据库是否存在
先show databases like 一下,然后根据found_rows()的结果是否为1判断
show databases like 'a';
if found_rows()=1 then

正则regexp
//匹配以@163.com或@163,com结尾的字符串
select * from t1 where email regexp "@163[.,]com$";
更多聚合信息,用with rollup后,不能再用order by
select id,name,count(id) from t5 group by id,name with rollup;

explain select count(*) from actif where name like 'a%';
desc select count(*) from actif where name like 'a%';

两个简单优化方法
check table tb1;
optimize table t1;//整理表碎片,注意不要在工作时间用,尤其在表很大的时候

导出t5表中的name字段数据
select * from actif where act_nom like 'a%' into outfile "d:\sql.txt"
导入数据到t1表中的name字段
load data infile "d:\sql.txt" into table t1(name);

因为导入的时候每行一次次导入,并索引;现在要在导入完成后再索引
alter table t1 name disable keys;//关闭索引
load data;
alter table t1 name enable keys;//打开索引

取消排序,降低损耗,用order by null
select count(name) from t1 group by name order by null;
避免子查询,如
select * from t1 where id in(select id from t2);
改为这样select t1.name from t1,t2 where t1.id=t2.id;

 

// 方案二,一条语句就插入
INSERT INTO  ff_operateur_detail(op_date, op_username, op_nom, op_prenom, op_tarif, op_ecole, op_fle, op_actif, op_inscription)
SELECT ins_date,ins_operateur,ins_nom,ins_prenom,ins_recu,ins_ecole,ins_classe_type,ins_actif,ins_id FROM inscription_pan

 

左连接:

SELECT ins_year,ins_month,ins_operateur_id,ins_operateur,SUM(ins_frais+ins_tarif-ins_reduction) AS recu, SUM(fc_recu) AS recu2 FROM inscription_pan
LEFT JOIN facture_pan
ON (ins_id=fc_inscription)
AND (ins_ecole=fc_ecole)
WHERE (ins_date>='2013-06-01')
AND (ins_date<='2013-06-10')
GROUP BY ins_year,ins_month,ins_operateur

注意,不能把那些where语句放到on里去,完全两回事,而且好像都执行不完。

posted @ 2013-05-21 07:49  findumars  Views(295)  Comments(0Edit  收藏  举报