mysql数据库

数据库的概念

```
存储数据的仓库,你一台电脑装有数据库软件,你可以对外提供数据的增删改查服务,你这台电脑,就是一台,数据库服务器
常见数据库:
SQLServer 微软的 中小型关系型数据库 
MySQL 中小型的关系型数据库
Oracle 大型的关系型数据库
关系型数据库  :具有行和列的这种二维表结构的数据库  
非关系型数据: NOSQL  用键值关系来存储数据 类似 json 

操作数据库 增删改查

SQL:结构化查询语言,用来对关系型数据库进行操作,他是一套规范,关系型数据库,都会遵循此规范,但是
允许各家的数据库,有差异,这些差异,我们称之为 方言

  • SQL:语法
    对SQL语句我们习惯分为以下四类
  • sql分类:
    DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
    DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
    DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
    DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
  • DDL:
    创建数据库:create database 数据库名 例如: create database mydb;
    查询所有库:show databases;
    删除:drop database mydb;
    修改数据库编码:alter database mydb character set=‘gbk’;
    查看建库语句:show create database mydb;

我们要建表 删除表 对表头进行操作(增删改表头)

 切换库  use mydb;
查看改库下所有的表 show tables;
 查看表结构  desc 表名;  例如: desc student;

表头: id name age sal
创建表时,列名 是要有数据类型的
数据库中常见的列的数据类型

  • 列的数据类型:
    int:整型 id int,
    double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
    money double(5,2)
    char:固定长度字符串类型;
    name char(10) “张三”
    varchar:可变长度字符串类型;
    name varchar(10) “张三”

    text:字符串类型;存大格式的文本 比如存个小说 一般不用
    blob:字节类型;存字节类型的数据 比如电影字节 图片字节 但是一般不会把字节数据存到数据库当中
    date:日期类型,格式为:yyyy-MM-dd;
    time:时间类型,格式为:hh:mm:ss
    datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
    timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss
    如果该类型的字段不给赋值,则默认当前时间

  • 创建表:create table 表名(列名1 数据类型,列名2 数据类型2(长度), …);

      create table student(
        id int,
        name varchar(16),
        age int,
        sal double(5,2),
        birthday timestamp
      );
       列名的命名的规范:遵循java中的命名规范,记住不要拿MySQL中的关键字来命名
    
  • 修改表名:alter table 旧表名 rename to 新表名
    alter table student rename to stu;

  • 删除表 drop table 表名
    drop table student;

  • 表中 表头的操作 alter

      -- 添加一个列
      	alter table student add(phone varchar(11));
      -- 删除一个列
      alter table student drop phone;
    
  • 修改列名
    alter table student change name username varchar(20);

  • 修改列的数据类型
    alter table student modify username char(20);

alter table student change username username varchar(20);

  • 查看建表语句
    show create table student;

DML:给表中 插入数据,删除数据,修改数据

  • 插入数据 insert into 表名(字段名,字段名2,…) valuses(值1,值2,…);
    insert into student(id,name,age,sal) values(1,‘zhangsan’,23,555.55);

  • 字符串类型的类 值的话,用单引号引起来
    insert into student(name) values(‘wangwu’);

  • 日期类型的列 值的话 用单引号引起来
    yyyy-MM-dd hh:mm:ss
    insert into student(name,birthday) values(‘wangwu2’,‘2010-10-10 16:20:20’);
    insert into student(name,birthday) values(‘wangwu3’,null);

  • 如果说,我要给表中所有的字段都插入值 可以简写
    insert into student(id,name,age,sal,birthday) values(1,‘zhangsan2’,23,555.55,null);

  • 我要给表中所有的字段都插入值 可以简写
    insert into student values(10,‘zhangsan222’,23,555.55,null);

删除表中所有的数据

  • 这种方式:逐行删除
    delete from student; – 无条件的删除,删除表中所有数据
  • 删除表中所有的数据 那么还有一种方式
    truncate table 表名;-- 删除所有记录
  • 条件删除 where = > < >= <= and 并且 or 或者
    delete from student where name=‘zhangsan’;
    delete from student where name=‘zhangsan’ and birthday=‘2019-08-21 15:44:12’
    delete from student where name=‘zhangsan’ or name=‘wangwu2’ or name=‘wangwu3’;
    insert into student(id,name,age,sal) values(1,‘zhangsan’,23,555.55);
  • 修改表中的数据 update student set 字段名=‘修改的值’ , set 字段名 … where 条件
    • 不带有条件的修改
      update student set name=‘lisi’,age=30;
    • 带有条件的修改
      update student set name=‘wangwu’,age=25,sal=666.66 where name=‘zhangsan2’ and birthday=‘2019-08-21 15:52:59’;

DQL: select 查询表中的数据

  • 统配符 统配表中所有字段
    select * from student; – 查询表中所有的数据

  • 查询个别字段
    select id,name,sal from stdent;
    以上 就是不带有条件的查询

    • 条件查询 where
      条件查询:where 子句
      =、!=、<>(不等于)、<、<=、>、>=;
      BETWEEN…AND; 在什么范围之间
      IN(set);
      IS NULL;为空
      IS NOT NULL 不为空
      AND; 并且
      OR; 或者
      NOT;非
    • 模糊查询:like
      通配符
      • —:匹配单个任意字符
        比如: 我要查询姓名是3个任意字符组成的
        select * from student sname like=’___’;
        例如:我要查询第二个字符是m的
        select * from student where sanme like ‘_m%’;
      • %:匹配多个任意字符
        例如:我要查询名字中包含m的 select * from student where sname like ‘%m%’;
        例如我要查询名字是a开头的 select * from student where sname like ‘a%’;
        例如我要查询名字是b结尾的 select * from student wher like ‘%b’;
  • 字段控制:
    修改字段的别名:AS (可以省略)
    给字段起别名:
    例如: select sname as 姓名, sage 年龄 from student;
    给运算字段起别名:
    例如: select sname as 姓名, (工资+奖金) as 总收入 from student;
    给表起别名:给每一张表起一个别名。简化书写
  • 字段运算:
    null参与的运算,结果都为null
    比如 工资 是100 奖金是null 我们让这两个字段运算 那结果就为null
    一般会将null替换为0: ifnull(字段名称,如果是null的替换值) ifnull 是mysql的方言
    所以如果奖金字段为null 一般我们把奖金替换为0
  • 去除重复记录
    比如我查询工资是3000的 出现了多条工资为3000 的记录 那我只想展示一条3000的记录 所以可以用 distinct 去除重复记录
    DISTINCT
    例如: select distinct 工资 from student;
  • 排序: order by 默认升序排列 ASC 默认值 DESC 降序排列
    按工资从小到大排
    select * from student order by 工资 asc;
    按工资从大到小排
    select * from student order by 工资 desc
    如果出现多条工资一样的 那我们可以指定第二排序条件
    select * from student order by 工资 desc,奖金desc;

  • 聚合函数
    聚合函数是用来做纵向运算的函数:

    • COUNT():统计指定列不为NULL的记录行数; 统计个数的 比如我统计有多少个学生
      select count(sid) from student; 或者传个星 号 select count(*) from student; 一般不要传有null 值的字段
    • MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
      例如 查询工资最大值 select max(工资) as 最高工资 from student;
    • MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    • AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
      例如:计算平均 工资 select avg(工资) as 平均工资 from student;
  • 分组查询:group by
    一般配合聚合函数使用 查出的数据才有意义

    • 查询的字段:
      1.分组字段本身
      2.聚合函数
      比如我按部分编号分组 比如有三个部门 然后我求每个部门的平均工资 那展示出来的数据应该有三条
      例如: select 部门编号,AVG(工资) from student group by 部门编号;
      1.例如查询 每个部门的部门编号 已经每个部门工资大于1500的人数
      select 部门编号, count(*) from student where 工资>1500 group by 部门编号;
      注意这里的 where 是对分组前的条件限定 也就是说不满足条件的 不参与分组
    • where和having
      • where:在分组之前对条件进行限定。不满足条件,就不会参与分组
      • having:在分组之后,对结果集的筛选
        2.例如 我要查询 各个部门平均工资 大于2000 的部门

    select 部门编号,avg(工资) from student group by 部门编号 having avg(工资)>2000;

    1. 例如我要查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门

      上面这句话怎么理解呢? 首先查询各个部门 那肯定要按部门编号分组 分组前的条件限定是 员工工资大于1500的才参与分组
      计算出平均工资 然后对结果再进行筛选 筛选出 平均工资 大于2000的部门
      select 部门编号,avg(工资) from student group by 部门编号 where avg(工资)>1500 having avg(工资)>2000;

  • 分页查询:limit

    • limit 0,5 开始的记录索引, 每一页显示的条数 索引从0开始
      开始的记录索引 = (页码-1)*每一页显示的条数

      例如 我显示第一页 每页5条记录
      select * from student limit 0,5 ; 这是第一页 5 条记录
      select * from student limit 5,5 ; 这是第二页 5条记录
      select * from student limit 10,5 这是第三页 5条记录

    • oracle:rownum 分页方言

    • sqlserver:top 分页方言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值