MYSQL学习笔记1

MYSQL学习笔记1

唯一约束

在MySQL中null和任何值都不相同,包括他本身。

格式:列名 unique;

格式:alter table 表名 add constraint 约束名 unique(列名);

删除格式:alter table 表名 drop index <唯一约束名>;

第一种格式没有约束名,默认列名为约束名

默认约束(default)

方式1:字段名 数据类型 default 默认值;

方式2:alter table 表名 modify 列名 类型 default 默认值;

删除默认值 :alter table 表名 modify 列名 类型 default null;

零填充约束(zerofill)

数值类型设置该约束,当指定约束不够指定长度时,左边填充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;

你可能感兴趣的:(mysql,学习,笔记)