数据库SQL语句基础

数据库SQL语句(基础用法)

文章目录

  • 数据库SQL语句(基础用法)
    • 1. SQL数据类型(常用的几个)
      • 1.1 varchar(n)
      • 1.2 smallint
      • 1.3 float
      • 1.4 date
    • 2. 创建一个数据库
      • 2.1 用到的表格
        • 2.1.1 英雄表
        • 2.1.2 武器表
        • 2.1.3 英雄武器契合表
      • 2.2 创建一张表格
        • 2.2.1 创建英雄表格
        • 2.2.2 创建武器表格
        • 2.2.3 创建英雄武器契合表格
      • 2.3 往表格中插入数据
        • 2.3.1 英雄表格添加数据
        • 2.3.2 武器表格添加数据
        • 2.3.3 英雄武器契合表添加数据
    • 3. 数据库的查找(基础)
      • 3.1 select语句
        • 3.1.1 select 语法
        • 3.1.2 distinct关键字
      • 3.2 where 子句
        • 3.2.1 where子句语法
        • 3.2.2 常用的比较运算符
        • 3.2.3 常用的逻辑运算符
      • 3.3 like关键字
        • 3.3.1 作用
      • 3.4 order by 关键字
        • 3.4.1 order by语法
    • 4. 常见的函数
      • 4.1 AVG函数
      • 4.2 count(_val)函数
      • 4.3 max()函数
      • 4.4 min()函数
      • 4.5 sum()函数
      • 4.6 Group by 语句
    • 5. 数据库的修改
      • 5.1 update
      • 5.2 delete
      • 5.3 alter table
        • 5.3.1 在表格中添加一列
        • 5.3.2 在表格中修改列的属性
        • 5.3.3 修改列的名字
        • 5.3.4 删除列
        • 5.3.4 删除列

前言,在学习Sql语句的时候,首先要弄清楚数据库和表格的概念,数据库就像一个一个的仓库,而表格就像仓库里面的一个个集装箱

1. SQL数据类型(常用的几个)

1.1 varchar(n)

字符串类型,长度可变,但是最大不能超过 n(初学万物皆可varchar)

1.2 smallint

精度较低的整数类型,直接当成int类型使用

1.3 float

浮点数类型

1.4 date

存储年,月,日的值,类似于C语言中的结构体或者面向对象中的类

2. 创建一个数据库

2.1 用到的表格

2.1.1 英雄表

数据库SQL语句基础_第1张图片

2.1.2 武器表

数据库SQL语句基础_第2张图片

2.1.3 英雄武器契合表

数据库SQL语句基础_第3张图片

2.2 创建一张表格

语法:

create table table_name
(
    列名1 + 列的类型, 
    列名2 + 列的类型,
    列名3 + 列的类型,
    ……
);

2.2.1 创建英雄表格

我们需要创建一个名为hero的表格,有上面表格中的五种属性

create table hero
(
    hid varchar(255), 
    hname varchar(255),
    Hsex varchar(255), 
    Hcareer varchar(255),
    Hcamp varchar(255)
)

现在我们创建成功一个空的英雄表格

2.2.2 创建武器表格

我们需要创建一个叫做weapon的表格,有表格中的四种属性

create table weapon
(
    wid varchar(255),
    wname varchar(255),
    wcost smallint,
    wtype varchar(255)
);

成功创建了一个空的武器表格

2.2.3 创建英雄武器契合表格

create table hero_weapon
(
    hid varchar(255),
    wid varchar(255),
    fit_degree smallint
);

成功创建了一个空的英雄武器契合表格

2.3 往表格中插入数据

语法:

我们在创建了一个空的表格以后,需要在表格上面添加数据

insert into  + 表格名字
values('value1', 'value2', 'value3', 'value4') 

每个value的值和类型都应该对应表格的属性

2.3.1 英雄表格添加数据

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    不知火舞          女       法师       东洋    

2.3.2 武器表格添加数据

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  辅助  

2.3.3 英雄武器契合表添加数据

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

3. 数据库的查找(基础)

3.1 select语句

select 语句用来在数据库中挑选数据,挑选了之后,结果会被存在一张临时的表格中,这张表格叫做结果集

3.1.1 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    不知火舞          女       法师       东洋 

3.1.2 distinct关键字

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  

重复项都被去掉了

3.2 where 子句

3.2.1 where子句语法

where用来提取满足条件的记录

语法:

select++ ……
from 表名
where 记录需要满足的条件
  • 查找长城守卫军的英雄名称
select hname
from hero
where hcamp = '长城守卫军'

查询结果为:

hname      
-----------
花木兰  
铠        
  • 查找武器表格中价格低于2000的武器信息
select * 
from weapon
where wcost < 2000

查询结果为:

wid     wname    wcost  wtype   
------  ------  ------  --------
2005    极影        1910  辅助  

3.2.2 常用的比较运算符

  • = (等于)
  • <> 或者 != (不等于)
  • > (大于)
  • < (小于)
  • >= (大于等于)
  • <= (小于等于)
  • between (在某个范围内)
  • like (搜索模糊的对象)
  • in (指特定的范围)

3.2.3 常用的逻辑运算符

  • not (非)
  • or (或者)
  • and (并且)

例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    花木兰        女       战士       长城守卫军

3.3 like关键字

3.3.1 作用

用来进行模糊查找,通常和通配符一起使用

  • %号,能够替换多个字符
  • _号,能够替换一个字符

例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    黄忠      男       射手       蜀国        

3.4 order by 关键字

order by 用来对结果集按照一个列或者多个列排序,默认按照升序进行排序,如果想要进行降序排序,需要使用desc关键字

3.4.1 order by语法

select * 
from 表名
order by1,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  辅助  

4. 常见的函数

将一组逻辑语句封装在函数中,让我们的查询变得简单明了,在使用函数的时候,我们需要关系函数功能是什么,以及函数需要的参数

4.1 AVG函数

语法:

select AVG(列名) from 表格

返回一列的平均值

  • 查询武器表格中所有武器价格的平均值
select avg(wcost) from weapon

查询结果为:

avg(wcost)  
------------
   2084.0000

4.2 count(_val)函数

语法:

select count(列名) from 表格

返回符合条件的列数

  • 返回英雄表格中长城守卫军的人数
select count(hcamp)
from hero
where hcamp = '长城守卫军'

查询结果为:

count(hcamp)  
--------------
             2
  • 返回一有多少个英雄在英雄表格中
select count(hid)
from hero

查询结果为:

count(hid)  
------------
           6

4.3 max()函数

返回一列中的最大值

语法:

select max(列名) from 表名 
  • 查询武器表格中价格最贵的武器价格
select max( wcost) from weapon

查询结果为:

max(wcost)  
------------
     2180

4.4 min()函数

返回一列中最小的值

语法:

select min(列名) from 表名
  • 查询武器表格中价格最便宜的武器价格
select min(wcost) from weapon

查询结果为:

min(wcost)  
------------
        1910

4.5 sum()函数

返回一列数值的总和

语法:

select sum(列名) from 表名
  • 查询购买所有的武器一共需要花费多少钱
select sum(wcost) from weapon

查询结果为:

sum(wcost)  
------------
       10420

4.6 Group by 语句

分组语句,优先级很高,常常和函数一起使用

语法:

select + 列名 + ……
from 表格
group by 列名1 + ……
  • 统计英雄表格中每个阵营有多少人
select hcamp, count(hcamp)
from hero
group by hcamp
#首先按照阵营分组
#然后count()函数再统计每个分组Hcamp有多少个人

查询结果为

hcamp            人数  
---------------  --------
长城守卫军                   2
长安                      1
稷下学院                    1
蜀国                      1
东洋                      1

5. 数据库的修改

5.1 update

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    不知火舞          女       法师       东洋 

5.2 delete

delete用来删除数据库记录中的元组(行)

语法

delete from 表名
where 列名 =
  • 删除表格中的英雄不知火舞
delete from hero
where hname = '不知火舞'

查询结果如下:

hid     hname      Hsex    Hcareer  Hcamp            
------  ---------  ------  -------  -----------------
1001    花木兰        女       坦克       长城守卫军  
1002    铠          男       战士       长城守卫军  
1003    李白         男       刺客       长安           
1004    西施         女       法师       稷下学院     
1005    黄忠         男       射手       蜀国 

5.3 alter table

alter table 用来在已经拥有的表格中修改,增加,删除列

5.3.1 在表格中添加一列

语法:

alter table 表名
add 列名 + 数据类型
  • 在英雄表格中添加属性——英雄强度梯度(T)
alter table hero
add T varchar(255) 

查询结果如下:

hid     hname      Hsex    Hcareer  Hcamp            T       
------  ---------  ------  -------  ---------------  --------
1001    花木兰        女       坦克       长城守卫军            (NULL)  
1002    铠          男       战士       长城守卫军            (NULL)  
1003    李白         男       刺客       长安               (NULL)  
1004    西施         女       法师       稷下学院             (NULL)  
1005    黄忠         男       射手       蜀国               (NULL) 

5.3.2 在表格中修改列的属性

语法:

alter table 表名
modify(alter) column + 列名 + 新数据类型

MySQL使用modify

SQL server使用alter

  • 把英雄强度梯度改成smallint类型
alter table hero
modify column T smallint

5.3.3 修改列的名字

语法:

alter table 表名
rename column + 老列名 to 新列名
  • 把英雄强度梯度的名字T改成 gradient
alter table hero
rename column T to gardient

查询结果为

hid     hname      Hsex    Hcareer  Hcamp            gardient     
------  ---------  ------  -------  ---------------  --------  
1001    花木兰        女       坦克       长城守卫军     (NULL)       
1002    铠          男       战士       长城守卫军       (NULL)       
1003    李白         男       刺客       长安            (NULL)        
1004    西施         女       法师       稷下学院         (NULL)  
1005    黄忠         男       射手       蜀国            (NULL)  

5.3.4 删除列

语法:

alter table 表名
drop column 列名
  • 删除英雄强度梯度列
alter table hero
drop column gardient

查询结果为:

hid     hname      Hsex    Hcareer  Hcamp            
------  ---------  ------  -------  -----------------
1001    花木兰        女       坦克       长城守卫军  
1002    铠          男       战士       长城守卫军  
1003    李白         男       刺客       长安           
1004    西施         女       法师       稷下学院     
1005    黄忠         男       射手       蜀国  

5.3.4 删除列

语法:

alter table 表名
drop column 列名
  • 删除英雄强度梯度列
alter table hero
drop column gardient

查询结果为:

hid     hname      Hsex    Hcareer  Hcamp            
------  ---------  ------  -------  -----------------
1001    花木兰        女       坦克       长城守卫军  
1002    铠          男       战士       长城守卫军  
1003    李白         男       刺客       长安           
1004    西施         女       法师       稷下学院     
1005    黄忠         男       射手       蜀国  

你可能感兴趣的:(数据库学习笔记,数据库)