mysql_高级查询
2017-09-16 10:22
260 查看
1、嵌套子查询和相关子查询
子查询: 1、一个询语句中还包含其他查询。其中包含其他查询的查询叫父查询,被包含的查询叫子查询。 2、子查询也可以和UPDATE、INSERT、DELETE一起使用,语法类似于SELECT语句 。 3、子查询中可以再包含子查询,即允许多层嵌套。 select * from student where age>(select age from student where stuname='张宏'); 嵌套子查询:非相关子查询。 1、使用比较运算符的子查询 ###注意:将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个(单值) select * from student where age>(select age from student where stuname='张宏'); 2、使用[not] in 子查询 范围子查询。当子查询返回多值时,使用这种方式 select * from student where student where stuid in (select stuid from grade where courseid=1); 3、any all 子查询 #查询其他系中比信息系任意一个学生入学成绩低的学生信息 select stuname,ingrade from student where class<>'信息系' and ingrade< any (select max(ingrade) from student where class='信息系'); #查询其他系中比信息系所有学生数学成绩低的学生信息 select stuname,ingrade from student where class<>'信息系' and ingrade< all (select min(ingrade) from student where class='信息系'); 关联子查询:exists存在性查询
2、通过在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查
###使用关联字查询 EXISTS ,会对外层用loop逐条查询,每次查询都睡去查看对应的exists语句。 * 非关联子查询中子查询只会执行一次返回结果集 * 关联子查询存在性判断exists中子查询会重复执行,外层查询有多少条记录,内层子查询就要执行多少次,判断存在性。 select stuname from student where exists(select 1);
3、多表联接查询
1、内联接select s.stuid, s.stuname,g.courseid,g.grade,c.coursename from student s,grade g,course c where s.stuid = g.stuid and c.courseid=g.courseid and g.grade>=90 order by g.grade,g.courseid limit 5,5;
2、外联接
select s.stuid, s.stuname,g.courseid,g.grade from student s left join grade g on s.stuid = g.stuid where g.grade>90;
3、自联接
select e1.empno,e1.mgr,e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;
4、交叉联接:笛卡尔积
select * from student,grade;
5、使用表的别名
相关文章推荐
- mysql查询高级用法
- MySQL高级查询之连接查询、联合查询、子查询
- MySQL高级查询及其他总结
- MySQL的高级查询
- MySQL高级开发--查询SQL执行顺序
- MySQL高级查询——连接查询实例详解
- mysql高级查询技巧一二
- MySQL数据高级查询之连接查询、联合查询、子查询
- MySQL基础教程30-高级查询-group by子句
- MySQL数据高级查询之连接查询、联合查询、子查询
- MySQL高级查询——连接查询实例详解
- Mysql语法(3):高级查询2
- MySQL高级查询
- MySQL高级查询之与Group By集合使用介绍
- SQL——MySQL高级查询2
- mysql高级查询
- 将数组变成字符串。 implode (高级应用可用在mysql where in (1,1,3)查询)
- mysql 高级查询 汇总和分组函数
- 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
- MySQL高级查询——连接查询实例详解(内外自然连接)