襄阳网站seo方法,怎么写网站建设维护推广合同,深圳网站建设公司有哪些内容,遵义上网文章目录 前言1 Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩 ( 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩 ( 60 )2.2.2 语文成绩在 [80, 90] 分的同学及语文成绩2.2.3 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩2.2.4 姓孙的同学 及 孙某同学2.2.5 语文成绩好于英语成绩的同学2.2.6 总分在 200 分以上的同学2.2.7 语文成绩 80 并且不姓孙的同学2.2.8 孙某同学否则要求总成绩 200 并且 语文成绩 数学成绩 并且 英语成绩 802.2.9 NULL 的查询 2.3 结果排序2.3.1 同学及数学成绩按数学成绩升序显示2.3.2 同学及 qq 号按 qq 号排序显示2.3.3 查询同学各门成绩依次按数学降序英语升序语文升序的方式显示2.3.4 查询同学及总分由高到低2.3.5 查询姓孙的同学或者姓曹的同学数学成绩结果按数学成绩由高到低显示 2.4 筛选分页结果 3 Update3.1 将孙悟空同学的数学成绩变更为 80 分3.2 将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分3.3 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4 将所有同学的语文成绩更新为原来的 2 倍 4 Delete4.1 删除数据4.1.1 删除孙悟空同学的考试成绩4.1.2 删除整张表数据 4.2 截断表 5 插入查询结果6 聚合函数6.1 统计班级共有多少同学6.2 统计班级收集的 qq 号有多少6.3 统计本次考试的数学成绩分数个数6.4 统计数学成绩总分6.4 统计平均总分6.5 返回英语最高分6.6 返回 70 分以上的数学最低分 7 group by子句的使用 前言
MySQL表的增删查改实际是CURD操作。CURD是Create增加、Update修改、Retrieve查询、Delete删除的缩写是对数据库中数据进行基本操作的简称。在MySQL中通过使用SQL语句可以对表中的数据进行CURD操作。例如使用INSERT语句可以向表中插入新的记录使用UPDATE语句可以修改已存在的记录使用DELETE语句可以删除记录而使用SELECT语句可以查询记录。因此可以说MySQL表的增删查改实际是CURD操作。 其实增删查改在之前我们接触表的约束时就接触到了知识点的归类归类为增删查改这里。
1 Create
语法
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...案例 – 创建一张学生表
1.1 单行数据 全列插入
– 插入两条记录value_list 数量必须和定义表的列的数量及顺序一致。 – 注意这里在插入的时候也可以不用指定id(当然那时候就需要明确插入数据到那些列了)那么mysql会使用默认的值进行自增。
mysql insert into student values (100,10000,唐三藏,11111);
Query OK, 1 row affected (0.01 sec)mysql insert into student (sn,name,qq)
values(12465,孙悟空,1433456);
Query OK, 1 row affected (0.01 sec)
mysql insert into student (sn,name,qq) values(45624,猪八戒,null);
Query OK, 1 row affected (0.01 sec)1.2 多行数据 指定列插入
– 插入两条记录value_list 数量必须和指定列数量及顺序一致。
1.3 插入否则更新
由于 主键 或者 唯一键 对应的值已经存在而导致插入失败。
-- 主键冲突
INSERT INTO students (id, sn, name) VALUES (100, 10010, 唐大师);
ERROR 1062 (23000): Duplicate entry 100 for key PRIMARY
-- 唯一键冲突
INSERT INTO students (sn, name) VALUES (20001, 曹阿瞒);
ERROR 1062 (23000): Duplicate entry 20001 for key sn可以选择性的进行同步更新操作语法
INSERT ... ON DUPLICATE KEY UPDATE
column value [, column value] ...-- 0 row affected:
表中有冲突数据但冲突数据的值和 update 的值相等
-- 1 row affected:
表中没有冲突数据数据被插入
-- 2 row affected:
表中有冲突数据并且数据已经被更新– 通过 MySQL 函数获取受到影响的数据行数 – ON DUPLICATE KEY 当发生重复key的时候。
1.4 替换
– 主键 或者 唯一键 没有冲突则直接插入 – 主键 或者 唯一键 如果冲突则删除后再插入。
REPLACE INTO students (sn, name) VALUES (20001, 曹阿瞒);
Query OK, 2 rows affected (0.00 sec)-- 1 row affected:
表中没有冲突数据数据被插入
-- 2 row affected:
表中有冲突数据删除后重新插入2 Retrieve
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...案例
mysql create table exam_result ( id int unsigned primary
key auto_increment, name varchar(20) not null comment 同学姓名,
chinese float default 0.0 comment 语文成绩, math float
default 0.0 comment 数学成绩, english float default 0.0
comment 英语成绩 );
Query OK, 0 rows affected (0.03 sec)mysql insert into exam_result (name,chinese,math,english)
values(唐三藏,95,56,59),(孙悟空,82,75,64),(马可尼,45,100,100),
(孙尚香,79,45,35),(曹阿蛮,97,25,56),(宋江,86,58,15),
(李广,25,45,7),(张无忌,76,19,27);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 02.1 SELECT 列
2.1.1 全列查询
– 通常情况下不建议使用 * 进行全列查询 – 1. 查询的列越多意味着需要传输的数据量越大 – 2. 可能会影响到索引的使用。索引后面博客讲解
2.1.2 指定列查询
– 指定列的顺序不需要按定义表的顺序来。
2.1.3 查询字段为表达式
表达式不包含字段 表达式包含一个字段 表达式包含多个字段
2.1.4 为查询结果指定别名
语法
SELECT column [AS] alias_name [...] FROM table_name;2.1.5 结果去重
添加几个和其他同学数学成绩有重复的同学。 去重前 去重后
2.2 WHERE 条件
比较运算符
运算符说明, , , 大于大于等于小于小于等于等于NULL 不安全例如 NULL NULL 的结果是 NULL等于NULL 安全例如 NULL NULL 的结果是 TRUE(1)!, 不等于BETWEEN a0 AND a1范围匹配[a0, a1]如果 a0 value a1返回 TRUE(1)IN (option, …)如果是 option 中的任意一个返回 TRUE(1)IS NULL是 NULLIS NOT NULL不是 NULLLIKE模糊匹配。% 表示任意多个包括 0 个任意字符_ 表示任意一个字符
逻辑运算符
运算符说明AND多个条件必须都为 TRUE(1)结果才是 TRUE(1)OR任意一个条件为 TRUE(1), 结果为 TRUE(1)NOT条件为 TRUE(1)结果为 FALSE(0)
案例
2.2.1 英语不及格的同学及英语成绩 ( 60 )
基本比较
2.2.2 语文成绩在 [80, 90] 分的同学及语文成绩
使用 AND 进行条件连接 使用 BETWEEN … AND … 条件
2.2.3 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
使用 OR 进行条件连接 使用 IN 条件
2.2.4 姓孙的同学 及 孙某同学
% 匹配任意多个包括 0 个任意字符 _ 匹配严格的一个任意字符
2.2.5 语文成绩好于英语成绩的同学 2.2.6 总分在 200 分以上的同学
– WHERE 条件中使用表达式 – 别名不能用在 WHERE 条件中
2.2.7 语文成绩 80 并且不姓孙的同学
– AND 与 NOT 的使用
2.2.8 孙某同学否则要求总成绩 200 并且 语文成绩 数学成绩 并且 英语成绩 80
mysql select name,chinese,math,english,chineseenglishmath 总分from exam_result where name like 孙_ or (englishchinesemath200 and chinese math or english 80);2.2.9 NULL 的查询
查询 students 表 NULL 和 NULL 的比较 和 的区别
SELECT NULL NULL, NULL 1, NULL 0;2.3 结果排序
语法
-- ASC 为升序从小到大
-- DESC 为降序从大到小
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];注意没有 ORDER BY 子句的查询返回的顺序是未定义的永远不要依赖这个顺序。
案例
2.3.1 同学及数学成绩按数学成绩升序显示 2.3.2 同学及 qq 号按 qq 号排序显示
– NULL 视为比任何值都小升序出现在最上面。
2.3.3 查询同学各门成绩依次按数学降序英语升序语文升序的方式显示
多字段排序排序优先级随书写顺序
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;2.3.4 查询同学及总分由高到低 注意ORDER BY 子句中可以使用列别名。
2.3.5 查询姓孙的同学或者姓曹的同学数学成绩结果按数学成绩由高到低显示
– 结合 WHERE 子句 和 ORDER BY 子句。
2.4 筛选分页结果
语法
-- 起始下标为 0
-- 从 s 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 0 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始筛选 n 条结果比第二种用法更明确建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;建议对未知表进行查询时最好加一条 LIMIT 1避免因为表中数据过大查询全表数据导致数据库卡死,按 id 进行分页每页 3 条记录分别显示 第 1、2、3 页。 – 第 1 页 – 第 2 页 – 第四页
3 Update
语法
UPDATE table_name SET column expr [, column expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]对查询到的结果进行列值更新 案例
3.1 将孙悟空同学的数学成绩变更为 80 分 3.2 将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分
– 一次更新多个列 – 查看原数据 – 数据更新 – 查看更新后数据
3.3 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
– 更新值为原值基础上变更 – 查看原数据 – 别名可以在ORDER BY中使用 – 数据更新不支持 math 30 这种语法 – 按总成绩排序后查询结果
3.4 将所有同学的语文成绩更新为原来的 2 倍
注意更新全表的语句慎用 – 没有 WHERE 子句则更新全表 – 查看原数据 – 数据更新
4 Delete
4.1 删除数据
语法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]案例
4.1.1 删除孙悟空同学的考试成绩
– 查看原数据 – 删除数据
4.1.2 删除整张表数据
注意删除整表操作要慎用 – 准备测试表 – 删除整表数据 – 再插入一条数据自增 id 在原值上增长 – 查看表结构会有 AUTO_INCREMENTn 项
4.2 截断表
语法
TRUNCATE [TABLE] table_name注意这个操作慎用
只能对整表操作不能像 DELETE 一样针对部分数据操作实际上 MySQL 不对数据操作所以比 DELETE 更快但是TRUNCATE在删除数据的时候并不经过真正的事 物所以无法回滚会重置 AUTO_INCREMENT 项
– 准备测试表
5 插入查询结果
语法
INSERT INTO table_name [(column [, column ...])] SELECT ...案例删除表中的的重复复记录重复的数据只能有一份。 思路
6 聚合函数
函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值不是数字没有意义MAX([DISTINCT] expr)返回查询到的数据的 最大值不是数字没有意义MIN([DISTINCT] expr)返回查询到的数据的 最小值不是数字没有意义
案例
6.1 统计班级共有多少同学
– 使用 * 做统计不受 NULL 影响。 – 使用表达式做统计。
6.2 统计班级收集的 qq 号有多少 6.3 统计本次考试的数学成绩分数个数 6.4 统计数学成绩总分 6.4 统计平均总分 6.5 返回英语最高分 6.6 返回 70 分以上的数学最低分 7 group by子句的使用
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;案例 准备工作创建一个雇员信息表来自oracle 9i的经典测试表
EMP员工表DEPT部门表SALGRADE工资等级表如何显示每个部门的平均工资和最高工资。 显示每个部门的每种岗位的平均工资和最低工资 显示平均工资低于2000的部门和它的平均工资
统计各个部门的平均工资
having和group by配合使用对group by结果进行过滤