mysql進階查詢

來源:互聯網
上載者:User

標籤: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進階查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.