码迷,mamicode.com
首页 > 数据库 > 详细

Mysql--连接查询

时间:2016-08-13 11:20:19      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

  • 内连接查询
    •   意义:找到表和表之间的关系或者是桥梁。连接查询是查询两个或者两个以上的表时使用的。
    •   JOIN|CROSS JOIN| INNER JOIN    通过ON  连接条件(这三个方式都行)一般用JOIN进行连接,ON后面接连接条件
      --查询cms_user id,username        省份表中和用户表中都有id
      --查询省份表中的  provinces ,proName
      SELECT cms_user.id,username,proName FROM cms_user,provinces;--这个查询是不对的,因为两个表中都有id,查询结果不是真正想要的结果,而是形成了笛卡尔积的形式
      
      --cms_user的proId对应于省份表中的id
      SELECT cms_user.id,username,proName FROM cms_user,provinces
      
      WHERE cms_user.proId=provinces.id;
      
      --内连接(这个和上面的where的效果一样(先把每个表要查询东西写上,之后再写上条件)
      --查询cms_user表中的id,username,email,sex
      --查询provinces表中的proname
      SELECT u.id,u.username,u.email,u.sex,p.proName
      
      FROM 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.proName
      FROM cms_user AS u
      JOIN provinces AS p
      ON u.proId=p.id
      WHERE u.sex=;
      
      
      --对分组结果进行筛选,根据proname分组,选出组中人数大于等于1的,并且按照用户表中的id进行升序排序,限制显示条数(前两条)
      SELECT u.id,u.username,u.sex,p.proName,COUNT(*) AS Totalsum,GROUP_CONCAT(sex)
      FROM cms_user AS u
      JOIN provinces AS p--连接
      ON u.proId=p.id
      WHERE u.sex=
      GROUP BY p.proName
      HAVING COUNT(*)>=1
      ORDER BY u.id ASC
      LIMIT 0,2;
      ;
      
      --查询cms_news中的id,title
      --查询cms_cate中的cateName
      --连接条件:n.cId=c.id
      SELECT n.id,n.title,c.cateName --先写要查询的,
      FROM cms_news AS n --再写要连接的几个表
      JOIN cms_cate AS c
      ON 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.role
      FROM  cms_news AS n--三表连接cms_news  和cms_cate,,,cms_admin分别建立连接
      JOIN cms_cate AS c
      ON n.cId=c.id
      JOIN cms_admin AS a
      ON n.aId=a.id;
  • 外连接查询
    •   如果插入的错误数据(垃圾数据),内连接不能查询到这个垃圾数据。
    •   左外连接:LEFT JOIN 先去显示左表的全部记录然后再去右表查询出符合连接条件的记录
    •   右外连接: RIGHT JOIN 显示右表的全部记录及左表符合连接条件的记录
      --左外连接
      SELECT u.id,u.username,u.email,u.sex,p.proName
      
      FROM cms_user AS u       
        
      LEFT JOIN provinces AS p   
      
      ON u.proId=p.id;
  • 外键操作
    •   
      --创建部门表department(主表)
      --id depName
      
      CREATE TABLE IF NOT EXISTS deparment(
      id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      depName VARCHAR(20) NOT NULL UNIQUE
      )ENGINE=INNODB;
      
      INSERT deparment(depName) VALUES(教学部),
      (市场部),
      (运营部),
      (督导部);
      
      --创建员工表  子表 employee
      
      CREATE 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 FROM
      deparment AS d
      JOIN employee AS e
      ON 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--连接查询

标签:

原文地址:http://www.cnblogs.com/Kobe10/p/5766492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!