建立数据库和表
drop database if exists jbxx;create database jbxx;use jbxx;create table grjbxx(ryid int auto_increment not null pri***ry key,sfzh varchar(50) not null,hbh varchar(50) not null,xm varchar(50) not null,xb varchar(4) not null,mz varchar(50) not null,csrq date not null,hj varchar(50) not null,zz varchar(50) not null,lxdh varchar(20) not null,gmt_create datetime not null default current_timestamp);insert into grjbxx(sfzh,hbh,xm,xb,mz,csrq,hj,zz,lxdh) values('37032219000101001x','3703220105','张三','男','汉族','1900-02-05','山东高青','高青县*小区*号楼*单元*户号','1390000000');select * from grjbxx;
查询xm的分组统计
SELECT xm,count(*)from grjbxx group by XM;
只显示xm重复行的统计
SELECT xm,count(*)from grjbxx group by XM having count(*)>1;
显示xm副本的所有记录信息
SELECT * from grjbxx where XM in(SELECT XM from grjbxx group by XM having count(XM)>1);
显示sfzh的所有重复记录信息
SELECT * from grjbxx where sfzh in(SELECT sfzh from grjbxx group by sfzh having count(sfzh)>1);
删除表中冗余的sfzh重复记录。根据单个字段(sfzh)来判断重复记录,并且只留下具有最大ryid的记录
delete from grjbxxwhere sfzh in(SELECT sfzh from grjbxx group by sfzh having count(sfzh)>1)and ryid not in(select ***x(ryid) from grjbxx group by sfzh having count(sfzh)>1);
数据库修改
use mytest; --打开mytest数据库SELECT * from stu; --查询STU表全部记录ALTER TABLE stu MODIFY gmt_modified datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP; --修改gmt_modified字段非空,更新时自动更新ALTER TABLE stu MODIFY gmt_modified datetime NOT NULL; --修改gmt_modified字段非空ALTER TABLE stu change gmt_create gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP; --修改gmt_create是datetime类型,非空,默认值自动时间desc stu; --显示stu表结构UPDATE stu set gmt_modified='2018-08-01 01:59:01'; --更新所有的gmt_modified的值truncate stu; --清空stu表,仅保留数据结构
将多行数据合并为一行,将相同的hbh合并为一行
从grjbxx GROUP BY hbh中选择hbh,count(xm)为number,GROUP_CONCAT(xm)为member
查询前五条记录
select * from grjbxx LIMIT 5;
统计多个数据,并使用虚拟表dual来显示
SELECT(SELECT count(DISTINCT sfzh) from grjbxx) 总人数, (SELECT count(DISTINCT sfzh) from *** where ***lb='01') 社保 from DUAL;
查询日期字段的日期范围内的记录,即1980-01-01 00:00 –1999-12-31 00:00:00,两个边界都包括,该时间范围的记录,
select * from grjbxx WHERE csrq BETWEEN ‘1980-01-01’还有‘1999-12-31’;
查询一段时间内的记录
select * from grjbxx WHERE GMT _ create >=’2019-01-23 00:00:00′和gmt _ create & lt= ‘2019-01-23 14:53:06’;
日期转换
SELECT DATE_FORMAT(20140614162458,'%Y-%m-%d %H:%i:%s');SELECT DATE_FORMAT('2014-02-24','%Y-%m-%d %H:%i:%s');SELECT DATE_FORMAT('2014-02-24','%Y-%m-%d')SELECT str_to_date('2014-02-24','%Y-%m-%d')SELECT DATE_FORMAT(gmt_create,'%Y-%m-%d') from grjbxx;ORCAL 日期转换select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual
使用substr函数查询,SUBSTR(str,pos,len)的意思是:从POS开始的位置截取len个字符(空白色也算字符)。
SELECT * from grjbxx where substr(sfzh,1,6)= ’370322′
replace(str,oldstring,newstring) replace函数有三个参数,它用newstring字符串替换字符串中的oldstring。
UPDATE grjbxx SET hbh=REPLACE(hbh,’2′,’一’)
删除自增长主键,从1开始
1。取消自增长
ALTER TABLE grjbxx MODIFY ryid int
2。取消主键
ALTER TABLE grjbxx DROP PRIMARY key;
3。将所有id更新为0
更新grjbxx***ryid = 0;
4。设置主键的自增长
ALTER TABLE grjbxx CHANGE ryid ryid int not NULL主键auto _ increment
显示百分号%
select concat(round(fs/100*100,2),’%’)来自某人;
计算>:=60%的记录
选择round(sum(当fs & gt=60那么1 else 0 end)/count(fs),2)来自***;
本文来自夜遇投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/578232.html