精华内容
下载资源
问答
  • 多表连接查询

    千次阅读 2021-01-17 16:52:08
    在Oracle中主要有如下3种类型连接: 1、内连接,这种连接但会即满足A又满足B的行,只有(join)的条件满足才返回,否则不会返回任何数据。 2、外连接,外连接是内连接的扩展,外连接返回符合条件的行,同时...

    一、多表查询的基础语法

    SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column = table2.column;
    

    二、表与表之间的连接
    在Oracle中主要有如下3种类型的连接:
    1、内连接,这种连接但会即满足A表又满足B表的行,只有(join)的条件满足才返回,否则不会返回任何数据。
    2、外连接,外连接是内连接的扩展,外连接返回符合条件的行,同时可以根据指定的条件返回不满足连接条件的左边表行或者右边的表行。外连接又分为左外连接和右外连接。
    3、自连接,是指一个表连接到自身,比如emp表中每个员工属于一个经理,经理的员工编号也存在于emp表中,因此可以说是mgr和emp是自连接关系
    三、内连接
    内连接又称为等值连接或者简单连接,它用来连接来个或多个表,一般使用一个表的主键等于另一个表外键(也有可能是主键,俩个表主键一致)。

    SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column = table2.column;
    

    四、外连接

    --右外连接
    SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column(+) = table2.column;
    --左外连接
    SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column = table2.column(+);
    

    (+)外连接语法是Oracle特有的连接格式。放在哪个表后面讲返回哪个表的所有数据。需要注意一下:
    1、不能使用OUTER JOIN的ANSI连接语法使用(+)创建连接语法。
    2、(+)仅能出现在WHERE子句中,并且只能用于一个表或者视图的一列,因此如果A表和B需要使用多个列作为连接条件时,,必须要在所有的这些条件上添加(+)操作符,如果不指定,Oracle是做是一个内连接查询,并且没有任何的警告和错误提示表示这是一个外连接错误。
    3、(+)操作符仅能作用于一个列,不能用于一个表达式。
    包含(+)操作符的WHERE条件中不能包含其他使用OR逻辑操作符的条件。
    4、WHERE条件不能使用IN 比较条件比较一个别标记了(+)的列。
    ANSI的外连接语法如下

    SELECT table1.column, table2.column										
    FROM table1															--FROM子句仅包含一个表
    [ LEFT | RIGHT | FULL OUTER JOIN  table2							--使用连接子句连接到另一个表
    ON ( table1.column_name = table2.column_name )];					--在ON子句中指定查询条件
    

    LEFT 左连接
    RIGHT 右连接
    FULL OUTER 全连接,这种连接实际上包含了左右俩边的数据,类似于讲左右连接的数据进行了UNION合并。
    五、自引用连接

    SELECT a.* FROM buser a, buser b
    WHERE a.account = b.account;
    

    在这里插入图片描述
    六、交叉连接
    交叉连接在ANSI SQL 中又称为CROSS JOIN,它会返回来个表上的所有行的笛卡尔乘积,也就是一个表的数据行与另一个表数据行相乘的结果。
    语法:

    SELECT a.column_name 
    FROMSELECT a.column_name, b.column_name
    						FROM table a
    						CROSS JOIN table b);
    

    七、自然连接
    自然连接指可以让连接完全自动基于有匹配数据类型和名字的表列进行自动连接,这种连接成为自然连接,使用NATURAL JOIN关键字。
    语法:

    SELECT a.column1, a.column2
    FROM table a NATURAL JOIN talbe b
    WHERE 条件;
    

    在俩个表中具有相同名字的列不能再任何地方用表名或者别名前缀进行限制,否则Oracle会抛出ORA-25154异常。

    展开全文
  • 表连接多表连接

    千次阅读 2021-11-11 07:59:23
    前提:时候我们所需要的数据不止在一张中,需要多个表做结合的查询,就可以用表连接实现 1、内部连接 内部连接提供了两种表之间连接方式 表之间建立起关联的列,要求列名可以不一样,但是这两个列的...

    一、表连接

    前提:有时候我们所需要的数据不止在一张表中,需要多个表做结合的查询,就可以用表连接实现

    1、内部连接

    • 内部连接提供了两种表与表之间的连接方式
    • 表与表之间建立起关联的列,要求列名可以不一样,但是这两个列的数据类型和内容得保持一致
    • 只关联表与表中能够匹配到的数据信息,才能有对应的查询结果
    • 格式一:表连接的实现是通过where关键字来进行的关联
    select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
    from 表名1,表名2
    where 表名1.列名1=表名2.列名1;
    

    在这里插入图片描述

    格式二:通过inner join on 实现表与表之间的连接

    select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
    from 表名1 [inner]join 表名2
    on 表名1.列名1=表名2.列名1;
    

    在这里插入图片描述

    • inner join on 又划分为两个分类:
      (1)等值连接 指的是条件中只包含等号“=”,没有其它符号在里面
      (2)非等值连接 指的是条件中,除了等号之外,还有其它的符号> < >=
    select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2,表名3.列名1,表名4.列名1,...
    from 表名1,表名2,表名3,表名4...
    where 表名1.列名1=表名2.列名1 and 表名2.列名1=表名3.列名1 and 表名3.列名1=表名4.列名1...
    [group by 列名]
    [having 分组的条件]
    [order by 列名 asc|desc];
    

    在这里插入图片描述

    注意:如果查询的这个列,两个表中都有,那么在写的过程中,列的前面一定要加表名;如果查询这个列,只属于一个表中的,那就可以直接写列名
    进行表连接的列:列名可以不一致,但是,数据类型和值要保持一致

    • 多表连接(表数量>2)
      (1)where进行表连接
    select 表名.列名
    from 表名1,表名2,表名3
    where 表名1.=表名2.and 表名2.=表名3.;
    

    在这里插入图片描述

    (2)on 进行表连接

    select 表名.列名
    from 表名1 inner join 表名2
    on 表名1.=表名2.inner join3
    on 表名2.=表名3.

    在这里插入图片描述

    2、外部连接

    • 外部连接会返回FROM中提到的至少一个表或视图的所有行
    • 外部连接分为左外部连接、右外部连接
      左外部连接对连接条件中左边的表不加限制
      右外部连接对连接条件中右边的表不加限制

    在from之后,先写的表是左表,后写的表是右表

    • 外部连接 on

    左外部连接的语法格式:

    select 表名.列名
    from 表名1 left [outer] join 表名2
    on 表名1.=表名2.

    使用关键字LEFT OUTER JOIN关键字对两个表进行连接,左外部连接的查询结果中包含指定左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在游标中没有找到匹配的行,则结果中右表的相对应的位置为NULL

    右外部连接语法格式

    select 表名.列名
    from 表名1 right [outer] join 表名2
    on 表名1.=表名2.

    使用RIGHT OUTER JOIN 关键字对两个表进行连接,右外连接是左外连接的反向连接,只不过在查询结果集中包括的是指定右表的所有行。如果右边的某行在左表中没有找到匹配的行,则结果中的左表的相对应位置为NULL
    在这里插入图片描述

    展开全文
  • MySQL进阶(分组查询,多表连接查询)

    千次阅读 多人点赞 2021-10-15 10:38:05
    接着上一期的数据库继续讲,上回我们说到简单的排序查询,接下来我们继续进阶,分组查询,多表连接查询。在学习分组查询之前不得不提到函数这概念。因为分组查询常常是跟着分组函数联系起来的。 一 常见函数...

    目录

    一 常见函数(单行函数)

    二 分组函数

    三 分组查询

    四 多表连接查询

    1.SQL99标准

    1.1 内连接 

    1.2外连接

    1.3交叉连接

    2.子查询

    3 分页查询

    4 联合查询


            接着上一期的数据库继续讲,上回我们说到简单的排序查询,接下来我们继续进阶,分组查询,多表连接查询。这篇博客基本都是知识点学起来比较枯燥,不过没办法为了挣钱,必须坚持下去。在学习分组查询之前不得不提到函数这个概念。因为分组查询常常是跟着分组函数联系起来的。

    一 常见函数(单行函数)

    在常见函数里,我把它分为字符函数,数学函数,日期函数,流程控制函数,其他函数,知识点挺多的,全是干货,大家一定要仔细学习。

    字符函数:

        concat: 拼接
        substr: 截取子串
        upper: 转换成大写
        lower: 转换成小写
        trim: 去前后指定的空格和字符
        ltrim: 去左边空格
        rtrim: 去右边空格
        replace: 替换
        lpad: 左填充
        rpad: 右填充
        instr: 返回子串第一次出现的索引
        length: 获取字节个数    

    1.length获取参数值得字节个数
    
     SELECT LENGTH('john');
    ==============================================================
    2.concat 拼接字符串
    
     SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
    ================================================================
    3.upper,lower 改变大小写
    
     SELECT UPPER('qweA');
    
     SELECT LOWER('GHUe');
    实例:将姓变大写,名变小写,然后拼接
    SELECT CONCAT(UPPER(last_name),LOWER(first_name))
    FROM employees;
    
    ====================================================================
    4.substr
    
    注意:索引从一开始
    截取从指定索引处开始后面所有的字符
    
     SELECT SUBSTR('李莫愁爱上了陆展元',7);
    
    截取从指定索引处指定字符长度的字符
    
    SELECT SUBSTR('李莫愁爱上了陆展元',1,3);
    
    实例:姓名中首字母大写,其他字符小写
    SELECT CONCAT( UPPER( SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)))
    FROM employees;
    ===================================================================
    5.instr 返回子串第一次出现的索引,找不到返回0
    
     SELECT INSTR('杨不悔殷六侠爱上殷六了殷六侠','殷六侠');
    ===============================================================
    6.trim去前后空格,不去中间
    
     SELECT TRIM('     张翠山       ')
     SELECT TRIM('a' FROM 'aaaaaaaaaa张aaaa翠山aaaaaaa') qw
    =================================================================
    7.lpad 用指定字符实现左填充指定长度
    
      SELECT LPAD('殷素素',10,'*')
      SELECT LPAD('殷素素',2,'*')
    =======================================================================
    8.rpad 用指定字符实现右填充指定长度
    
          SELECT RPAD('殷素素',10,'*')
        
          SELECT RPAD('殷素素',12,'ab')
    ==========================================================================
    9.replace
    
    SELECT REPLACE('张无忌周芷若周若爱上了周芷若','周芷若','1' )

    数学函数:

    1.round 四舍五入
     SELECT ROUND(1.45)
     SELECT ROUND(1.456,2)
    =============================
    2.ceil 进一法,向上取整,>=
    SELECT CEIL(1.52)   2
    SELECT CEIL(-1.52)   -1
    ============================= 
    3.floor 向下取整
     SELECT FLOOR(-9.99)   -10 
     SELECT FLOOR(1.52)  1
    =============================
    4.truncate 截断
    SELECT TRUNCATE(1.65,1)   1.6
    SELECT TRUNCATE(1.6999,1)  1.6
    
    =============================
    5.mod 取余
    SELECT MOD(10,-3)
    SELECT 10%3;

    日期函数:

    1.now 返回当前系统日期+时间
     SELECT NOW();
    
    2.curdate 返回当前日期
     SELECT CURDATE()
    
    3.curtime 返回当前时间
     SELECT CURTIME()
    
    4.获取指定的部分,年,月,日,小时,分钟,秒
     SELECT YEAR(NOW()) 年
    
     SELECT MONTH(NOW()) 月
    
    5.str_to_date 字符串转日期  
    SELECT STR_TO_DATE('1998-3-4','%Y-%c-%d')
    
    例子:查询入职日期为1992-4-3的员工信息
     
    SELECT * FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');
    
    
    6.date_format 日期转字符 
    
    SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日')

    流程控制函数:

    1.if函数:
    SELECT IF('10>5','大','小');
    
    SELECT last_name,commission_pct ,IF(commission_pct IS NULL,'没','有')
    FROM employees;
    
    2.case函数:
    使用一:swith case
    case 字段或表达式 when 常量  then 要显示的值或语句
    
    案例1:
    
     SELECT salary 原始,`department_id`,
     CASE `department_id`
     WHEN 30 THEN salary*1.1
     WHEN 40 THEN salary*1.2
     WHEN 50 THEN salary*1.3
     ELSE `salary`
     END AS 新工资
     FROM employees;
    
    使用二:类似多重if
     case when 条件 then值1 else 值 end。
    
    SELECT `salary`,CASE
    WHEN `salary`>20000 THEN 'A'
    WHEN `salary`>15000 THEN 'B'
    ELSE 'C'
    END 工资级别
    FROM employees;

    其它函数:

        version: 版本
        database: 当前库
        user: 当前连接用户

    SELECT VERSION()
    
    SELECT DATABASE()
    
    SELECT USER()

    二 分组函数

    功能:统计使用,又称为统计函数,聚合函数,组函数分类:sum 求和,avg 平均值 ,max 最大值 ,min 最小值,count 计算个数、
    特点:

    1.sum,AVG 一般处理数值型
    max,min count 都行
    2.忽略null
    3.可以和distinct搭配

    1.简单使用:

    SELECT SUM(salary) FROM employees;
    SELECT AVG(salary) FROM employees;
    SELECT COUNT(salary) FROM employees;
    
    SELECT SUM(salary),COUNT(salary) FROM employees;
    

    三 分组查询

     语法:

       select 查询的字段,分组函数
        from 表
        group by 分组的字段

    特点:

        1、可以按单个字段分组
        2、和分组函数一同查询的字段最好是分组后的字段
        3、可以按多个字段分组,字段之间用逗号隔开
        4、可以支持排序
        5、having后可以支持别名

    面试:

        * where 和 having 的区别?
            1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不                满足结果,则不会被查询出来
            2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

    例子:

    1.查询邮箱中包含a字符的,每个部门的平均工资
    
    SELECT AVG(salary),`department_id`
    FROM employees
    WHERE email LIKE '%a%'
    GROUP BY `department_id`
    
    案例1.查询每个工种的工资
    
    SELECT MAX(salary),job_id
    FROM employees
    GROUP BY job_id;
    
    案例2:查询每个位置上的部门个数
    
     SELECT COUNT(*),location_id
     FROM `departments`
     GROUP BY `location_id`
     
     案例3.查询哪个部门的员工个数>2
     SELECT COUNT(*),`department_id`
     FROM employees
     GROUP BY `department_id`
     HAVING COUNT(*)>2
     
     案例4.查询每个工种有奖金的员工的最高工资>12000的员工编号,最高工资
     SELECT MAX(salary),`job_id`
     FROM employees
     GROUP BY `job_id`
     HAVING MAX(salary)>12000
     
     案例5.查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及最低工资
    SELECT MIN(salary), `manager_id`
    FROM employees
    WHERE `manager_id`>102
    GROUP BY `manager_id`
    HAVING MIN(salary)>5000
     
    #按表达式或函数分组
    #案例:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
    SELECT COUNT(*),LENGTH(last_name)
    FROM employees
    GROUP BY LENGTH(last_name)
    HAVING COUNT(*)>5
    
    #按多个字段分组
    #案例:查询每个部门每个工种的员工的平均工资
    SELECT AVG(salary),`department_id`,`job_id`
    FROM employees
    GROUP BY `department_id`,`job_id`
    
    #添加排序
    
    #案例:查询每个部门每个工种的员工的平均工资
    SELECT AVG(salary),`department_id`,`job_id`
    FROM employees
    WHERE `department_id` IS NOT NULL
    GROUP BY `department_id`,`job_id`
    HAVING AVG(salary)>10000
    ORDER BY AVG(salary)
    

    接下来来到下一个重点:多表连接查询

    四 多表连接查询

     含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
     
    笛卡尔乘积现象:表一 m行,表二 n行  结果:m*n行
    解决办法:添加连接条件

    分类:
        按年代分类:sql92,
                sql99【推荐】
                
                
        按功能分类:内连接:等值连接,非等值连接,自链接
                    外连接:左外连接,右外连接,全外连接
                    交叉连接

    提到内连接,先了解了解笛卡尔集:

        * 产生条件:
            1. 省略连接条件
            2. 连接条件无效
            3. 所有表中所有行互相连接
        * 解决方案:
            添加有效筛选条件

    1.SQL99标准

    语法:

    select 查询列表  from 表1 别名【连接类型】
        join 表2 别名
        on 连接条件
        【where 筛选条件】
        【group by 】
        【having 】
        【order by】


    特点:
     
       筛选条件放在where后面,如like
        
    分类:    
        内连接:inner
        外连接:左外连接:left【outer】
                      右外连接:right【outer】
                      全外连接:full【outer】
        交叉连接:cross  
     
        

    1.1 内连接 

    	select 查询列表
    	from 表1 别名【inner】
    	join 表2 别名
    	on 连接条件


       

    内连接分类:等值连接,非等值,自连接

    接下来通过几个案例讲解一下:

    1.等值连接
    ===================================================================
    /*①案例1:查询员工名,部门名。*/
     SELECT `last_name`,`department_name`
     FROM employees e
     JOIN departments d
     ON e.`department_id` = d.`department_id`;
    
    
    ================================================================
    /*②案例2:查询部门个数>3的城市名和部门个数,(添加分组,筛选)*/
    SELECT `city`,COUNT(*)
    FROM `locations` l
    INNER JOIN `departments` d
    ON l.`location_id`=d.`location_id`
    GROUP BY `city`
    HAVING COUNT(*)>3;
    ====================================================================
    /*③案例3:查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)*/
    SELECT COUNT(*),`department_name`
    FROM `departments` d
    INNER JOIN `employees` e
    ON d.`department_id`=e.`department_id`
    GROUP BY d.`department_name`
    HAVING COUNT(*)>3
    ORDER BY COUNT(*) DESC;
    
    ========================================================================
    ========================================================================
    2.非等值连接
    
    /*查询员工的工资级别*/
    
    SELECT salary,`grade_level`
    FROM `employees` e
    JOIN `job_grades` g
    ON e.`salary` BETWEEN g.`lowest_sal`AND g.`highest_sal` ;
    
    ===========================================================================
    
    3.自连接
    /*查询员工名,上级名*/
    
    SELECT e.`last_name`,m.`last_name`
    FROM `employees` e
    JOIN employees m
    ON e.`manager_id`=m.`employee_id`
    
    
    

    这几个案例讲解的就是内连接。然后讲解外连接。

    1.2外连接

    应用场景:用于查询一个表中有,宁一个表中没有的记录

    特点:
    1.外连接的查询结果为主表的所有记录
    如果从表中有和他匹配的,则显示匹配的值
    如果从表中没有和他匹配的,则显示null

    2.左外连接,left左边的是主表
      右外连接,right右边的是主表

    还是通过一个案例,便于理解:

    查询哪个部门没有员工
    
    1.左外
    SELECT d.*,e.`employee_id`
    FROM `departments` d
    LEFT OUTER JOIN `employees` e
    ON d.`department_id`=e.`department_id`
    WHERE e.`employee_id` IS NULL;
    
    
    2.右外
    
    SELECT d.*,e.`employee_id`
    FROM  employees e
    RIGHT OUTER JOIN`departments` d
    ON d.`department_id`=e.`department_id`
    WHERE e.`employee_id` IS NULL;
    
    3.全外连接
    USE girls;
    SELECT b.*,bo.*
    FROM`beauty` b
    FULL OUTER `boys` bo
    ON b.`id`=bo.`id`

    1.3交叉连接

    交叉连接
    SELECT b.*,bo.*
    
    FROM`beauty` b
    CROSS JOIN boys bo

    下一个重难点:子查询

    2.子查询

    含义:出现在其他语句中的select语句,称为子查询或内查询,外部的查询语句,称为主查询或外查询
    分类:
    1.按子查询出现的位置:
            select后面  标量子查询
            from后面   表子查询
            ※※where,having  标量子查询(单行)√  列子查询(多行)√  行子查询
            exists(相关子查询)表子查询
    2.按结果集的`department_id`行列数不同:
            标量子查询(结果集只有一行一列)
            列子查询(结果集只有一列多行)
            行子查询(结果集只有一行多列)
            表子查询(结果集一般为多行多列)
          

    特点:
    1.子查询放在小括号内
    2.子查询一般放在条件的右侧
    3.标量子查询,一般搭配单行操作符
    ><=
    列子查询,一般搭配多行操作符
    in,any/some/all

    4.子查询优先于主查询

    1.标量子查询

    /*案例一:谁的工资比abel高*/
    SELECT *
    FROM employees
    WHERE salary >(
    SELECT salary
    FROM employees
    WHERE last_name = 'Abel'
    
    )
    
    案例二:查询job——ID与141号员工相同,salary比143号员工多的员工 姓名,job_id和工资
    SELECT *
    FROM employees
    WHERE job_id = (
    SELECT job_id
    FROM employees
    WHERE `employee_id`=141
    ) AND salary>(
    SELECT salary
    FROM employees
    WHERE `employee_id`=143

    2.列子查询

    案例:查询`location_id`是1400或者1700的部门中所有员工姓名
    SELECT `last_name`
    FROM employees
    WHERE `department_id` IN(
    
    SELECT DISTINCT `department_id`
    FROM `departments`
    WHERE `location_id` IN (1400,1700
    )
    )
    
    
    查询其他部门中比job_id为‘IT_PROG’部门任一工资低的员工的,工号,姓名,job_id,salary
    
    
    SELECT `employee_id`,`last_name`,`salary`
    FROM employees
    WHERE salary < ANY(
    SELECT DISTINCT salary
    FROM employees
    WHERE job_id='IT_PROG'
    )AND job_id<>'IT_PROG'

    放在exists后面(相关子查询)

    语法:exists(完整查询语句)
    结果0,1

    SELECT EXISTS(SELECT `employee_id`FROM `employees` WHERE salary=300000)
    
    /*查询有员工的部门名*/
    
    SELECT `department_name`
    FROM `departments` d
    WHERE EXISTS (
    SELECT * FROM employees e
    WHERE d.`department_id`=e.`department_id`
    )


    3 分页查询

    语法:

    	select 字段|表达式,...
    	from 表
    	where 条件
    	group by 分组字段
    	having 条件
    	order by 排序的字段
    	limit 起始的条目索引,条目数;

    特点:

        1.起始条目索引从0开始

        2.limit子句放在查询语句的最后

        3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
        假如:
            每页显示条目数sizePerPage
            要显示的页数 page

    查询前五条
    SELECT *
    FROM employees
    LIMIT 0,5

    4 联合查询

    语法:

    	select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    	select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    	select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    	.....
    	select 字段|常量|表达式|函数 from 表 where 条件

    特点:

        1、多条查询语句的查询的列数必须是一致的
        2、多条查询语句的查询的列的类型几乎相同
        3、union代表去重,union all代表不去重

    代码:

    /*查询部门编号>90或者邮箱包含a的员工信息
    */
    SELECT *
    FROM employees
    WHERE email LIKE'%a%'
    UNION
    
    SELECT *
    FROM employees
    WHERE `department_id`>90
    

    展开全文
  • 集合的交、并、差运算查询 为了进行并、交、差运算,要求运算的两个查询结果具有相同的字段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围 10:并运算(union) 主要将两个或者更多个查询...

    use db_sqlserver2

    select 姓名, 工资, 面积, 金额, (工资+金额/1000) as 实发工资 from 职工,仓库, 订购单

    where 职工.职工号=订购单.职工号 and 职工.仓库号=仓库.仓库号

    0_1331606379g7S7.gif

    2:

    select 姓名,工资,金额 from 职工,订购单 where 姓名 like '%平%' and 职工.职工号 = 订购单.职工号 order by 工资 desc

    3:

    select 姓名,工资,金额 from 职工,订购单 where 姓名 like '%平%' and 职工.职工号 = 订购单.职工号 order by 工资 desc, 金额 desc

    0_1331606598zb85.gif

    4:

    select 姓名, 工资, 城市, (select AVG(工资) from 职工) as 平均工资 , (工资-(select AVG(工资) from 职工)) as 与平均工资之差

    from 职工, 仓库 where 仓库.仓库号=职工.仓库号

    0_1331606842aY7R.gif

    5:带保存功能的多表连接查询

    在SQL语句中,利用into语句可以把查询到的结果保存成一张新表,然后再对新表进行数据信息查询。

    select 仓库.仓库号, 城市, 面积, 姓名, 工资, 金额 into 多表连接产生的新表 from 仓库, 职工, 订购单

    where 仓库.仓库号=职工.仓库号 and 职工.职工号=订购单.职工号

    select * from 多表连接产生的新表

    0_1331606842aY7R.gif

    //查看不同仓库中的所有职工的仓库号、平均销售金额、最大销售金额、最小销售金额、最大销售金额与最小销售金额之差的信息

    select 仓库号, AVG(金额) as 平均销售金额, MAX(金额) as 最大销售金额, MIN(金额) as 最小销售金额,

    (MAX(金额) - MIN(金额)) as 最大金额与最小金额之差 from 多表连接产生的新表 group by 仓库号;

    0_13316077042hZD.gif

    可以把分组查询结果再生成一张新表

    select 仓库号, AVG(金额) as 平均销售金额, MAX(金额) as 最大销售金额, MIN(金额) as 最小销售金额,

    (MAX(金额) - MIN(金额)) as 最大金额与最小金额之差 into 分组查询产生的新表

    from 多表连接产生的新表 group by 仓库号;

    select * from 分组查询产生的新表

    6: 内连接查询(inner join)

    使用比较运算符对表之间的某些数据进行比较,并列出这些表中与连接条件相匹配的数据行。

    select 姓名, 城市 from 仓库 inner join 职工 on 职工.仓库号=仓库.仓库号

    多表的内连接查询

    select 城市,面积, 姓名, 工资, 金额 from 仓库

    inner join 职工 on 职工.仓库号=仓库.仓库号

    inner join 订购单 on 职工.职工号=订购单.职工号

    and 工资>1800 and 面积<1000 and 金额 != 16600

    7:左连接查询(left join)

    除满足连接条件的记录显示外,第一张表中不满足条件的记录也显示在结果集中。

    select 姓名, 城市 from 仓库

    left join 职工 on 职工.仓库号=仓库.仓库号 and 城市 is not null and 姓名 like '%王%'

    0_1331608869V584.gif

    select 城市, 面积, 姓名, 工资, 金额 from 仓库

    left join 职工 on 职工.仓库号 = 仓库.仓库号

    left join 订购单 on 职工.职工号=订购单.职工号

    and 工资>1800 and 面积<1000 and 金额!=16600

    0_1331609189dBxB.gif

    在第一个left join左连接中,第一张表是仓库表,第二张表是职工表,在第二个left join左连接中,第一张表是职工表,第二张表是订购单表

    8:右连接查询

    除满足连接条件的记录显示外,第二张表中不满足条件的记录也显示在查询结果集中

    select 姓名, 城市 from 仓库

    right join 职工 on 职工.仓库号=仓库.仓库号 where 城市 is not null and 姓名 like '%王%'

    0_133160956965yK.gif

    select 城市, 面积, 姓名, 工资, 金额 from 仓库

    right join 职工 on 职工.仓库号=仓库.仓库号

    right join 订购单 on 职工.职工号=订购单.职工号

    and 工资>1500 and 面积<1000 and 金额!=16600

    0_1331609948Cg7V.gif

    select 城市, 面积, 姓名, 工资, 金额 from 仓库

    right join 职工 on 职工.仓库号=仓库.仓库号

    right join 订购单 on 职工.职工号=订购单.职工号

    where 工资>1500 and 面积<1000 and 金额!=16600

    把and关键字换为where关键字后的效果图,会发现那些无用的数据没有了

    0_1331610102811M.gif

    9:全连接查询

    除满足连接条件的记录显示外,两张表中的不能满足条件的记录也显示在查询结果集中

    select 姓名,城市 from 仓库 full join 职工 on 职工.仓库号=仓库.仓库号 and 城市 is not null and

    姓名 like '%王%';

    0_1331611542xRBb.gif

    集合的交、并、差运算查询

    为了进行并、交、差运算,要求运算的两个查询结果具有相同的字段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围

    10:并运算(union)

    主要将两个或者更多个查询的结果组合为单个结果集,该结果集包含联合查询中的全部查询的全部行

    select 仓库号 from 仓库 where 城市='北京'

    union

    select 仓库号 from 职工 where 工资>2000

    select 仓库号 from 仓库 where 城市='北京'

    union

    select 仓库号 from 职工 where 工资>2000

    select distinct 仓库.仓库号 from 仓库, 职工 where 仓库.仓库号=职工.仓库号 and (城市='北京' or 工资>2000)

    使用union all 保留重复行

    select 仓库号 from 仓库 where 城市='北京'

    union all

    select 仓库号 from 职工 where 工资>2000

    0_13316189041hWH.gif

    11:交运算(intersect)

    可以将两个select语句的查询结果通过交运算合并成一个查询结果

    select 仓库号 from 仓库 where 城市='北京'

    intersect

    select 仓库号 from 职工 where 工资>2000

    select distinct 仓库.仓库号 from 仓库, 职工 where 城市='北京' and 仓库.仓库号=职工.仓库号 and 工资>2000

    0_1331619065cvXA.gif

    12:差运算(except)

    可以计算两个select查询结果之间的数据差,即返回在一个查询结果中存在,但在另一个查询结果中不存在的所有行。

    select 仓库号 from 仓库 where 城市='北京'

    except

    select 仓库号 from 职工 where 工资>2900

    select 仓库号 from 仓库 where 城市='北京' and 仓库号 not in(select 仓库号 from 职工 where 工资>2900)

    0_133161966933Wq.gif

    展开全文
  • 多表合并且去掉重复项

    千次阅读 2021-01-28 04:14:15
    去掉某行相同的项,正好把多查询系统复习一下:多查询 (也叫连接查询,此处为基于两个连接查询)如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间连接.连接查询实际上是...
  • Mysql多表连接

    千次阅读 2021-04-30 23:02:47
    前提: 时候我们需要的数据不止在一张中,需要多个表结合查询时,就可以使用表连接 分类 1.1 内部连接(提供了两种标语表之间连接方式) 表之间建立起关联的列,要求列名可以不一样,但是这两个列的数据...
  • 涉密打印机与涉密计算机之间应该使用有线连接方式,决不允许无线连接;有线连接即通过以太网网线连接,适用台式电脑、智能电视或其他接以太网的终端设备。本文操作环境:windows7系统、Dell G3...常见的接入类型有...
  • 一个班级有多个学生,一个学生只属于一个班级。 数据库student表里个字段classno是外键,对应主键class的主键cid 例:查询指定班级时,同时获取该班级的所有学生 关键代码:主配置文件mybatis-config.xml,映射...
  • 移动硬盘数据线接口类型有哪些?:单usb接口是移动硬盘端接口,双usb接口端是计算机usb接口端,双usb接口端实际上只有一usb接口,另一USB接口只有USB电源。当移动硬盘的电源不足时,可以安装双USB接口。硬盘接口...
  • 展开全部端子参数FH0.5mmSH1.0mmGH1.25mmZH1.5mmPH2.0mmEH/XH2.5/2.54mm(这两其实是一样的)VH3.96mm连接器简介:连接器,即CONNECTOR。国内亦称作接插件、插头和插座。一般62616964757a686964616fe58685e5aeb...
  • 数据库的几种连接查询

    千次阅读 2021-01-28 05:37:14
    1:连接查询2: join_type 指出连接类型3: 内连接4: 交叉连接1:连接查询通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。在关系数据库管理...
  • 通过一根网线连接上面的猫,将猫转换而来的网络信号(电信号)进行扩散,路由器上有多个插口,以4口最为常见,其中三个通过网线连接下面的多台电脑,实现多台电脑同时上网的作用。 作用2:发射WiFi信号 笔记本、手机...
  • PostgreSQL 连接(JOIN)

    千次阅读 2021-11-26 14:52:52
    PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 在 PostgreSQL 中,JOIN 五种连接类型: CROSS JOIN :交叉连接 INNER JOIN:内连接 LEFT OUTER JOIN:左外连接 RIGHT ...
  • 数据库(三) 建立联系-外键

    千次阅读 2021-02-06 11:48:42
    1.理解表之间建立关系的必要性比如我们建立了一张个人信息,把所有人的信息都存在这张表中这张表中老师和他们所属的部门,并且不同的部门工作也是不同的所有数据存放在一张中的弊端1.组织结构不清晰2.浪费...
  • 一、交叉连接(cross join)交叉连接(cross join):两种,显式的和隐式的,不带on子句,返回的是两的乘积,也叫笛卡尔积。例如:下面的语句1和语句2的结果是相同的。语句1:隐式的交叉连接,没有cross join。...
  • c语言程序由什么构成

    千次阅读 2021-05-21 11:35:41
    一个c语言程序由什么构成一个C语言源程序至少一个main函数,定du义函数必须指定 4 个元素:返回类型、函数名、圆括号内的形参(可能为空)和函数体。源程序的结构特点:1、一个C语言源程序可以由一个或多个源文件...
  • 一般来说,硬盘接口的类型主要被分为IDE、SATA、SCSI 、SAS以及光纤通道等五种,而不同的硬盘接口决定着硬盘与计算机之间连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。...
  • 数据结构与算法之线性表(超详细顺序、链表)

    千次阅读 多人点赞 2021-01-14 22:52:07
    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,...顺序、链表:物理结构,他是实现一结构实际物.
  • 前言一般来说,卷积神经网络会三种类型的隐藏层——卷积层、池化层、全连接层。卷积层和池化层比较好理解,主要教程也会解释。• 卷积层(Convolutional layer)主要是用一采样器从输入数据中采集关键数据内容...
  • 大家好,我是前端岚枫,今天主要跟大家分享我整理的笔记2021前端面试题系列:fetch与axios、浏览器内标签页之间的通讯方法、XSS 和CSRF以及如何防范,此方面内容在我们的工作中常用到, 也是面试官经常提问的问题,...
  • word流程图连接线怎么画直

    千次阅读 2021-01-14 15:11:16
    第一种流程图制作:基本的流程图此流程图是最基本的...2、单击要绘制流程图的位置,此时会出现虚框;(如下图)3、在绘图画布上插入你选择的图形,然后插入,(如下图);4、此时,我们再重复上述步骤,插入多种不同的...
  • 对于窗口的情况,一般两种解决方法:一种是主窗口获取子窗口中控件的属性,另一种是通过信号与槽机制,一般是子窗口通过发射信号的形式传递数据,主窗口的槽函数获取这些数据。
  • 交换机在同一时刻可进行多个端口对之间的数据传输。有时如果要配置网络设备,如路由器和交换机。首先,要使用一根串口线把电脑和网络设备连接起来。再通过专用的软件连接到网络设备上,然后在电脑上对网络设备进行...
  • Java如何实现长连接

    千次阅读 2021-02-13 02:23:56
    实现原理:长连接的维持,是要客户端程序,定时向服务端程序,发送一维持连接包的。如果,长时间未发送维持连接包,服务端程序将断开连接。客户端:Client通过持有Socket的对象,可以随时(使用sendObject方法)发送...
  • 答应我,这次搞懂 I/O 路复用!

    千次阅读 多人点赞 2021-04-12 13:46:45
    这次,我们以最简单 socket 网络模型,一步一步的过度到 I/O 路复用。 但我不会具体细节说到每系统调用的参数,这方面书上肯定比我说的详细。 好了,发车! 最基本的 Socket 模型 要想客户端和服务器能在网络...
  • c语言float类型小数点后位数

    千次阅读 2021-05-20 03:55:35
    c语言float类型小数点后位数c语言float类型小数点后几位有效数字?float类型小数点后有效数字为6~7位。C语言中浮点型一般分为float单精度型、double双精度型、long double长精度型,单精度浮点型小数点后面有效...
  • C语言数据类型中的基本类型

    千次阅读 2021-05-22 13:03:26
    C语言中的数据类型有种,具体分类如下图所示。从图中可以看出,C语言中的数据类型可分为 4 种,分别是基本类型、构造类型、指针类型、空类型。下面我们将针对基本数据类型进行详细地讲解。整型变量在程序开发中...
  • 如何实现excel交互式联动?

    千次阅读 2020-12-24 03:23:45
    交互式图表可以实现多个图表之间的联动。其制作思路是将数据源转换成智能表格,再根据智能表格创建不同的数据透视(图),最后用切片器将不同的数据透视(图)进行关联,从而实现在同一切片器上操作时所有关联图表...
  • 连接查询和子查询哪个效率高

    万次阅读 多人点赞 2021-03-04 00:44:12
    需要进行多表查询的情况下,用连接查询和子查询哪个效率高? 1、什么是子查询?举简单的例子,那么子查询什么优劣呢? 子查询 (内查询) 在主查询之前一次执行完成。 子查询的结果被主查询(外查询)使用 。 可以...
  • 2、如你看到网页展示的文档jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会jinchutou.com水印...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,016,134
精华内容 406,453
关键字:

多个表之间的连接类型主要有