字符串类型,长度可变,但是最大不能超过 n(初学万物皆可varchar)
精度较低的整数类型,直接当成int类型使用
浮点数类型
存储年,月,日的值,类似于C语言中的结构体或者面向对象中的类
语法:
create table table_name
(
列名1 + 列的类型,
列名2 + 列的类型,
列名3 + 列的类型,
……
);
我们需要创建一个名为hero
的表格,有上面表格中的五种属性
create table hero
(
hid varchar(255),
hname varchar(255),
Hsex varchar(255),
Hcareer varchar(255),
Hcamp varchar(255)
)
现在我们创建成功一个空的英雄表格
我们需要创建一个叫做weapon的表格,有表格中的四种属性
create table weapon
(
wid varchar(255),
wname varchar(255),
wcost smallint,
wtype varchar(255)
);
成功创建了一个空的武器表格
create table hero_weapon
(
hid varchar(255),
wid varchar(255),
fit_degree smallint
);
成功创建了一个空的英雄武器契合表格
语法:
我们在创建了一个空的表格以后,需要在表格上面添加数据
insert into + 表格名字
values('value1', 'value2', 'value3', 'value4')
每个value的值和类型都应该对应表格的属性
insert into hero
values('1001', '花木兰', '女', '战士', '长城守卫军')
insert into hero
values('1002', '铠', '男', '战士', '长城守卫军')
insert into hero
values('1003', '李白', '男', '刺客', '长安')
insert into hero
values('1004', '西施', '女', '法师', '稷下学院')
insert into hero
values('1005', '黄忠', '男', '射手', '蜀国')
insert into hero
values('1006', '不知火舞', '女', '法师', '东洋')
添加完成数据以后表格的模样如下:
hid hname Hsex Hcareer Hcamp
------ ------------ ------ ------- -----------------
1001 花木兰 女 战士 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
1006 不知火舞 女 法师 东洋
INSERT INTO weapon
VALUES('2001', '暗影战斧', 2090, '攻击')
INSERT INTO weapon
VALUES('2002', '不祥征兆', 2180, '防御')
INSERT INTO weapon
VALUES('2003', '回响之杖', 2100, '法术')
INSERT INTO weapon
VALUES('2004', '无尽战刃', 2140, '攻击')
INSERT INTO weapon
VALUES('2005', '极影', 1910, '辅助')
添加完成数据之后表格的模样如下:
wid wname wcost wtype
------ ------------ ------ --------
2001 暗影战斧 2090 攻击
2002 不祥征兆 2180 防御
2003 回响之杖 2100 法术
2004 无尽战刃 2140 攻击
2005 极影 1910 辅助
INSERT INTO hero_weapon
VALUES('1001', '2001', 95)
INSERT INTO hero_weapon
VALUES('1001', '2002', 80)
INSERT INTO hero_weapon
VALUES('1002', '2001', 90)
INSERT INTO hero_weapon
VALUES('1003', '2004', 70)
INSERT INTO hero_weapon
VALUES('1004', '2003', 80)
INSERT INTO hero_weapon
VALUES('1005', '2004', 99)
INSERT INTO hero_weapon
VALUES('1006', '2003', 100)
添加完成之后表格的数据如下:
hid wid fit_degree
------ ------ ------------
1001 2001 95
1001 2002 80
1002 2001 90
1003 2004 70
1004 2003 80
1005 2004 99
1006 2003 100
select 语句用来在数据库中挑选数据,挑选了之后,结果会被存在一张临时的表格中,这张表格叫做结果集
select 列名 + 列名 + ……
from 表名
select hname from hero
查询结果如下:
hname
--------------
花木兰
铠
李白
西施
黄忠
不知火舞
select hname, hcareer from hero
查询结果如下:
hname hcareer
------------ ---------
花木兰 战士
铠 战士
李白 刺客
西施 法师
黄忠 射手
不知火舞 法师
select * from hero
查询结果如下:
hid hname Hsex Hcareer Hcamp
------ ------------ ------ ------- -----------------
1001 花木兰 女 战士 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
1006 不知火舞 女 法师 东洋
distinct用于去重,当我们对英雄武器契合表进行查询的时候
select hid from hero_weapon
查询结果如下:
hid
--------
1001
1001
1002
1003
1004
1005
1006
我们发现会有重复的号码出现,为了让每个id只出现一次,我们需要使用distinct关键字
select distinct hid from hero_weapon
查询结果如下:
hid
--------
1001
1002
1003
1004
1005
1006
重复项都被去掉了
where用来提取满足条件的记录
语法:
select 列 + 列 + ……
from 表名
where 记录需要满足的条件
select hname
from hero
where hcamp = '长城守卫军'
查询结果为:
hname
-----------
花木兰
铠
select *
from weapon
where wcost < 2000
查询结果为:
wid wname wcost wtype
------ ------ ------ --------
2005 极影 1910 辅助
例1:查找不是长城守卫军的英雄信息
select *
from hero
where hcamp != '长城守卫军'
查找结果如下:
hid hname Hsex Hcareer Hcamp
------ ------------ ------ ------- --------------
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
1006 不知火舞 女 法师 东洋
例2:查找蜀国和东洋的英雄信息
#第一种写法
select *
from hero
where hcamp = '蜀国' or hcamp = '东洋'
# 第二种写法
select *
from hero
where hcamp in('蜀国', '东洋')
查找结果如下:
hid hname Hsex Hcareer Hcamp
------ ------------ ------ ------- --------
1005 黄忠 男 射手 蜀国
1006 不知火舞 女 法师 东洋
例3:查找长城守卫军的并且是女的英雄信息
select *
from hero
where hcamp = '长城守卫军' and hsex = '女'
查找结果如下:
hid hname Hsex Hcareer Hcamp
------ --------- ------ ------- -----------------
1001 花木兰 女 战士 长城守卫军
用来进行模糊查找,通常和通配符一起使用
例1 查找姓花的英雄的信息
select *
from hero
where hname like '花%'
查找结果如下:
hid hname Hsex Hcareer Hcamp
------ --------- ------ ------- -----------------
1001 花木兰 女 战士 长城守卫军
例2 查找名字是两个字的英雄
select *
from hero
where hname like '__'
查找结果如下:
hid hname Hsex Hcareer Hcamp
------ ------ ------ ------- --------------
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
order by 用来对结果集按照一个列或者多个列排序,默认按照升序进行排序,如果想要进行降序排序,需要使用desc关键字
select *
from 表名
order by 列1, 列2…… ASC|DESC
例1:将武器表格按照价格升序排序
select *
from weapon
order by wcost
程序输出为:
wid wname wcost wtype
------ ------------ ------ --------
2005 极影 1910 辅助
2001 暗影战斧 2090 攻击
2003 回响之杖 2100 法术
2004 无尽战刃 2140 攻击
2002 不祥征兆 2180 防御
例2:将武器按照价格降序排序
select *
from weapon
order by wcost desc
程序输出为:
wid wname wcost wtype
------ ------------ ------ --------
2002 不祥征兆 2180 防御
2004 无尽战刃 2140 攻击
2003 回响之杖 2100 法术
2001 暗影战斧 2090 攻击
2005 极影 1910 辅助
将一组逻辑语句封装在函数中,让我们的查询变得简单明了,在使用函数的时候,我们需要关系函数功能是什么,以及函数需要的参数
语法:
select AVG(列名) from 表格
返回一列的平均值
select avg(wcost) from weapon
查询结果为:
avg(wcost)
------------
2084.0000
语法:
select count(列名) from 表格
返回符合条件的列数
select count(hcamp)
from hero
where hcamp = '长城守卫军'
查询结果为:
count(hcamp)
--------------
2
select count(hid)
from hero
查询结果为:
count(hid)
------------
6
返回一列中的最大值
语法:
select max(列名) from 表名
select max( wcost) from weapon
查询结果为:
max(wcost)
------------
2180
返回一列中最小的值
语法:
select min(列名) from 表名
select min(wcost) from weapon
查询结果为:
min(wcost)
------------
1910
返回一列数值的总和
语法:
select sum(列名) from 表名
select sum(wcost) from weapon
查询结果为:
sum(wcost)
------------
10420
分组语句,优先级很高,常常和函数一起使用
语法:
select + 列名 + ……
from 表格
group by 列名1 + ……
select hcamp, count(hcamp)
from hero
group by hcamp
#首先按照阵营分组
#然后count()函数再统计每个分组Hcamp有多少个人
查询结果为
hcamp 人数
--------------- --------
长城守卫军 2
长安 1
稷下学院 1
蜀国 1
东洋 1
update 和 alter 的区别
update是用来针对表格中存的数据,alter是针对表格本身的
语法:
update 表明
set 列名 = 值
where 列名 = 值
update hero
set hcareer = '坦克'
where hname = '花木兰'
如果不加where条件判断,则hcarrer列会被全部修改成坦克
查询结果为:
hid hname Hsex Hcareer Hcamp
------ ------------ ------ ------- -----------------
1001 花木兰 女 坦克 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
1006 不知火舞 女 法师 东洋
delete用来删除数据库记录中的元组(行)
语法
delete from 表名
where 列名 = 值
delete from hero
where hname = '不知火舞'
查询结果如下:
hid hname Hsex Hcareer Hcamp
------ --------- ------ ------- -----------------
1001 花木兰 女 坦克 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
alter table 用来在已经拥有的表格中修改,增加,删除列
语法:
alter table 表名
add 列名 + 数据类型
alter table hero
add T varchar(255)
查询结果如下:
hid hname Hsex Hcareer Hcamp T
------ --------- ------ ------- --------------- --------
1001 花木兰 女 坦克 长城守卫军 (NULL)
1002 铠 男 战士 长城守卫军 (NULL)
1003 李白 男 刺客 长安 (NULL)
1004 西施 女 法师 稷下学院 (NULL)
1005 黄忠 男 射手 蜀国 (NULL)
语法:
alter table 表名
modify(alter) column + 列名 + 新数据类型
MySQL使用modify
SQL server使用alter
alter table hero
modify column T smallint
语法:
alter table 表名
rename column + 老列名 to 新列名
alter table hero
rename column T to gardient
查询结果为
hid hname Hsex Hcareer Hcamp gardient
------ --------- ------ ------- --------------- --------
1001 花木兰 女 坦克 长城守卫军 (NULL)
1002 铠 男 战士 长城守卫军 (NULL)
1003 李白 男 刺客 长安 (NULL)
1004 西施 女 法师 稷下学院 (NULL)
1005 黄忠 男 射手 蜀国 (NULL)
语法:
alter table 表名
drop column 列名
alter table hero
drop column gardient
查询结果为:
hid hname Hsex Hcareer Hcamp
------ --------- ------ ------- -----------------
1001 花木兰 女 坦克 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国
语法:
alter table 表名
drop column 列名
alter table hero
drop column gardient
查询结果为:
hid hname Hsex Hcareer Hcamp
------ --------- ------ ------- -----------------
1001 花木兰 女 坦克 长城守卫军
1002 铠 男 战士 长城守卫军
1003 李白 男 刺客 长安
1004 西施 女 法师 稷下学院
1005 黄忠 男 射手 蜀国