认识mysql基本语法(非常全面)

时间:2018-08-21
本文章向大家介绍认识mysql基本语法(非常全面),需要的朋友可以参考一下


1、表字段的操作
1、语法 :alter table 表名 执行动作;
2、添加字段(add)
alter table 表名 add 字段名 数据类型;
alter table 表名 add 字段名 数据类型 first;
alter table 表名 add 字段名 数据类型 after 字段名;
3、删除字段(drop)
alter table 表名 drop 字段名;
4、修改数据类型(modify)
alter table 表名 modify 字段名 新数据类型;
5、表重命名(rename)
alter table 表名 rename 新表名;
6、练习
1、创建库 studb2
2、在库中创建表 t1 ,字段有3个:name、age、phnumber
use studb2;
create table t1(
name char(20),
age tinyint unsigned,
phnumber char(11)
);
3、查看表结构
desc t1;
4、在表中第一列添加一个 id 字段
alter table t1 add id int first;
5、把 phnumber 的数据类型改为 bigint
alter table t1 modify phnumber bigint;
6、在表中最后一列添加一个字段 address
alter table t1 add address varchar(50);
7、删除表中的 age 字段
alter table t1 drop age;
8、查看表结构
desc t1;
2、数据类型
1、数值类型
2、字符类型
1、字符类型宽度和数值类型宽度的区别
1、数值类型宽度为显示宽度,只用于select查询显示,和占用存储无关,可用zerofill查看效果
2、字符类型的宽度超过之后则无法存储
3、枚举类型
1、单选(enum) :字段名 enum(值1,值2,...)
2、多选(set) :字段名 set(值1,值2,...)
## 插入记录时: "F,study,Python"
create table t5(
id int(3) zerofill,
name varchar(15),
sex enum("M","F","Secret"),
likes set("F","M","study","Python")
);
insert into t5(likes) values("F,study,Python");
4、日期时间类型
1、date :"YYYY-MM-DD"
2、time :"HH:MM:SS"
3、datetime :"YYYY-MM-DD HH:MM:SS"
4、timestamp :"YYYY-MM-DD HH:MM:SS"
5、注意
1、datetime :不给值默认返回NULL值
2、timestamp :不给值默认返回系统当前时间
create table t7(
id int,
name varchar(15),
birthday date,
money int,
shijian datetime
);
insert into t7 values(2,"王",date(now()),10000,now());
3、日期时间函数
1、now() 返回服务器当前时间
2、curdate() 返回当前日期
3、curtime() 返回当前时间
4、year(date) 返回指定时间的年份
5、date(date) 返回指定时间的日期
6、time(date) 返回指定时间的时间
7、练习
1、在表中插入3条记录
insert into t7 values
(3,"小昭",19000520,3000,20180630000000),
(4,"赵敏",19000521,4000,20180702000000),
(5,"周芷若",19010522,3500,20180702100000);
2、查找2018年7月2日有哪些用户充值了
select * from t7 where date(shijian)="2018-07-02";

3、查找2018年7月份充值的信息
select * from t7
where
date(shijian)>="2018-07-01" and date(shijian)<="2018-07-31";

4、查找7月30日10:00-12:00充值的信息
select * from t7
where
date(shijian)="2018-07-31" and
time(shijian)>="10:00:00" and
time(shijian)<="12:00:00";
4、日期时间运算
1、语法格式
select * from 表名
where 字段名 运算符 (时间-interval 时间间隔单位);
时间间隔单位:
1 day | 2 hour | 1 minute | 2 year | 3 month
2、练习
1、查询1天以内的记录
select * from t7
where shijian > (now()-interval 1 day);
age > 20
2、查询1年以前的记录
select * from t7
where shijian < (now()-interval 1 year);
3、查询1天以前,3天以内的记录
select * from t7
where
shijian < (now()-interval 1 day) and
shijian > (now()-interval 3 day);
5、表记录管理
1、删除表记录
1、delete from 表名 where 条件;
2、注意
delete语句后如果不加where条件,所有记录全部清空
2、更新表记录
1、update 表名 set 字段1=值1,字段2=值2,... where 条件;
2、注意
必须加where条件
3、练习(表hero)
1、查找所有蜀国人的信息
select * from hero where country="蜀国";
2、查找所有女英雄的姓名、性别和国家
select name,sex,country from hero
where sex="女";
3、把id为2的记录改为典韦,性别男,国家魏国
update hero set name="典韦",sex="男",country="魏国" where id=2;
4、删除所有蜀国英雄
delete from hero where country="蜀国";
5、把貂蝉的国籍改为魏国
update hero set country="魏国"
where name="貂蝉";
6、删除所有表记录
delete from hero;
4、运算符操作
1、数值比较/字符比较
1、数值比较 := != > >= < <=
2、字符比较 := !=
3、练习
1、查找攻击力高于150的英雄的名字和攻击值
select name,gongji from sanguo where gongji>150;
2、将赵云的攻击力设置为360,防御力设置为68
update sanguo set gongji=360,fangyu=68
where name="赵云";
2、逻辑比较
1、and (两个或多个条件同时成立)
2、or (任意一个条件成立即可)
3、练习
1、找出攻击值高于200的蜀国英雄的名字、攻击力
select name as n,gongji as g from sanguo
where gongji>200 and country="蜀国";
2、将吴国英雄中攻击值为110的英雄的攻击值改为100,防御力改为60
update sanguo set gongji=100,fangyu=60
where country="吴国" and gongji=110;
3、查找蜀国和魏国的英雄信息
select * from sanguo
where country="蜀国" or country="魏国";
3、范围内比较
1、between 值1 and 值2
2、where 字段名 in(值1,值2,...)
3、where 字段名 not in(值1,值2,...)
4、练习
1、查找攻击值100-200的蜀国英雄信息
select * from sanguo
where gongji between 100 and 200 and
country="蜀国";
2、找到蜀国和吴国以外的国家的女英雄信息
select * from sanguo
where country not in("蜀国","吴国")
and sex="女";
3、找到id为1、3或5的蜀国英雄 和 貂蝉的信息
select * from sanguo
where
(id in(1,3,5) and country="蜀国") or name="貂蝉";
4、匹配空、非空
1、空 :where name is null
2、非空:where name is not null
3、示例
1、姓名为NULL值的蜀国女英雄信息
select * from sanguo
where
name is null and country="蜀国" and sex="女";
2、姓名为 "" 的英雄信息
select * from sanguo where name="";
4、注意
1、NULL :空值,只能用 is 或者 is not 去匹配
2、"" :空字符串,用 = 或者 != 去匹配
5、模糊比较
1、where 字段名 like 表达式
2、表达式
1、_ : 匹配单个字符
2、% : 匹配0到多个字符
3、示例
select name from sanguo where name like "_%_";
select name from sanguo where name like "%";
## NULL不会被统计,只能用is、is not去匹配
select name from sanguo where name like "___";
select name from sanguo where name like "赵%";
5、SQL查询
1、总结
3、select ...聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...;
2、order by
1、给查询结果进行排序
2、... order by 字段名 ASC/DESC
3、升序:ASC(默认)
降序:DESC
4、示例
1、将英雄按防御值从高到低排序

2、将蜀国英雄按攻击值从高到低排序

3、将魏蜀两国英雄中名字为三个字的按防御值升序排列
select * from sanguo
where
country in("蜀国","魏国") and name like "___"
order by fangyu ASC;

select * from sanguo
where
(country="魏国" or country="蜀国") and name like "___"
order by fangyu;
3、limit (永远放在SQL语句的最后写)
1、作用 :限制显示查询记录的个数
2、用法
1、limit n -> 显示 n 条记录
2、limit m,n
m 表示 从第m+1条记录开始显示,显示 n 条
limit 2,3 : 第 3、4、5 三条记录
3、示例
1、在蜀国英雄中,查找防御值倒数第二名至倒数第四名的英雄的记录
select * from sanguo
where country="蜀国"
order by fangyu asc
limit 1,3;
2、在蜀国英雄中,查找攻击值前3名且名字不为 NULL 的英雄的姓名、攻击值和国家
select name,gongji,country from sanguo
where
country="蜀国" and name is not NULL
order by gongji DESC
limit 3;
4、分页
每页显示5条记录,显示第4页的内容

第1页 :limit 0,5 # 1 2 3 4 5
第2页 :limit (2-1)*5,5 # 6 7 8 9 10
第3页 :limit (3-1)*5,5 # 11 12 13 14 15
第4页 :limit (4-1)*5,5 # 16 17 18 19 20

每页显示n条记录,显示第m页 :limit (m-1)*n,n
4、聚合函数
1、分类
avg(字段名) : 求该字段平均值
sum(字段名) : 求和
max(字段名) : 最大值
min(字段名) : 最小值
count(字段名) : 统计该字段记录的个数
2、示例
1、攻击力最强值是多少
select max(gongji) from MOSHOU.sanguo;
2、统计id 、name 两个字段分别有几条记录
select count(id),count(name) from sanguo;
## 空值 NULL 不会被统计,""会被统计

3、计算蜀国英雄的总攻击力
select sum(gongji) from MOSHOU.sanguo
where country="蜀国";
4、统计蜀国英雄中攻击值大于200的英雄的数量
select count(*) from MOSHOU.sanguo
where gongji>200 and country="蜀国";