mysql多表查詢

來源:互聯網
上載者:User

標籤:mysql

多表查詢:

        實現多表查詢是要實現表串連:

                                     交叉串連:(笛卡爾乘積) 

              例子:select * from student,courses;

                                      自然串連:(內串連)

自然串連例子:   

      select * from students,course where student,courses where student.cid1=courses.cid;

      

表的別名:

            select   s.name,c.cname from student as s,course as c where s.cid1=c.cid

            

            

                                        外串連:(左外串連、右外串連)

                                        

                                          左外串連:。。。。。left join。。。。。on。。。。

      左外串連例子:select s.name,c.cname from student as s left join courses as c on s.cid1=c.cid;查看student表中學習課程的人,如果有沒有選學課程的人顯示null

                                          右外串連:。。。。。right join。。。。on。。。。

                                          

    右外串連例子:select s.name,c.cname from student as s right join courses as c on s.cid1=c.cid; 查看courses表中課程被某人學習的顯示所學的人,沒有的就顯示null。

    

注意:在使用外串連的時候在指定條件,不再使用where而是使用on來指定條件。

                                    

                                    

                                    自串連:

       自串連的例子:select s.name as stu,c.name as teacher from students as s,student as c where s.sid=c.tid;

      

      

      

      

 子查詢:

      例子:尋找所有同學中年齡大於平均年齡的同學:

      

           select name from student where age > (select avg(age) from students);  在子查詢中子查詢只能是單值。

                

             (2)在IN中使用子查詢:

  例子:顯示老師年齡和學生年齡一樣的同學:

  

  select name from student where age in(select age from tutors);

  

 

 (3)以查詢結果為表重新查詢:

 

 

  顯示查詢出的表中年齡大於等於20的人:

  

    例子:select name,age from (select name,age from student)as t where t.age>=20;

    

    

    

把兩個查詢的結果集合起來:

      (select name,age from student) union (select tname,age from tutors) ;

      

   聯集查詢:union

 

 練習:挑選出courses表中沒有被students中的cid2學習的課程的課程名稱:

 

 mysql> select CID,Cname from courses where CID  not in( select distinct CID2 from students where CID2 is not null);

       挑選出沒有教授任何課程的老師:

 mysql>select TID,Tname from tutors where TID NOT IN(SELECT Tid from courses);

 

    挑出students表中CID1有兩個或兩個以上 同學學習了的同一門課程的課程名稱:

msyql> select CID,Cname from courses where CID IN(select CID1 from students group by CID1 HAVING COUNT(CID1)>=2);

     顯示每一位老師及其所教授的課程;沒有老師教授的課程的保持為null:

     

  mysql> select  b.Tname, a.Cname from tutors as b left join courses as a on a.TID=b.TID;

                     

      顯示每一位老師及其所教授的課程,沒有老師教授的課程將其老師顯示為空白:

   mysql>  select  b.Tname, a.Cname from tutors as b right join courses as a on a.TID=b.TID;

   

   顯示每位同學CID1課程的課程名及其講授了相關課程的老師的名稱:

        

       mysql>  select name,Cname,Tname from students,courses,tutors where students.CID1=courses.CID AND courses.TID=tutors.TID;  

       

 

視圖:

     視圖就是儲存下來的select語句;

          基於基表的查詢結果。

          

    建立視圖:create view

                 協助:help create view

  建立視圖例子:create view sct as (select name,Cname,Tname from students,courses,tutors where students.CID1=courses.CID AND courses.TID=tutors.TID);

                        show tables 可以看到視圖也被當做表展現出來了。

                        

        注意:一般情況下是不允許往視圖中插入資料的。

        

       show table status\G 查看錶的狀態可以區分出視圖和基表的區別。

       刪除視圖:drop view view_name 

                      刪除視圖的協助命令:help drop view

                      

                      

                      查看視圖是怎麼建立出來的命令

                          show  create view view_name

                          show create view   view_name\G               

                      物化視圖:就是因為我們建立的視圖是一次select查詢結果,所以當select語句查詢的結果非常大的時候,在對視圖進行二次查詢,就會造成伺服器緩衝消耗非常的大。所以我們可以把這樣的視圖給儲存下來這樣來減少緩衝的消耗。這樣的好處是把查詢的結果直接儲存下來下次不用select語句了。壞處在於當基表更新了怎麼辦。  因此對於那些不是經常更新且資料量很大的表建議使用物化視圖,對於那些更新比較快的不建議使用物化視圖。 mysql不支援物化視圖!

    

    

    注意:查看錶示怎麼建立的(也就是建立的語句)命令: show create table tb_name 


本文出自 “wangconggao” 部落格,請務必保留此出處http://wangconggao.blog.51cto.com/3253868/1579684

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.