mysql 数据库表操作

在数据库的表中,常见的数据类型:

| 类型      | 描述                                                         |

| --------- | ------------------------------------------------------ |

| int       | 整型,存储整数                                          |

| double    | 浮点型,存储小数<br />double(4,3): 这个小数最多只有4位,且有三位是小数部分 |

| char      | 字符串,在使用的时候需要定义长度<br />char(5): 每个数据占用固定的长度5 |

| varchar   | 字符串,在使用的时候需要定义长度<br />varchar(5): 长度可动态调整的,这里的5只是一个上限 |

| text      | 字符串,在使用的时候不需要指定长度                           |

| blob      | 字节类型                                                     |

| date      | 日期类型,格式是 yyyy-MM-dd                                  |

| time      | 时间类型,格式是 hh:mm:ss                                    |

| timestamp | 时间戳,格式是 yyyy-MM-dd hh:mm:ss,会自动赋值               |

| datetime  | 时间类型,格式是 yyyy-MM-dd hh:mm:ss                         |

 建表语句

create table 表名(字段1 数据类型, 字段2 数据类型);

查看表

show tables;       #查看所有的表

 show create table 表名;           # 查看某一张表的建表信息

desc 要查询的表名 ; 查询表的字段详情

删除表

 drop table t_score;                  # 删除t_score表

修改表

alter table t_score add brithday data;   #给 t_score表 添加一个 brethday字段 数据类型为 data

alter table t_score drop age;       #  删除 t_scroe表中的 age 字段

alter table t_score modify height int;    #为 t_score 表中的 height 字段 换为 int 类型

alter table t_score change height weigth int;   # 修改一个字段的名字(需要同时修改类型)

alter table t_scour character set gbk;    #修改 t_score 表中的字符集为gbk

alter table t_score rename t_user;    #修改 t_score表的名称为t_user

表中数据的增删改  DML

insert into t_student values('name',age,'male');为 t_student表中添加数据

insert into t_student (name,age,gender) values ('张三',18,‘男’),(‘李四’,23,‘女’) ;  #批量为表中添加数据

删除表 

delete from t_studeng;  #删除 t_studend 表 

truncate t_student;   #删除t_studend 表    效率高于 delete from

 删除指定条件的数据

delete from t_student where name='xiaoming';   #删除 t_student 表中 name='xiaoming'的数据

delete from t_student where gender not in('male', 'female');      #删除 t_student 表中 gender不是'male', 'female' 的数据  (人妖)

修改数据    update  修改表中的某些字段的值

1  基础修改,修改一个字段 update t_student set age=20 where name='xiaohui';  #修改t_student 表中 name='xiaohui' 的 age 修改为 20

2. 修改多个字段 update t_student set age = 10, gender = 'male', score = 90 where name = 'polly';

#修改t_student 表中 name='pollyi' 的 age 修改为 10    gender 改为 'male' score  改为 90


 条件子句,关键字where

# 作用:提供了一个条件,可以对一些数据操作进行一些数据筛选。

# = : 判断是否相等,类似于Java中的==

# != <> : 判断是否不相等

# >  <  >=  <= : 大小关系的判断

# between... and... : 判断是否在指定的范围之间

# in(set)   : 判断是否在指定的集合中存在

# is null : 判断是否是null

# and or not : 逻辑关系连接,与、或、非

# is not null      : 判断是否不是null

# not in(set) : 没有在指定的集合中存在


数据库表查询   DQL

1. 基础查询 [select 列名 from 表]   select name from t_score;

如果想要查询所有列,可以使用*替代列     select * from t_score;

 2. 条件查询

查询所有java不及格的学生姓名和全部的成绩    select * from t_score where java < 60;

查询所有的java不及格,并且mysql也不及格的全部信息

select * from t_score where java < 60 and mysql < 60;

查询所有的java成绩在80到90之间的学生信息 

select * from t_score where java between 80 and 90;

查询java成绩和mysql成绩差值大于10分的所有学生信息

select * from t_score where mysql - java > 10 or java - mysql > 10;

3 模糊查询   like

_: 通配符,匹配任意的字符,只能匹配一位

%: 通配符,匹配任意的字符,可以匹配多位

查询成绩表中所有姓张的学生信息    select * from t_score where name like '张%';

查询成绩表中所有姓张的,并且名字长度是3的学生信息 select * from t_score where name like '张__';(这里有两个下划线)

查询所有的mysql成绩是个位数的学生信息

select * from t_score where mysql like '_';

查询所有的hadoop成绩大于90分的学生信息

select * from t_score where hadoop like '9_';

# 查询所有的linux成绩尾数为8的学生信息

select * from t_score where linux like '%8';

查询结果去重

关键字distinct,使用distinct修饰的字段,会进行去重

但是,distinct只能放在紧跟在select后面的位置,不能写在其他字段之后

distinct后面如果有多个字段,会根据多个字段去重:每一个字段的值都相同,才会认为是重复的值

查询所有人的所有hadoop成绩,查询结果按照成绩去重

select distinct hadoop from t_score;


给列起别名 

按照 姓名  Java 成绩  ...... 显示 表

select name as '姓名', java as 'Java成绩', mysql, linux, hadoop from t_score;

as 关键字可以省略

列之间的计算

需求:查询表中的所有人的所有成绩和总成绩

select *, java+mysql+linux+hadoop as '总成绩' from t_score;

# 列之间的相加注意事项: NULL值和任意的值相加,结果都是NULL。

# ifnull(列, 值): 如果指定列的值是NULL,则按照指定的值处理

select *, java+mysql+ifnull(linux,0)+hadoop as '总成绩' from t_score;

查询结果排序: 将查询的结果,按照一定的大小关系进行排列。

在查询语句的最后方,添加 order by

order by 默认是按照指定的列进行升序排序,如果需要降序,则在最后添加一个 desc

注:升序排序,也可以在字段后面添加一个asc)

select *, java+mysql+ifnull(linux,0)+hadoop as '总成绩' from t_score order by java asc;#按照 java成绩升序排序

select *, java+mysql+ifnull(linux,0)+hadoop as '总成绩' from t_score order by java+mysql+ifnull(linux,0)+hadoop desc;   #按照总成绩做降序


 
聚合函数      在查询到的所有的结果中,可以使用聚合函数,对某些数据进行一些操作

重点: 聚合函数,是作用于列。是做纵向计算的。

# count() : 计算数量,但是不会计算NULL。

#    sum() : 计算总和

#    avg() : 计算平均值

#    max()   : 计算最大值

#    min() : 计算最小值

# 需求1: 统计这张表中有多少学生

select count(name) from t_score;


需求2: 统计有多少人的MySQL成绩及格

select count(MySQL) from t_score where MySQL>=60;

需求3: 计算linux成绩的总和

select sum(Linux) from t_score;

需求4: 计算hadoop成绩的平均值

select avg(hadoop) from t_score;

需求5: 计算Java成绩的最高分和最低分

select max(java), min(java) from t_score;

分组查询

可以将查询的结果,按照某一个字段进行分组,当这个字段的值相同的时候,这些数据视为一个分组。

给t_score表添加一个字段 group

alter table t_score add `group` int;

查询每一个分组中有多少人

select `group`,count(`name`)from t_score group by `group`;

查询1组中有多少人

select `group`, count(`name`) from t_score where `group`=1 group by`group` ;

# 需求2: 查询每一个分组的java平均值

select `group`,avg(java)from t_score broup by `group`

# 需求4: 计算每一个分组中,分别有多少人的java不及格

select `group`, count(`name`) from t_score where java < 60 group by `group`;

# 需求5: 计算每一个分组的人数、java平均成绩和linux总成绩

select `group`, count(`name`), avg(java), sum(linux) from t_score group by `group`;


having

和where是比较相似的。都是做的条件过滤。

having和where的区别:  1. where要写到分组之前,过滤是发生在分组前的。having要写在分组之后,对分组后的数据进行过滤的。

2where子句中不允许使用聚合函数。having后是可以使用聚合函数的

需求: 查询所有的java平均分小于80分的分组id和java平均分

select `group`, avg(java) from t_score group by `group` having avg(java) < 80;

             分页    可以将查询到的数据分成若干页。

limit    limit需要两个参数: 第一个参数,代表从第几个数据开始查询 第二个参数,代表每一页要查询多少个数据


select * from t_score limit 3, 2;

# 分页,可以分为真分页和假分页。

#    真分页: 从数据库中查询数据的时候,将数据分段读取。又叫做物理分页。

#    假分页: 直接从数据库中查询到所有的数据,在程序中进行逻辑处理。又叫做逻辑分页。

#    假分页优点: 效率高。

#    假分页缺点: 如果数据量过大,会出现内存溢出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [toc] 1、创建表 InnoDB 支持事务回滚,原子性操作 myisam 不支持事务,但速度快 是否可以为空 ...
    go以恒阅读 271评论 0 1
  • 一、数据库系统 数据库DataBase【DB】,指的是长期保存到计算机上的数据,按照一定顺序组织,可以被各种用户或...
    EndEvent阅读 1,924评论 2 3
  • 一、数据库系统 数据库DataBase【DB】,指的是长期保存到计算机上的数据,按照一定顺序组织,可以被各种用户或...
    fly5阅读 397评论 0 0
  • 一、数据库系统 数据库DataBase【DB】,指的是长期保存到计算机上的数据,按照一定顺序组织,可以被各种用户或...
    王梓懿_1fbc阅读 559评论 0 0
  • 第13节 如梦初醒 明汐招呼人走了,我看了看付小雅:“你要不要紧?” 付小雅怔怔的看着我,...
    困困bear阅读 278评论 1 2