批量查询:
- select top 100 * from 表名 order by 列名 desc (升序asc 降序desc)
- select * from bdcqzs_fr where djsj>=‘2020-11-30’ limit 10
- SELECT * FROM xxxxx WHERE id BETWEEN 1 AND 10000
其他:
- 查询全部的记录: select * from test_limit ;
- 查第一条记录: select * from test_limit limit 1;
- 查前面两条记录: select * from test_limit limit 0,2;
- 查第二和第三条记录: select * from test_limit limit 1,2;
- 查最后一条记录: select * from test_limit order by id DESC limit 1;
扩展笔记:
(以下均是mysql语句,db2并未尝试,有兴趣的小伙伴可以尝试,但是慎用修改语句。)
select distinct * from '表名' where '限制条件' group by '分组依据' having '过滤条件' order by limit '展示条数'
执行顺序
from -- 查询
where -- 限制条件
group by -- 分组
having -- 过滤条件(和group by并用)
order by -- 排序
limit -- 展示条数
distinct -- 去重
select -- 查询的结果
备份数据库
#mysqldump -uroot -p密码 数据库名 > D:/备份文件名.sql
恢复备份的数据库
#首先在mysql里建好数据库名
#mysql -uroot -p密码 数据库名 < D:/备份文件名.sql
1.单表约束
#主键约束:PRIMARY KEY 要求被装饰的字段:唯一和非空
#唯一约束:UNIQUE 要求被装饰的字段:唯一,
# .联合唯一:在结尾:unique(字段1,字段2)
#非空约束:NOT NULL 要求被装饰的字段:非空
#外键约束:FOREIGN KEY 某主表的外键
#自动增加:AUTO_INCREMENT 自动增加(需要和主键 PRIMARY KEY 同时用)
#设置默认值:DEFAULT 为该属性设置默认值
# 在int、char中:zerofill 不足位数默认填充0
#
#
2.常用数据类型
int #整型,4个字节 一般不需要指定宽度,(8):只是显示为8位,默认有负号设置无负号: unsigned
double #浮点型,例如double(5,2),标识最多5位,其中2位为小数,即最大为999.99
varchar #可变长度字符串类型。例如:varchar(10) 'aaa' 占3位
char #固定长度字符串类型。例如:char(10) 'aaa' 占10位
text #大文本字符串类型。
blob #字节类型。例如:
datetime #日期时间类型。例如:datetime(yyyy-MM-dd hh:mm:ss)
date #日期类型。例如:date(yyyy:MM:dd)
time #时间类型。例如:time(hh:mm:ss)
timestamp #时间戳类型。例如:timestamp(yyyy-MM-dd hh:mm:ss) 会自动赋值
enum #枚举 多选一 enum('male','female'),default为默认值
例如:sex enum('male','female') not null default 'male'
set #集合 多选多,可以选一个 set('read','DJ','DBJ','run')
注:字符串类型和时间类型都要用单引号括起来,空值为null
3.查看数据列表
show databases; -- 查看所有数据库
use 数据库名字
show create table 表名; -- 查看表的创建细节
desc 表名; -- 查看表结构
#CREATE DATABASE 数据库名
CREATE DATABASE Python_7;
CREATE DATABASE pyrhon_7 charset utf8
# 修改数据库编码
alter database db1 charset gbk;
删除数据库
#drop database 需要删除的数据库名
drop database 表名;
查看所有的存储引擎
show engines;
查看不同存储引擎存储表结构文件特点
create table t1(id int)engine=innodb; -- MySQL默认的存储引擎,支持事务,支持行锁,支持外键。有且只有一个主键,用来组织数据的依据
create table t2(id int)engine=myisam; -- 不支持事务,不支持外键,支持全文索引,处理速度快。
create table t3(id int)engine=blackhole; -- 黑洞,写入它的任何内容都会消失
create table t4(id int)engine=memory;-- 将表中的数据存储在内存中。表结构以文件存储于磁盘。
(这个黑洞引擎有点意思,有兴趣可以看一下我搜集整理的另一篇文章,传送门:
)
表相关:
创建表
create table class(
id INT PRIMARY KEY AUTO_INCREMENT,
name varchar(32) UNIQUE,
age varchar(32) NOT NULL
);
修改表本身
alter table 表名 add 字段名 类型(长度) [约束]; -- 添加列
alter table 表名 modify 字段名 类型(长度) [约束]; -- 修改列的类型长度及约束
alter table 表名 change 旧字段名 新字段名 类型(长度) [约束]; -- 修改列表名
alter table 表名 drop 字段名; -- 删除列
alter table 表名 character set 字符集; -- 修改表的字符集
rename table 表名 to 新表名; -- 修改表名
创建外键:
一对多(Foreign Key)
# foreign key(需要关联的本字段) references 需要关联对表的表(需要关联对表的字段)
#根据已有的表创建新表
**create table 新表 like 旧表 -- 使用旧表创建新表
create table 新表 as select 字段1 字段2... from definition only -- 使用自定义值去新建表**
数据相关
增加数据
insert into 表(字段名1,字段名2..) values(值1,值2..);-- 向表中插入某些列
insert into 表 values(值1,值2,值3..); -- 向表中插入所有列
删除数据
delete from 表名 -- 删除表中所有记录
delete from 表名 where 条件 -- 删除符合 where条件的数据
delete操作会删除数据,但会保留表结构,并且在之后需要时可以回滚数据。此外,delete操作还可以加一些其它的where条件,如上,比如删除确定的记录。
drop 操作会删除所有的数据以及表结构
-- 把表直接drop掉,重新建表,auto_increment将置为零。删除的数据不能找回。执行速度比delete快
TRUNCATE TABLE 语句用于删除表的所有数据(截断表)。其语句格式如下:
TRUNCATE TABLE <table_name>;
数据的简单查询
select * from 表名; -- 查询所有列
select 字段名1,字段名2,字段名3.. from 表名; -- 查询指定列
like 的用法
A:% 包含零个或多个字符的任意字符串:
1、like'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、like'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、like'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
B:_(下划线) 任何单个字符:
like'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
1,like'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
2、like'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
like'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
where 查询
# between 在...之间
select id,name from emp where id >= 3 and id <= 6;
相当于:
select * from emp where id between 3 and 6;
# or 或者
select * from emp where id >= 3 or id <= 6;
# in,后面可以跟多个值
select * from 表名 where 字段名 in (条件1,条件2,条件三);
group by
select 查询字段1,查询字段2,... from 表名
where 过滤条件
group by分组依据 # 分组后取出的是每个组的第一条数据
举几个例子明白:
max 最大值
# 每个部门的最高工资
select post,max(salary) from emp group by post;
# min 最小值
# 每个部门的最低工资
select post,min(salary) from emp group by post;
# avg 平均值
# 每个部门的平均工资
select post,avg(salary) from emp group by post;
# 每个部门的工资总和
# sum 求和
select post,sum(salary) from emp group by post;
# count(需要计数字段) 计数
# 每个部门的人数
select post,count(id) from emp group by post;
(实际应用中,count用的居多)
**having 过滤查询**
# having的语法格式与where一致,只不过having是在分组之后进行的过滤,即where虽然不能用聚合函数,但是having可以!
distinct 去重
# 对有重复的展示数据进行去重操作
select distinct 需取重字段 from 表名;
order by 排序
select * from emp order by salary asc; #默认升序排
select * from emp order by salary desc; #降序排
# 多条件排序
#先按照age降序排,在年轻相同的情况下再按照薪资升序排
select * from emp order by age desc,salary asc;
limit 限制展示条数
# 限制展示条数
select * from emp limit 3;
# 查询工资最高的人的详细信息
select * from emp order by salary desc limit 1;
# 分页显示
select * from emp limit 0,5; # 第一个参数表示起始位置,第二个参数表示的是条数,不是索引位置
select * from emp limit 5,5;
# 用法
select 查询字段1,查询字段2,... from 表名
where 过滤条件1
group by分组依据
having avg(过滤条件2) > 10000;
# like (见上18)
# char——length() 取字符长度
select * from 表名 where char_length(需要获取长度的字段名) = 4;
not 配合使用
表复制
复制表
create table t1 select * from test;
只复制表结构
create table t1 select * from test where 1=2;
感谢您的来访,获取更多精彩文章请收藏本站。
© 版权声明
THE END
暂无评论内容