美文网首页
mysql查询

mysql查询

作者: 蓝色海洋_bd2b | 来源:发表于2018-12-11 15:22 被阅读0次

    字段控制查询
    去除重复记录:

    查询所有学生name信息,去除重复信息

    SELECT DISTINCT name FROM students;

    把查询字段的结果进行运算,必须都要是数值型.

    SELECT *,字段1+字段2 FROM 表名;

    注意
    列有很多记录的值为null,因为任何东西与NULL相加的结果还是NULL,所以结算结果可能会出现NULL,下面使用了把NULL转化成数值0的函数IFNULL:
    SELECT *,age+IFNULL(score,0) FROM students;

    对查询结果起别名 在上面的查询中出现列名为sx+IFNULL(yw,0),这很不美观,现在我们给这一列起一个别名,为total:

    SELECT *,yw+IFNULL(sx,0) AS total FROM score;
    省略
    AS SELECT *,yw+IFNULL(sx,0) total FROM score;
    聚合函数:
    对查询的结果进行统计计算.

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

    分组查询1. 什么是分组查询将查询结果按照1个或者多个字段进行分组,字段值相同的为1组(例如:有10个人,女的站一排,男的站一排,把男女进行分组)
    SELECT gender FROM employee GROUP BY gender;

    对所有部门分组:

    SELECT department FROM employee GROUP BY department;
    根据gender字段来分组,gender字段的全部值只有两个('男'和'女'),所以分为了两组,当GROUP BY 单独使用时,只显示出每组的第一条记录,所以GROUP BY单独使用意义不大.

    1. 分组注意事项:在使用分组时,select后面直接跟着的字段一般都在出现在group by后 例子1: 对name和gender同时进行分组
      SELECT name,gender FROM employee GROUP BY gender,name;
      分组查询-使用1:
      GROUP BY+GROUP_CONCAT()
      GROUP_CONCAT(字段名)可以作为一个输出字段来使用.
      表示分组之后,根据分组结果,使用group_concat()来 放置每一组的某字段的值的集合.

    1.1 使用:
    在一组里面所有男性名字和女性名字:
    SELECT gender,GROUP_CONCAT('name') FROM employee GROUP BY gender;
    2.GROUP BY + 聚合函数通过:group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个'值的集合'做一些操作.

    1. GROUP BY + having:
      用分组查询后指定一些条件来输出查询结果,
      having作用和where一样,但是having只能用于GROUP BY.

    3.2 HAVING和WHERE的区别:
    HAVING是在分组后对数据进行过滤;
    WHERE是在分组前对数据进行过滤;
    HAVING后面可以使用分组函数(统计函数);
    WHERE后面不可以使用分组函数;
    WHERE是对分组前记录的条件,如果某行记录没有满足where子语句的条件,那么这行记录不参与分组;而HAVING是对分组后的数据约束;

    、数据完整性

    1. 什么是数据完整性:
      保证用户输入的数据保存到数据库中是正确的.

    假设给students表输入学号,学号显然不能重复,所以需要我们在创建表的时候添加一个约束,确保学号必须是唯一的,这样我们就必须输入正确的数据,不能输入重复学号。实际上我们在一开始创建表的时候,就可以确定哪些是可以为空哪些不能为空,哪些可以重复哪些不可以重复.

    1. 如何添加数据完整性:
      在创建表的时候给表添加约束.

    2. 完整性分类:
      实体完整性
      域完整性
      引用完整性

    约束类型:
    主键约束(primary key)
    唯一约束(unique)
    自动增长(auto_increment)

    主键约束3.1.1 特点:
    (创建)每个表中要有一个主键,
    数据唯一,且不能为null.

    唯一约束3.2.1 特点:
    指定列的数据不能重复.

    可以为空值
    添加方式:
    CREATE TABLE 表名(字段名1 数据类型 primary key,字段名2 数据类型);

    3.2.2 格式:
    CREATE TABLE students(
    id INT primary key,
    name VARCHAR(50) UNIQUE
    ).

    3.3 自动增长列3.3.1 特点:
    指定列的数据自动增长,即使数据删除,还是从删除的序号继续往下,一般我们会给主键设置为自动增长列.

    3.3.2 格式:
    CREATE TABLE 表名(
    字段名1 数据类型 primary key AUTO_INCREMENT,
    字段2 数据类型 UNIQUE);

    四、域完整性:

    1. 使用:
      限制此单元格的数据正确,不对照此列的其他单元格比较
      域代表当前的单元格

    2. 域完整性:
      2.1 数据类型
      数值类型
      日期类型
      字符串类型.

    2.2 非空约束(NOT NULL)

    CREATE TABLE stu(
    id int primary key auto_increment,
    name varchar(20) unique not null,
    gender char(1) default '男'
    )

    2.3 默认值约束(DEFAULT)CREATE TABLE 表名(字段名1 数据类型 primary key AUTO_INCREMENT,字段2 数据类型 UNIQUE NOT NULL,字段3 数据类型 DEFAULT '默认值');

    五、参照完整性介绍:

    1. 什么是参照完整性:
      是指表与表之间的一种对应关系.
      通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现.
      有对应参照完整性的两张表格,再对他们进行数据插入,更新,删除的过程中,系统都会将被修改表格与另外一张对应表格进行对照,从而阻止一些不正确的数据的操作.

    2. 数据库的主键和外键类型一定要一致.

    3. 两个表必须要是InnoDB引擎.

    4. 设置参照完整性后,外键当中的内值,必须得是主键当中的内容.

    5. 一个表设置当中的字段设置为主键,设置主键的为主表.

    6. 创建表时,设置外键,设置外键的为子表.

    对已有表添加外键关系:
    ALTER TABLE score ADD CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES student(id);

    七、MySQL--数据库设计三范式
    (1)、什么是数据库设计三范式设计数据库表的时候所依据的规范,共三个规范:

    1. 第一范式: 要求每一个字段原子性不可在分.
    2. 第二范式: 要求所有非主键字段完全依赖主键,不能产生部分依赖.
    3. 第三范式: 所有非主键字段和主键字段之间不能产生传递依赖.

    (2)、第一范式(1NF):数据库表中不能出现重复记录,每个字段是原子性的不能再分.
    存在问题:
    联系方式字段可以再分,不是原子性的
    关于列不可再分,应该根据具体的情况来决定,如联系方式(看公司具体需求)。

    (3)、第二范式(2NF):
    第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖.

    (4)、第三范式建立在第二范式基础上的,非主键字段不能传递依赖主键的字段(不要产生传递依赖).

    5、几个经典的设计:
    5.1 一对一:
    第一种方案:分为两张表存储,共享主键 第二种方案:分为两张表存储,外键唯一.

    5.2 一对多:
    分两张表存储,在多的一方添加外键,这个外键字段引用一的一方中的主键字段.

    5.3 多对多:
    分三张表存储,在学生表中存储学生信息,在课程表中存储课程信息,在学生选课表中存储学生和课程的关系信息.

    相关文章

      网友评论

          本文标题:mysql查询

          本文链接:https://www.haomeiwen.com/subject/wvoshqtx.html