Mysql表的增删查改(基础)

打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

1.CRUD

1.  在SQL中,我们可以在 -- 后写注释的内容。
2. CRUD即增加(Create),查询(Retrieve),更新(Update),删除(Delete)的英文首字母缩写。
2.增加(Create)

SQL语句:
  1. insert into 表名 (列名,列明...) values (值,值);
复制代码
2.1 单行插入 

举例:

在以上所示的结构的表中插入一条id=1,名字为张三的数据。 
  1. insert into student(id,name) values (1,'张三');
复制代码
结果如下图

注意事项:中文要用 ' ' 括起来,且背面括号中的赋值顺序要与前面括号里的列顺序同等。
 当有一列的属性没有手动赋值时,其就会被赋值为默认值。
  1. insert into student(name) values ('李四');
复制代码

2.2 多行插入

一条插入的SQL语句可以同时插入多条数据。
  1. insert into student(id,name) values (2,'王五'),(3,'赵六'),(4,'钱七');
复制代码
运行结果

小标题:一次插入一条数据和一次插入多条数据哪个的效率更高?
当我们执行所有的SQL语句时,都会有网络的开销,且插入数据时也有磁盘IO的开销,每次执行一条SQL语句都会形成一个新的事件,每个事件的开启与关闭都会消耗一定的系统资源,以是说,如果插入的数据的数量在可控的方位内,一次插入多条数据的效率要比一次插入一条数据效率高。
3.查询(Retrieve)

3.1 全列查询

SQL语句:
  1. select * from 表名;
复制代码
举例:查询student表中所有的学生信息
  1. select * from student;
复制代码

3.2 指定列查询

语法:
  1. select 列名, [列名] from 表名;
复制代码

举例:在以上表中,查询exam表中的同学们的语文成绩。
  1. select name,chinese from exam;
复制代码
运行结果 

3.3 表达式和别名查询

1.我们想查询的列也可以是一个表达式。
举例:我们想查询同学们语数英三科总分的信息。
  1. select id,name,chinese+math+english from exam;
复制代码

同时,我们也可以对查询的列起别名。
  1. select id as 学号,name as 名字,chinese+math+english as 总分 from exam;
复制代码
关键字 as 也可以去掉。 
  1. select id 学号,name 名字,chinese+math+english 总分 from exam;
复制代码
运行结果 

 注意事项:起别名时,不论别名是英文还是中问,如果别名间有空格,那么别名要用 ‘ ’ 括起来,如果别名之间没有空格,‘ ’ 用或者不用都行。
3.4 去重查询(distinct关键字)

语法:
  1. select distinct 列名 from 表名;
复制代码
去重查询就是如果查询列的数据相同,那么查询之后出来的暂时表就只会显示一条。要注意,这里的相同是指查寻列的数据相同就行了。
 举例说明,我们先向exam表中插入一条新的数据,如下图

从上图可知,孙悟空和孙大圣的语数英三科成绩一样 ,如果我们如许实现去重查询,如下:
  1. select distinct id,chinese,math,english from exam;
复制代码
结果如下 

我们发现语数英相同分数并没有实现去重,是因为所查询的列中的 id 的值差别。
  1. select distinct chinese,math,english from exam;
复制代码
运行结果

这时候我们发现去重查询就乐成了,去重中的数据中,他们的chinese,math和english的值是一样的。 
3.5 排序查询 (order by)

在Mysql中,提供了两种排序方式,分别为asc(升序)和desc(降序)。
语法:
  1. select 列名 from 表名 order by 列名 asc | desc;
复制代码
举例:将下列成绩按数学成绩的升序进行查询 

  1. select * from exam order by math asc;
复制代码
运行结果

排序时也可以用别名来查询。
举例:按总分大小以降序查询。
  1. select id,name,chinese+math+english total from exam order by total desc;
复制代码
 
 
 3.6 条件查询(where)

我们先来介绍以下在SQL中的运算符。
1.比较运算符

运算符说明
>,>=,<,<=大于,大于等于,小于,小于等于
=等于,用于null之间不安全,null=null返回的结果为null
<=>等于,专门针对NULL来做判定的
!=,<>不等于
between a0 and a1a1<=values<=a1
in(option,...)如果属于集合任意一个,就得到返回值TRUE(1)
is NULL是NULL
is not NULL不是NULL
like模糊匹配,%表示任意多个字符(包括0个),_表示一个字符













2.逻辑运算符

运算符说明
and 多个条件都为true(1),表达式结果才返回true(1)
or多个条件中有一个为true(1),表达式结果就返回true(1)
not           条件为 TRUE(1),结果为 FALSE(0)      





3.条件查询(where关键字)

条件查询就是根据一些指定条件来查询自己想要的结果。
语法:
  1. select 列名 from 表名 where 条件;
复制代码

1.练习
1.基本查询
   1.--查询英语成绩不合格的同学  
  1.  select id,name,english from exam where english<60;
复制代码

2.-- 查询语文成绩好于英语成绩的同学 
  1. select name,chinese,english from exam where chinese>english;
复制代码

3.-- 查询总分在 200 分以下的同学
  1. select name,chinese+math+english from exam where chinese+math+english<200;
复制代码

此时,有一个小细节,就是where背面不能使用前面定义的别名。 
如下图:

但下面这种写法就行
  1. select name,chinese+math+english  总分 from exam where chinese+math+english<200 order by 总分 asc;
复制代码
  
缘故原由分析:这些与MySQL的内部实现有关,换句话说,就是与SQL语句的执行顺序有关。

1.起首,我们想要查询一些信息,我们现必要知道要从那张表中查询,以是要起首执行from 。
2. 确定那张表之后,要根据指定条件将特定的信息过滤出来,此时执行where,由于此时select还没执行,以是别名还没定义,此时使用别名就会报错。
3.接着要打印我们要查询的信息(字段),此时执行select
4.最后根据过滤出来的信息,进行排序,此时执行order by
2.and与or
1.-- 查询语文成绩大于80分,且英语成绩大于80分的同学
  1. select name,chinese,english from exam where chinese>80 and english>80;
复制代码

2.-- 查询语文成绩大于80分,或英语成绩大于80分的同学
  1. select name,chinese,english from exam where chinese>80 or english>80;
复制代码

3.--观察and和or的优先级
观察代码以下两列代码
  1. select name,chinese,math,english from exam where chinese>80 or math>70 and english>70;
复制代码
 运行结果

  1. select name,chinese,math,english from exam where (chinese>80 or math>70) and english>70;
复制代码

仔细观察,能得知and的优先级顺序大于or的优先级顺序。 团体的优先级顺序为not>and>or
4.范围查询

4.1 between...and...

1.--查询语文成绩在 [80, 90] 分的同学及语文成绩
  1. select name,chinese from exam where chinese between 80 and 90;
复制代码

2.--使用 AND 也可以实现 
  1. select name,chinese from exam where chinese >=80 and chinese<=90;
复制代码

4.2 in关键字

1.-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
  1. select name,math from exam where math in(58,59,98,99);
复制代码

2.-- 使用 OR 也可以实现
  1. select name,math from exam where math=58 or math=59 or math=98 or math=99;
复制代码

5.模糊查询(like关键字)

1.-- % 匹配任意多个(包括 0 个)字符
  1. select * from exam where name like '孙%';
复制代码

2.-- _ 匹配严格的一个任意字符
  1. select * from exam where name like '孙_';
复制代码

6.分页查询(limit关键字) 

 1.语法:
1.select 列名 from [ where 条件 ] [order by 列名 asc|desc ] limit n;
说明:从0开始,筛选出n条数据。
2.select 列名 from [ where 条件 ] [order by 列名 asc|desc ] limit start,n;
说明:从start条数据开始筛选出n条数据。
3.select 列名 from [ where 条件 ] [order by 列名 asc|desc ] limit n offset start;
说明:从start条数据开始筛选出n条数据。
star=(当前页数-1)* 每页显示条数(n)
2.练习

按 id 进行分页,每页 3 条记载,分别显示 第 1、2、3 页 
第一页:
  1. select * from exam limit 3;
复制代码

第二页:
  1. select * from exam limit 3,3;
复制代码

 第三页:
  1. select * from exam limit 6,2;
  2. select * from exam limit 6,3;
复制代码

4.修改(Update)

1.语法:
update 表名 set=新值 列名 [where 条件] [ order by...] [ limit n];
 2.练习
1.-- 将孙悟空同学的数学成绩变更为 80 分
  1. update exam set math=80 where name='孙悟空';
复制代码

2.-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
  1. update exam set math=60,chinese=70 where name='曹孟德';
复制代码

3.-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分  
  1. update exam set math=math+10 order by chinese+math+english asc limit 3;
复制代码

5.删除(Delete)

语法:
delete from 表名 [where 条件] [ order by 列名 asc|desc ] [limit ...]; 
注意事项:由于删除是一个非常有风险的操作,就不外多介绍了。
谢谢观看!!!


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

尚未崩坏

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

标签云

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