1.CRUD
1. 在SQL中,我们可以在 -- 后写注释的内容。
2. CRUD即增加(Create),查询(Retrieve),更新(Update),删除(Delete)的英文首字母缩写。
2.增加(Create)
SQL语句:
- insert into 表名 (列名,列明...) values (值,值);
复制代码 2.1 单行插入
举例:
在以上所示的结构的表中插入一条id=1,名字为张三的数据。
- insert into student(id,name) values (1,'张三');
复制代码 结果如下图
注意事项:中文要用 ' ' 括起来,且背面括号中的赋值顺序要与前面括号里的列顺序同等。
当有一列的属性没有手动赋值时,其就会被赋值为默认值。
- insert into student(name) values ('李四');
复制代码
2.2 多行插入
一条插入的SQL语句可以同时插入多条数据。
- insert into student(id,name) values (2,'王五'),(3,'赵六'),(4,'钱七');
复制代码 运行结果
小标题:一次插入一条数据和一次插入多条数据哪个的效率更高?
当我们执行所有的SQL语句时,都会有网络的开销,且插入数据时也有磁盘IO的开销,每次执行一条SQL语句都会形成一个新的事件,每个事件的开启与关闭都会消耗一定的系统资源,以是说,如果插入的数据的数量在可控的方位内,一次插入多条数据的效率要比一次插入一条数据效率高。
3.查询(Retrieve)
3.1 全列查询
SQL语句:
举例:查询student表中所有的学生信息
3.2 指定列查询
语法:
举例:在以上表中,查询exam表中的同学们的语文成绩。
- select name,chinese from exam;
复制代码 运行结果
3.3 表达式和别名查询
1.我们想查询的列也可以是一个表达式。
举例:我们想查询同学们语数英三科总分的信息。
- select id,name,chinese+math+english from exam;
复制代码
同时,我们也可以对查询的列起别名。
- select id as 学号,name as 名字,chinese+math+english as 总分 from exam;
复制代码 关键字 as 也可以去掉。
- select id 学号,name 名字,chinese+math+english 总分 from exam;
复制代码 运行结果
注意事项:起别名时,不论别名是英文还是中问,如果别名间有空格,那么别名要用 ‘ ’ 括起来,如果别名之间没有空格,‘ ’ 用或者不用都行。
3.4 去重查询(distinct关键字)
语法:
- select distinct 列名 from 表名;
复制代码 去重查询就是如果查询列的数据相同,那么查询之后出来的暂时表就只会显示一条。要注意,这里的相同是指查寻列的数据相同就行了。
举例说明,我们先向exam表中插入一条新的数据,如下图
从上图可知,孙悟空和孙大圣的语数英三科成绩一样 ,如果我们如许实现去重查询,如下:
- select distinct id,chinese,math,english from exam;
复制代码 结果如下
我们发现语数英相同分数并没有实现去重,是因为所查询的列中的 id 的值差别。
- select distinct chinese,math,english from exam;
复制代码 运行结果
这时候我们发现去重查询就乐成了,去重中的数据中,他们的chinese,math和english的值是一样的。
3.5 排序查询 (order by)
在Mysql中,提供了两种排序方式,分别为asc(升序)和desc(降序)。
语法:
- select 列名 from 表名 order by 列名 asc | desc;
复制代码 举例:将下列成绩按数学成绩的升序进行查询
- select * from exam order by math asc;
复制代码 运行结果
排序时也可以用别名来查询。
举例:按总分大小以降序查询。
- 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 a1 | a1<=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关键字)
条件查询就是根据一些指定条件来查询自己想要的结果。
语法:
- select 列名 from 表名 where 条件;
复制代码
1.练习
1.基本查询
1.--查询英语成绩不合格的同学 - select id,name,english from exam where english<60;
复制代码
2.-- 查询语文成绩好于英语成绩的同学
- select name,chinese,english from exam where chinese>english;
复制代码
3.-- 查询总分在 200 分以下的同学
- select name,chinese+math+english from exam where chinese+math+english<200;
复制代码
此时,有一个小细节,就是where背面不能使用前面定义的别名。
如下图:
但下面这种写法就行
- 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分的同学
- select name,chinese,english from exam where chinese>80 and english>80;
复制代码
2.-- 查询语文成绩大于80分,或英语成绩大于80分的同学
- select name,chinese,english from exam where chinese>80 or english>80;
复制代码
3.--观察and和or的优先级
观察代码以下两列代码
- select name,chinese,math,english from exam where chinese>80 or math>70 and english>70;
复制代码 运行结果
- 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] 分的同学及语文成绩
- select name,chinese from exam where chinese between 80 and 90;
复制代码
2.--使用 AND 也可以实现
- select name,chinese from exam where chinese >=80 and chinese<=90;
复制代码
4.2 in关键字
1.-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
- select name,math from exam where math in(58,59,98,99);
复制代码
2.-- 使用 OR 也可以实现
- select name,math from exam where math=58 or math=59 or math=98 or math=99;
复制代码
5.模糊查询(like关键字)
1.-- % 匹配任意多个(包括 0 个)字符
- select * from exam where name like '孙%';
复制代码
2.-- _ 匹配严格的一个任意字符
- 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 页
第一页:
- select * from exam limit 3;
复制代码
第二页:
- select * from exam limit 3,3;
复制代码
第三页:
- select * from exam limit 6,2;
- select * from exam limit 6,3;
复制代码
4.修改(Update)
1.语法:
update 表名 set=新值 列名 [where 条件] [ order by...] [ limit n];
2.练习
1.-- 将孙悟空同学的数学成绩变更为 80 分
- update exam set math=80 where name='孙悟空';
复制代码
2.-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
- update exam set math=60,chinese=70 where name='曹孟德';
复制代码
3.-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |