嘉兴电子商务网站建设工业产品设计用什么软件
一、Create(创建)
📖 语法:
INSERT INTO table_name(value_list);
当我们使用表的时候,就可以使用这个语法来向表中插入元素~
我们这边创建一个用于示范的表(Student)~
create table student(
id int,
name varchar(20),
chinese int,
math int,
english int); 
此时student就是一个空的表,然后我们就可以向其中插入元素:

那么如果说,此时一位学生的English学科缺考了,不应该录入成绩,应该怎么办?
 其实很好办,我们可以针对一个学生,只添加一部分的数据即可。

同样的,我们也可以一次性添加多个成员:

Records: 2 表示成功插入了 2 条记录。
 Duplicates: 0 表示没有重复的记录插入。
 Warnings: 0 表示在执行插入操作时没有产生任何警告信息。
二、Retrieve(检索)
① Select 查询
📖 语法:
SELECT (values) from table_name;
上面我们其实就用到了:
📕 (select * from student)
 其中的 ' * ' 代表的其实就是"全部"的意思,也就是"查询表中所有列的所有元素"
📕(select name from student)
 代表只查询表中的"name"

📕 (select id,chinese)
 代表只查询表中的"id"和"name"

除了上面一些直接查询表中的信息的方法,我们还可以在查询的时候自己定义一些想查询的东西,比如我们此时想知道"每个学生的(语文)和(数学)成绩的总和为多少":
📕 (select id ,name, chinese + math + english from student)
 代表查询每个学生的 id,姓名,以及总分

(需要注意的是,null与任何数运算都等于null)
这么看或许非常别扭,所以我们还可以给它起个别名
📕 (select id,name,chinese + math + english as '总分' from student)
 代表查询每个学生的 id,姓名,以及总分(别名为总分)

这样我们的表就变得简介,明了了
② Order by 排序查询
上面我们的查询,就对学生的总成绩进行了查询。而就现实生活的理想状态来说,当这些成绩出现时,我们更希望它是"有序"的,那么就引出了我们的 "Order by"~
📖 语法:
SELECT (values) from table_name order by (values) (排序方法);
| 语法 | 意义 | 
| ASC | 升序(从小到大) | 
| DESC | 降序(从大到小) | 
比如此时我们要对学生的英语成绩降序排序:
📕 (select * from student order by english desc)

那让我们再添加一些数据,以便后续展示更加明显。

我们再试试,对于别名进行一个排序应该依然是如此吧?我们来试试:

但结果却有点出乎意料了~为什么会失败呢?
其实这是因为书写的形式不对,如果带了引号,'总分' 会被当作字符串常量,而不是列别名。
所以此时 order by '总分' 会对一个固定的字符串值排序,导致所有行的排序结果相同,实际并未按计算列排序。
那么想要实现这种排序,也很简单,我们只需要直接删除掉引号即可~
📕 select *, chinese + math + english as '总分' from student order by 总分 desc;

📕 (select * , chinese + math + english as '总分' from student order by chinese + math + english desc;)

📕 (select * , chinese + math + english as '总分' from student order by chinese + math + english asc;)

需要一提的是,如果我们不加 desc 也不加 asc 那么它的默认顺序是一个升序的:

③ Where 条件查询
而上面只能做到很简单的查询操作,想要查询某些符合特定条件的数据,就要用到"where"了。
📖 语法:
SELECT (values) from table_name where (条件语句);
📕 比较运算符:
| 运算符 | 说明 | 
| >,>=,<,<= | 大于,大于等于,小于,小于等于 | 
| = | 等于,无法比较NULL(NULL = NULL的结果是NULL) | 
| <=> | 等于,可以比较NULL(NULL <=> NULL的结果为TRUE(1)) | 
| !=,<> | 不等于 | 
| value BETWEEN a0 AND a1 | 范围匹配[a0,a1] 如果value在其中则返回TRUE(1) (NOT BETWEEN代表取反)  | 
| value IN (列表) | 如果value在列表中,则返回TRUE(1) (NOT IN代表取反)  | 
| IS NULL | 是NULL | 
| IS NOT NULL | 不是NULL | 
| LIKE | 模糊匹配 %表示任意多个字符 _表示任意一个字符 NOT LIKE代表取反  | 
📕 逻辑运算符:
| 运算符 | 说明 | 
| AND | 多个条件都必须为TRUE 结果才能是TRUE  | 
| OR | 任意一个条件为TRUE 结果就为TRUE  | 
| NOT | 条件为TRUE 结果就为FALSE  | 
📕 查询所有学生中 语文 > 95分 的学生
select * from student where chinese > 95;

📕 查找 英语缺考(NULL) 的学生
select * from student where english <=> NULL;

📕 查询 总分在[275,290]之间 的学生
select *,chinese + math + english as '总分' from student where chinese + math + english between 275 and 290;

注意!这里是不可以使用"总分"来进行查询的,使用where时不能够使用别名来进行判别~

这是因为"执行顺序"的差异:
一般情况下,我们对数据进行查询时,会先通过"from"确定数据源,然后中间会经过一系列"对数据的操作",其中"where"的过滤数据操作是在"起别名"之前的,所以此时的where是查询不到"别名"的!这点比较重要,需要记住。
📕 查询 语文成绩(89,90,95) 的学生
select * from student where chinese in (89,90,95);

📕 查询 学生名为"小_" 的学生
select * from student where name like "小_";

📕 查找 语文 = 数学 = 英语 的学生
select * from student where chinese = math and math = english;

注意,这里不能使用 chinese = math = english,这里的顺序是 先判断"chinese = math",返回0 或 1,然后判断(0/1 = english),这样就会得到错误的结果。
④ limit 分页查询
📖 语法:
SELECT (values) from table_name limit (num) offset (start);
📕 以3个为一页,从第一个开始查询
select * from student limit 3 offset 0;

📕 以3个为一页,从第四个开始查询
select * from student limit 3 offset 3;

⑤ distinct 去重查询
📖 语法:
SELECT distinct (values) from table_name;
📕 查找学生中所有出现的语文成绩(不重复)

三、Update(修改)
📖 语法:
update table_name set (value = 新值) where (条件语句);
📕 将语文为 89 分的同学,语文成绩 + 10分
update student set chinese = chinese + 10 where chinese = 89;

(这里不能使用 chinese += 10,MySQL中不能识别这种语句)
📕 将总成绩倒数前三的学生,数学成绩 + 30分
update student set math = math + 30 where chinese + math + english is not null order by chinese + math + english asc limit 3;

(这里我们查找三科成绩总和不是null的学生,因为null与任何数相加都为null,并且null与其他数字进行对比的结果是不确定的。)

(注意,最好使用where进行限制,否则会对整个表进行操作,非常危险)
四、Delete(删除)
📖 语法:
delete from table_name where (条件语句);
📕 删除名字叫'大王'的同学
delete from student where name = '大王';

📕 删除整个表中的数据
delete from student;

(非常危险的操作!)
注意,delete from student 和 drop table student 是不同的
delete from student是删除表中数据,但表还在。(相当于用橡皮把纸上的画擦了)
drop table student是删除表。(相当于直接把纸撕了~)

那么这篇关于MySQL的(增删改查)的文章到这里就结束啦,作者能力有限,如果有哪里说的不够清楚或者不够准确,还请各位在评论区多多指出,我也会虚心学习的,我们下次再见啦
