深圳网站维护有限公司利用网站做蜘蛛池

当前位置: 首页 > news >正文

深圳网站维护有限公司,利用网站做蜘蛛池,推广企业网站最主要的方式,电商平台的发展目录 一、新增#xff08;Create#xff09; 单行数据 全列插入 多行数据 指定列插入 插入时间 二、查询#xff08;Retrieve#xff09; 全列查询 指定列查询 查询字段为表达式 别名 去重#xff1a;DISTINCT 排序#xff1a;ORDER BY 条件查询#xff1… 目录 一、新增Create 单行数据 全列插入 多行数据 指定列插入 插入时间 二、查询Retrieve 全列查询 指定列查询 查询字段为表达式 别名 去重DISTINCT 排序ORDER BY 条件查询WHERE 基本查询 AND与OR 范围查询 模糊查询LIKE NULL 的查询IS [NOT] NULL 分页查询LIMIT 三、修改 四、删除 一、新增Create 案例 – 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT, sn INT comment 学号, name VARCHAR(20) comment 姓名, qq_mail VARCHAR(20) comment QQ邮箱 ); 单行数据 全列插入 – 插入两条记录value_list 数量必须和定义表的列的数量及顺序一致 INSERT INTO student VALUES (100, 10000, 唐三藏, NULL); INSERT INTO student VALUES (101, 10001, 孙悟空, 11111); 多行数据 指定列插入 – 插入两条记录value_list 数量必须和指定列数量及顺序一致 INSERT INTO student (id, sn, name) VALUES (102, 20001, 曹孟德), (103, 20002, 孙仲谋); SQL中表示字符串既可以使用单引号 也可以使用双引号   也可插入中文字符串但需要确保创建数据库的时候指定了字符集是 utf8/gbk 等能支持中文的字符集。像MySQL5默认的字符集是拉丁文。因此如果发现插入的中文数据出现报错大概率是创建数据库的时候没有正确指定字符集 插入时间 有的时候插入的时间日期希望就是当前时刻SQL作为一个编程语言也支持一些库函数now()能获取到当前的时间日期 二、查询Retrieve 案例 – 创建考试成绩表 DROP TABLE IF EXISTS exam_result; CREATE TABLE exam_result ( id INT, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); – 插入测试数据 INSERT INTO exam_result (id,name, chinese, math, english) VALUES (1,唐三藏, 67, 98, 56), (2,孙悟空, 87.5, 78, 77), (3,猪悟能, 88, 98.5, 90), (4,曹孟德, 82, 84, 67), (5,刘玄德, 55.5, 85, 45), (6,孙权, 70, 73, 78.5), (7,宋公明, 75, 65, 30); 全列查询 –通常情况下不建议使用 * 进行全列查询 – 1. 查询的列越多意味着需要传输的数据量越大 – 2. 可能会影响到索引的使用。索引待后面课程讲解 SELECT * FROM exam_result; 查询出这个表中的所有的行和所有的列* 称为 通配符可以指代所有的列 ⚠️select* 是一个很危险的操作 如果表比较小select* 都无所谓一旦表非常大像干万/亿级别的数据量此时进行select* 就会产生大量的硬盘IO和网络IO。而硬盘和网卡读写速度都是存在上限的一旦触发大规模的 select* 意味着很可能就把你的硬盘/网卡带宽给吃满了堵车。其他的客户端尝试访问数据库访问操作就无法正常进行了。如果你针对公司的生产环境进行select就很可能使其他的用户访问数据库的时候出现访问失败的情况。比如你们做的是一个 支付宝 支付系统用户访问不了数据库会是什么后果呢当前阶段数据库中没啥数据select 就无所谓了。以后再工作中尤其是生产环境”一定要慎重。 指定列查询 –指定列的顺序不需要按定义表的顺序来 SELECT id, name, english FROM exam_result; 实际开发中一个表有十几列甚至几十列都是很有可能的。比如当前一共有20列只需要关注两列.则使用指定列查询得到的数据量就比全列查询要少很多。 查询字段为表达式 – 表达式不包含字段 SELECT id, name, 10 FROM exam_result; – 表达式包含一个字段 SELECT id, name, english 10 FROM exam_result; – 表达式包含多个字段 SELECT id, name, chinese math english FROM exam_result; 多个列之间可进行加减乘除运算 执行 select 就会遍历每一行取出需要的列把列代入到表达式中。这样的结果只是数据库查询过程中生成的 临时表 数据库本体数据库服务器硬盘上的数据是没有任何改变的 表达式查询只能针对列和列之间进行运算行和行之间的运算后面会介绍 聚合查询 别名 如果表达式简单一眼就能看明白如果表达式比较复杂就没法直观观察了。此处就可以给表达式取别名此时别名就是查询结果的列名。 SELECT column [AS] alias_name […] FROM table_name; – 结果集中表头的列名别名 SELECT name, chinese math english 总分 FROM exam_result; 去重DISTINCT – 98 分重复了

SELECT math FROM exam_result;

math
98
78
98
84
85
73
65

7 rows in set (0.00 sec) –去重结果

SELECT DISTINCT math FROM exam_result;

math
98
78
84
85
73
65

6 rows in set (0.00 sec) 必须所有列都是重复才会触发去重即多行数据如果出现相同的值就会只保留一份 ⚾️去重都是针对 临时表硬盘上的数据没有任何影响 排序ORDER BY – ASC 为升序从小到大 – DESC 为降序从大到小 – 默认为 ASC SELECT … FROM table_name [WHERE …] ORDER BY column [ASC|DESC], […]; NULL 数据排序视为比任何值都小升序出现在最上面降序出现在最下面 – 查询同学姓名和 qq_mail按 qq_mail 排序显示 SELECT name, qq_mail FROM student ORDER BY qq_mail; SELECT name, qq_mail FROM student ORDER BY qq_mail DESC; 使用表达式及别名排序 – 查询同学及总分由高到低 SELECT name, chinese english math FROM exam_result ORDER BY chinese english math DESC;SELECT name, chinese english math total FROM exam_result ORDER BY total DESC; 可以对多个字段进行排序排序优先级随书写顺序 – 查询同学各门成绩依次按 数学降序英语升序语文升序的方式显示 SELECT name, math, english, chinese FROM exam_result ORDER BY math DESC, english, chinese; 没有 ORDER BY 子句的查询返回的顺序是未定义的永远不要依赖这个顺序。如果某一列有相同值其他记录的顺序都是不可预期的 排序也是只是针对临时表结果进行排序不会影响到硬盘上原始的数据 条件查询WHERE SQL没有 这个运算符SQL中使用 表示比较相等 NULL参与运算结果也会得到NULL WHERE条件可以使用表达式但不能使用别名 AND的优先级高于OR在同时使用时需要使用小括号()包裹优先执行的部分 与NULL比较不能直接用 如 idNULL  基本查询 – 查询英语不及格的同学及英语成绩 ( 60 )

SELECT name, english FROM exam_result WHERE english 60;

| name | english |

| 唐三藏 | 56.0 | | 刘玄德 | 45.0 |

| 宋公明 | 30.0 |

3 rows in set (0.01 sec)– 查询语文成绩好于英语成绩的同学

SELECT name, chinese, english FROM exam_result WHERE chinese english;

| name | chinese | english |

| 唐三藏 | 67.0 | 56.0 | | 孙悟空 | 87.5 | 77.0 | | 曹孟德 | 82.0 | 67.0 | | 刘玄德 | 55.5 | 45.0 |

| 宋公明 | 75.0 | 30.0 |

5 rows in set (0.00 sec)– 查询总分在 200 分以下的同学 SELECT name, chinese math english 总分 FROM exam_result

WHERE chinese math english 200;

| name | 总分 |

| 刘玄德 | 185.5 |

| 宋公明 | 170.0 |

2 rows in set (0.00 sec) AND与OR – 查询语文成绩大于80分且英语成绩大于80分的同学

SELECT * FROM exam_result WHERE chinese 80 and english 80;

| id | name | chinese | math | english |

| 3 | 猪悟能 | 88.0 | 98.5 | 90.0 |

1 row in set (0.01 sec)– 查询语文成绩大于80分或英语成绩大于80分的同学

SELECT * FROM exam_result WHERE chinese 80 or english 80;

| name | 总分 |

| 刘玄德 | 185.5 |

| 宋公明 | 170.0 |

2 rows in set (0.00 sec)– 观察AND 和 OR 的优先级

SELECT * FROM exam_result WHERE chinese 80 or math70 and english 70;

| id | name | chinese | math | english |

| 2 | 孙悟空 | 87.5 | 78.0 | 77.0 | | 3 | 猪悟能 | 88.0 | 98.5 | 90.0 | | 4 | 曹孟德 | 82.0 | 84.0 | 67.0 |

| 6 | 孙权 | 70.0 | 73.0 | 78.5 |

4 rows in set (0.00 sec)SELECT * FROM exam_result WHERE (chinese 80 or math70) and english 70;

| id | name | chinese | math | english |

| 2 | 孙悟空 | 87.5 | 78.0 | 77.0 | | 3 | 猪悟能 | 88.0 | 98.5 | 90.0 |

| 6 | 孙权 | 70.0 | 73.0 | 78.5 |

3 rows in set (0.00 sec) 范围查询 –查询语文成绩在 [80, 90] 分的同学及语文成绩

SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

| name | chinese |

| 孙悟空 | 87.5 | | 猪悟能 | 88.0 |

| 曹孟德 | 82.0 |

3 rows in set (0.00 sec) – 使用 AND 也可以实现 SELECT name, chinese FROM exam_result WHERE chinese 80 AND chinese 90;– 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);

| name | math |

| 唐三藏 | 98.0 |

1 row in set (0.01 sec) – 使用 OR 也可以实现 SELECT name, math FROM exam_result WHERE math 58 OR math 59 OR math98 OR math 99; 模糊查询LIKE – % 匹配任意多个包括 0 个字符

SELECT name FROM exam_result WHERE name LIKE 孙%;– 匹配到孙悟空、孙权

name
孙悟空
孙权

2 rows in set (0.01 sec)– _ 匹配严格的一个任意字符

SELECT name FROM examresult WHERE name LIKE 孙;– 匹配到孙权

name
孙权

1 row in set (0.00 sec) NULL 的查询IS [NOT] NULL – 查询 qq_mail 已知的同学姓名 SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL; – 查询 qq_mail 未知的同学姓名 SELECT name, qq_mail FROM student WHERE qq_mail IS NULL; 分页查询LIMIT select* 容易查询出太多的数据使机器挂了通过指定列查询虽然你查到的结果是变少了很多但是如果行数足够多的话仍然是有可能会把机器搞出问题的。此时更稳妥的做法就是 分页查询限制一次查询最多能查到多少个记录 – 起始下标为 0 – 从 0 开始筛选 n 条结果 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n; – 从 s 开始筛选 n 条结果 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n; – 从 s 开始筛选 n 条结果比第二种用法更明确建议使用 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n OFFSET s; 指定 limit 的时候还可以搭配 offset 来使用offset表示是从下标为几这样的记录开始算 limit这样的操作过程相比于不加上limit效率高很多针对一个行数非常多的表使用 limit 仍然是一个高效的操作 –第 1 页 SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 0; – 第 2 页 SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3; – 第 3 页如果结果不足 3 个不会有影响 SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6; 三、修改 UPDATE table_name SET column expr [, column expr …] [WHERE …] [ORDER BY …] [LIMIT …] – 将孙悟空同学的数学成绩变更为 80 分 UPDATE exam_result SET math 80 WHERE name 孙悟空;– 将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分 UPDATE exam_result SET math 60, chinese 70 WHERE name 曹孟德;– 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 UPDATE exam_result SET math math 30 ORDER BY chinese math english LIMIT3;– 将所有同学的语文成绩更新为原来的 2 倍 UPDATE exam_result SET chinese chinese * 2; 这样的修改是 特久有效真正在改硬盘了。一定要确保update的修改是改对了改出问题来就麻烦。指定update的时候如果当前不指定任何条件就会针对所有的行都能生效(把整个表都给改了) 四、删除 DELETE FROM table_name [WHERE …] [ORDER BY …] [LIMIT …] – 删除孙悟空同学的考试成绩 DELETE FROM exam_result WHERE name 孙悟空; – 删除整张表数据 – 准备测试表 DROP TABLE IF EXISTS for_delete; CREATE TABLE for_delete ( id INT, name VARCHAR(20) ); – 插入测试数据 INSERT INTO for_delete (name) VALUES (A), (B), ©; – 删除整表数据 DELETE FROM for_delete; ⚠️⚠️⚠️delete也是一个危险操作会把筛选出来的行删除掉而且修改的是硬盘一旦删掉了数据就无了。这里的匹配是匹配到几个就删除几个条件如果不写就是删除所有数据 delete from 是删除表里的数据表还存在表中内容为空 drop table 是连数据带里面的表都删除了