数据库约束、聚合查询

一. 数据库约束

        1. 约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

        2. 案例

           以student表为例: 

-- 学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
    
   id INT  PRIMARY KEY,  --PRIMARY KEY:主键约束
   sn INT UNIQUE,       --UNIQUE 约束
   address VARCHAR(20) NOT NULL, --NULL约束
   name VARCHAR(20)  DEFAULT 'unkown', --DEFAULT:默认值约束
   qq_mail VARCHAR(20),
   sex varchar(1),
   check (sex ='男' or sex='女') --check约束
);

        FOREIGN KEY:外键约束
        外键用于关联其他表的主键 唯一键 ,语法:
foreign key (字段名) references 主表(列) 

        案例:创建student 表和 class表

-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
 id INT PRIMARY KEY auto_increment,
 name VARCHAR(20),
 `desc` VARCHAR(100)
);


-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT PRIMARY KEY auto_increment,
   sn INT UNIQUE,
   name VARCHAR(20) DEFAULT 'unkown',
   qq_mail VARCHAR(20),
 classes_id int,
 FOREIGN KEY (classes_id) REFERENCES classes(id)
);

二:聚合查询

        1.聚合函数

        常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有
               

         1.1 案列

--COUNT
--统计班级共有多少同学
SELECT COUNT(*) FROM student;
SELECT COUNT(0) FROM student;
-- 统计班级收集的 qq_mail 有多少个,qq_mail 为 NULL 的数据不会计入结果
SELECT COUNT(qq_mail) FROM student;

--SUM
-- 统计数学成绩总分
SELECT SUM(math) FROM exam_result;
-- 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;

--AVG
-- 统计平均总分
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;

--MAX
-- 返回英语最高分
SELECT MAX(english) FROM exam_result;

--MIN
-- 返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;

2. GROUP BY子句

        SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查 询时,SELECT 指定的字段必须是 分组依据字段 ,其他字段若想出现在 SELECT 中则必须包含在聚合函 数中。
select column1, sum(column2), .. from table group by column1,column3;
--查询每个角色的最高工资、最低工资和平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role;

3. HAVING

      GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING
        
--显示平均工资低于1500的角色和它的平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role 
having avg(salary)<1500;

猜你喜欢

转载自blog.csdn.net/qq_61576108/article/details/134332989