標籤:sel 篩選 htm exist having archive ctr 語句 tno
進階查詢基本用法
一、exists和notexists子查詢
1、exists子查詢
select 。。。。from 表名 where exists(子查詢);
2、not exsits 子查詢
select 。。。。from 表名 where not exists(子查詢);
二、子查詢的注意事項
1)子查詢語句可以嵌套在sql語句中任何錶達式出現的位置。
在select語句中,子查詢可以被嵌套在select語句的列,表,和查詢條件中,即select子句、from子句、where子句、group by子句和having子句。
①子查詢在select子句和from子句的使用文法。
select (子查詢)from 表名;
子查詢結果為單行單列,但不必指定列別名。
②子查詢在from子句的使用文法。
select * from (子查詢) As 表的別名;
注意:必須為表指定別名,一般返回多行多列資料記錄,可以當做一張暫存資料表。
三、分組查詢
1、使用group by進行分組查詢
①求各門課程學生的平均分:
select subjectNo ,avg(subjectresult)
from result
group by subjectNo;
②按照性別進行分組:
select count(*)AS人數,sex
from student
group by sex;
③查詢每個年級的總人數
select count(*) AS年級人數,gradeId
from student
group by gradeId;
2、多列分組查詢
統計每個年級的男女學生人數:
select grade AS年級,count(*) AS人數,sex AS性別
from student
group by grade,sex
order by grade;
3、使用having子句進行分組篩選
①查詢年級總人數超過2人的年級
select count(*) AS人數,grade AS年級
from student
group by grade
having count(*)>2;
②查詢平均分達到及格的課程資訊
select subjectNo AS課程編號,avg(studentresult) AS平均分
from result
group by subject
having avg(student_result)>=60;
③查詢每門課程及格總人數和及格學生的平均分
select count(*) AS總人數,avg(student_result)AS平均分,subjectNo AS課程
from result
where student_result>‘60‘;
group by subjectNo ;
④查詢每門課程及格人數而且及格平均分在80分以上的記錄。
select count(*) AS 人數,avg(student_result)AS 平平均分,subjectNo AS課程
from result
where student_result>‘60‘
group by subjectNo
having avg(student_result)>80;
四、多表串連查詢
1、多表串連的分類
①內串連查詢
使用 inner join或者where子句來 串連兩個表
(1)在where子句中指定串連條件
如:查詢學生姓名和成績
select student.name,result.student.result
from student,result
where student.studentNo=result.studentNo;
(2)在from子句中使用inner join 。。。on
如:查詢學生姓名和成績
select s.name,r.student_redult,r.studentNo
from student AS s
inner join result AS r on(s.studentNo=r.studentNo);
2、外串連查詢
①左外連結查詢
left join。。。on或者left outer join 。。。on
如:以學生表為主表,成績表為從表
select s.name,r.student_redult,r.studentNo
from student AS s
left outer join result AS r
on(s.studentNo=r.studentNo);
2.由外串連查詢
right join。。on或者right outer join。。on
如:以學生表為主表,成績表為從表
select s.name,r.student_redult,r.studentNo
from student AS s
right outer join result AS r
on(s.studentNo=r.studentNo);
五、外串連和內串連的區別
http://www.cnblogs.com/Ewin/archive/2009/10/05/1578322.html
mysql進階查詢