一、Create新增数据行
语法:
其中,column表示要插入的列的列名,value_list表示列名对应的数据,且可以同时插入多行
一、单行数据 + 全列插入
全列插入可以不在表名student后面指定列名,也就是说,如果没有指定列名,就必须进行全列插入,否则报错:
如果表名student后面有指定列名,那么values中的值必须和列名一一对应,否则报错:
二、指定列插入
如新增一条数据,名字为王五:
三、多行插入
二、Retrieve检索
2.1 语法
2.2 Select
首先先通过如下SQL语句构造表:
CREATE TABLE exam (id BIGINT,name VARCHAR(20) COMMENT '同学姓名',chinese float COMMENT '语⽂成绩',math float COMMENT '数学成绩',english float COMMENT '英语成绩' ); -- 插⼊测试数据 INSERT INTO exam (name, chinese, math, english) VALUES (1, '唐三藏', 67, 98, 56), (2, '孙悟空', 87, 78, 77), (3, '猪悟能', 88, 98, 90), (4, '曹孟德', 82, 84, 67), (5, '刘⽞德', 55, 85, 45), (6, '孙权', 70, 73, 78), (7, '宋公明', 75, 65, 30);
一、全列查询
语法:
示例:
二、指定列查询
语法:
示例:
如只查询name
二、查询字段为表达式
MySQL返回的表为一个临时表,我们也可以在表中查找一个表达式,如:
接下来,在返回的临时表中,给所有人的语文成绩+10:
接下来,再计算所有学生的语文,数学,英语的总分:
三、为查询结果设置别名
语法:
示例:
将上面的三科总分的字段名设置为总分:
如果别名中有空格就必须用单引号引起来:
四、为查询结果去重
语法:在要查询的字段前加上关键字 distinct
示例:
需要注意的是,distinct关键字需要紧跟在select之后,他会对查询的所有列去重,不能对单独某一列去重,如:
如果对查询的多个列去重,需要每个列的数值都一样才会被去重,如:
!!!Select总结:
<1>查询时不加限制会返回表中所有结果,如果数据量过大,会很消耗服务器资源;
<2>在生产环境中不要使用不加限制的查询。
2.3 where条件查询
语法:
(1)比较运算符:
(2)逻辑运算符
示例:
一、基本查询:
(1)查询英语不及格的同学及英语成绩 ( < 60 ) :
(2)查询语文成绩高于英语成绩的同学:
(3)查询总分在180分以下的同学:
我们发现,使用别名作为过滤条件会报错:
这是因为SQL语句是有执行顺序的:
SQL语句的执行顺序是:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT,别名(Alias)是在SELECT阶段定义的,而WHERE子句的执行在SELECT之前,因此数据库引擎在解析WHERE时无法识别别名
因此,正确的写法为:
二、AND和OR
(1)查询语文成绩大于80分且英语成绩大于80分的同学:
(2)查询语文成绩大于80分或英语成绩大于80分的同学:
(3)and 和 or 的优先级
and的优先级大于or,如:
三、范围查询
(1)语文成绩在 [80, 90] 分的同学及语文成绩 :
可以使用and 和 between and 两种方式来实现,如:
(2)数学成绩是 78 或者 79 或者 98 或者 99 分的同学及数学成绩 :
可以使用 in 也可以使用 or 实现:
四、模糊查询(%匹配任意个字符,_匹配一个字符)
(1)查询所有姓孙的同学(使用%):
(2)查询所有姓孙且名字为两个字的同学(使用_):
五、NULL的查询
(1)查询数学为NULL的记录:
(2)查询数学不为NULL的记录:
(3)NULL与其他值进行运算结果为NULL:
!!!where 总结:
<1> WHERE条件中可以使用表达式,但不能使用别名
<2>AND的优先级高于OR,在同时使用时,建议使用小括号()包裹优先执行的部分 • 过滤NULL时不要使用等于号(=)与不等于号(!= , <>)
<3>NULL与任何值运算结果都为NULL
2.4 order by 排序
语法:
其中,where 必须写在order by之前
示例:
如按语文成绩进行升序排序:
按数学成绩降序排序:
在没有书写排序规则时默认升序排序:
依次按数学降序,英语升序,语文升序的方式显示:
查询同学的总分,且由高到底排序:
使用列的别名进行排序:
NULL进行排序时,视为比任何值(包括负数)都小:
如果查询的值为表达式时,表中数据存在NULL,那么该行数据对应表达式的值为NULL,如:
!!!order by总结:
<1> 查询中没有ORDER BY字句,返回的顺序是未定义的,永远不要依赖这个顺序
<2>ORDER BY 子句中可以使用列的别名进行排序
<3>NULL 进行排序时,视为比何值都小,升序出现在最上面,降序出现在最下面
2.5 分页查询
语法:
通过分页查询可以限制查询结果集的条数,有效减少服务器的压力。
示例:假设一页有两条数据
查询exam中第一页的数据:(offset从0开始)
查询exam中的第二页数据:(offset从2开始)
因此,得出结论,第n页的记录s = (当前页号-1)* 每页显示的记录数。
三、Update 修改
语法:
示例:
将孙悟空同学的数学成绩改为80分:
将曹孟德的数学成绩改为60,语文成绩改为70:
将总成绩倒数前三的 3 位同学的数学成绩加上 30 分:
将所有同学的语文成绩更新为原来的2倍:
!!!Update注意事项:
• 以原值的基础上做变更时,不能使用math += 30这样的语法
• 不加where条件时,会导致全表数据更新,谨慎操作
四、Delete 删除
语法:
示例:
删除孙悟空同学的考试成绩:
删除整张表的数据: