)
SQL学习笔记3约束概念作用于表中字段上的规则限制存储在表中的数据目的保证数据库中数据的正确性、有效性和完整性分类示例create table users(id int primary key auto_increment comment ‘主键’,name varchar(10) not null unique,age int check(age0 age120),satus char(1) default ‘1’,gender char(1) comment ‘性别’);测试insert into users(name,age,gender) values(‘rosy’,‘19’,‘男’);不插入status默认赋值为1insert into users(name,age,satus,gender) values(‘tom’,‘19’,‘1’,‘男’),(‘nicky’,‘20’,‘0’,‘女’);id自增外键概念让两张表的数据之间建立连接从而保证数据的一致性和完整性语法添加外键示例alter table employadd constraint fk_emp_dept_id foreign key (dept_id) references dept(id);删除外键示例alter table employ drop foreign key fk_emp_dept_id;删除/更新行为语法alter table 表名 add constraint 外键名称 foreign key 外键字段 references 主表名主表字段名 on update cascade on delete cascade;示例alter table employadd constraint fk_emp_dept_idforeign key (dept_id)references dept(id)on update set null on delete set null ;多表查询多表关系一对多多对一举例部门与员工关系一个员工对应一个部门一个部门对应多个员工实现在多的那一方建立外键指向一的那一方的主键多对多案例学生与课程关系一个学生对应多个课程一个课程对应多个学生实现建立第三张中间表至少包含两个外键分别关联两方主键示例create table stu_cou(id int auto_increment primary key ,stuid int not null ,couid int not null,constraint fk_stuid foreign key (stuid) references student(id),constraint fk_couid foreign key (couid) references course(id));一对一案例用户与用户关系多用于单表拆分将基础字段放在一张表其他字段放在另一张表提升操作效率如下图实现在任意一方添加外键而不是在原来基础上设置成外键并设置成unique关联另一方主键多表查询概述笛卡尔积集合A和集合B的所有组成情况示例select * from emp,deptwhere emp.dept_iddept.id;–相乘后会得到所有组成情况以外键相等为条件去除无效情况内连接作用查询A、B交集部分的数据语法示例select emp.name,dept.name from emp,deptwhere emp.dept_iddept.id;select emp.name,dept.name from emp inner join depton emp.dept_iddept.id;外连接左外连接查询左表及交集部分所有数据语法右外连接查询右表及交集部分所有数据自连接注意1.当前表与自身连接进行查询必须使用到表别名2.内连接外连接皆可语法案例查询员工对应领导内连接select emp1.name,emp2.name from employ emp1 join employ emp2 on emp1.manageridemp2.id;看成一张员工表和一张领导表联合查询union查询概念把多次查询的结果合并起来形成一个新的查询结果集语法示例查询薪资低于5000和年龄大于50的员工select * from employ where salary5000union allselect * from employ where age50;此时筛选出的结果可能重复删去all即可去重注意联合查询合并的两个结果列数必须相同字段类型也需一致子查询概念sql语句中嵌套select语句称为嵌套查询又称子查询注select 也可以换成insert/update/delete标量子查询概念结果为单个值数字、字符串、日期示例select * from employ where dept_id(select id from dept where name‘销售部’);列子查询结果为一列常用操作符示例查询市场部和销售部的员工信息select * from employ where dept_id in (select id from dept where name‘销售部’ or name‘市场部’);查询比财务部所有人工资都高的员工信息select * from employ where salary all(select salary from employ where dept_id(select id from dept where name‘财务部’));行子查询结果为一行常用操作符 / / in / not in示例查询与张无忌薪资和直属领导相同的员工信息select * from employ where (salary,managerid)(select employ.salary,employ.managerid from employ where name ‘张无忌’);表子查询结果为多行多列常用操作符in示例查询入职日期在之后的员工信息及其部门信息select e.* , dept.* from (select * from employ where entrydate ‘2001-01-01’) eleft join dept on e.dept_iddept.id;