A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夕阳下的少年 初级黑马   /  2018-5-9 16:29  /  611 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马