SQL语句之行操作

您所在的位置:网站首页 sqlserver增加一条数据 SQL语句之行操作

SQL语句之行操作

2023-05-12 05:02| 来源: 网络整理| 查看: 265

 

  SQL语句系列

1、SQL语句之行操作

2、SQL语句之表操作

3、SQL语句之数据库操作

4、SQL语句之用户管理

  关系型数据库的存储形式

  

  在关系型数据库中,数据都是以类似于Excel表格的形式存储(如下图),我们将“列名”称作“字段”,一条数据指一行存储的信息,对这一行的数据主要的操作有“增(insert)、删(delete)、改(update)、查(select)”。

  以上就是数据库中的一张表,一共5行,两个字段(nid、name),接下来要介绍如何再添加新的一行数据,如何删除、更改以及查询已有的数据。

 

  行操作——增

 

  增加数据主要用到的语句是insert into…… values…… ,一共有三种插入的方式:

  如果想跟着我一起操作,可先在自己的数据库中执行以下操作(复制命令执行即可,语句含义会在稍后讲解):

 

SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `test` -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `nid` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`nid`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `test` -- ---------------------------- BEGIN; INSERT INTO `test` VALUES ('1', '小李'), ('2', '小花'), ('3', '小陈'), ('4', '小妞'), ('5', '小红'); COMMIT; -- ---------------------------- -- Table structure for `test2` -- ---------------------------- DROP TABLE IF EXISTS `test2`; CREATE TABLE `test2` ( `nid` int(11) NOT NULL AUTO_INCREMENT, `age` int(11) NOT NULL, PRIMARY KEY (`nid`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `test2` -- ---------------------------- BEGIN; INSERT INTO `test2` VALUES ('1', '22'), ('2', '34'), ('3', '45'), ('4', '23'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;

 

(1)插入一行数据 (“--”后面跟注释,程序不会运行之后的内容)

 

insert into 表(字段名,字段名……) values (值,值……); --SQL语句规定每条命令末尾必须加分号(;) --如下图使用 : insert into test(name) values ("新插入1");   --该语句在test表中插入了一条“name”字段为“新插入1”的数据   --至于为什么明明没有插入”nid“这个字段,但其却自动填充了6,这个后面会讲。 select * from test; --查看有没有插进去

 

 

(2)插入多行数据(values后面每条数据之间用逗号“,”隔开即可)

 

insert into 表(字段名,字段名……) values (值,值……),(值,值……),(值,值……),(值,值……),(值,值……)……; 如下图使用 insert into test(name) values ("新插入2"), ("新插入3"), ("新插入4"), ("新插入5"), ("新插入6"), ("新插入7"), ("新插入8"); select * from test; --查看有没有插入成功

 

 

(3)从另外一个表中插入数据

 

insert into 表1(表1字段名,表1字段名……) select 表2字段名,表2字段名…… from 表2

  

  select……from……语句是查询语句,这里的意思是将从表2查询出的字段插入到表1中,例如,我可以用下面的语句将test中的所有数据再重新插入进test这个表中:

 

insert into test(name) select name from test; select * from test; --查看是否成功

 

 

  这个语句可能在你的电脑上实验的时候会遇到问题,造成问题的原因绝大多数可能是字段的数据类型不符合要求。例如,要将表2中的name列插入到表1中的age列中,由于name是varchar类型,而age是int类型,varchar类型无法转换成int类型,所以程序报错。

 

insert test2(age) select name from test; --将test中的name插入到test2中的age

 

 

  但是如果将age列插入到name列中程序不会报错,因为int类型可以转换成varchar类型。

 

insert test(name) select age from test2;  --将test2中的age插入到test中的name select * from test limit 26,5; --只查看最后几条是否成功

 

 

  行操作——删

 

  删除命令比较简单,delete from 表,不过如果你运行以下语句,便会发现一个意外的结果

 

delete from test2; select * from test2; --查看是否删除成功

 

 

  发现test2中的数据被全部清空了,那如果我们需要单独删除某一行数据呢?这就需要用到条件语句,只删除满足条件的行:

  

delete from 表 where 字段名=XXX; --删除某字段等于XXX的行 也可以删除大于、小于、不等于(>、< 、!=)XXX的行 delete from 表 where 字段名 in (XXX, CCC, VVV) ; --删除某字段在(XXX, CCC, VVV)中的行,也可用 not in ( )删除不在里面的行      --例如,删除test表中nid为1,3,5,7的行    delete from test where nid in (1,3,5,7); delete from 表 where 字段名 between a and b; --删除某字段位于a和b之间的行,当然也有 not between and; --例如,删除test表中nid在16到32之间的行:    delete from test where nid between 16 and 32; --记住,nid为16和32的行也会被删除 --另外 SQL语句用and、or、not分别表示且、或、非的关系,用以连接多个条件 --例如,我想删除test表中name为“小花”,且nid等于15的行: delete from test where name ="小花" and nid=15; --运行以上例子的命令后,test里面的数据如下:

 

 

  行操作——改

 

  改的操作使用update  set 命令,和删除命令类似,也需要添加条件语句,不然会修改所有的行:

 

update 表 set 字段名 = “XXX” where 条件语句; --例如,将test中nid大于11的行的name全部修改: update test set name="修改的行" where nid>11; --结果如下

 

 

  行操作——查 

 

  讲完以上内容再讲“查”就显得轻松很多了,查找的命令结构为 select   from ,后面也可跟where、order by、limit等语句。

   

  1、一般查找

 

select 字段名1,字段名2 from 表 --查找全部行 --例如:查找test表中的name和nid字段 select name,nid from test; -- 你会发现列的顺序和之前不一样了,name在前,这与你写的命令一致 select * from test; --也可用*来代替所有的列 select 字段名1,字段名2 from 表 where 条件语句 --查找满足条件的行 --例如:查找nid等于4的行     select * from test where nid=4; select 字段名1,字段名2 from 表 limit 6; --表示只返回前6条结果 --例如: select * from test where nid>4 limit 6 ; --limit 一般写在where后面 select 字段名1,字段名2 from 表 limit 2,4; --表示从第3条数据开始,返回后面的4条 --例如 select * from test limit 2,4; --暂时理解不了的可以对比不加limit的情况 select 字段名1,字段名2 from 表 order by 字段2; --按照字段2升序 --order by 字段2 asc (升序)(asc可以省略) --order by 字段2 desc (降序) --例如: select * from test order by nid desc; --按照nid降序 --也可按照多个字段排序,例如,先按照name升序,再按照nid降序 select * from test order by name asc,nid desc ;

  

  查找命令的实验结果我就不一一贴图了。

 

  2、模糊查找

  

--模糊查找 使用like语句这里只简单讲解通配符"_"和"%"的用法 select * from test where name like "小_"; --"_"表示任意一个字符,本语句表示查找name为两个字符且以“小”开头的行

 

 

select * from test where nid like "%2"; --“%”表示任意多个字符,这里表示只要以2结尾的nid,不管2前面有几个字符

 

 

  关于模糊查找的更多内容我会在之后的博文中整理出来,这里只先记住“_”和“%”的用法。不过千万别认为SQL中通配符的内容较少,果真要全部掌握的话,还是需要花不少精力。

 

  行操作——小结

 

  总的来说,“增删改查”是SQL语句中有关行的基本操作,我最初学数据库时,以为学了这么一大堆命令就足以应对需求了,可是现实压根不允许你停下学习的脚步。在之后的博文中,我会更进一步的讲解表操作。表操作不仅仅涉及单个表,而且涉及多个表的联表操作,这部分内容会很绕,然而却正是现实应用中需要掌握的核心内容。

  另外,在学习之初,为了不将各个命令混淆,建议大家学一个命令就要弄清楚它究竟是行级别还是表级别的操作,例如delete可以删除表内的所有行,truncate也可以,但是delete是“行”级别的操作,而truncate table是“表”级别的操作,所以delete无法使自增列(稍后会讲)重新回到1,但是truncate table命令却会使其重新回到1;这是因为delete是行级别操作,无法改变整个表的结构,而truncate table却可以改变。

  

  希望同志之人都能持之以恒,不负初心。

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3