SQL学习笔记,多表查询,左右外连接,数据库设计的三范式
- SQL语句书写顺序
- 基础查询
- 别名查询(as可以省略)
- 去重关键字 distinct
- 模糊查询
- 查询之间 从小到大
- null值参与运算
- 条件查询:
- 运算符:
- like 模糊查询
- 分组查询
- 排序查询
- 聚合函数
- 多表查询
- 数据库三范式
SQL语句书写顺序
select• 字段列表from• 表名列表where• 条件列表gruop by• 分组列表order by• 排序limit• 分页
基础查询
别名查询(as可以省略)
// 列别名
select student as 学生 form student ;
//表别名
select s.name as 学生名称 form student as s;
去重关键字 distinct
格式 :
//格式:
select distinct name from student
模糊查询
%前后模糊% %:多个任意字符, _:一个任意字符
//格式:
select * from student where name like = "%张三%" // %张三% 等于 前后任意个字符,只要字符串内包含张三就会查询出来
查询之间 从小到大
between
null值参与运算
如果有null进行运算 infnull() //谁为null 就在括号里, KV K 为null V 替换成:值
条件查询:
运算符:
>大于 <小于 =等于 !=不等于 and 并且 or 或者 between x,y 之间的 in(1,2,3) 或者in 在范围中
like 模糊查询
order by descend ascend
分组查询
gruop by 分组个数
排序查询
order by 排序的字段 desc 降序 asc 默认 升序
聚合函数
count : 计算个数, max : 计算最大值, min: 计算最小值,sum:计算和,avg:计算平均值
格式:
select count(列名称) from 表 where 条件
多表查询
多表查询的思维逻辑:判断条件,从那些表查数据,条件是什么,查询哪些字段
隐式:使用where 条件消除无用数据
格式: select * from a,b where a.bid = b.id;
显式: 使用 inner join 条件使用 on //inner 可以省略不写
格式: select * from a, inner join b on a.bid = b.id
外连接
左外连接:
select * from a left join b where
左表所有的数据,和交集数据,
右外连接:
select * from a right join b where
右表所有数据,和交集数据
子查询
一条sql语句的条件是另外一条SQL语句的结果
单行单列 可以使用 运算符 > < = !=
单行多列 可以使用 使用 in (select ...)//适用于 集合
多航多列 可以使用 可以作为一张虚拟表 进行 多表查询
数据库三范式
设计数据库时需要遵循的规范
第一范式:每一列都是不可分割的原子数据项
第二范式:非码属性必须完全依赖于候选码
函数依赖, A-->B,如果通过a的属性值,可以确定 唯一B属性的值,就是B依赖A
例如:学号被姓名依赖
属性组: 多个属性,确定一个唯一的属性的值.
完全函数依赖,
如果A 是一个属性组,则B属性值的确定需要依赖A属性组中所有的属性值.
部分函数依赖,
如果A 是一个属性组,则B属性值的确定需要依赖A属性组中部分的属性值.
传递函数依赖
如果A->B ,B->C ,A的值,可以确定唯一B的属性值,B的值可以确定唯一C的属性值
则 A 传递B的值 给C,
码:如果在一个表中,一个属性或者一个属性组,被其他所有属性所完全依赖, 就称之为,码
第三范式:任何非主码不依赖于其他非主码,