zoukankan      html  css  js  c++  java
  • MySql自学小记(五) 子查询及连接查询

    如下为用到的表departmen,employee,project,

    
    CREATE TABLE department
    (
      dpt_name   CHAR(20) NOT NULL,
      people_num INT(10) DEFAULT '10',
      CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
     );
    
    CREATE TABLE employee
    (
      id      INT(10) PRIMARY KEY,
      name    CHAR(20),
      age     INT(10),
      salary  INT(10) NOT NULL,
      phone   INT(12) NOT NULL,
      in_dpt  CHAR(20) NOT NULL,
      UNIQUE  (phone),
      CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
     );
     
    CREATE TABLE project
    (
      proj_num   INT(10) NOT NULL,
      proj_name  CHAR(20) NOT NULL,
      start_date DATE NOT NULL,
      end_date   DATE DEFAULT '2015-04-01',
      of_dpt     CHAR(20) REFERENCES department(dpt_name),
      CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
     );
    

    想要知道名为“Tom"的员工所在部门做了几个工程。员工信息储存在employee表中,但工程信息储存在project表中。对于这样的情况,我们可以用子查询:

    SELECT of_dpt,COUNT(proj_name) AS count_project FROM project 
    GROUP BY of_dpt
    HAVING of_dpt IN
    (SELECT in_dpt FROM employee WHERE name='Tom');


    在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接(join)操作。连接的基本思想是把两个或多个表当作一个新的表来操作,如下查询出的是,各员工所在部门的人数:

    SELECT id,name,people_num
    FROM employee,department
    WHERE employee.in_dpt = department.dpt_name
    ORDER BY id;

     或者

    SELECT id,name,people_num
    FROM employee JOIN department
    ON employee.in_dpt = department.dpt_name
    ORDER BY id;

    本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15798994.html

  • 相关阅读:
    C# 获得 当年1月1号
    Mybatis快速入门
    maven项目无法读取src/main/java目录下的配置文件解决方法
    Jenkins之手动安装
    Ubuntu17安装maven3.5.2
    Ubuntu17安装Jenkins
    Spring之事务操作(注解)
    Spring之事务操作(配置文件)
    Spring之配置文件中引入其它配置文件
    【转】maven常用插件介绍
  • 原文地址:https://www.cnblogs.com/Knight02/p/15798994.html
Copyright © 2011-2022 走看看