Day_08 MySQL的语法
**表数据的添加**
* 指定字段添加
* insert into 表名称 (字段名) values( 对应的字段的值)
* 给所有字段添加值
* insert into 表名称 values(按照字段的顺序,一次录入对应的字段的值)
* **直接向数据库中插入中文记录会出现错误!!!**
**解决方法:**
**show variables like '%character%'; --****查看数据库中与字符集相关参数:
**需要将MySQL****数据库服务器中的客户端部分的字符集改为gbk
**找到MySQL****的安装路径:my.ini文件,修改文件中[client]下的字符集
**表数据的查看**
* selsect * from 表名称
**查询字符集**
* show variables like '%charact%'
**修改表中的记录**
* update tab1 set 字段名='值' ; (修改所有的字段名的值)
* 指定字段修改值
* update 表名称 set 字段名='值' where id =2;
![img](file:///C:\Users\Administrator\AppData\Roaming\feiq\RichOle\1497512211.bmp)
* 一次性修改多个字段的值,我们可以直接用逗号隔开
* update 表名称 set 字段名 ='值' ,字段名='值',字段名='值' where 字段=字段等于什么的 ;
**删除表中的记录**
* delete from 表名 where 字段名=值;
* delete from 表名(删除以后可以使用rollback;恢复数据)事务可以作用在 DML上;删除之前 先开启事务 start transaction;
* start transaction ;(删除以后,不可以恢复)事务不能作用在DDL上
**查看表中的记录(重点)**
* **基本查询**
* 语法: select [distinct] 列名 from 表 [条件];
* 如果要去重查询的,必须加上distinct
* 环境
```sql
create table exam(
id int primary key auto_increment,
name varchar(20),
english int,
chinese int,
math int
);
insert into exam values (null,'张三',85,74,91);
insert into exam values (null,'李四',95,90,83);
insert into exam values (null,'王五',85,84,59);
insert into exam values (null,'赵六',75,79,76);
insert into exam values (null,'田七',69,63,98);
insert into exam values (null,'李老八',89,90,83);
```
* 查询所有学生考试成绩信息
select * from exam;
* 查询所有学生的姓名和英语成绩
select name,english from exam;
* 查看学生姓名和学生的总成绩
select name,english+chinese+math from exam;
* 别名查询
select name,english+chinese+math (as 就是给你计算出的名字重新命名) sum from exam;
* **条件查询**
* 使用where 字句
* <>数据库中不等于和Java中不一样,代表不等于
* ` > ,<,>=,<=,<>,=`
* like; 模糊查询
* in: 范围查询
* 条件关联 : and 先当&&, or相当于|| , not 不能为
* 查询李四学生的成绩
* select * from exam where name ='李四';
* 查询名称叫李四学生并且英文大于90分
* select * from exam where name='李四' and english>90;
* 查询姓李的学生的信息
* like 可以进行模糊查询 ,%在like中代表占位符. '_'只能代表一个字符,%可以代表多个字符
* '李_' 名字中必须是两个字,而且是姓李的.
* %李 名字以李结尾的
* %李% 名字中包含李的
* 李% 以李字 开头的
* select * from exam where name like '李%';
* 查询英语成绩是69,75,89学生的信息,查询的是英语成绩69到89 分之间的所有学生
* select * from exam where english in(69,75,89);
* **排序查询**
* 使用order by 字段名称 **asc(升序**)/**desc(倒序);**
* 查询学生信息, 并且按照语文成绩进行排序;
* select * from exam order by chinese;
* 查询学生信息,并且按照语文成绩倒叙排序:
* select * from exam order by chinese desc;
* 查询学生信息,先按照语文成绩进行倒叙排列,如果成绩相同的在按照英语成绩升序进行排列
* select * from exam order by chinese desc,english asc;
* 查询姓李的学生的信息,按照英语成绩降序排序
* select * from exam where name like '李%' order by english desc;
* **分组统计查询**
#### 分组统计查询
* 聚合函数的使用
* 求总和 sum,求英语成绩总和 (**按照字段求和,按列计算**)
* select sum(english) from exam;
* 查询英语成绩总和和数学成绩总和(**横向求和,按行计算**)
* select sum(english+math) from exam;
* 查询姓李的学生的英语和数学成绩的总和
* select sum(english),sum(math) from exam where name like '李%';
* 查询所有学生各科的总成绩:
* 第一种方法:
* select sum(english)+sum(chinese)+sum(math) from exam;
* 第二种方法:
* select sum(english+chinese+math) from exam;
* 加入english 中有一个人成绩么有录入成绩,那么我们需要这样求和通过ifnull做一下判断
* select sum(ifnull(english,0)+chinese+math) from exam;
* 获取所有学生的总数
* count();
* select count(*) from exam;
* 获取某一个姓氏的学生的个数
* select count(*) from exam where name like '李%';
* 常用的用来求最大值,最小值,平均数的语句
* 最大值 : select max(english) from exam;
* 最小值: select min(english) from exam;
* 平均数: select avq(english) from exam**;**
* **分组查询**
* 语法: 使用group by 字段名称;
* 环境准备
```sql
create table orderitem(
id int primary key auto_increment,
product varchar(20),
price double
);
insert into orderitem values (null,'电视机',2999);
insert into orderitem values (null,'电视机',2999);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'空调',1999);
```
* 按商品名称统计 ,每类商品所购的个数
* select product,count(*) from orderitem group by product; (group by 后面跟什么就是以什么分组)
* 按商品名称统计,每类商品锁花费的总金额:
* select product,sum(price) from orderitem group by product;
* 按商品名称统计 ,统计每类商品花费的总金额在5000元以上的商品
* select product,sum(price) from orderitem group by product having sum(price);
* 总结:使用规则
* S(select)...F(from)..W(where)..G(group by).. H(having)..O(order by);
* 即select from
|
|