MySQL--表数据得增删改查

首先准备一张表

 ---准备表

   CREATE TABLE ExamResult(

   id INT PRIMARY KEY  auto_increment,
   name VARCHAR (20),
   JS DOUBLE ,
   Django DOUBLE ,
   OpenStack DOUBLE
);


INSERT INTO ExamResult VALUES  (1,"yuan",98,98,98),
                               (2,"xialv",35,98,67),
                               (3,"alex",59,59,62),
                               (4,"wusir",88,89,82),
                               (5,"alvin",88,98,67),
                               (6,"yuan",86,100,55);

增加表数据

-- 插入一条数据
INSERT [into] tab_name (filed1,filed2...) VALUES (value1,value2..);

-- 插入多条数据
INSERT [into] tab_name VALUES (value1...),
                              (value1...),
                              (value1...);
-- set插入:通过键值对插入
INSERT [into] tab_name SET filed1=value1,filed2=value2...;

注解

filed(字段)和values(属性值)一一对应!
若省略filed,则values后面得属性值必须和表中字段一一对应得写全。

修改表记录

-- WHERE语句指定更新那些行,如果没有WHERE子句,则更新所有行。
UPDATE tab_name SET filed=value1 [WHERE 语句];

删除表记录

-- WHERE语句指定删除哪些记录,不指定则删除整张表数据
DELETE FROM tab_name [WHERE 语句];

注意

DELETE语句只能删除表内容,不能删除表本身。

TRUNCATE TABLE tab_name;

TRUNCATE语句删除表中所有得数据,此语句先摧毁表,再建立一个新表。(此种方式删除得数据不能在事务中恢复)。

查询表记录(单表查询)

学习各种数据库,最最最最重要得来了。表数据得查询!

-- 普通得查询语句
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。
SELECT [DISTINCT] *|filed1,filed2.... FROM tab_name

上面的是最普通的查询语句,在tab_name后面还可以跟:
1.WHERE语句(筛选,过滤,必须放在分组前使用)(最常用的)
2.GROUP BY(分组)
3.HAVING(筛选,过滤,一般放在分组之后使用,并且可以使用聚合函数)
4.ORDER BY (排序)
5.LIMIT (限制条数)
注:select查询的字段还可以通过关键字as赋予别名。

1.
使用where子句进行过滤查询:

-- 查询姓名为XXX的学生成绩
select * from ExamResult where name='yuan';
-- 查询英语成绩大于90分的同学
select id,name,JS from ExamResult where JS>90;
-- 查询总分大于200分的所有同学
select name,JS+Django+OpenStack as 总成绩 from ExamResult where JS+Django+OpenStack>200 ;

2.
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。

-- select *|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
-- 对JS成绩排序后输出。
select * from ExamResult order by JS;
-- 对总分排序按从高到低的顺序输出
select name,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)) as 总成绩 from ExamResult order by 总成绩 desc;

3.
group by 分组查询:
注意,按照分组条件分组后,每一组只会显示第一条记录。
group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。

创建购物表:

        CREATE TABLE order_menu(
             id INT PRIMARY KEY auto_increment,
             product_name VARCHAR (20),
             price FLOAT(6,2),
             born_date DATE,
             class VARCHAR (20)
                                );


         INSERT INTO order_menu (product_name,price,born_date,class) VALUES
                                             ("苹果",20,20170612,"水果"),
                                             ("香蕉",80,20170602,"水果"),
                                             ("水壶",120,20170612,"电器"),
                                             ("被罩",70,20170612,"床上用品"),
                                             ("音响",420,20170612,"电器"),
                                             ("床单",55,20170612,"床上用品"),
                                             ("草莓",34,20170612,"水果");
-- 练习:对购物表按类名分组后显示每一组商品的价格总和
select class,SUM(price)from order_menu group by class;
-- 练习:对购物表按类名分组后显示每一组商品价格总和超过150的商品
select class,SUM(price)from order_menu group by class HAVING SUM(price)>150;

having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。

4.
limit用法:

SELECT * from ExamResult limit 1;
SELECT * from ExamResult limit 2,5;--跳过前两条显示接下来的五条纪录
SELECT * from ExamResult limit 2,2;

聚合函数
聚合函数: 先不要管聚合函数要干嘛,先把要求的内容查出来再包上聚合函数即可。-- (一般和分组查询配合使用)
– COUNT(列名):统计行的个数

-- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
select count(*) from ExamResult;

– SUM(列名):统计满足条件的行的内容和

-- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上
-- 注意:sum仅对数值起作用,否则会报错。
select sum(JS) as JS总成绩 from ExamResult;

– AVG(列名):求平均值

-- 求班级最高分和最低分(数值范围在统计中特别有用)
select Max((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
最高分 from ExamResult;
select Min((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
最低分 from ExamResult;

重点:Select from where group by having order by
– Mysql在执行sql语句时的执行顺序:
– from where select group by having order by
– 分析:

select JS as JS成绩 from ExamResult where JS成绩 >70; ---- 不成功
select JS as JS成绩 from ExamResult having JS成绩 >90; --- 成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值