Mysql--串連查詢

來源:互聯網
上載者:User

標籤:

  • 內串連查詢
    •   意義:找到表和表之間的關係或者是橋樑。串連查詢是查詢兩個或者兩個以上的表時使用的。
    •   JOIN|CROSS JOIN| INNER JOIN    通過ON  串連條件(這三個方式都行)一般用JOIN進行串連,ON後面接串連條件
      --查詢cms_user id,username        省份表中和使用者表中都有id--查詢省份表中的  provinces ,proNameSELECT cms_user.id,username,proName FROM cms_user,provinces;--這個查詢是不對的,因為兩個表中都有id,查詢結果不是真正想要的結果,而是形成了笛卡爾積的形式--cms_user的proId對應於省份表中的idSELECT cms_user.id,username,proName FROM cms_user,provincesWHERE cms_user.proId=provinces.id;--內串連(這個和上面的where的效果一樣(先把每個表要查詢東西寫上,之後再寫上條件)--查詢cms_user表中的id,username,email,sex--查詢provinces表中的pronameSELECT u.id,u.username,u.email,u.sex,p.proNameFROM cms_user AS u       --串連第一張表  INNER JOIN provinces AS p   --串連的第二張表ON u.proId=p.id;   --通過ON來指定串連條件,這裡的條件是當user的表中的proid等會省份表中的id--第一個表要查詢的:查詢cms_user id,username,sex--第二個表要查詢的:查詢provinces prpName--ON後面的串連條件是:user表的proid等於省份表的id。--條件:cms_user的性別為男的使用者SELECT u.id,u.username,u.sex,p.proNameFROM cms_user AS uJOIN provinces AS pON u.proId=p.idWHERE u.sex=‘男‘;--對分組結果進行篩選,根據proname分組,選出組中人數大於等於1的,並且按照使用者表中的id進行升序排序,限制顯示條數(前兩條)SELECT u.id,u.username,u.sex,p.proName,COUNT(*) AS Totalsum,GROUP_CONCAT(sex)FROM cms_user AS uJOIN provinces AS p--串連ON u.proId=p.idWHERE u.sex=‘男‘GROUP BY p.proNameHAVING COUNT(*)>=1ORDER BY u.id ASCLIMIT 0,2;;--查詢cms_news中的id,title--查詢cms_cate中的cateName--串連條件:n.cId=c.idSELECT n.id,n.title,c.cateName --先寫要查詢的,FROM cms_news AS n --再寫要串連的幾個表JOIN cms_cate AS cON n.cId=c.id;--寫串連條件--cms_news id,title--cms_cate cateName--cams_admin username ,role--串連條件:cms——news和cms——cate的條件:n.cId=c.id        cms_news和cams_admin串連條件:SELECT n.id,n.title,c.cateName,a.username,a.roleFROM  cms_news AS n--三表串連cms_news  和cms_cate,,,cms_admin分別建立串連JOIN cms_cate AS cON n.cId=c.idJOIN cms_admin AS aON n.aId=a.id;
  • 外串連查詢
    •   如果插入的錯誤資料(垃圾資料),內串連不能查詢到這個垃圾資料。
    •   左外串連:LEFT JOIN 先去顯示左表的全部記錄然後再去右表查詢出符合串連條件的記錄
    •   右外串連: RIGHT JOIN 顯示右表的全部記錄及左表符合串連條件的記錄
      --左外串連SELECT u.id,u.username,u.email,u.sex,p.proNameFROM cms_user AS u         LEFT JOIN provinces AS p   ON u.proId=p.id;
  • 外鍵操作
    •   
      --建立部門表department(主表)--id depNameCREATE TABLE IF NOT EXISTS deparment(id TINYINT UNSIGNED KEY AUTO_INCREMENT,depName VARCHAR(20) NOT NULL UNIQUE)ENGINE=INNODB;INSERT deparment(depName) VALUES(‘教學部‘),(‘市場部‘),(‘運營部‘),(‘督導部‘);--建立員工表  子表 employeeCREATE TABLE IF NOT EXISTS employee(id TINYINT UNSIGNED KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED)ENGINE=INNODB;INSERT employee(username,depId) VALUES(‘KING‘,1),(‘QUEUE‘,2),(‘ZHANGSAN‘,4),(‘LISI‘,4),(‘WANGWU‘,5);--查詢員工的編號,使用者名稱,部門名稱   兩個表--串連條件 :e.depId=d.id;--內串連查詢SELECT e.id,e.username,d.depName FROMdeparment AS dJOIN employee AS eON e.depId=d.id;--刪除督導部(部門解散了,理論上裡面的員工也得解散,但是查詢員工表的時候,發現還是有員工在督導部下面)--這就是如果你對父表做操作的時候,發現子表中有資料和父表相關聯,就必須做一些操作,這裡外鍵可以使用SELECT FROM deparment WHERE proName=‘督導部‘;--建立外鍵--建表的時候建立--先建立父表,再建立子表,在子表中建立外鍵CREATE TABLE IF NOT EXISTS deparment(id TINYINT UNSIGNED KEY AUTO_INCREMENT,depName VARCHAR(20) NOT NULL UNIQUE)ENGINE=INNODB;CREATE TABLE IF NOT EXISTS employee(id TINYINT UNSIGNED KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED,FOREIGN KEY(depId) REFERENCES deparment(id)--外鍵)ENGINE=INNODB;

       

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.