对多张表进行查询操做
查询方式1:
笛卡尔积查询
select * from 表1,表2;
结果:让表1中的每一条记录和表2中每一条记录一次组合
表1 n条记录
表2 m条记录
最终查询结果:n * m 条
注意:
1.观察笛卡尔积查询的最终结果,不少数据没有实际做用
2.查询结果太多,对内存压力大
笛卡尔积查询优化(内链接)
加上条件
隐式内链接
select * from 表1,表2 where 表1.字段 = 表2.字段;
显示内链接语法
select * from 表1 inner join 表2 on 条件;
注意:内链接语法条件过滤时,使用的是 on 关键字
例1:select * from kecheng,teacher where kecheng.teacherid = teacher.tid;
例2:select * from kecheng inner join teacher on kecheng.teacherid = teacher.tid;mysql
外连接(outer join)(谁在前面就先显示哪一个表的数据)
左外链接 ---- left outer join
结果:
以左表为准,左表中的全部数据都有 + 右表中符合条件的数据(链接条件on和判断条件where)
右外链接 ---- right outer join
结果:
以右表为准,右表中的全部数据都有 + 左表中符合条件的数据
外链接和内链接的区别:
1.内链接获取的是严格符合条件的数据
2.外链接获取的是严格符合条件的数据 + 左表(left)/右表(right)中不符合条件的数据
子查询:一个查询的结果做为另一个查询的条件(一个查询中包含另外一个查询)
必须保证查询的结果为一个具体的值!!!(做为条件时)
难点:char与varchar的比较:
相同点:两者都是存储文本(字符串)的
不一样点:
1.数据声明的长度范围不一样
char --- 0 --- 255
varchar --- 0 --- 65535
拓展:varchar(10)
长度:在mysql 4.0 以前表明的字节数
在mysql 5.0 开始,表明字符数
2.底层存储格式不一样
char(10) ---- 'AB' ---- 'AB ' (已经定义了长度了,就像数组同样,你不用也有)
varchar(10) ---- 'AB' ---- '2AB' (有算法封装了长度,你定义的长度是最大长度)
A、varchar 空间分配更灵活
B、虽然char可能浪费空间,可是效率高
char 比 varchar 效率高
3.何时使用 char? 何时使用 varchar?
具体状况具体分析
用于固定格式的数据 char
不肯定格式 varchar
语句查询中的顺序:
select D_*
from 表名
where A_条件
group by B_字段
having C_条件
order by E_字段;
0、先执行from
一、执行where后的A_条件
二、执行group by的 B_字段,拆分红子表
三、执行having的C_条件,对子表进行筛选
四、执行select的D_*,将子表合成一张表
五、执行order by的E_字段,对4中的表进行排序(若是是用基础属性,就是按照符合条件的第一条的语句的基础属性在排序)
show create table 表名;
显示全部的建表信息(可用于查询约束名等而后对约束进行操做)算法
limitsql
select * from 表名 limit n, m; 用于显示数据库中从第(n+1)条数据开始的共m条语句数据库