Sql-day02
复习:
数据库类型:
- 数字 number(10) number(10,2) int
- 小数 float binary_float binary_double;
- 整数 Int
- 字符 char varchar2 varchar nvarchar2 nchar
- 日期Date timestamp(精确到毫秒)
- 存储的方法 to_date(时间,格式)
- 获取 to_char(时间字段,格式)
- 大类型 Clob blob ....
表连接
司机和车 两张表.
学生表
Stu (id,name,老师id,班级no);
1 小明 1
2 小花 2
3 小绿 2
教师表
Teachaer (id ,name,班级no)
1 帅老师
2 丑老师
班级表 与 学生关联, 学生表与老师关联.
同时查询出每个学生的老师的名字
---两表连接---
两表连接是通过一张表的一列字段或者多列字段与另外一张表中的列字段连接而建立起来的连接关系.
这些连接的字段就是连接的条件.
两表连接成功后,形成一个复合结果集.
两表连接方式有五种:
内连接,外连接,自然连接,交叉连接,自连接.
- 内连接 inner join 简写成 join
表A inner join 表B
Select * from 表A inner join 表B
on 连接条件;
内连接:只显示两张连接表相互匹配的记录.
内连接的条件可使用: 相等 ,不等,大于,小于.
内连接与自然连接的区别:内连接可能会有重复的数据.
- 自然连接
表A natural join 表B
Select * from表A natural join 表B;
自然连接:数据类型,字段名,数据值匹配,三者满足相匹配才会显示.
自动匹配数据类型相同,并且字段名字也相同的字段.
与此类都相同的字段的数据进行匹配,只有匹配的数据才会显示.
select * from stu s natural join teacher t ;
--注意:自然连接的数据是不会重复的.
select s.deptno from stu s natural join teacher t ;
--注意:报错:不能加匹配的字段为限定条件.
- 外连接 outer join 可把outer简写.
语法:
Select * from 表A outer join 表B
On 连接条件.
Select * from 表A , 表B
Where 连接条件(+). (+)表示此字段的表为从表.
左外,右外,全外
左外:left [outer] join
右外:right join
以左/右为主表,匹配另外一张表匹配的信息.显示主表和匹配信息.
全外:full join
两张表都是主表,全部显示.记录数是两个表记录之和.
自连接: 两张表,这两张表都是自己.
表中字段有与跟自己关联的字段.
4 交叉连接
交叉连接不带on子句,它返回的是两个表的所有记录的笛卡尔积:表A*表B的记录.
语法: 表A cross join 表B
Select * from 表A cross join 表B ;
Select * from 表A , 表B ;
5 自连接
本表 与 连接的表为同一张表,
使用自连接将自身表当做一个镜像来对待,能够得到一些特殊的数据.
语法:
Select * from 表A a, 表A b
Where a.字段1 = b.字段1 and a.字段2 =b.字段2;