目录
一.外键
外键用于建立和加强两个表数据之间的链接。
1.添加外键
alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键字段名);
eg:
前提:创建两个表 grade(id, name) student(sid, sname, gid)
为表student添加外键约束,具体语句如下:
alter table student add constraint FK_ID foreign key(gid) REFERENCES grade (id);
2.删除外键-需要解除两个表之间的关联关系时,就需要删除外键约束。
alter table 表名 drop foreign key 外键名;
二.交叉连接
SELECT * from 表1 CROSS JOIN 表2;
−交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积即行数的乘积。
三 内连接
SELECT 查询字段 FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段 = 表2.关系字段
或
SELECT 查询字段 FROM 表1 ,表2 WHERE 表1.关系字段 = 表2.关系字段
四 外连接
SELECT 所查字段
FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 表1.关系字段 = 表2.关系字段
WHERE 条件
1.左连接
左连接的结果包括LEFT JOIN子句中指定的左表的所有记录,和所有满足连接条件的记录。
2.右连接
右连接与左连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。
eg:Department(did, dname) Employee(id, name, age, did)
SELECT department.did, dname,name FROM department
LEFT JOIN employee on department.did=employee.did;
SELECT department.did, dname, name FROM department
RIGHT JOIN employee ON department.did=employee.did;
五 带IN关键字的子查询
eg:Department(did, dname) Employee(id, name, age, did)
1.查询存在年龄为20岁的员工的部门信息
SELECT * FROM department
WHERE did IN
(SELECT did FROM employee WHERE age=20);
2.查询不存在年龄为20岁的员工的部门信息。
SELECT * FROM department
WHERE did NOT IN
(SELECT did FROM employee WHERE age=20);
六 带EXISTS关键字的子查询
EXISTS关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUE或FALSE,当返回值为TRUE时,外层查询才会执行
eg:查询employee表中是否存在年龄大于21岁的员工,如果存在,则查询department表中的所有记录。Department(did, dname) Employee(id, name, age, did)
SELECT * FROM department
WHERE EXISTS
(select did from employee where age > 21);
七 带ANY关键字的子查询
eg:使用ANY关键字的子查询,查询满足条件的部门(最小)。
Department(did, dname) Employee(id, name, age, did)
SELECT * FROM department
WHERE did>any(select did from employee);
八 带ALL关键字的子查询
使用带ALL关键字的子查询,查询满足条件的部门(最大)。
Department(did, dname) Employee(id, name, age, did)
SELECT * FROM department
WHERE did>all(select did from employee);
九 带比较运算符的子查询
eg:使用带比较运算符的子查询,查询赵四是哪个部门的员工。
Department(did, dname) Employee(id, name, age, did)
SELECT did FROM department
WHERE did=(select did from employee where name='zhaosi');
注:•明确子查询的结果只有唯一的一个值才可以用比较运算符号