Java学习笔记—MySQL基础(一)

1 知识归纳
  1.1 SQL语句:操作软件的语言
    DDL:定义 create
    DML:数据操作 insert/update/delete
    DCL:控制 grant
    DQL:查询 select

    DDL
      a) ceate database 库名 charset utf8
      b) create table 表名
      c) alter table add/modify/change/drop
      d) drop table
      e) drop database
      f) use 库名
      g) desc 表名
      h) show databases
      i) show tables
    DML
      a) insert
        insert into 表名(字段1,字段2,...,字段n) values(值1,值2,,值n)
      b) update
        update 表名 set 字段=值。。。 where 条件
      c) delete/truncate
        delete from 表名 where 条件            删除表中的数据,表结构还在;删除后的数据可以找回
        truncate 表名                                   TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
    DQL
      select 字段1,字段2,...字段n
      from 表名
      where 条件
      group by 字段
      having 组信息筛选
      order by asc/desc
      limit 起始位置, 个数

  1.2 数据类型
    a) tinyint smallint mediumint int bigint
    b) float double decimal(长度,位数)
    c) char varchar text
    d) date time datetime timestamp
    e) blob

  1.3 约束类型
    a) 主键约束:primary key
    b) 唯一约束:unique
    c) 默认约束:default
    d) 外键约束:foreign key
    e) 自增约束:auto_increment
    f) 非空约束:not null

  1.4 数据完整性
    a) 实体完整性
      primary key
      unique
      auto_increment

    b)域完整性
      数据类型
      default
      not null

    c)外键
      foreign key

    d)自定义
      触发器

  1.5 联表查询
    a)表关系:外键
      i. 一对多
      ii. 多对多
      iii.一对一
    b) 笛卡尔表
    c) 联表
      i. 内连接:inner join
      ii. 左连接::left join
      iii. 右连接:right join
    d) 子查询

2  简介
  2.1 数据库和数据管理软件
    数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
    数据库:存储、维护和管理数据的集合。
    数据库管理系统(DataBase Management System DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。

    用户通过数据库管理系统访问数据库中的数据。
    数据库软件是数据库管理系统,数据库是通过数据库管理系统创建和操作的。

  2.2常见数据库管理系统
    Oracle:Oracle数据库被认为是业界目前比较成功的关系型数据库管理系统。
    MySQL:由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
    DB2:DB2是IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
    Microsoft SQL Server:SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。

3 SQL语言
  3.1 概述
​    SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
​ ​      SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,并删除条目等操作。
    各数据库厂商都支持ISO的SQL标准,普通话
​      各数据库厂商在标准的基础上做了自己的扩展,方言

​     Create、Read、Update、 Delete 通常称为CRUD操作

  3.2 SQL语句分类
    DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等
    DML(Data Manipulation Language):数据操作语言,用来操作数据库记录(数据)
    DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别
    DQL(Data Query Language):数据查询语言,用来查询记录(数据)

4 DDL:定义库和表结构的语言
  CREATE TABLE 表名(
    字段1 字段类型(长度) 约束,
    字段2 字段类型(长度) 约束,
      ​ ...
    字段n 字段类型(长度) 约束
​    );

5  DML:主要就是对数据进行修改、插入、删除操作
  插入新数据 语法: INSERT INTO 表名(列名1,列名2 ...)VALUES (列值1,列值2...);
  修改数据 语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... [WHERE 列名=值]
  删除数据 语法 : DELETE From 表名 [WHERE 列名=值]

  注:在mysql中,
    字符串类型和日期类型都要用单引号括起来
    空值:null

6  DQL: select 列名 from 表名 where 条件 group by 分组 having 筛选分组的数据 order by 排序 limit 限定
  数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。

  语法: SELECT 列名 FROM表名 [WHERE --> GROUP BY-->HAVING--> ORDER BY-->Limit]

  SELECT selection_list                                      要查询的列名称
  FROM table_list                                                要查询的表名称
  WHERE condition                                             行条件
  GROUP BY grouping_columns                         对结果分组
  HAVING condition                                              组后的行条件
  ORDER BY sorting_columns                             对结果分组
  LIMIT offset_start, row_count                            结果限定

7  DQL查询语句
  7.1 简单查询
    查询所有列
      select * from stu;
    查询指定列
      select sname, age from stu;
  7.2 条件查询
    条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

    =、!=、<>、<、<=、>、>=;

    BETWEEN…AND;
      mysql> select * from stu where age>=30 and age<=60;
      mysql> select * from stu where age between 30 and 60;

    IN(set);

      mysql> select * from stu where age=65 or age=75 or age=85;
      mysql> select * from stu where age in (65, 75,85);

    IS NULL;
      mysql> select * from stu where age is null;
      mysql> select * from stu where age is not null;

    AND;并且

    OR;或者

    NOT;

  7.3 模糊查询
    当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。

    select * from stu where sname like ‘张%’
    select * from stu where sname like ‘_王%’


    通配符:
      _: 任意一个字符
      %:任意0~n个字符
  7.4字段控制查询
    7.4.1 去除重复记录

      mysql> select distinct age from stu;                         显示年龄,并且所有年龄都不会重复

      mysql> select distinct sname, age from stu;            将sname和age都相同的重复记录去除

    7.4.2  ifnull(字段,0):将该字段的值转换成0

      mysql> select sal, ifnull(comm,0) from emp;            查看雇员的月薪与佣金之和 


     
  7.5 排序
    需要对显示的数据按照一定的规则显示

    (1) 查询所有学生记录,按年龄升序排序
        mysql> select * from stu order by age asc;

    (2) 查询所有学生记录,按年龄降序排序
      mysql> select * from stu order by age desc;

    (3) 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
      select * from emp order by sal desc, empno asc;

  7.6 聚合函数:聚合函数是用来做纵向运算的函数
    COUNT():统计指定列不为NULL的记录行数;
    MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;


  7.7 分组查询
    当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。

    select 字段 from 表 group by 分组字段
      分组之后一般查询的是组信息:
      组人员个数
      组平均值
      组最大值
      组最小值
      组总和
      组名(按什么分组组名就是什么)

    注:凡和聚合函数同时出现的列名,则一定要写在group by 之后  

    7.7.1 HAVING子句
       having对组中数据进行筛选过滤的条件
       select 字段 from 表 group by 分组字段 having 组条件
      总结:
        where 条件
        order by 排序
        group by 分组
        having 分组过滤

      select 字段 from 表名 where 条件 group by 字段 having 过滤条件 order by 组字段

      mysql> select deptno, sum(sal) total from emp where mgr is not null group by deptno having total>9000 order by total asc;

      注:having与where的区别:
        1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
        2.having后面可以使用分组函数(统计函数),where后面不可以使用分组函数。

        3.where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

  7.8 限定结果
    limit
    select * from 表… limit 起始位置, 个数;

    select * from emp limit 0, 4 第一页

    select * from emp limit 4, 4 第二页

    select * from emp limit 8, 4 第三页

    select * from emp limit (page-1)*pageSize,pageSize

















posted @ 2019-04-15 00:41  JKgrid  阅读(119)  评论(0编辑  收藏  举报