MYSQL
学习笔记1在MySQL中null和任何值都不相同,包括他本身。
格式:列名 unique;
格式:alter table 表名 add constraint 约束名 unique(列名);
删除格式:alter table 表名 drop index <唯一约束名>;
第一种格式没有约束名,默认列名为约束名
方式1:字段名 数据类型 default 默认值;
方式2:alter table 表名 modify 列名 类型 default 默认值;
删除默认值 :alter table 表名 modify 列名 类型 default null;
数值类型设置该约束,当指定约束不够指定长度时,左边填充0.
主键约束,自增长约束,非空约束,唯一约束,默认约束,零填充约束。
DQL
基本查询非常重要 简化语法: select列名 from表 where条件
group by order by having 聚合函数
正则表达式
修改和删除时,中间从表可以随便删除,但是两边的主表受从表依赖的数据不能删除或修改
多表联合查询
交叉连接查询 内连接查询 外连接查询 子查询 表自关联
-- all 的用法
select * from emp2 where age > all(select age from emp2 where dept_id = '1003');
-- any 类似于some
select * from emp2 where age > any(select age from emp2 where dept_id = '1003');
-- in 在范围内
select eid, ename,name from emp2 join dept2 where dept_id in(select deptno from dept2 t where name ='研发部' or name ='销售部') and deptno = dept_id;
-- exists 比in运算效率高,大数据量时,推荐使用
-- 关键字exists
-- 查询大于60的员工 用外部查询来决定
select * from emp2 a where exists(select * from emp2 where a.age >60);
select * from emp2 a where eid in(select eid from emp2 where a.age >60);
-- 查询有所属部门的员工信息
select * from emp2 a where exists(select * from dept2 b where a.dept_id = b.deptno );
select * from emp2 a where dept_id in(select deptno from dept2 b where a.dept_id = b.deptno );
create table if not exists t_sanguo(
eid int primary key,
ename varchar(20),
manager_id int,
foreign key (manager_id) references t_sanguo (eid) -- 添加自关联约束
);
-- 插入数据
insert into t_sanguo values(1,'刘协',null);
insert into t_sanguo values(2,'刘备',1);
insert into t_sanguo values(3,'关羽',2);
insert into t_sanguo values(4,'张飞',2);
insert into t_sanguo values(5,'曹操',1);
insert into t_sanguo values(6,'许褚',5);
insert into t_sanguo values(7,'典韦',5);
insert into t_sanguo values(8,'孙权',1);
insert into t_sanguo values(9,'周瑜',8);
insert into t_sanguo values(10,'鲁肃',8);
-- 查询每个人自己和上级 表本身自己相乘
select * from t_sanguo a,t_sanguo b;
select a.ename '三国人物',b.ename '上级' from t_sanguo a,t_sanguo b where a.manager_id = b.eid;
select a.ename '三国人物',b.ename '上级' from t_sanguo a left join t_sanguo b on a.manager_id = b.eid;
select a.ename '三国人物',b.ename '上级',c.ename '上上级' from t_sanguo a
left join t_sanguo b on a.manager_id = b.eid
left join t_sanguo c on b.manager_id = c.eid;