数据库之表的增删查改(上)

数据库的重要操作就是表的增删查改(CURD)

先带领大家认识几个单词:

C create 本义创建,但就是新增的意思嘛。

U update本义更新,即修改的意思。

R retrieve本义检索,即查询的意思。

D delete本义删除,就取原义删除。


一·新增(create):

1.插入完整行数据语法:insert into 表名 values(列 列 列...)

提示:values后面()中的内容,个数以及类型和表的结构必须匹配。

 我们可以看到,在创建教师这个表的时候,我们依次设定了名字和id,在使用insert进行插入时,也要一次设置名字和id才可以插入成功。

注意:插入也是有效率之分的,一个一个插入肯定不如一次性插入效率高,就好比你嗑瓜子,你嗑一次就吐一次皮和嗑一会儿攒一攒一起扔掉哪个更方便呢?所以我们在此也可以同时插入多行。我用荧光笔给大家标注了出来。

 其次,我们除了可以完整的插入一整行数据,我们也可以指定列去插入,那么其他列将使用默认值来填充。此处的Default就是我们对应字段的默认值。

 

2.指定列插入语法: insert into 表名(列名)values(对应的数据类型);

 大家可以看到,我们指定id列进行了插入,而name列当中,未插入的值我们就用NULL来填充。


二.查询(select)

查询时增删查改当中最复杂的操作,变幻多端,深不可测。增删改的操作基本固定,没有什么难度,但是查询是非常灵活多变的。我们今天只介绍基本的查询操作。

1.全列查询:语法 select * from 表名

解释:此处的select是关键字语法,*是通配符,无论有多少列多少行,都可以用通配符来表示,看到此大家也肯定会想到是不是可以替换*进行指定列的查询呢?答案是当然可以,我们稍后揭晓答案~

我们仍然用上图来给大家体现全列查询~

注意:当前我们的数据库没有多少数据,大家可以进行全列查询,但是当我们工作后,如果表格中数据非常多,如银行卡用户,学生姓名表,如果此时进行全列查询,资源(包括但不限于内存,CPU资源,等等)会被占满,到时候会对程序造成严重影响。

2.指定列的查询:语法 select 列的名字 from 表名

 3.查询列为"表达式",在查询的过程中,进行一个简单的计算(列与列之间)

语法:select 列名,表达式(可以增加多列多个表达式,之间必须要有,分隔)from 表名

说明:(1).以上的select查询,仅仅是查询,无论如何去组合,如何去操作,都不会修改硬盘上的数据。 (2).使用查询的时候,我们看到的表格都是临时表,不会修改原表中的数据。

 4.给查询结果的列指定别名:

在3.地基础上,我们查询英语和数学的总分时,我们可以给英语数学成绩的总和起一个别名。

大家可以看到,我将英语数学的总成绩写成了一个列表total;


5.查询之排序

上面我们介绍了查询的一些基本操作,但在查询的基础上,我们还可以进行排序。排序也是日常生活中经常会用到的,成绩表格,员工业绩,博客排行榜之类的。

(1).运用关键字order by进行排序,如果未作说明,则默认是升序排列;

在order by 后面加上desc就成了降序排名。

如图,我们按照英语成绩从低到高,进行了排序。

同样的方法,我们按照总分从低到高,升序排序 ,而且此处我们才用起别名的方式来进行排序。

 (2).注意:如果比较的队列当中有NULL,那么NULL就会被认为是最小的值,千万不要把NULL理解成是数值0。如图我们也可以看到,进行升序排列时,Null是最小的数!

 同样的,我们知道我们排序也可以针对表达式/别名来进行,而且NULL和任何值进行运算,他的值仍然是NULL。即使name为null的一行,english有分数,math为Null,相加后仍然为NULL;

 (3)排序还可以指定多个列来进行排序(更复杂的比较规则)

排序指定多个列排序的时候,先以第一个列为标准进行排序,如果第一个列值是相同的那么就来比较第二个列以此类推。如图可见,张海明,王复明的英语分数是相同的,则排名时按数学高低进行排序。同样地我们观察到江一生的数学虽然高于张海明,但是优先用英语排序,因此张海明排名高于江一生。

 (4)使用关键字distinct进行去重:

distinct去重的时候,可以单个列进行去重,也可以多列进行去重,但是要注意的是,必须是指定的所有列相同的时候才可以去重。

查询的总结:

1.全列查询:select * from 表名;

2.指定列查询 select 列名字 from 表名字;

3.带表达式的查询 select 列名/表达式 from 表名;(如果有多个列或者表达式,之间需要用,分割);

4.带别名的查询 select 列名/表达式 as 别名 from 表名;

5.去重查询 select distinct 列名 from 表名;

6.排序 select 列名/表达式 order by 列名,表达式,别名 asc(默认升序排序)/desc(降序排序)


7.条件查询:

以上的查询,我们只是进行了初步的查询或者排序操作,但是想要让查询的范围更小更精准,我们就需要用条件来限制查询的范围。

而要想描述条件,我们就要有一些关系运算符以及逻辑运算符

运算符说明
>,>=,<,<=大于,大于等于,小于,小于等于
=等于,null不安全,比如null=null结果仍为null
<=>等于,null安全,比如 null<=>null结果为TRUE(1)
!=,<>不等于
BETWEEN a0 and a1给定范围区间[a0,a1],如果a0<=value<=a1,返回TRUE(1)
IN(options)如果是options 中的一个,则返回true(1);
IS NULL为NULL
IS NOT NULL不为空
LIKE模糊匹配,%表示任意多个任意字符;_表示一个字符

运算符:

运算符说明
and&&
or||
not!

接下来,我用举一些例子为大家演示:

(1).查询英语及格且数学成绩在八十分(包括八十分)一下的同学

 (2).查询英语不及格或者英语成绩为NULL 的同学

(3).查询英语成绩在[80,90]分的同学

 


 8.简单的对%以及_的使用进行举例(模糊匹配)

%是可以表示任意字符,如下图,以王开头的都可以表示出来;

_只可以表示一个字符,如下图,必须以王开头的名字只有两个汉字的才可以表示出来 。

 


9.对Null的判断的一些说明:

当我们判断为NULL的时候,不可以用=,否则,即使是NULL也会被判断为不安全,即返回false。我们需要使用is null或者<=>。

 而is null 只可以判断一列,<=>可以直接判断两列


10.如果查询的结果太多,我们想人为的控制查询的数量,Limit关键字应运而生~

在句子末尾加上 LIMIT N,就是指,不管查询多少条结果,最终只会显示N条

 同时,我们也可以使用limit加上一些达到一些实际意义:

比如我想查询英语前三名的同学:

先进行降序排名,然后选取前三位即可。

 同时LIMIT也为我们后来的分页查询奠定了基础。分页查询也在生活中广泛使用,当我们使用百度 进行查询的时候,我们拉到底页会发现有很多页查询结果,我们认为的控制了每一页查询的数量,这就是进行了分页查询。


三.修改

查询的基本内容是不是很多,翻越了查询这座大山,我们后面的修改和删除操作都更为固定简单,大家终于可以放松一下啦~

修改:语法 update 表名 set 列名 where 条件;

 修改的操作是切实的改变了服务器硬盘的数据了,这样的修改完成之后将会吃就生效!

(1)如果没有使用where,修改就会将所有行的数据都进行修改:

 (2)update同时也可以修改多个列的值,要用,分隔开

(3)update还可以结合order by 和Limit进行使用

给总成绩倒数四名的同学数学分数加上五分; 

 

 


四.删除(delete):

语法: delete from 表名 where条件;

 同样的,与update一样,我们也可以将delete与limit以及order by联合使用

删除英语成绩小于70,并且英语成绩倒数后两名同学的数据

 


到此我们终于讲完了增删查改,不管简单与否,大家都要重视起来,下节博客我们将对查询做更深入的学习,而今天这篇文章是下篇博客重要的基础,大家一定要反复巩固~

一定要自己敲代码!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
case R.id.btn_add: String msg_add = ed_msg.getText().toString(); User user_add = new User(msg_add, null); UserDao userDao_add = new UserDao(user_add, act); if (userDao_add.add() > 0) { Toast.makeText(act.getApplicationContext(), "添加成功", Toast.LENGTH_LONG).show(); } break; case R.id.btn_check: User user_check = new User(null, null); UserDao userDao_check = new UserDao(user_check, act); Cursor cursor = userDao_check.select(); String str = ""; if (cursor.moveToFirst()) { do { int d = cursor.getColumnIndex(MyDatabase.KEY_ID); String id = cursor.getString(d); int columnIndex = cursor .getColumnIndex(MyDatabase.KEY_NAME); String s = cursor.getString(columnIndex); str = str + id + "\t" + s + "\n"; } while (cursor.moveToNext()); tv_msg.setText(str); } break; case R.id.btn_amend: String msg_update = ed_msg.getText().toString(); String id = ed_id.getText().toString(); if (msg_update.equals("")) { Toast.makeText(act, "ID不能为空", Toast.LENGTH_LONG).show(); return; } User user_update = new User(msg_update, id); // int id_update = Integer.parseInt(id); UserDao userDao_update = new UserDao(user_update, act); if (userDao_update.updata() > 0) { Toast.makeText(act.getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show(); } break; case R.id.btn_delete: String id_delete = ed_id.getText().toString(); User user_delete = new User(null, id_delete); if (id_delete.equals("")) { Toast.makeText(act, "ID不能为空", Toast.LENGTH_LONG).show(); return; } UserDao userDao_delete = new UserDao(user_delete, act); if (userDao_delete.delete() > 0) { Toast.makeText(act.getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show(); } ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值