精华内容
下载资源
问答
  • 复合语句以块为单位,可以用在任何一个单独语句能用到的地方,并且在复合语句中还可以嵌套使用符合语句。2.条件语句(1)简单的if语句,先判断条件是否成立,然后再执行语句。(2)if else语句当条件成立时,执行i.....

    1.复合语句

    最基本的语句。

    又称为块语句,定义一个类或者方法时,以"{   }"作为开始和结束的标记,方法体也是以"{   }"作为开始结束的标记。

    复合语句中的每个语句都是从上到下被执行。

    复合语句以块为单位,可以用在任何一个单独语句能用到的地方,并且在复合语句中还可以嵌套使用符合语句。

    2.条件语句

    (1)简单的if语句,先判断条件是否成立,然后再执行语句。


    (2)if  else语句

    当条件成立时,执行if部分的代码块,当条件不成立时,执行else里面的代码块。


    (3)多重if

      

    当前面的条件均不成立时,才会执行else里面的代码

    public static void main(String[] args) {
    
                      //多重if语句
            int age=25;
    
    	if(age<18){
    
    	    System.out.println("童年");
    
    	}
            else if(age<40)
    
    	{
    
    	    System.out.println("少年");
    	
            }else if(age<60){
    
    	    System.out.println("中年");
    
    	}
    
             else if(age>60){
    
            System.out.println("老年");
       
             }
                                                                 
                    
    }         

    (4)嵌套if语句



          只有当外层的的if语句成立时,才会判断内层的if条件。


    (5)switch多分支语句

    首先计算表达式的值,如果表达式的值和某个case后面的常量相同,则执行case后面的语句,直到遇到break为止。


    展开全文
  • 随着矿山开采逐步发展,井工开采会对边坡原有平衡状态造成破坏,从而使边坡稳定性降低,在此基础上采用相似模拟试验对复合采动下采动边坡变形破坏进行研究。研究结果表明:在井工开采掘进情况下,4~#矿层的初步来压步距、...
  • 选择行: 选择行是指查询满足指定条件的记录,可以通过WHERE子句实现 SELECT语句的基本格式: SELECT 列表达式 FROM <表名> WHERE <条件表达式>...复合条件查询 筛选商品类别为01,单价在2500元...

    选择行:
    选择行是指查询满足指定条件的记录,可以通过WHERE子句实现

    SELECT语句的基本格式:

    SELECT 列表达式
    FROM <表名>
    WHERE <条件表达式>
    

    简单查询:
    要求:筛选商品中“热点”的所有信息 //所有用*表示

    SELECT * FROM goods
    WHERE g_status='热点'
    

    复合条件查询
    筛选商品类别为01,单价在2500元以上的商品信息,要求以汉字标题显示商品号
    、商品名称、商品类别号和价格。 //用AS可以为列设置别名

    SELECT g_id AS 商品编号,g_Name AS商品名称,t_id AS 商品类别,g_Price AS 价格
    FROM goods
    WHERE t_id='01' AND g_Price>2500
    

    IN与截取字符串应用

    截取字符串学习网址:https://www.cnblogs.com/vofill/p/6806962.html

    任务:需要了解来自“湖南株洲”和“湖南长沙”两地会员的详细信息。

    SELECT * FROM Customers
    WHERE LEFT(c_address,4) IN ('湖南株洲','湖南长沙')
    

    LIKE模糊查询学习网址:https://www.cnblogs.com/shitaotao/p/7648203.html

    展开全文
  • 等值连接:只要符合where中的条件就可以连接 自然连接:在等值连接的基础上取消重复列 内,外连接都不能取消重复列,除非显式SELECT 列名,让其不重复 dep表: dep_emp表   复合条件连接 内连接 ...

    a).

    等值连接:只要符合where中的条件就可以连接

    自然连接:在等值连接的基础上取消重复

    内,外连接都不能取消重复列,除非显式SELECT 列名,让其不重复

        dep表:            dep_emp表              

                       

     复合条件连接

      内连接

    左连接

     

     

      

     

    b).复合条件连接(用where表示连接条件),是内连接,两者等价

     

    转载于:https://www.cnblogs.com/heyboom/p/9071220.html

    展开全文
  • 表一 字段:id、Cid(对应表二中的id) 表二 字段:id、uptime (时间型) 要删除表二中 uptime 为15天前的id对应的 表一中的Cid的行
  • 符合条件连接查询 四 子查询 五 综合练习 一 介绍  本节主题 多表连接查询 复合条件连接查询 子查询  首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不...

    MySQL之多表查询

    一 介绍

      本节主题

    • 多表连接查询
    • 复合条件连接查询
    • 子查询

      首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节省空间,数据的组织结构更清晰,解耦和程度更高,但是这些表本质上是不是还是一个整体啊,是一个项目所有的数据,那既然分表存了,就要涉及到多个表连接查询了,比如说员工信息一张表,部门信息一张表,那如果我想让你帮我查一下技术部门有哪些员工的姓名,你怎么办,单独找员工表能实现吗,不能,单独找部门表也无法实现,因为部门表里面没有员工的信息,对不对,所以就涉及到部门表和员工表来关联到一起进行查询了,好,那我们来建立这么两张表:

    复制代码
    #建表
    #部门表 create table department( id int, name varchar(20) );
    #员工表,之前我们学过foreign key,强行加上约束关联,但是我下面这个表并没有直接加foreign key,这两个表我只是让它们在逻辑意义上有关系,并没有加foreign key来强制两表建立关系,为什么要这样搞,是有些效果要给大家演示一下
    #所以,这两个表是不是先建立哪个表都行啊,如果有foreign key的话,是不是就需要注意表建立的顺序了。那我们来建表。 create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); #给两个表插入一些数据 insert into department values (200,'技术'), (201,'人力资源'), (202,'销售'), (203,'运营'); #注意这一条数据,在下面的员工表里面没有对应这个部门的数据 insert into employee(name,sex,age,dep_id) values ('egon','male',18,200), ('alex','female',48,201), ('wupeiqi','male',38,201), ('yuanhao','female',28,202), ('liwenzhou','male',18,200), ('jingliyang','female',18,204) #注意这条数据的dep_id字段的值,这个204,在上面的部门表里面也没有对应的部门id。所以两者都含有一条双方没有涉及到的数据,这都是为了演示一下效果设计的昂 ; #查看表结构和数据 mysql> desc department; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> desc employee; +--------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | sex | enum('male','female') | NO | | male | | | age | int(11) | YES | | NULL | | | dep_id | int(11) | YES | | NULL | | +--------+-----------------------+------+-----+---------+----------------+ mysql> select * from department; +------+--------------+ | id | name | +------+--------------+ | 200 | 技术 | | 201 | 人力资源 | | 202 | 销售 | | 203 | 运营 | +------+--------------+ mysql> select * from employee; +----+------------+--------+------+--------+ | id | name | sex | age | dep_id | +----+------------+--------+------+--------+ | 1 | egon | male | 18 | 200 | | 2 | alex | female | 48 | 201 | | 3 | wupeiqi | male | 38 | 201 | | 4 | yuanhao | female | 28 | 202 | | 5 | liwenzhou | male | 18 | 200 | | 6 | jingliyang | female | 18 | 204 | +----+------------+--------+------+--------+
    复制代码

     

    二 多表连接查询

    #重点:外链接语法
    
    SELECT 字段列表
        FROM 表1 INNER|LEFT|RIGHT JOIN 表2
        ON 表1.字段 = 表2.字段;

     

      1、交叉连接:不适用任何匹配条件。生成笛卡尔积

      

      补充一点:select 查询表的时候,后面可以跟多张表一起查询:

    复制代码
    mysql> select * from department,employee; #表用逗号分隔,看我查询时表的顺序,先department后employee,所以你看结果表的这些字段,是不是就是我们两个表字段并且哪个表在前面,哪个表的字段就在前面
    +------+--------------+----+------------+--------+------+--------+
    | id   | name         | id | name       | sex    | age  | dep_id |
    +------+--------------+----+------------+--------+------+--------+
    |  200 | 技术         |  1 | egon       | male   |   18 |    200 |
    |  201 | 人力资源     |  1 | egon       | male   |   18 |    200 |
    |  202 | 销售         |  1 | egon       | male   |   18 |    200 |
    |  203 | 运营         |  1 | egon       | male   |   18 |    200 |
    |  200 | 技术         |  2 | alex       | female |   48 |    201 |
    |  201 | 人力资源     |  2 | alex       | female |   48 |    201 |
    |  202 | 销售         |  2 | alex       | female |   48 |    201 |
    |  203 | 运营         |  2 | alex       | female |   48 |    201 |
    |  200 | 技术         |  3 | wupeiqi    | male   |   38 |    201 |
    |  201 | 人力资源     |  3 | wupeiqi    | male   |   38 |    201 |
    |  202 | 销售         |  3 | wupeiqi    | male   |   38 |    201 |
    |  203 | 运营         |  3 | wupeiqi    | male   |   38 |    201 |
    |  200 | 技术         |  4 | yuanhao    | female |   28 |    202 |
    |  201 | 人力资源     |  4 | yuanhao    | female |   28 |    202 |
    |  202 | 销售         |  4 | yuanhao    | female |   28 |    202 |
    |  203 | 运营         |  4 | yuanhao    | female |   28 |    202 |
    |  200 | 技术         |  5 | liwenzhou  | male   |   18 |    200 |
    |  201 | 人力资源     |  5 | liwenzhou  | male   |   18 |    200 |
    |  202 | 销售         |  5 | liwenzhou  | male   |   18 |    200 |
    |  203 | 运营         |  5 | liwenzhou  | male   |   18 |    200 |
    |  200 | 技术         |  6 | jingliyang | female |   18 |    204 |
    |  201 | 人力资源     |  6 | jingliyang | female |   18 |    204 |
    |  202 | 销售         |  6 | jingliyang | female |   18 |    204 |
    |  203 | 运营         |  6 | jingliyang | female |   18 |    204 |
    +------+--------------+----+------------+--------+------+--------+
    24 rows in set (0.12 sec)

    我们让employee表在前面看看结果,注意看结果表的字段

    mysql> select * from employee,department;
    +----+------------+--------+------+--------+------+--------------+
    | id | name | sex | age | dep_id | id | name |
    +----+------------+--------+------+--------+------+--------------+
    | 1 | egon | male | 18 | 200 | 200 | 技术 |
    | 1 | egon | male | 18 | 200 | 201 | 人力资源 |
    | 1 | egon | male | 18 | 200 | 202 | 销售 |
    | 1 | egon | male | 18 | 200 | 203 | 运营 |
    | 2 | alex | female | 48 | 201 | 200 | 技术 |
    | 2 | alex | female | 48 | 201 | 201 | 人力资源 |
    | 2 | alex | female | 48 | 201 | 202 | 销售 |
    | 2 | alex | female | 48 | 201 | 203 | 运营 |
    | 3 | wupeiqi | male | 38 | 201 | 200 | 技术 |
    | 3 | wupeiqi | male | 38 | 201 | 201 | 人力资源 |
    | 3 | wupeiqi | male | 38 | 201 | 202 | 销售 |
    | 3 | wupeiqi | male | 38 | 201 | 203 | 运营 |
    | 4 | yuanhao | female | 28 | 202 | 200 | 技术 |
    | 4 | yuanhao | female | 28 | 202 | 201 | 人力资源 |
    | 4 | yuanhao | female | 28 | 202 | 202 | 销售 |
    | 4 | yuanhao | female | 28 | 202 | 203 | 运营 |
    | 5 | liwenzhou | male | 18 | 200 | 200 | 技术 |
    | 5 | liwenzhou | male | 18 | 200 | 201 | 人力资源 |
    | 5 | liwenzhou | male | 18 | 200 | 202 | 销售 |
    | 5 | liwenzhou | male | 18 | 200 | 203 | 运营 |
    | 6 | jingliyang | female | 18 | 204 | 200 | 技术 |
    | 6 | jingliyang | female | 18 | 204 | 201 | 人力资源 |
    | 6 | jingliyang | female | 18 | 204 | 202 | 销售 |
    | 6 | jingliyang | female | 18 | 204 | 203 | 运营 |
    +----+------------+--------+------+--------+------+--------------+
    24 rows in set (0.00 sec)


    关于笛卡儿积:我们看一下上面的这些数据,有什么发现,首先看到这些字段都显示出来了,并且数据变得很多,我们来看一下,这么多条数据都是怎么来的,为什么会出现这么条数据,笛卡儿积这是一个数据名词,你可以去研究研究~~

      因为我们要进行连表查询,那么mysql并不知道你想要如何连接两个表的关系进行查询,那么mysql会将你两个表数据的所有组合关系都给你拼接成一条数据来显示,这样你就可以想查哪个关联关系的数据就查哪个了,如果还是不太理解看一下下面的图:

    复制代码

     

      
      关于笛卡儿积现象的解释图:

        

      

        咱们为了更好的管理数据,为了节省空间,为了数据组织结构更清晰,将数据拆分到了不同表里面,但是本质上是不是还是一份数据,一份重复内容很多的很大的数据,所以我们即便是分表了,但是咱们是不是还需要找到一个方案把两个本来分开的表能够合并到一起来进行查询,那你是不是就可以根据部门找员工,根据员工找部门了,对不对,但是我们合并两个表的时候,如何合并,根据什么来合并,通过笛卡儿积这种合并有没有浪费,我们其实想做的是不是说我们的员工表中dep_id这个字段中的数据和部门表里面的id能够对应上就可以了,因为我们知道我们设计表的时候,是通过这两个字段来给两个表建立关系的,对不对,看下图:

        

        我们的目标就是将两个分散出去的表,按照两者之间有关系的字段,能对应上的字段,把两者合并成一张表,这就是多表查询的一个本质。那么笛卡儿积干了什么事儿,就是简单粗暴的将两个表的数据全部对应了一遍,用处就是什么呢,它肯定就能保证有一条是对应准的,你需要做的事情就是在笛卡儿积的基础上只过滤出我们需要的那些数据就行了,笛卡儿积不是咱们最终要得到的结果,只是给你提供了一个基础,它不管对应的对不对,全部给你对应一遍,然后你自己去筛选就可以了,然后基于笛卡儿积我们来找一下对应的数据,看看能不能找到:

      2、内连接:只连接匹配的行

    复制代码
    #我们要找的数据就是员工表里面dep_id字段的值和部门表里面id字段的值能对应上的那些数据啊,所以你看下面的写法:
    mysql> select * from employee,department where employee.dep_id=department.id;
    +----+-----------+--------+------+--------+------+--------------+
    | id | name      | sex    | age  | dep_id | id   | name         |
    +----+-----------+--------+------+--------+------+--------------+
    |  1 | egon      | male   |   18 |    200 |  200 | 技术         |
    |  2 | alex      | female |   48 |    201 |  201 | 人力资源     |
    |  3 | wupeiqi   | male   |   38 |    201 |  201 | 人力资源     |
    |  4 | yuanhao   | female |   28 |    202 |  202 | 销售         |
    |  5 | liwenzhou | male   |   18 |    200 |  200 | 技术         |
    +----+-----------+--------+------+--------+------+--------------+
    5 rows in set (0.14 sec)
    拿到了我们想要的结果。
    
    但是你看,我们左表employee表中的dep_id为204的那个数据没有了,右表department表的id为203的数据没有了,因为我们现在要的就是两表能对应上的数据一起查出来,那个204和203双方对应不上。
    
    #再看一个需求,我要查出技术部的员工的名字
    mysql> select name from employee,department where employee.dep_id=department.id and department.name='技术';
    ERROR 1052 (23000): Column 'name' in field list is ambiguous
    #上面直接就报错了,因为select后面直接写的name,在两个表合并起来的表中,是有两个name字段的,直接写name是不行的,要加上表名,再看:
    mysql> select employee.name from employee,department where employee.dep_id=department.id and department.name='技术';
    +-----------+
    | name      |
    +-----------+
    | egon      |
    | liwenzhou |
    +-----------+
    2 rows in set (0.09 sec)
    结果就没问题了
    复制代码

     

      但是你看上面的代码有没有什么不太好的地方,虽然我们能够完成我们的事情,但是代码可读性不好,所以以后不要这么写,但是看图:

        

        所以mysql为我们提供了一些专门做连表操作的方法,这些方法语义更加的明确,你一看就知道那些代码是连表的,那些代码是查询的,其实上面的连表也是个查询操作,但是我们为了区分明确,连表专门用连表的方法,查询就专门用查询的方法。那这些专门的方法都是什么呢,看后面的内容:

      3 、外链接之左连接:优先显示左表全部记录

    复制代码
    #以左表为准,即找出所有员工信息,当然包括没有部门的员工
    #本质就是:在内连接的基础上增加左边有右边没有的结果  #注意语法:
    mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;
    +----+------------+--------------+
    | id | name       | depart_name  |
    +----+------------+--------------+
    |  1 | egon       | 技术         |
    |  5 | liwenzhou  | 技术         |
    |  2 | alex       | 人力资源     |
    |  3 | wupeiqi    | 人力资源     |
    |  4 | yuanhao    | 销售         |
    |  6 | jingliyang | NULL         |
    +----+------------+--------------+
    复制代码

     

     

     

      4 、外链接之右连接:优先显示右表全部记录

    复制代码
    #以右表为准,即找出所有部门信息,包括没有员工的部门
    #本质就是:在内连接的基础上增加右边有左边没有的结果
    mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;
    +------+-----------+--------------+
    | id   | name      | depart_name  |
    +------+-----------+--------------+
    |    1 | egon      | 技术         |
    |    2 | alex      | 人力资源     |
    |    3 | wupeiqi   | 人力资源     |
    |    4 | yuanhao   | 销售         |
    |    5 | liwenzhou | 技术         |
    | NULL | NULL      | 运营         |
    +------+-----------+--------------+
    复制代码

     

      5 、全外连接:显示左右两个表全部记录

    复制代码
    全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
    #注意:mysql不支持全外连接 full JOIN
    #强调:mysql可以使用此种方式间接实现全外连接
    select * from employee left join department on employee.dep_id = department.id
    union
    select * from employee right join department on employee.dep_id = department.id
    ;
    #查看结果
    +------+------------+--------+------+--------+------+--------------+
    | id   | name       | sex    | age  | dep_id | id   | name         |
    +------+------------+--------+------+--------+------+--------------+
    |    1 | egon       | male   |   18 |    200 |  200 | 技术         |
    |    5 | liwenzhou  | male   |   18 |    200 |  200 | 技术         |
    |    2 | alex       | female |   48 |    201 |  201 | 人力资源     |
    |    3 | wupeiqi    | male   |   38 |    201 |  201 | 人力资源     |
    |    4 | yuanhao    | female |   28 |    202 |  202 | 销售         |
    |    6 | jingliyang | female |   18 |    204 | NULL | NULL         |
    | NULL | NULL       | NULL   | NULL |   NULL |  203 | 运营         |
    +------+------------+--------+------+--------+------+--------------+
    
    #注意 union与union all的区别:union会去掉相同的纪录,因为union all是left join 和right join合并,所以有重复的记录,通过union就将重复的记录去重了。
    复制代码

     

    三 符合条件连接查询

    复制代码
    #示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门
    select employee.name,department.name from employee inner join department
        on employee.dep_id = department.id
        where age > 25;
    
    #示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示
    select employee.id,employee.name,employee.age,department.name from employee,department
        where employee.dep_id = department.id
        and age > 25
        order by age asc;
    复制代码

     

    四 子查询

      子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。

      来,我们简单来个需求:技术部都有哪些员工的姓名,都显示出来: 1、看一下和哪个表有关,然后from找到两个表  2、进行一个连表操作 3、基于连表的结果来一个过滤就可以了

    复制代码
    #我们之前的做法是:先连表
    mysql> select * from employee inner join department on employee.dep_id = department.id; 
    +----+-----------+--------+------+--------+------+--------------+
    | id | name      | sex    | age  | dep_id | id   | name         |
    +----+-----------+--------+------+--------+------+--------------+
    |  1 | egon      | male   |   18 |    200 |  200 | 技术         |
    |  2 | alex      | female |   48 |    201 |  201 | 人力资源     |
    |  3 | wupeiqi   | male   |   38 |    201 |  201 | 人力资源     |
    |  4 | yuanhao   | female |   28 |    202 |  202 | 销售         |
    |  5 | liwenzhou | male   |   18 |    200 |  200 | 技术         |
    +----+-----------+--------+------+--------+------+--------------+
    5 rows in set (0.10 sec)
    
    #然后根据连表的结果进行where过滤,将select*改为select employee.name

    mysql> select employee.name from employee inner join department on employee.dep_id = department.id where department.name='技术';

      +-----------+
      | name |
      +-----------+
      | egon |
      | liwenzhou |
      +-----------+
      2 rows in set (0.09 sec)

    复制代码

     

      然后看一下子查询这种方式的写法:它的做法就是解决完一个问题,再解决下一个问题,针对我们上面的需求,你想,我们的需求是不是说找技术部门下面有哪些员工对不对,如果你直接找员工表,你能确定哪个dep_id的数值表示的是技术部门吗,不能,所以咱们是不是应该先确定一个技术部门对应的id号是多少,然后根据部门的id号,再去员工表里面查询一下dep_id为技术部门对应的部门表的那个id号的所有的员工表里面的记录:好,那我们看一下下面的操作

    复制代码
    #首先从部门表里面找到技术部门对应的id
    mysql> select id from department where name='技术';
    +------+
    | id   |
    +------+
    |  200 |
    +------+
    1 row in set (0.00 sec)
    
    #那我们把上面的查询结果用括号括起来,它就表示一条id=200的数据,然后我们通过员工表来查询dep_id=这条数据作为条件来查询员工的name
    mysql> select name from employee where dep_id = (select id from department where name='技术');
    +-----------+
    | name      |
    +-----------+
    | egon      |
    | liwenzhou |
    +-----------+
    2 rows in set (0.00 sec)
    上面这些就是子查询的一个思路,解决一个问题,再解决另外一个问题,你子查询里面可不可以是多个表的查询结果,当然可以,然后再通过这个结果作为依据来进行过滤,然后我们学一下子查询里面其他的内容,往下学。
    复制代码

     

    子查询:
    #1:子查询是将一个查询语句嵌套在另一个查询语句中。 #2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。 #3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字 #4:还可以包含比较运算符:= 、 !=、> 、<等

      1、带IN关键字的子查询

    复制代码
    #查询员工平均年龄在25岁以上的部门名,可以用连表,也可以用子查询,我们用子查询来搞一下
    select id,name from department
        where id in 
            (select dep_id from employee group by dep_id having avg(age) > 25);
    #连表来搞一下上面这个需求
    select department.name from department inner join employee on department.id=employee.dep_id 
        group by department.name 
        having avg(age)>25;
    总结:子查询的思路和解决问题一样,先解决一个然后拿着这个的结果再去解决另外一个问题,连表的思路是先将两个表关联在一起,然后在进行group by啊过滤啊等等操作,两者的思路是不一样的
    
    #查看技术部员工姓名
    select name from employee
        where dep_id in 
            (select id from department where name='技术');
    
    #查看不足1人的部门名(子查询得到的是有人的部门id)
    select name from department where id not in (select distinct dep_id from employee);
    复制代码

     

      2、带比较运算符的子查询

    复制代码
    #比较运算符:=、!=、>、>=、<、<=、<>
    #查询大于所有人平均年龄的员工名与年龄
    mysql> select name,age from emp where age > (select avg(age) from emp);
    +---------+------+
    | name | age |
    +---------+------+
    | alex | 48 |
    | wupeiqi | 38 |
    +---------+------+
    2 rows in set (0.00 sec)
    
    
    #查询大于部门内平均年龄的员工名、年龄
    select t1.name,t1.age from emp t1
    inner join 
    (select dep_id,avg(age) avg_age from emp group by dep_id) t2
    on t1.dep_id = t2.dep_id
    where t1.age > t2.avg_age; 
    复制代码

      

      3、带EXISTS关键字的子查询

        EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False
        当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists,和exists的效果就是反的

        

    复制代码
    #department表中存在dept_id=203,Ture
    mysql> select * from employee
        ->     where exists  
        ->         (select id from department where id=200); 
    +----+------------+--------+------+--------+
    | id | name       | sex    | age  | dep_id |
    +----+------------+--------+------+--------+
    |  1 | egon       | male   |   18 |    200 |
    |  2 | alex       | female |   48 |    201 |
    |  3 | wupeiqi    | male   |   38 |    201 |
    |  4 | yuanhao    | female |   28 |    202 |
    |  5 | liwenzhou  | male   |   18 |    200 |
    |  6 | jingliyang | female |   18 |    204 |
    +----+------------+--------+------+--------+
    
    #department表中存在dept_id=205,False
    mysql> select * from employee
        ->     where exists
        ->         (select id from department where id=204);
    Empty set (0.00 sec)
    复制代码

     

     

      练习:通过连表的方式来查询每个部门最新入职的那位员工

    复制代码
    company.employee
        员工id      id                  int             
        姓名        emp_name            varchar
        性别        sex                 enum
        年龄        age                 int
        入职日期     hire_date           date
        岗位        post                varchar
        职位描述     post_comment        varchar
        薪水        salary              double
        办公室       office              int
        部门编号     depart_id           int
    
    
    
    #创建表,只需要创建这一张表
    create table employee(
    id int not null unique auto_increment,
    name varchar(20) not null,
    sex enum('male','female') not null default 'male', #大部分是男的
    age int(3) unsigned not null default 28,
    hire_date date not null,
    post varchar(50),
    post_comment varchar(100),
    salary double(15,2),
    office int, #一个部门一个屋子
    depart_id int
    );
    
    
    #查看表结构
    mysql> desc employee;
    +--------------+-----------------------+------+-----+---------+----------------+
    | Field        | Type                  | Null | Key | Default | Extra          |
    +--------------+-----------------------+------+-----+---------+----------------+
    | id           | int(11)               | NO   | PRI | NULL    | auto_increment |
    | name         | varchar(20)           | NO   |     | NULL    |                |
    | sex          | enum('male','female') | NO   |     | male    |                |
    | age          | int(3) unsigned       | NO   |     | 28      |                |
    | hire_date    | date                  | NO   |     | NULL    |                |
    | post         | varchar(50)           | YES  |     | NULL    |                |
    | post_comment | varchar(100)          | YES  |     | NULL    |                |
    | salary       | double(15,2)          | YES  |     | NULL    |                |
    | office       | int(11)               | YES  |     | NULL    |                |
    | depart_id    | int(11)               | YES  |     | NULL    |                |
    +--------------+-----------------------+------+-----+---------+----------------+
    
    #插入记录
    #三个部门:教学,销售,运营
    insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
    ('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
    ('alex','male',78,'20150302','teacher',1000000.31,401,1),
    ('wupeiqi','male',81,'20130305','teacher',8300,401,1),
    ('yuanhao','male',73,'20140701','teacher',3500,401,1),
    ('liwenzhou','male',28,'20121101','teacher',2100,401,1),
    ('jingliyang','female',18,'20110211','teacher',9000,401,1),
    ('jinxin','male',18,'19000301','teacher',30000,401,1),
    ('成龙','male',48,'20101111','teacher',10000,401,1),
    
    ('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
    ('丫丫','female',38,'20101101','sale',2000.35,402,2),
    ('丁丁','female',18,'20110312','sale',1000.37,402,2),
    ('星星','female',18,'20160513','sale',3000.29,402,2),
    ('格格','female',28,'20170127','sale',4000.33,402,2),
    
    ('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
    ('程咬金','male',18,'19970312','operation',20000,403,3),
    ('程咬银','female',18,'20130311','operation',19000,403,3),
    ('程咬铜','male',18,'20150411','operation',18000,403,3),
    ('程咬铁','female',18,'20140512','operation',17000,403,3)
    ;
    
    #ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk
    复制代码

     

      答案:

    复制代码
    SELECT
        *
    FROM
        emp AS t1
    INNER JOIN (   #和虚拟表进行连表
        SELECT
            post,
            max(hire_date) as max_date  #给这个最大的日期取个别名叫做max_date,先将每个部门最近入职的最大的日期的信息筛选出来,通过这个表来和我们上面的总表进行关联
        FROM
            emp
        GROUP BY
            post
    ) AS t2 ON t1.post = t2.post  #给虚拟表取个别名叫做t2
    WHERE
        t1.hire_date = t2.max_date;  #然后再通过where来过滤出,入职日期和最大日期相等的记录,就是我们要的内容
    复制代码

     

    转载于:https://www.cnblogs.com/16795079a/p/10445350.html

    展开全文
  • 简短撤回声明本文不符合“开放式复合材料杂志”的标准。 这篇文章已撤回以理顺学术记录。 在做出此决定时,编辑委员会应遵循COPE的撤稿指南。 目的是通过提供理想的研究出版平台并适当考虑国际公认的出版道德标准,...
  • MySQL复合索引

    千次阅读 2019-01-09 19:41:21
    4、符合最左原则 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合...
  • 在SELECT语句中,可以通过Where子句构造记录的筛选条件,选择出符合条件的记录集。比如,我想在上机表中,查询卡号为101的学生的上机记录。 SELECT* From Line_Info where cardno=101  这是简单查询,条件查询还...
  • jQuery复合选择器

    千次阅读 2017-04-12 10:51:35
    复合选择器将多个选择器(可以是ID选择器、元素选择或是类名选择器)组合在一起,两个选择器之间以逗号“,”分隔,只要符合其中的任何一个筛选条件就会被匹配,返回的是一个集合形式的jQuery包装集,利用jQuery索引...
  • 分区--复合分区

    2011-06-04 23:28:32
    --测试总结:复合分区,有个很奇妙的地方,就是当数据插入到符合条件的第一个分区中。实现算法推测:对于按C1,C2两列进行复合分区的情况,插入时,首先判断是否小于C1,如果有匹配分区,则插入到符合条件的第一个...
  • 复合选择器将多个选择器(可以是ID选择器、元素选择或是类名选择器)组合在一起,两个选择器之间以逗号“,”分隔,只要符合其中的任何一个筛选条件就会被匹配,返回的是一个集合形式的jQuery包装集,利用jQuery索引...
  • 复合选择器

    2020-08-30 20:30:04
    选中同时符合多个条件的元素 语法:选择器1选择器2选择器3选择器n{ } 注:交集选择器中有元素选择器,必须以元素选择器开头 例子:div.red{ } 选择器分组(并集选择器) 同时选择多个选择器对应的元素 语法:选择...
  • 带你详细了解,看看自己符合报名高级新媒体管理师吗? 首先,我们来了解一下什么是新媒体管理师? 新媒体管理师是兼具了新媒体的运营管理、策划、文案编辑、设计等相关的内容,将新媒体、传播、理论与实务、媒介经营...
  • 基于 Ladeveze等人的复合材料损伤和塑性模型 ,在平面应力条件下 ,考虑了裂纹面之间摩擦滑动导致的摩擦塑性影响 ,对复合材料层板进行了多种非线性机制下的全耦合力学分析。对计算结果的分析表明 ,该理论与试验结果相...
  • 用次氯酸钠(NaClO)溶液对一系列商品反渗透复合膜进行改性,考察该改性方法对4种商品反渗透膜的通量、截盐及...改性后的膜在进水pH=11的条件下,脱硼率达到最大,透过液中硼质量浓度小于0.5 mg/L,符合WHO饮用水硼浓度标准.
  • 在模拟制冷条件下,对以不同浓度溶液制备的复合吸附剂的吸附、解吸性能进行了测定,并将吸附解吸性能最好的复合吸附剂在自制的模拟制冷装置上进行了制冷实验。结果表明,复合吸附剂具有良好的吸附、解吸性能,最大...
  • 为使复合形算法能够求解机械工程中设计变量为离散变量且各设计变量的增量一般不具有同样比例的难以获得合理最优点的优化设计问题,把反射系数改为各个设计变量的独立增量,按各个设计变量的独立增量进行搜索计算,从而...
  • 在确定多养分复合叶面肥制备工艺的基础上,考察了螯合剂种类、螯合温度、...制备的多养分复合叶面肥主要指标完全符合国家标准;同时还含有大量元素氮、磷、钾,中量元素钙、镁、硫,高活性腐植酸钾及稀土添加剂等有益组分。
  • 复合索引最多可以容纳16个字段 这里有个误区: ...如果使用userid作为条件,则userid_pid的符合索引可以被使用。但是pid_userid不会被使用到。 因此如果再创建一个userid是多余的操作。 ...
  • 在相同环境条件下进行了薄膜的透射电镜(TEM)测试和电导电流测试.TEM测试结果可以直接观察到纳米粒子在有机基体中分散均匀,且可得到三层复合薄膜的复合结构,掺杂层和中间层的尺寸比例符合实验要求.复合薄膜的电导...
  • 7.1 创建复合对象 复合对象不能够直接在场景中创建,它是在现有对象的基础上来创建的,如果场景中没有符合某一复合对象创建条件的对象,则复合对象命令将不可用。下面通过一个小练习来学习复合对象的创建方法。 (1...
  • 为了解决污水处理厂后续脱氮除磷处理工艺的占地及成本问题,以廉价天然沸石为原料,制备了能够同步脱氮除磷的复合改性沸石,研究了不同制备条件对吸附效果的影响.研究结果表明,季铵盐-氯化钠复合改性沸石不仅去除氨氮,...
  • 将膜分离技术与细胞固定化技术结合起来,研究了一种可用于去除地下水中硝酸盐的复合膜生物反应器(CMBR),并分别通过正交实验及单因素实验考察了复合膜生物反应器的最佳脱氮条件及影响因素。结果表明CMBR平板状固定化...
  • 复合查询 把一些简单查询组合在一起实现更复杂的查询需求,除此之外符合查询还可以控制另外一个查询的行为。 constant_score query 可以包装一个其他类型的查询,并返回匹配过滤器中的查询条件且有相同评分的文档...
  • 以高应力松软破碎复合围岩控制技术为研究目标,深入分析了章村矿大巷所处的围岩特征和造成支架结构失稳的原因,相应采取了符合现场实际的针对性技术研究路线,根据不同巷道失稳的特点,分别采取了高强度长锚杆支护体系、...
  • 以硝酸铜、硝酸钴和尿素等为基本原料,采用特殊的水热合成法制备出前驱体....结果表明:在此实验条件下钴元素能够掺入到CuO的晶格之中,形成介孔铜钴复合氧化物.产物符合高性能催化剂的活性位结构要求.
  • 计算结果表明,只有充分考虑了劲性复合桩的四种破坏模式和复合段桩土侧摩阻力的增大系数,才能得出符合实际、安全经济的计算结果。混凝土芯桩与水泥土桩之间有很强的粘结力,一般不会成为承载力的控制条件,但需要...
  • 对弯曲圆盘在不同边界条件下的共振特性进行了分析,给出了辐射器的共振频率设计方程、等效质量和等效弹性系数;同时研究了气介式复合振动换能器的机电等效电路,分析了复合换能器的整体频率方程.实验结果表明,辐射器...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 278
精华内容 111
关键字:

复合符合条件