Mysql:sql语句(2)

打印 上一主题 下一主题

主题 861|帖子 861|积分 2593

下面我们要正式接触对数据的利用了,我们知道数据是被我们有序存放在数据表中的。对于数据,我们通常有四类利用:增长,删除,查找,修改,我们也称之为增删查改(CRUD),那么下面就让我们一一先容。
底子利用

增长

增长利用基本语法是如许的:
insert into 表名 values(值,值...);
通过这条语句我们就可以参加一行数据,其中括号中的每一个“值”要与我们的列名相对应,针对这一列进行赋值。 
举个例子吧,我们上篇文章成功的创建出了一个student表,它包罗姓名,学号,年事,班级四个属性,那么现在我们实验往其中增长一个门生的数据,例如张三18岁,在二班,学号101,我们就可以利用上面的语法,将每一个属性对应:
 insert into student values("张三",101,18,2);

那么我们可以看到结果,我们新增成功了,我们在表中纪录了张三同学的数据。
那么我们新增数据当然也有其他方式,好比我们可以指定列插入:
insert into 表名(列名,列名...) values(值,值...);
举个例子,学校新转来了李四同学,19岁,现在还没有分配班级和学号,那么我们就可以指定列插入,将我们未知的信息空出来:
insert into student(name,age) values("李四",19);

我们可以发现,我们指定的列都有了其对应的信息,而我们没有填充的列,都会自动填充一个空值(null),我们后面也可以对其进行修改。
下面我们来进行新增的末了一个方式,一次插入多行纪录。当我们面对多条纪录时,运用前面的方式一行一行插入显然服从太低,一次插入多行则更加快捷方便,具体的语法是如许的:
insert into 表名 values(值,值...),(值,值...);
这个不难懂白,我们也简单举个例子,现在我们直接一次插入三条门生的纪录:
insert into student values("王五",103,18,2),("赵六",104,19,2),("孙七",105,18,1);

我们可以看到同样也是添加成功。
其中我们要注意,在sql中,利用单引号/双引号均可以表示字符串。
当我们要插入datetime类型,可以是一个固定格式的字符串来表示日期时间(如:"2020-01-01 12:00:00"),如果想增长当前时间,sql提供了现成的函数now()。
以上就是我们增长的三种常用方式。
修改

下面我们先容修改的利用,修改的语法比较单一,也比较简单,我们将要运用update关键字,具体实现是如许的:
update 表名 set 列名=值 ,列=值... where 条件;
我们可以一次修改多个列,也可以仅仅修改一列,后面where之后的条件将会限制这次利用具体要修改哪几行的数据。简单来说,语句中的列可以明白为修改的位置的纵坐标,后面条件限制的是横坐标,由此来确定位置。
照旧举个简单的例子吧,现在李四同学已经转入了我们学校,学校决定将他分入二班,学号102,这时间我们就要进行修改,那么我们可以这么实现:
 update student set class=2,id=102 where name="李四";

我们通过name="李四"来确定修改的是李四这一行的纪录,之后对他的各种属性进行修改,这就是修改的基本利用。
扩展:条件

我们发现,在删除利用中我们运用了一个熟悉的运算符组成了表达式来看成条件,那么,sql中条件都能怎么写呢,我们来先容一些比较常见的。
1.运算符

起首是运算符,它与我们在编程语言中学过的运算符没有大的差异。
> 大于
<小于
>=大于等于
<=小于等于
!=不等于
<=>/= 等于。这个我们需要偏重说明一下,= 是null不安全的,<=> 是null安全的。当我们写下一个条件“null=null”,此时结果为null,返回false。而当我们利用<=>时,即“null<=>null”,这时结果会返回true。
2.各种语法

between A and B 范围匹配[A,B] 左闭右闭
option in(option1,option2,option3...),如果option是其中一个,就返回true
is null 是null
is not null 不是null
and和 or或 not非
3.运用like进行模糊匹配

% 代指任意个任意字符(0个也是任意个)
_ 代指任意一个字符
不知道各人有没有打过麻将大概扑克,这两个符号雷同于麻将中的混大概斗田主中的癞子。
例如我们要找一个名字两个的姓孙的人,我们可以这么设置条件:
where name like "孙_";
当我们不知道这个人名字有几个字,我们可以利用%进行模糊匹配:
where name like "孙%"/where name like "%孙%"/where name like "%孙"
以孙开头/包罗孙的/以孙结尾的
此处我们模糊查询的功能有限,在计算机中,还存在正则表达式来帮助我们,我们留到后面先容。
查询

下面就来到我们的一个重难点,查询。在sql中,查询的方式多种多样,在这里我们先重点讨论单表的查询。
全列查询

这是最简单的查询,我们前面讨论时,当我们展示结果时运用的就是全列查询。顾名思义,我们可以通过这条语句把整个表展示出来,即把全部行和全部列都查询出来,具体语法是如许的:
select * from 表名;
好比我们上面想查询上面student整个表,我们就可以写:
select * from student;

结果显而易见。
* 是通配符,可以代指全部列。
查询出来之后,服务器通过网络把数据返回给客户端。我们要注意,针对数据量比较大的生产情况,不能随便进行查询。
指定列查询

顾名思义,我们只查询指定列的相干信息,其余信息并不表现出来,具体语法是如许的:
select 列名,列名 from 表名;
这个应该很好明白,我们也演示一下,例如我们只查询门生的姓名和学号:
select name,id from student;

查询字段为表达式、为表达式起别名

这里我们先看一张新的表:

学校进行了一场考试,同学们的成绩分别对应学号纪录了下来,那么现在,我们想查询他们每个人的总分,我们有没有快捷的方式呢,这时我们可以将查询的列酿成表达式,具体语法是如许的:
select 表达式 from 表名;
如许看有些难懂,我们就举这个总分的例子吧:
select id,Chinese+Math+English from test;

我们可以看到结果,我们直接查询出了总分,可以明白为我们可以对列之间进行一定的计算,同时我们当然也可以对单个列进行计算,好比我们想让语文成绩集体减掉非常,我们可以这么利用:
select id,Chinese-10 from test;

这种利用也是答应的。
下面我们来先容别名,照旧上面这个表,我们查询出来了总分,它表现Chinese+Math+English,我感觉好丑,能不能直接称之为总分呢?当然是可以的,我们可以利用as 关键字对它赋予一个新的名字,可以称之为别名,具体表达式是如许的:
select 表达式 as 别名 from 表名;
带入,我们可以这么利用:
select id,Chinese+Math+English as Total from test;

如许就又美观又便捷了。
需要注意,我们这里查询出了结果,但并没有对原来的test表有任何的改变,查询出的结果都是暂时的。
去重

用distinct修饰的列会进行去重,值相同的只会保留一个,我们直接演示。
select distinct English from test;

我们通已往重去掉了一个88。
查询时排序

当我们在查询时要进行排序,我们需要确定两件事
1)针对谁人列作为比较规则
2)排序的时间是升序照旧降序
具体语法是如许的:
select 列名 from 表名 order by 列名 asc/desc;(asc和desc二选其一)
我们一点一点解释。
起首,order by 列名 代表指定某个列进行排序。
其次,asc代表按升序排序,desc代表按降序排序。
末了,asc/desc 可以省略不写,如果省略,就代表按升序排序。
我们要注意,我们是把查询到的结果进行排序,不改变原始数据。我们可以排多个列,如:order by Chinese,math 就是先按语文成绩排,如果语文成绩相同,就再按数学成绩进行排序。
现在,我们想针对门生的总分进行排序,给门生们排出名次,我们可以这么利用:
select id ,Chinese+Math+Englisgh as total from test order by total desc;

如许这个问题也就解决了。
条件查询

下面就来到我们最重要的条件查询,在这里,我们先给出查询的万能公式,当我们进行查询时,可以优先去套用:
select 列名 from 表名 where 条件 (order by);
我们可以发现,我们前面先容的几种方式无非是省略了条件。下面我们就进行演示,我们在这里多举几个例子吧。
1)我们要查询学号为103号同学的成绩
select id,Chinese,Math,English from test where id=103;
我们就可以增长如许的条件。
2)我们想查询102号同学的总分,并表现为“Total”
select id,Chinese+Math+English from test where id=102;

我们可以看到,查询时可以将前面的都进行团结。
分页查询

什么是分页查询呢?当我们进行全列查询,发现数据很多时,我们会很容易想到我们可不可以一次少看一点数据呢?只看前十个可不可以?看第二十个到第三十个行不行呢?答案是肯定的,这里我们就要运用分页查询,对查询出来的纪录数量进行限制。
这是我们进行分页查询的公式:
select 列名 from 表名 where 条件 order by 列名 limit A offset B;
其中A和B是两个整数,offset代表偏移量,而偏移量具体是多大为B,我们可以查询从第B条开始往后共A条数据,不加offset,则从0开始。
select * from test limit 1 offset 3;

结果就是如许的,这就是我们的分页查询,它可以有用的限制我们查询的纪录的数量,方便我们观察、利用,做出下一步动作。
删除

而末了的删除就很简单,我们直接看语法:
delete from 表名 where 条件/order by/limit;
想必我们都可以明白,当我们什么都不加,我们就是删除了整个表。注意,这里是删除了整个表中全部的数据,而不是删除了这个表,表本身仍旧存在,只不过空了。

我们可以看到,我们删除了student表中全部的数据,表仍旧可以被查询到,只是空了。
小结

这篇文章中,我们讨论了对于单表的增删查改。我们学会了对单表中的各种数据进行处置惩罚。
那么当我们遇到了多个表,我们该怎样进行利用呢?所以,下篇文章,我们将讨论遇到多表的各种情况。
那就先到这里吧。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表