mysql(三)
-- 1.增加一条记录insert
/*insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);*/
-- 插入多条数据
/*insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......), (value1,value2,.......),
...
(value1,value2,.......);*/
-- set插入: insert [into] tab_name set 字段名=值
-- 2.修改表记录 update tab_name set field1=value1,field2=value2,......[where 语句]
/* UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/
-- 3.删除表纪录
delete from tab_name [where ....]
/* 如果不跟where语句则删除整张表中的数据
delete只能用来删除一行记录
delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。
此种方式删除的数据不能在事务中恢复。*/
-- 删除表中所有记录。
delete from tab_name;-- 注意auto_increment没有被重置:
alter table employee auto_increment=1;
-- 使用truncate删除表中记录。
truncate table tab_name;
==================================================================
-- 查询表达式
SELECT *|field1,filed2 ... FROM tab_name
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
-- (1)select [distinct] *|field1,field2,...... from tab_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。
-- (2)select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名
-- (3)使用where子句,进行过滤查询。
-- where字句中可以使用:
-- 比较运算符:
> < >= <= <> !=
between 80 and 100 值在10到20之间
in(80,90,100) 值是10或20或30
like 'yuan%'
/*
pattern可以是%或者_,
如果是%则表示任意多字符,此例如唐僧,唐国强
如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__
*/
-- 逻辑运算符
在多个条件直接可以使用逻辑运算符 and or n
-- (4)Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。
-- select *|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
-- (5)group by 分组查询:
-- 注意,按分组条件分组后每一组只会显示第一条记录
-- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。
/*
having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛
选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。
*/
-- GROUP_CONCAT() 函数
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]
[,col_name ...]] [SEPARATOR str_val])
-- (6)聚合函数: 先不要管聚合函数要干嘛,先把要求的内容查出来再包上
聚合函数即可。
-- (一般和分组查询配合使用)
--<1> 统计表中所有记录
-- COUNT(列名):统计行的个数
-- SUM(列名):统计满足条件的行的内容和
--AVG(列名):平均数
--MAX,MIN(列名)
==================================================================================================================================
1、 创建成绩表,字段包括:学生姓名,语文成绩,数学成绩,英语成绩
create table score(
id int primary key auto_increment,
name varchar(20),
culture float,
mathematics float,
english float)
向表中插入多条数据;
insert into score(name,culture,mathematics,english) values
('egon',89,99,67),
('alex',95,85,100),
('wupeiqi',92,93,94),
('yuan',88,93,88),
('jack',96,97,95);
查询:
(1) 查询所有学生的数学成绩和总成绩
select name,mathematics,culture+mathematics+english as 总成绩 from score;
(2) 查询所有学生的语文和数学成绩和,按从高到低排序
select name,mathematics+culture from score order by mathematics+culture desc;
(2) 查询班级总成绩最高的学生姓名
select name, mathematics+culture+mathematics+english from score where mathematics+culture+mathematics+english=(SELECT Max(mathematics+culture+mathematics+english) from score);
(3) 查询班里所有姓李学生的总成绩最高的姓名
select name from score where mathematics+culture+mathematics+english=(select max(mathematics+culture+mathematics+english) from score where name like'li%');
2、创建一张某超市的购物表,字段包括:商品名,购物价格,商品生产日期,商品分类;
向该表中插入多条数据;
查询:(1)每一类商品的总价格
select class,sum(price) from supermarket group by class;
(2)统计每类商品各有多少
select class,count(price) from supermarket group by class;
(2)统计水果花了多少钱(两种方式实现)
select class,sum(price) from supermarket group by class limit 1,1;
select class,sum(price) from supermarket where class='A' group by class;
(3)统计购买的2017-01-12日生产的商品中价格最贵的商品(插入的数据中包括2017-01-12生产的商品)
select goods ,price from supermarket where price= (select max(price) from supermarket where date='2017-1-12');
(4)统一购买商品的总价格
select sum(price) from supermarket;