查询语句

过滤空值

过滤空值 如果该值是空的 就当做0来处理
    SELECT IFNULL(字段名,0) FROM 表名

聚合函数

排序
    利用ORDER BY 关键字 来 约束表按照什么 条件来排序
    ASC代表升序 也是默认的
    DESC代表降序
    SELECT 字段名 FROM 表名 ORDER BY 字段名 ASC 

    聚合函数:
        SUM AVG MAX MIN COUNT
            SUM AVG MAX MIN 都可以自动过滤掉NULL,且不当做0处理

    查询表的记录数 关键字COUNT
    查询的是填写的字段名有几条记录,一行代表一条记录
    SELECT COUNT(字段名) FROM 表名;

    查询总和 关键字 SUM
    查询的是 某个字段的所有数据总和 这个字段得是全数字

    SELECT SUM(字段名) FROM 表名;

    查询最大值 关键字MAX
    SELECT MAX (字段名) FROM 表名;

    查询最小值 关键字MIN
    SELECT MIN(字段名) FROM 表名;

    查询平均值 关键字 AVG
    SELECT AVG(字段名) FROM 表名;

分组查询

分组查询 GROUP BY 关键字
    SELECT 字段名 FROM 表名 GROUP BY 字段名

    注意:分组查询时,查询的字段必须是分组的字段
    因为记录数要对应,
    例如查询的字段名可能有3条记录,而分组的字段只有2条记录,
    不能构成一个表格,就会报错

按条件查询

按条件查询 HAVING 关键字
    SELECT 字段名 FROM 表名 HAVING 筛选条件

    例如:查询工资总和大于9000的部门编号以及工资和
    SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;

    HAVING条件要放在分组之后且可以使用函数
    而WHERE是分组之前使用的筛选条件,且不能使用函数

分页查询

分页查询 LIMIT 关键字
    SELECT 字段名 FROM 表名 LIMIT 起始页,一共显示几条记录

    这里的起始页,如果是从第一页开始查询,那么起始页就是0

模糊查询

模糊查询 LIKE % 或 _ 关键字 
    %代表0-n个字符 
    _代表一个字符

    // 查询emp表格中 开头是w后面是任意几个字符的记录
    //w 后有0-n个字符 的记录 都可以被查询到
    SELECT * FROM emp WHERE ename LIKE 'w%';
    // 查询表格中 只要带有w字符的记录
    // w前有0-n个字符 w后有0-n个字符 都可以被查询到
    SELECT * FROM emp WHERE ename LIKE '%w%';
    // 查询表格中 w后只带有1个字符的记录
    // 0个和超过1个字符的记录都不会被查询到
    SELECT * FROM emp WHERE ename LIKE 'w_';
    // 查询表格中 w后只带有3个字符的记录
    // 0个和超过3个字符的记录都不会被查询到
    SELECT * FROM emp WHERE ename LIKE 'w___';

主键

主键 PRIMARY KEY 的特点:
        1.唯一
        2.不能是空的
    在创建表的时候 添加主键 可以保证数据的完整性

    添加主键的方式一:
    CREATE TABLE 表名(
        字段名 属性 PRIMARY KEY(主键),
    );

    添加主键的方式二:
    CREATE TABLE 表名(
        字段名 属性,
        PRIMARY KEY(要设为主键的字段名)
    );

    方式二的好处: 可以添加联合主键

    一旦确定主键,那么表中被设置为主键的属性就不能出现重复的,且不能为NULL

    创建方式三:
    CREATE TABLE 表名(
        字段名 属性
    );
    ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY(要设置为主键的字段名)

    ADD CONSTRAINT 是添加约束的意思

联合主键

CREATE TABLE 表名(
        字段名1 属性1,
        字段名2 属性2,
        字段名3 属性3,
        // 添加联合主键
        PRIMARY KEY(字段名1,字段名2)
    );

    当设置联合主键时,只要联合主键不完全一致,都可以插入到数据库中
        例如:
        字段名1       字段名2      字段名3
          1              1            a    --可以
          1              2            a    --可以
          2              1            a    --可以
          2              2            a    --可以
          1              1            a    --不可以
          1              2            a    --不可以
          2              2            a    --不可以
          2              1            a    --不可以

    前四条记录不完全一样,
    所以可以被插入到数据库中,
    但是后四条记录在前四条中已经插入过了,
    所以不能再被插入到数据库中,
    所以只要设置了联合主键的两个字段不完全一样,
    就可以被插入到数据库中
    而字段三没有被设置联合主键,所以完全一样或者不一样,
    都没有什么区别

外键

外键的作用:
        引用完整性(外键约束 让表与表之间,通过字段建立联系)


    设置外键 FOREIGN KEY 关键字
    外键要设置在从表中
    CONSTRAINT fk_从表名_设置外键的字段名 FOREIGN KEY(设置外键的字段名) REFERENCES 主表名(主表中,要和外键绑定的字段名)

    // fk_从表名_设置外键的字段名 
    // 这是自己取的名字,取什么都可以
    // 但是这样取名方便理解,一看就明白
    // fk代表外键的意思

    创建时,要先创建主表再创建从表,
    因为没有主表字段,
    那么从表的字段存在就没有任何意义了

    删除记录的时候要先删除从表中的记录,
    如果先删除主表的记录,
    那么从表的记录就完全没有意义了,
    所以要先删除从表的记录

    -- 主表
    CREATE TABLE student(
        sid INT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        sex VARCHAR(100) DEFAULT 'nan'
    );
    -- 从表
    CREATE TABLE score(
        id INT ,
        score INT NOT NULL,
        sid INT,
        -- 创建外键 建立表联系
        -- FOREIGN KEY(当前表的字段)
        -- REFERENCES student(sid);
        CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
    );

主表

mysql 设置id主键 modify mysql设置主键语句_mysql 设置id主键 modify

从表

mysql 设置id主键 modify mysql设置主键语句_主键_02

这里主表的sid和从表的sid是互相对应的

第二种添加外键的方式:
        ALTER TABLE 从表名 ADD CONSTRAINT fk_从表名_设置外键的字段名 FOREIGN KEY(sid) REFERENCES stu(id);

        // fk_从表名_设置外键的字段名 
        // 这是自己取的名字,取什么都可以
        // 但是这样取名方便理解,一看就明白
        // fk代表外键的意思

唯一约束

唯一约束 UNIQUE 关键字
    (不能重复,可以为有空值)
    CREATE TABLE 表名(
        字段名1 属性1,
        字段名2 属性2 UNIQUE
    );

自动增长列

自动增长列 auto_increment 关键字

    CREATE TABLE 表名(
        字段名1 属性1 auto_increment,
        字段名2 属性2
    );

    这里如果当字段名1为主键时,也可以插入NULL
    因为这个关键字会自动给字段添加值,
    且是+1增长的

域完整性

限制单元格的数据内容

值不为空 NOT NULL 关键字
    CREATE TABLE 表名(
        字段名1 属性1 NOT NULL,
        字段名2 属性2
    );

    当插入数据时,字段1不能为空


    默认值 DEFAULT 关键字
    CREATE TABLE 表名(
        字段名1 属性1 DEFAULT 默认值
    );

    当插入数据时,
    字段1没有填,
    那么就会自动将 默认值填上去

    例如:
    CREATE TABLE student(
        gender VARCHAR(100) DEFAULT 'nan'
    );  

    当插入数据 gender 没有填的时候,
    会默认将 'nan' 填上去