MySQL单表的增删改查

1、SQL添加表的记录
语法:向表中插入某些列:
insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
     向表中插入所有列:
insert into 表名  values (值1,值2,值3…);
例:
insert into user (id,username,password) values (null,'aaa','123');
insert into user values (null,' 张三 ','123',23,'1993-09-01');
2、SQL修改表的记录
语法:update 表名 set 列名=值,列名=值 [where 条件];
a、修改某一列的所有值:
例:update user set password =‘abc’;
b、按条件修改数据
例:update user set password='xyz' where username='张三';
c、按条件修改多个列
例:update user set password='aaa',age=20  where username='张三';

3、SQL删除表的数据
语法:delete from 表名 [where 条件];
a、删除某一条记录
delete from user where id = 2;
b、删除表中的所有记录
delete from user;
*删除表中的记录有两种做法:
(1)delete from user;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用DML 语句上----删除后可以恢复。
(2)truncate table user;
删除所有的记录,属于DDL语句。将表删除,然后重建一个结构一样的表。 事务不能控制DDL。

4、SQL查看表的记录
--  学生成绩表
create table exam(
    id int primary key auto_increment,    --  编号
    name varchar(20),  --  学生姓名
    english int,     --  英语成绩
    chinese int,     --  语文成绩
    math    int --  数学成绩
);
a、基本查询
语法:select [distinct] *|列名 from 表 [条件];
(1) 查询所有学生考试成绩信息
select * from exam;
(2)查询所有学生的姓名和英语成绩
select name,english from exam;
(3)查询英语成绩信息(不显示重复的值)
select distinct english from exam;
(4)查看学生姓名和学生的总成绩
select name,english+chinese+math from exam;
(5)别名查询
select name,english+chinese+math as sum from exam;
b、条件查询
使用where子句
> , < , >= , <= , <> ,=
like:模糊查询
in:范围查询
条件关联:and , or ,not
(1)查询李四学生的成绩:
select * from exam where name = '李四';
(2)查询名称叫李四学生并且英文大于90分
select * from exam where name = '李四' and english > 90;
(3)查询姓李的学生的信息
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。
_只能代表一个字符,而%可以代表任意个字符。
* like ‘李_’ :名字中必须是两个字,而且是姓李的。
* like ‘李%’ :名字中姓李的学生,李字后可以是1个或任意个字符。
* like ‘%四’ :名字中以四结尾的。
* like ‘%王%’ :只要名称中包含这个字就可以。
select * from exam where name like '李%';
(4)查询英语成绩是69,75,89学生的信息
select * from exam where english in (69,75,89);
c、排序查询
使用order by 字段名称 asc(升序)/desc(降序);
(1)查询学生信息,并且按照语文成绩进行排序:
select * from exam order by chinese;
(2)查询学生信息,并且按照语文成绩倒序排序:
select * from exam order by chinese desc;
(3)查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语
成绩升序排序
select * from exam order by chinese desc,english asc;
(4)查询姓李的学生的信息,按照英语成绩降序排序
select * from exam where name like '李%' order by english desc;
d、分组统计查询
聚合函数使用
(1)sum();  求和
i> 获取所有学生的英语成绩的总和:
select sum(english) from exam;
ii> 获取所有学生的英语成绩和数学成绩总和:
select sum(english),sum(math) from exam;
iii> 查询姓李的学生的英语成绩的总和
select sum(english) from exam where name like '李%';
iv> 查询所有学生各科的总成绩:
select sum(english)+sum(chinese)+sum(math) from exam;
select sum(english+chinese+math) from exam;
上面的两条语句有什么不同?
* 第一条的语句是按照列的方式统计,英语成绩总和+语文成绩总和+数学成
绩总和。
* 第二条的语句先计算英语+数学+语文,然后再求和。成绩值若有null值,会
出错。* 使用ifnull的函数—如果值为null,用零代替。如下:
select sum(ifnull(english,0)+ifnull(chinese,0)+ifnull(math,0)) from exam;
(2)count();  统计个数
i> 获得学生的总数
select count(*) from exam;
ii> 获得姓李的学生的个数
select count(*) from exam where name like '李%';
(3)max();
获得数学成绩的最高分:
select max(math) from exam;
(4)min();
获得语文成绩的最小值
select min(chinese) from exam;
(5)avg();
获取语文成绩的平均值
select avg(chinese) from exam;
e、分组查询
语法: 使用 group by 列名  [having  条件]
创建一个商品订单表
create table orderitem(
     id int primary key auto_increment,
      product varchar(20),  --  商品类别名称
      price double    --  价格
);
(1)按商品名称统计,每类商品所购买的个数:
select product,count(*) from orderitem group by product;
(2)按商品名称统计,每类商品所花费的总金额:
select product,sum(price) from orderitem group by product;
(3)按商品名称统计,统计每类商品花费的总金额在5000元以上的商品
where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件
过滤(分组后条件过滤)需要使用一个关键字having
select product,sum(price) from orderitem  group by product having
sum(price) > 5000;
(4)按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且
按照总金额升序排序
select product,sum(price) from orderitem  group by product having
sum(price) > 5000 order by sum(price) asc;

S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);

你可能感兴趣的:(数据库,MySQ,单,增删改)