数据库之SQL操作表记录

1 INSERT

INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]);

插入数据的规则:
1、插入的数据应与字段的数据类型相同。
2、数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
3、在values中列出的数据位置必须与被加入的列的排列位置相对应。
4、字符和日期型数据应包含在单引号中。
5、插入空值:不指定或insert into table value(null)。
6、如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表。

在employee表中插入一条员工信息:
INSERT INTO employee (id, name, salary) VALUES (null, '张三', '1000');
或者可以这样写
INSERT INTO employee VALUES (null, '张三', '1000');

2 UPDATE

UPDATE table_name SET col_name=expr1[, col_name=expr2... ] [WHERE where_definition];

更新数据规则:
1、UPDATE语法可以用新值更新原有表行中的各列。
2、SET子句指示要修改哪些列和要给予哪些值。
3、WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行

将所有员工薪水修改为5000元:
UPDATE employee SET salary=5000;

将姓名为’张三’的员工薪水修改为3000元:
UPDATE employee SET salary WHERE name='张三';

将姓名为’张三’的员工薪水增加1000元:
UPDATE employee SET salary=salary+1000 WHERE name='张三';

3 DELETE

DELETE FROM table_name [WHERE where_definition];

删除数据的规则:
1、如果不使用where子句,将删除表中所有数据。
2、delete语句不能删除某一列的值(可使用update)。
3、使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

删除表中名称为’张三’的记录:
DELETE FROM employee WHERE name='张三';

删除表中所有记录:
DELETE FROM employee;

4 SELECT

4.1 基本查询

SELECT [DISTINCT] *|{col1, col2, col3...} FROM table_name;

其中FROM指定从哪张表筛选,*表示查找所有列,也可以指定一个列列表明确指定要查找的列,DISTINCT用来剔除重复行。

查询表中所有学生的信息:
SELECT * FROM exam;

查询表中所有学生的姓名和对应的英语成绩:
SELECT name, english FROM exam;

过滤表中英语成绩相同的重复数据:
SELECT DISTINCT english FROM exam;

在所有学生分数上加10分特长分显示:
SELECT name,math+10,chinese+10,english+10 FROM exam;

统计每个学生的总分:
SELECT name, math+chinese+english FROM exam;

使用别名表示学生总分:
SELECT name AS 姓名, math+chinese+english AS 总分 FROM exam;
或者可以省写AS:
SELECT name 姓名, math+chinese+english 总分 FROM exam;

4.2 使用WHERE子句进行过滤查询

查询姓名为张三的学生成绩:
SELECT * FROM exam WHERE name='张三';

查询英语成绩大于90分的同学:
SELECT * FROM exam WHERE english>90;

查询总分大于230分的所有同学:
SELECT name 姓名, math+chinese+english 总分 FROM exam WHERE math+chinese+english>230;

查询英语分数在 80-100之间的同学:
SELECT * FROM exam WHERE english BETWEEN 80 AND 100;

查询数学分数为75,76,77的同学:
SELECT * From exam WHERE math IN (75,76,77);

查询所有姓张的学生成绩:
SELECT * FROM exam WHERE name LIKE '张%'; // 以‘张’开头就可以
SELECT * FROM exam WHERE name LIKE '张__'; // 以‘张’开头并且后面跟随两个字

查询数学分>70,语文分>80的同学:
SELECT * FROM exam WHERE math>70 AND chinese>80;

4.3 使用ORDER BY 对查询结果进行排序

SELECT col1, col2, col3... FROM table_name WHERE ... ORDER BY col1 ASC|DESC;

其中ASC代表升序(默认就是升序),DESC代表降序。

对语文成绩升序后输出:
SELECT name,chinese FROM exam ORDER BY chinese ASC;

对总分排序按从高到低的顺序输出:
SELECT name 姓名,math+chinese+english 总分 FROM exam ORDER BY 总分 DESC;

对姓张的学生的数学成绩降序输出:
SELECT name 姓名, math 数学 FROM exam WHERE name LIKE '张%' ORDER BY 数学 DESC;

4.4 聚合函数

1、COUNT -- 用来统计符合条件的行的个数

统计一个班级共有多少学生:
SELECT COUNT(*) FROM exam;

统计数学成绩大于90的学生有多少个:
SELECT COUNT(*) FROM exam WHERE math>90;

2、SUM -- 用来将符合条件的记录的指定列进行求和操作

统计一个班级数学总成绩:
SELECT SUM(math) FORM exam;

统计一个班级语文、英语、数学各科的总成绩:
SELECT SUM(chinese),SUM(english),SUM(math) FROM exam;

统计一个班级语文、英语、数学的成绩总和:
SELECT SUM(IFNULL(chinese,0)+IFNULL(english,0)+IFNULL(math,0)) FROM exam;
// 在执行计算时,只要有null参与计算,整个计算的结构都是null,IFNULL关键字是为了让查询值为null是给定一个默认值

统计一个班级语文成绩平均分:
SELECT SUM(chinese)/COUNT(*) 语文平均分 FROM exam;

3、AVG -- 用来计算符合条件的记录的指定列的值的平均值

求一个班级数学平均分:
SELECT AVG(math) FROM exam;

求一个班级总分平均分:
SELECT AVG(IFNULL(chinese,0)+IFNULL(english,0)+IFNULL(math,0)) FROM exam;

4、MAX/MIN -- 用来获取符合条件的所有记录指定列的最大值和最小值

求班级最高分和最低分:
SELECT MAX(IFNULL(chinese,0)+IFNULL(english,0)+IFNULL(math,0)) FROM exam;
SELECT MIN(IFNULL(chinese,0)+IFNULL(english,0)+IFNULL(math,0)) FROM exam;

4.5 分组查询

当表中某个列中的值有重复时,我们可以用GROUP BY来进行分组查询。具体分组原理可以参考:https://blog.csdn.net/u014717572/article/details/80687042
例如有如下一张订单表orders:

订单表

对订单表中商品归类后,显示每一类商品的总价:
SELECT product,SUM(price) FROM orders GROUP BY product;

查询购买了几类商品,并且每类总价大于100的商品:
SELECT product 商品,SUM(price) 总价 FROM orders GROUP BY product HAVING SUM(price)>100;

查询单价小于100而总价大于150的商品的名称:
SELECT product FROM orders WHERE price<100 GROUP BY product HAVING SUM(price)>150;

WHERE子句和HAVING子句的区别:
(1)WHERE子句在分组之前进行过滤,HAVING子句在分组之后进行过滤
(2)HAVING子句中可以使用聚合函数,WHERE子句中不能使用
(3)很多情况下使用WHERE子句的地方可以使用HAVING子句进行替代

5 SQL语句的书写顺序和执行顺序

书写顺序:SELECT FROM WHERE GROUP BY HAVING ORDER BY
执行顺序:FROM WHERE SELECT GROUP BY HAVING ORDER BY

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容