Fork me on 码云

MySql语句用法记录

1、查询某个字段,在数据库不重复的条数(去重查询)
        
select count(distinct item_uid) from supply_order;
查询 表 supply_order 中  item_uid 字段 不重复的条数。
查询有多少个 item_uid。
关键字【distinct】
 
2、多条件去重查询(计数)
select count(distinct item_uid) from supply_order where item_name like '%移动%' ;
 
3、还可以加条件
select count(distinct item_uid) from supply_order where item_name like '%移动%'and item_area like '江苏';
 
4、如何按条件查询N条数据,查询的结果中,设置某一个字段新的值。(同时按条件更新多条数据)
正常使用 update语句即可
update tell_tellphone set toperation = '移动'  where topid =600030;
5、删除某一个字段
alter table supply_order drop column biz_order_id;
6、删除多个字段
alter table supply_order drop column biz_order_id,drop column stock_id,drop column user_id;
其他用法:
alter table test(旧) rename test1(新); --修改表名
alter table test add  column name varchar(10); --添加表列
alter table test drop  column name; --删除表列
alter table test modify address char(10) --修改表列类型||alter table test change address address  char(40)
alter table test change  column address address1 varchar(30)--修改表列名
7、修改字段
 
mysql修改字段类型:     
--能修改字段类型、类型长度、默认值、注释
--对某字段进行修改
ALTER  TABLE 表名 MODIFY COLUMN 字段名 新数据类型 新类型长度  新默认值  新注释; -- COLUMN可以省略
alter  table table1 modify  column column1  decimal(10,1) DEFAULT NULL COMMENT '注释'; -- 正常,能修改字段类型、类型长度、默认值、注释
mysql修改字段名:
ALTER  TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;     
alter  table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释'; -- 正常,此时字段名称没有改变,能修改字段类型、类型长度、默认值、注释
alter  table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释
alter  table table1 change column2 column1 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释
alter  table table1 change column1 column2; -- 报错  
 
8、substr用法
mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同。
tr(string string,num start,num length);
string为字符串;
start为起始位置;
length为长度。
区别:
mysql中的start是从1开始的,而hibernate中的start是从0开始的。
现需求,test表中,value和value2字段都是 char类型(字符串),现在需要将value的字段的前三位,赋值给value2
 
update test set value2 = substr(value,1,3);
 
9、MySQL在数据表中修改字段的排列位置
 
ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2
参数说明 
FIRST,可选参数 
将字段1,修改为表的第一个字段。 
AFTER 字段名2 
将字段1,插入到字段2的后面。 
 
alter table grade modify username varchar()  first//将数据表grade的username字段,修改未表的第一个字段
10、将表数据复制到另一个表
拷贝表1的全部数据到表2
方法一:
INSERT INTO table2 SELECT * FROM table1
拷贝第n条
INSERT INTO table2 SELECT * FROM table1  WHERE id=5
拷贝指定字段
INSERT INTO table2 ( name , price ) SELECT name , price  FROM table1  WHERE id=5
    
方法二:
创建表3, 同时拷贝表1的数据和结构到表3
CREATE TABLE table3 SELECT * FROM table1
    
方法三:
创建表4,只拷贝表1的结构到表4,不拷贝数据
CREATE TABLE table4 LIKE table1
 
 
1. 表结构完全一样
  insert into 表1
  select * from 表2
2. 表结构不一样(这种情况下得指定列名)
  insert into 表1 (列名1,列名2,列名3)
 
select 列1,列2,列3 from 表2
3.不同数据库,需要在表前面加数据库前缀,database.表名。
11、删除重复的数据
1、要删除重复的记录,就要先查出重复的记录,这个很容易做到  
select * from cqssc group by expect having count(expect) > 1;--cqssc(表名)expect(字段名)数据量大会比较慢
 
注意:这是查出所有重复记录的第一条记录,需要保留,因此需要添加查询条件,查出这三条的重复记录
 
2、查询重复的数据(除去第一条要保留的,待之后删除)
select 
    id,expect 
from 
    cqssc --表名
where 
    expect -- 字段名
in 
    (select expect from cqssc group by expect having count(expect)>1) -- 查询有重复数据的记录的字段名
and 
    id 
not in
    (select min(id) from cqssc group by expect having count(expect)>1) --查询出同名中ID最小的记录ID
 
以上得到的结果就是我们需要删除的记录!
 
 
在Mysql中是不能删除查询出来的记录的,这里很容易错,当时在这里纠结了很久,而是要通过一张【临时表】来解决。
3、删除非第一条的重复数据
delete from cqssc where id in -- 在删除数据中删除 id条件
      (select id from --要删除的数据的id--供删除--针对临时表 tmpresult
        (select id from cqssc where expect in --待删除数据的 id(多条可能有重复的)
            (select expect from cqssc group by expect having count(expect)>1) and id not in (select min(id) from cqssc group by expect having count(expect)>1)) -- 某一字段重复的数据--待删除的数据
                as tmpresult)
需要查询到要删除的数据的id
需要查询出要删除的数据,才能得到id
第一步:查询要删除的数据(重复的非第一条的数据)
第二步:查询出 这些数据的id
第三步:
第四步:通过得到的id删除
delete from cqssc where id in (select id from (select id from cqssc where expect in (select expect from cqssc group by expect having count(expect)>1) and id not in (select min(id) from cqssc group by expect having count(expect)>1)) as tmpresult)
12、查询列的和
select sum(money) from test where place like "%四川%";
 
posted @ 2019-04-16 11:38  LSYA  阅读(101)  评论(1)    收藏  举报