Exists子查询的语句
Select………………from表名 不相关子查询,只查找里面的内容
exists 和 in 是可以互换使用的,但in是逐个去查询,速度慢;而exists速度很快,它查询的结果只有两种:TRUE 或者FALSE,要么返回真,要么返回假 所以exists就分为了相关子查询、不相关子查询
子查询的注意事项:
任何允许使用表达式的地方都可以用子查询
嵌套在父查询SELECT语句的子查询可以包括:
SELECT语句FROM语句WHERE语句GROUP BY 语句HAVING 语句只出现在子查询中而没有出现在父查询中的列,不可以包含在输出列中
对连接分内连接和外链接
内连接使用比较运算符根据每个表的通用列中的值匹配两个表的行。
满足三大范式
第一范式 每列保持原子性
第二范式 除主键以外的其他字段,每个表只能做一件事情。
订单表:订单编号、订单日期、 价格
1 2018/1/1 200
2 2018/1/6 100
订单是主键没有重复的。
订单明细表:产品编号、订单编号、价格。
1 1 20
2 1 50
把两个合为一个订单表作为组件
子查询功能比较强大。
事物具备的属性:原子性、一致性、隔离性、持久性(对处理后的数据持久保持)。
原子性(Atomiccity): 事务是一个完整的操作,每一步都是不可以分的
一致性(Consistency): 当事务完成时,数据处于同一状态
隔离性(Isolation): 并发事务之间彼此隔离、独立,它不会以任何方式依赖或影响了其他事务
持久性(Durability): 事务完成后,对处理后的数据持久保持
开始事物、提交事物、撤销(回退)事物。
#转账---张二给转丽丽500元,求转账后两人个护的金额
USE mybank;
CREATE TABLE `bank`(
`customerName` CHAR(10), #用户名
`currentMoney` DECIMAL(10,2) #当前余额
);
VALUES('张二',1000);
INSERT INTO `bank`(`customerName`,`currentMoney`) VALUES('丽丽',1);
UPDATE `bank` SET `currentmoney` = `currentmoney` - 500
WHERE `customerName` = ' 丽丽' ;
UPDATE `bank` SET `currentmoney` = `currentmoney` +500
WHERE `customerName` = '丽丽' ;
多表连接查询
1.内连接(INNER JOIN)和外连接---左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)
查询学生的学号、姓名、成绩
SELECT studentNo,studentName,studentResult FROM student
INNER JOIN result ON student. studentNo = result.studentNo
使用INNER JOIN 内连,连接的两张表,两者必须要有共同匹配的内容!!!
LEFT JOIN 左侧的为主表 ;RIGHT JOIN 右侧的为 主表