SQL约束与策略
create table student(
id int primary key, //主键约束
name varchar(200) not null, //非空约束
idCard varchar(50) unique, //唯一性约束
age int auto_increment, //自动增长策略
add foreign key(category_id) references category(id)//外键约束
)
多表操作
多表关系
一对一
多对多
多对一
实践:省和市
CREATE TABLE province(
id INT PRIMARY KEY,
NAME VARCHAR(20),
description VARCHAR(20)
);
CREATE TABLE city(
id INT PRIMARY KEY,
NAME VARCHAR(20),
description VARCHAR(20)
add foreign key(id) references province(id);
);
多表查询
内连接
select * from A a,B b where a.字段 = b.字段;
外连接
以左表数据为基准,匹配右表,如果匹配到,将数据显示,如果匹配不
到,右表中的数据显示null
select * from A left join B on 条件
以右表数据为基准,匹配左表,如果匹配到,将数据显示,如果匹配不
到,左表中的数据显示null
select * from A right join B on 条件
自连接
查询出工资比小胡高的员工的姓名和工资
SELECT e1.name,e1.salary FROM emp e1,emp e2 WHERE
e1.salary>e2.salary AND e2.name='小胡'
子查询
子查询的结果是一个值的时候
Select * from emp where salary<(select avg(salary) from emp)
子查询结果是单列多行的时候
查询工资大于5000的员工,来自于哪些部门的名字
放在from后面的子查询叫做内建视图