MYSQL查询语句的使用及添加约束

mysql语句之查询

SELECT sal,comm,sal+comm AS total FROM emp;

结果:
MYSQL查询语句的使用及添加约束_第1张图片
任何数值和null值相加 都是null值
IFNULL 这时需要过滤空值 如果该值是空的就当做0来处理

SELECT sal,comm,sal + IFNULL(comm, 0) AS total FROM emp;

结果:
MYSQL查询语句的使用及添加约束_第2张图片
ORDER BY 排序 默认是升序的 ASC升序 | DESC降序

SELECT * FROM 表名 ORDER BY 字段名 ASC|DESC;
SELECT * FROM 表名 ORDER BY 字段名1 ASC|DESC,字段名2 ASC|DESC;

聚合函数

聚合函数是用来做纵向运算的函数(COUNT、MAX、MIN、SUM、AVG)

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

当需要纵向统计时使用COUNT

查询表中所有记录数:
    SELECT COUNT(*) FROM 表名;
查询表中某个字段的个数:
    SELECT COUNT(字段名) FROM 表名;
查询表中多个字段的个数:
    SELECT COUNT(字段1),COUNT(字段2) FROM 表名;
注意:使用COUNT查询的是不为null的记录数

SUM和AVG(自动过滤空值)

查询表中某个字段的总和:
    SELECT SUM(字段名) FROM 表名;
查询表中多个字段的总和:
    SELECT SUM(字段名1),SUM(字段名2) FROM 表名;
查询表中某个字段的平均值:
    SELECT AVG(字段名) FROM 表名;

MAX和MIN

查询表中某个字段最高和最低的值:
    SELECT MAX(字段名),MIN(字段名) FROM 表名;

分组查询

当需要分组查询时需要使用GROUP BY子句

例如查询每个部门的工资和,这说明要使用部门来分组。
实例如下:
    查询每个部门的部门编号和每个部门的工资和:
        SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
    查询每个部门的部门编号以及每个部门的人数:
        SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
    查询每个部门的部门编号以及每个部门工资大于1500的人数:
        SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
注意:凡是和聚合函数同时出现的字段名,一定要写在GROUP BY之后

HAVING子句(分组后使用的条件)

HAVING与WHERE的区别:
    1.HAVING是在分组之后对数据进行筛选,WHERE是在分组之前对数据进行筛选
    2.HAVING后面可以使用聚合函数,WHERE后面不可以使用聚合函数
例如: 查询工资总和大于9000的部门编号以及工资和:
    SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;

分页查询

LIMIT 参数1代表起始页 参数2代表一共显示几条记录

例如:
    SELECT * FROM 表名 LIMIT 0,5;
    表示查询5行记录,起始从0开始(即从第一行开始)

模糊查询

模糊查询使用关键字 LIKE

通配符:
    _ 代表任意一个字符
    % 代表任意0~n个字符
例如:
    // 代表查询到的是包含w的结果
    SELECT * FROM 表名 WHERE 字段名 LIKE '%w%'; 
    // 代表查询到的是以w开头的两个字符
    SELECT * FROM 表名 WHERE 字段名 LIKE 'w_'; 

数据的完整性

作用:保证用户输入的数据保存到数据库中是正确的
确保数据的完整性 = 在创建表时给表中添加约束

实体完整性:
实体即表中的一行(一条记录)代表一个实体
实体完整性的作用:标识每一行数据不重复
约束类型:主键约束(PRIMARY KEY) 唯一约束(UNIQUE) 自动增长列(auto_increment)

主键约束(PRIMARY KEY):
    注意:每个表都要有一个主键
    特点:数据唯一且不能为null

第一种添加方式:
    CREATE TABLE student(
        id int PRIMARY KEY,
        name varchar(50)
    );
第二种添加方式:(好处:可以添加联合主键)
    CREATE TABLE student1(
        id int,
        name varchar(50),
        PRIMARY KEY(id)
    );
联合主键是一个主键 只要两个字段不完全一致就可以都插入到数据库中
    CREATE TABLE student2(
        classid int,
        stuid int,
        name varchar(100),
        PRIMARY KEY(classid,stuid)
    );
第三种添加方式:
    CREATE TABLE student3(
        id int,
        name varchar(100)
    );
    // 通过修改表结构 添加主键约束
    ALTER TABLE student3 ADD CONSTRAINT PRIMARY KEY (id);
唯一约束(UNIQUE)
    特点:数据不能重复,可以有空值
    CREATE TABLE student4(
        id int PRIMARY KEY,
        name varchar(100) UNIQUE
    );
自动增长列(auto_increment)
    给主键添加自动增长的数值,列只能是整数类型
    注意:数据被删除了也会按照原来的数进行增长 不是主键也能添加自动增长列
    CREATE TABLE student5(
        id int PRIMARY KEY auto_increment,
        name varchar(100)
    );
    // 给主键插入空值,会自动给字段添加值
    INSERT INTO student5 VALUES(NULL,'zs');
    INSERT INTO student5 VALUES(NULL,'ls');

域完整性 限制单元格的数据内容
域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
非空约束 (not null) 和 默认值 (default)

CREATE TABLE student6(
    id int PRIMARY KEY,
    name varchar(50) not null,
    sex varchar(50) DEFAULT '男'
);
    // 错误插入 值不能为空
    // INSERT INTO student6 VALUES(1,NULL,'男');
    // 性别默认为男
    INSERT INTO student6 (id,name) VALUES(3,'wl');
    // 给null 会把null插入进去
    INSERT INTO student6 VALUES(2,'wl',NULL);

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

    CREATE TABLE student7(
        sid int PRIMARY KEY,
        name varchar(100)
    );
    CREATE TABLE score(
        score int,
        sid int,
        // 第一种创建外键
        // 建立表联系 FOREIGN KEY(当前表的字段) 
        CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
    );
    第二种创建方式:
    CREATE TABLE score1(
        score int,
        sid int
    );
    ALTER TABLE score1 ADD CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(id);

你可能感兴趣的:(MYSQL查询语句的使用及添加约束)