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;

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

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

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

#    假分页优点: 效率高。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

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