#返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
SELECT last_name,job_id,salary from employees
where job_id=(SELECT job_id from employees where employee_id=143)
and salary>(SELECT salary from employees where employee_id=141);
#多行子查询的操作符
/*
in 等于列表中的任意一个
any 需要和单行比较的操作符一起使用,和子查询返回的某一个值比较
all需要和单行比较操作符一起使用,和子查询返回的所有值比较
some 实际上是any的别名,和any作用相同,一般常使用any
*/
#非法子查询
SELECT employee_id,last_name
from employees
where salary=(
SELECT min(salary)
from employees
GROUP BY department_id
);
#any/all
#返回其他jib_id中比job_id为'it_prog'部门任意工资低的员工的员工号,姓名,job_id以及salary
SELECT employee_id,last_name,job_id,salary
from employees
where job_id<>'it_prog'
and salary SELECT salary
from employees
where job_id='it_prog'
);
SELECT salary
from employees
where job_id='it_prog'
SELECT min(salary)
from employees
GROUP BY job_id='it_prog'
#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)unique 唯一性约束
(3)primary key 主键约束
(4)foreign key 外键约束
(5)check (检查约束)
(6)default (默认值约束)
1,4如何添加、删除约束
CREATE TABLE 时添加约束
ALTER TABLE 时添加约束
如何查看表中的约束
*/
SELECT * FROM information_schema.table_constraints WHERE table_name='test1';
#not null (非空约束)只能用列级约束,不能表级约束
CREATE DATABASE dbtest;
use dbtest;
#3.1 在create table 时添加约束
CREATE TABLE test1(
id int not null,
last_name VARCHAR(10) not null,
email VARCHAR(20),
salary int
);
desc test1;
insert into test1(id,last_name,email,salary)
VALUES(1,'tom','tom1@126.com',5000);
insert into test1(id,last_name,email,salary)
VALUES(2,null,'tom1@126.com',5000);