今天推进了关于约束以及多表查询的内容,下一步是事务以及关于连接数据库JDBC的学习。
点击查看代码
-- -- 约束
-- 1.概念:
-- ·约束是作用于列上的规则用于限制加入表的数据
-- ·约束的存在保证了数据库中数据的正确性、有效性和完整性
-- 2.约束的分类
-- 非空约束 NOT NULL :保证列中所有数据不能有null值
-- 唯一约束 UNIQUE :保证列中所有数据各不相同
-- 主键约束 PRIMARY KEY :主键是一行数据的唯一标识,要求非空且唯一
-- 检查约束 CHECK :保证列中的数值满足某一条件
-- 默认约束 DEFAULT :保存数据时,未指定值则采用默认值
-- 外键约束 FOREIGN KEY :外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- MySQL不支持检查约束
--
-- 示例:
-- CREATE TABLE emp(
-- id INT PRIMARY KEY auto_increment, 员工id 主键且自增长
-- --自动增长: auto_increment :当列是数字类型并且唯一约束
-- ename VARCHAR(50) NOT NULL UNIQUE, 员工姓名,非空且唯一
-- joindate DATE NOT NULL , 入职日期,非空
-- salary DOUBLE(7,2) NOT NULL, 工资,非空
-- bonus DOUBLE(7,2) DEFAULT 0 奖金,如果没有奖金默认为 0
-- );
-- 此外也可以建表后添加
-- 非空约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
-- 删除非空约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型;
-- 唯一约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
-- 删除唯一约束
-- ALTER TABLE 表名 DROP INDEX 字段名;
-- 主键约束
-- ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
-- 删除主键约束
-- ALTER TABLE 表名 DROP PRIMARY KEY;
-- 默认约束
-- ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
-- 删除默认约束
-- ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
-- 外键约束
-- 1.概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- 添加约束
-- CREATE TABLE 表名(
-- 列名 数据类型,
-- ...
-- [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列 名)
-- );
-- 或
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主列表名);
-- 删除约束
-- ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
--
-- 需要注意的是如过添加了外键约束应该先创建主表且应该先添加主表数据
--
--
-- 多表查询
-- 如果 SELECT * from emp,dept;其中emp和dept是两个表名,那么将会进行笛卡尔积,即A,B集合所有组合。
-- 所以,需要消除无效数据。
-- 如 连接查询示例(内连接) :SELECT * FROM emp,dept WHERE emp. dep_id = dept.did;
-- 多表查询即从多张表查询数据
-- 包括:
-- 连接查询:
-- · 内连接:相当于查询A,B交集数据
-- · 外连接:
-- --------· 左外连接:相当于查询A表所有数据和交集部分数据
-- --------· 右外连接:相当于查询B表所有数据和交集部分数据
--
-- 内连接查询语法:
-- 隐式内连接:SELECT 字段列表 FROM 表一,表二...WHERE 条件;
-- 显示内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN表2 on 条件;
-- 隐式内连接示例:查询emp的name,gender和dept表的dname
-- SELECT emp.name,emp.gender,dept.dname from emp,dept where emp. dep_id = dept.did;
-- 给表可以起别名:
-- SELECT t1.name,t1.gender,t2.dname from emp t1,dept t2 where emp. t1_id = t2.did;
-- 显示内连接示例:
-- SELECT *from emp inner join dept on emp.dep_id = dept.did;
--
-- 外连接查询语法:
-- 左外连接:SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接:SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
-- 左外连接示例:查询emp表所有数据和对应的部门信息
-- SELECT *from emp LEFT join dept on emp.dep_id = dept.did;
-- 右外连接示例: 查询dept表所有数据和对应的员工信息
-- SELECT *from emp RIGHT join dept on emp.dep_id = dept.did;
--
-- 子查询;查询中会嵌套查询,称嵌套查询为子查询
-- 子查询根据查询结果不同,作用不同:
-- ·单行单列:作为条件值,使用 = != > < 等进行条件判断
-- SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);
-- ·多行单列:作为条件值,使用 in 等关键字进行条件判断
-- SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);
-- ·多行多列:作为虚拟表
-- SELECT 字段列表 FROM (子查询) WHERE 条件;
--
-- 简单示例:
-- 1.查询工资高于猪八戒的员工信息-->单行单列
-- SELECT *FROM emp where salary > (SELECT salary from emp where name = '猪八戒'); //嵌套
-- 2.查询 '财务部'和'市场部'所有的员工信息-->多行多列
-- SELECT * FROM emp where dep_id in (SELECT did from dept WHERE dname = '财务部 ' OR '市场部');
-- 3.查询入职日期是'2011-11-11'之后的员工信息和部门信息
-- SELECT * from (SELECT *from emp where join_date > '2011-11-11') t1 ,dept where t1.dep_id = dept.did;
--