多表查询
1. 交叉查询
笛卡尔积
格式:
select 字段列表 from 表a,表b;
查询得到的结果是这两个表中记录的所有组合情况,包含了许多无效的数据
2. 内连接查询
通过条件消除无效的数据
2.1 隐式内连接
格式:
select 字段列表 from 表a,表b where 条件;
2.2 显式内连接
格式:
select 字段列表 from 表a inner join 表2 where 条件;
注:inner可以省略,where可以用on替换
3. 外连接查询
outer 可以省略
3.1 左外连接
格式:
select 字段列表 from 表a left outer join 表b on 条件;
查询的结果是左表的全部和两表的交集
3.2 右外连接
格式:
select 字段列表 from 表a right outer join 表b on 条件;
查询的结果是右表的全部和两表的交集
4. 子查询
概念:查询中嵌套查询
练习:
- 查询分数最高的同学的所有信息
- 查最高分:; 结果是100分
- 查分数是最高分的人:select * from student where score = 100;
- 结合上两句:select * from student where score = ( select max(score) from student );
- select
s.sid , s.sname , s.score , c.cname
from
student s,class c
where
s.stu_cid = c.cid
and
score = (select max(score) from student);
- 查询分数低于平均分的人
- select cname,sname,score from student ,class where stu_cid = cid and score < (select avg(score) from student);
- 查询 “舞蹈班” 和 “奥术班” 所有同学的信息
- select cname,sname from class ,student where stu_cid = cid and stu_cid in ((select cid from class where cname in (‘舞蹈班’,’奥术班’)));
中文乱码问题
解决方案:
1、停止服务
2、在mysql的安装路径下找到my.ini
3、default-character-set=gbk
4、character-set-server=utf8
5、启动服务