# 多行子查询
# 多行比较操作符
/*
IN 等于列表中任意一个
ANY 需要和单行比较符号一起使用,和子查询查询的某一个值比较(任意、任一)
ALL 需要和单行比较操作符一起使用,和子查询返回的所有值比较
SOME 实际上是ANY的别名,作用和ANY相同,一般常用ANY
# 非法使用子查询
*/
# 非法使用子查询
select employee_id,last_name
from employees
where salary in(
select min(salary)
from employees
GROUP BY department_id
);
# ANY / ALL
# 返回其他job_id中比job_id为'IT_prog'部门仁义工资的员工的员工号,姓名,job_id 以及salary
select employee_id,last_name,salary
from employees
where job_id<>'IT_PROG'
AND salary < all(
SELECT salary
FROM employees
where job_id='IT_PROG'
);
# 查询平均工资最低的部门id
# mysql中聚合函数不能嵌套
select min(avg(salary))
from employees
GROUP BY department_id;
# 第九章 约束
/*
1 基础知识
1.1 为什么要学约束?为了保障数据的完整性
1.2 什么叫约束? 对表中字段的限制
1.3 约束的分类
角度1:约束的字段的个数
单列约束 vs 多列约束
角度2:约束的作用范围
列级约束:将此约束声明在对应字段的后面
表级约束:在表中所有字段都声明完,在所有字段的后面声明的约束
角度3:约束的作用(或功能)
(1) NOT NULL 非空约束
(2) UNION 唯一性约束
(3) PRIMARY KEY 主键约束
(4) FOREIGN KEY 外键约束
(5) CHECK 检查约束
(6) DEFAULT 默认值约束
1.4 如何添加/删除约束
CREATE TABLE 时添加约束 删除约束
# 2 如何查看表中的约束
*/
select * from information_schema.TABLE_CONSTRAINTS where table_name='employees';
# not null 非空约束 只能用列级约束,不能用表级约束
create DATABASE dbtest;
use dbtest;
# 在 CREATE TABLE 时添加约束
create table test(
id int not null,
last_name VARCHAR(10) not null,
email VARCHAR(15),
salary INT
);