精华内容
下载资源
问答
  • 查了一圈,网上关于带参数的交叉表查询的介绍很少。 1.用SQL语句写带参数的交叉表查询的话,不能用having语句设置条件,必须用where。 2.where语句里不能像普通参数查询一样写模糊查询,必须是精确的。 3.即使用了...

    查了一圈,网上关于带参数的交叉表查询的介绍很少。
    1.用SQL语句写带参数的交叉表查询的话,不能用having语句设置条件,必须用where。
    2.where语句里不能像普通参数查询一样写模糊查询,必须是精确的。
    3.即使用了where,也要在最开始写类似PARAMETERS [请输入XXX] Text ( 255 );这样的语句。作用是以“请输入XXX”为名定义了一个新变量。
    这也是参数查询的本质:[]的真正意义是将变量名括起来,包括字段变量名和参数变量名。我们在条件行输入的[Enter Start date],Access 检测其不是表名,字段名,保留字符的新名字后,就会隐性定义了一个名为“Enter Start date”的变量,之后弹出的对话框,用户输入的数据就被赋给这个新变量了。
    因为这个变量名中间有空格,我们必须用方括号把它括起来。如果没有空格的变量名,其实是可以不带[]使用的,如下:
    在这里插入图片描述
    但是没有查到为什么交叉表查询不能模糊查询、为什么一定要显式声明变量…我猜,是语法规定如此

    参考文章:https://blog.csdn.net/gracexu/article/details/2146558
    其他发现的问题:
    窗体数据输入到交叉表做参数出错http://www.office-cn.net/forum.php?mod=viewthread&tid=13479
    在交叉表加参数,带表达式出错http://www.accessoft.com/blog/article-show.asp?userid=193&Id=4576
    马https://stackoverflow.com/questions/11292270/hide-a-column-in-cross-tab-depending-on-the-value-of-parameter-crystal-reports

    展开全文
  • 学习java的第十五天交叉连接内连接左外连接右外连接多对多关系关联查询示例:外键约束的作用和建立统计(聚合)函数子查询联合查询 交叉连接 直接将两张中的数据进行笛卡尔集,即相乘,得到数据一般是有问题的,结果...

    交叉连接

    直接将两张表中的数据进行笛卡尔集,即相乘,得到数据一般是有问题的,结果条数是两个表条数的乘积
    SELECT * FROM employee, department;
    

    内连接

    将两张表中有关联的数据进行关联显示,没有关联的不显示,是常用的数据查询方式。
    SELECT * FROM employee e, department d WHERE e.dept_id = d.id;
    真正的内连接的写法为:
    SELECT * FROM employee e INNER JOIN department d ON e.dept_id = d.id
    查部分字段
    SELECT e.`name` 员工姓名, d.`name` 部门名称 FROM employee e INNER JOIN department d ON e.dept_id = d.id
    

    左外连接

    将两张表中有关联的数据进行关联显示,但是会将左边的表的数据全部显示,哪怕没有关联。
    SELECT * FROM employee e LEFT OUTER JOIN department d ON e.dept_id = d.id
    注意:OUTER关键字可以不写
    

    右外连接

    将两张表中有关联的数据进行关联显示,但是会将右边的表的数据全部显示,哪怕没有关联。
    SELECT * FROM employee e RIGHT OUTER JOIN department d ON e.dept_id = d.id
    注意:OUTER关键字可以不写
    

    多对多关系关联查询示例:

    -- 查询学生张三的课程信息
    SELECT s.*, c.* FROM student s
    INNER JOIN
    stu_course sc
    ON s.id = sc.stu_id
    INNER JOIN
    course c
    ON c.id = sc.cou_id
    WHERE s.`name` = '张三';
    
    -- 查询学生学习的课程数量
    SELECT s.`name`, count(1) FROM student s
    INNER JOIN
    stu_course sc
    ON s.id = sc.stu_id
    INNER JOIN
    course c
    ON c.id = sc.cou_id
    GROUP BY s.`name`
    

    外键约束的作用和建立

    作用:
        保证表和表之间的引用完整性
        1)主表中存在的数据,才能插入到子表
        2)删除主表的数据时,必须先删除子表数据
        否则会出现错误:
            a foreign key constraint fails
        注意:一个表中的外键必须引用另一个表的主键。
            
    建立
        1)创建子表时添加约束
        create table 表名(
            字段名 类型 [约束],
            constraint 约束名 foreign key (外键列字段名) references 主表(主键列名)
        );
        
        2) 创建子表后,添加外键约束
        alter table 表名
        add constraint 约束名 foreign key (外键列字段名) references 主表(主键列名)
        
        删除外键
        alter table 表名
        drop foreign key 约束名;
    

    统计(聚合)函数

    -- 统计(聚合)函数
     select 聚合函数 from 表 ...
     求行数:	count(*)
     select count(1) from student; 
     求总和: sum()
     select sum(age) from student; 
     求平均值: avg(列)
     select avg(age) from student;
     求最大值	max()
     select max(age) from student;
     求最小值	min()
     select min(age) from student;
     -- 查询不同地区学生的平均年龄
     将数据按不同的类型(字段),分组查询
     group by 字段名
     -- 查询男女学生各自人数
     select sex, count(1) from student group by sex;
     -- 查询每个地方各有多少人
     select address, count(1) from student group by address;
     -- 查询男女平均年龄
     select sex, avg(age) from student group by sex;
     -- 查询学生的平均年龄低于20的地区
     条件是加在分组之后的
     where 是在分组前起作用
     having 是在分组后起作用
     执行次序:where ---> group by ---> having
    select address, avg(age) from student group by address having avg(age) < 20;
     -- 查询男学生的平均年龄低于20的地区
    select address, avg(age) from student where sex = '0' group by address having avg(age) < 20;
    

    子查询

    子查询
    使用一个查询的结果当作条件,或者使用一个查询结果当作查询临时表。
    -- 使用查询结果当条件
    -- 查询年龄最大的学生信息
    SELECT * FROM employee WHERE age = (SELECT MAX(age) FROM employee);
    -- 查询借阅了两本书以上的学生信息
    SELECT * FROM tb_users WHERE user_id IN 
    (SELECT uid FROM tb_reds GROUP BY uid HAVING COUNT(1) >= 2);
    
    -- 使用查询结果当临时表查询
    -- 查询实际发放工资大于3500的员工信息(此处只是演示语法,并不意味着此方法效率高)
    -- 注意:当前查询中起的别名(例如下面的final)不能直接在条件中使用,必须用子查询,例如:
    -- 错误的写法:
    SELECT id, name, salary + kpi AS final FROM employee
    WHERE final > 3500;
    -- 正确的写法
    SELECT * FROM
    (SELECT id, name, salary + kpi AS final FROM employee) as t1
    WHERE final > 3500;
    -- 注意:子查询当作临时表必须给子查询的结果起个别名(例如上面的t1)
    

    联合查询

    联合查询
    union和union all的作用是将查询结果合并在一起。
    union 表示会去掉重复的记录。
    union all 表示不会去掉重复的记录。
    SELECT id, `name`, age FROM employee
    UNION ALL
    SELECT id, `name`, age FROM student;
    distinct关键字用法:表示去掉重复的记录
    -- 查询所有的有人的部门名称
    SELECT DISTINCT d.`name` FROM employee e
    INNER JOIN
    department d
    ON e.dept_id = d.id
    数据操作一般包含读(SELECT)和写(INSERT、UPDATE、DELETE),写操作一般都是单表操作,相对较为简单,修改和删除一般都是根据id进行操作,因为性能比较高,并且不会出现预料不到的情况,因为id是唯一的,且有序的。查询的内容+从哪些表里查+查询的条件
    
    展开全文
  • Oracle数据库中表查询表查询 1.交叉连接:表结构中数据两两组合(没什么作用) select t1.*,t2.* from t_student t1,t_class t2 --交叉连接获取结果是一个笛卡尔乘积 2.等值连接(在交叉连接基础...

    Oracle数据库中的多表查询

    多表查询


       1.交叉连接:表结构中的数据两两组合(没什么作用)
         select t1.*,t2.*
         from t_student t1,t_class t2
         --交叉连接获取的结果是一个笛卡尔乘积
        
       2.等值连接(在交叉连接的基础上,性能问题,不适用于数据量大)
         select t1.*,t2.* -- 100000  2
         from t_student t1,t_class t2 -- 10000  100  100W 获取的结果集可能非常大
         where t1.classid = t2.cid  -- 10条


        3.内连接
         select t1.*,t2.*
         from t_student t1 inner join t_class t2 on t1.classid = t2.cid
         
         select t1.*,t2.*
         from t_class t2 inner join t_student t1 on t1.classid = t2.cid
         -- 左边的数据和右边的数据满足 on 关键字后面的条件时保留
         --在连接的时候一般将数据量小的表放在连接符合的左侧

       查询出学生表中的所有的学生信息及对应的班级信息


    外连接:


       4.左外连接:在内连接的基础上保留左侧不满足条件的数据
         select t1.*,t2.*
         from t_student t1 left outer join t_class t2 
           on t1.classid = t2.cid
           
         select t2.*,t1.*
         from t_class t1 left join t_student t2 
           on t1.cid = t2.classid


        5.右外连接:在内连接的基础上保留右侧不满足条件的数据
         select t1.*,t2.*
         from t_student t1 right join t_class t2
           on t1.classid = t2.cid


        6.全连接:在内连接的基础上保留左右两侧不满足条件的数据
         select t1.*,t2.*
         from t_student t1 full join t_class t2
           on t1.classid = t2.cid

    等值连接另外一种等价的方式:自然连接(很少使用)
    效率跟等值连接是一样的,
        select id,name,cls_id,cls_name   --*  
        from t_student t1 natural join t_class t2
          --不能通过别名关联字段

    union 和 union all 关键字

    union --合并结果集同时去掉重复的记录
    union all --合并结果集不会去掉重复的记录

    列如:-

    select t2.*,t1.*
         from t_class t1 left join t_student t2 
           on t1.cid = t2.classid
    union
    select t1.*,t2.*
         from t_student t1 right join t_class t2
           on t1.classid = t2.cid

    展开全文
  • mysql表查询总结

    2018-08-12 19:45:41
    一.前言 上篇讲到Mysql中关键字执行顺序,只涉及了一张;实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1多连接有哪些分类?...首先先列举本篇用到分类(内连接,外连接,交叉连接)和连接...

    一.前言 

    上篇讲到Mysql中关键字执行的顺序,只涉及了一张表;实际应用大部分情况下,查询语句都会涉及到多张表格 :

    1.1 多表连接有哪些分类?

    1.2 针对这些分类有哪些连接方法?

    1.3 这些连接方法分别作用于哪些应用场景?

    这篇针对这三个点通过实例来讲述,目的是穷尽所有的场景和所有的方法,并且对每个方法的使用做实例。

    首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下):

    A)内连接:join,inner join

    B)外连接:left join,left outer join,right join,right outer join,union

    C)交叉连接:cross join

     

    二.下面以实例进行分析

    两张假设有两张表格A和B,把表格当作一个集合,那么表格中的记录就是集合中的一个元素。

    两张表格如下:

    TableA:TableB:

    2.1 内连接(只有一种场景)

    inner join 或者join(等同于inner join)

     

    
     
    1. select a.*, b.* from tablea a

    2. inner join tableb b

    3. on a.id = b.id

     

     

    
     
    1. select a.*, b.* from tablea a

    2. join tableb b

    3. on a.id = b.id

     

    结果如下:

    应用场景:

    这种场景下得到的是满足某一条件的A,B内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

    2.2 外连接(六种场景)

    2.2.1 left join 或者left outer join(等同于left join)

    
     
    1. select a.*, b.* from tablea a

    2. left join tableb b

    3. on a.id = b.id

     

    或者

     

    
     
    1. select a.*, b.* from tablea a

    2. left outer join tableb b

    3. on a.id = b.id

    结果如下,TableB中更不存在的记录填充Null:

    应用场景:

    这种场景下得到的是A的所有数据,和满足某一条件的B的数据;

    2.2.2  [left   join 或者left outer join(等同于left join)]  +  [where B.column is null]

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. left join tableb b

    3. on a.id = b.id

    4. Where b.id is null

    结果如下:

    应用场景:

    这种场景下得到的是A中的所有数据减去"与B满足同一条件 的数据",然后得到的A剩余数据;

    2.2.3  right join 或者fight outer join(等同于right join)

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. right join tableb b

    3. on a.id = b.id

    结果如下,TableB中更不存在的记录填充Null:

     

    应用场景:

    这种场景下得到的是B的所有数据,和满足某一条件的A的数据;

    2.2.4 [left   join 或者left outer join(等同于left join)]  +  [where A.column is null]

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. right join tableb b

    3. on a.id = b.id

    4. where a.id is null

    结果如下:

     


    应用场景:

    这种场景下得到的是B中的所有数据减去 "与A满足同一条件 的数据“,然后得到的B剩余数据;

    2.2.5 full join (mysql不支持,但是可以用 left join  union right join代替)

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. left join tableb b

    3. on a.id = b.id

    4. union

    5. select a.id aid,a.age,b.id bid,b.name from tablea a

    6. right join tableb b

    7. on a.id = b.id

    union过后,重复的记录会合并(id为2,3,4的三条记录),所以结果如下:

     

    应用场景:

     

    这种场景下得到的是满足某一条件的公共记录,和独有的记录

    2.2.6 full join + is null(mysql不支持,但是可以用 (left join + is null) union (right join+isnull代替)

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. left join tableb b

    3. on a.id = b.id

    4. where b.id is null

    5. union

    6. select a.id aid,a.age,b.id bid,b.name from tablea a

    7. right join tableb b

    8. on a.id = b.id

    9. where a.id is null

    结果如下:

     

    应用场景:

    这种场景下得到的是A,B中不满足某一条件的记录之和

    注:上面共有其中七(2^3-1)种应用场景,还有一种是全空白,那就是什么都不查,七种情形包含了实际应用所有可能的场景

    2.3 交叉连接 (cross join)

    2.3.1 实际应用中还有这样一种情形,想得到A,B记录的排列组合,即笛卡儿积,这个就不好用集合和元素来表示了。需要用到cross join:

     

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. cross join tableb b

     

    2.3.2 还可以为cross  join指定条件 (where):

    
     
    1. select a.id aid,a.age,b.id bid,b.name from tablea a

    2. cross join tableb b

    3. where a.id = b.id

    结果如下;

    注:这种情况下实际上实现了内连接的效果

    三 注意事项

    上面仍然存在遗漏,那就是mysql对sql语句的容错问题,即在sql语句不完全符合书写建议的情况,mysql会允许这种情况,尽可能地解释它:

    3.1 一般cross join后面加上where条件,但是用cross join+on也是被解释为cross join+where;

    3.2 一般内连接都需要加上on限定条件,如上面场景2.1;如果不加会被解释为交叉连接;

    3.3 如果连接表格使用的是逗号,会被解释为交叉连接;

    注:sql标准中还有union join和natural  inner join,mysql不支持,而且本身也没有多大意义,其结果可以用上面的几种连接方式得到

    总结:总结了mysql所有连接方法,其中有一些是之前没有注意到的问题,平时开发也都不外乎这些

    展开全文
  • 一.表的加法通过union实现,会自动删除重复行,要想保留重复行用union all,实际...左联结作用:将左侧数据全部取出注意:没有对应行用null填充想要不取出重复部分,加上where语句:3.右联结(相反于左联...
  • 实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1 多连接有哪些分类?1.2 针对这些分类有哪些连接方法?1.3 这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有场景和...
  • 表查询的规律 多表查询 1. 交叉连接查询 select * from 表1,表2; 左表的每条数据和右表的每条数据组合,会产生2张表的乘积数据,简称笛卡尔积现象。 2. 内连接查询 作用:可以使用内连接去查询多张表之间有关系的...
  • ORACLE SQL 多表查询

    2019-04-05 13:44:20
    连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接特点很重要。只有真正了解它们之间区别,才能正确使用,下面是常见几种连接方式: INNER JOIN(内连接) INNER JOIN(内连接),...
  • 表的连接红色部分保留是行交叉联结——1所有行与2所有行连接内联结 ——同时存在于两张数据左联结——将左侧中数据全部取出左联结去掉公共部分右联结——将左侧中数据全部取出右联结去掉公共...
  • 1.多之间多种连接查询 文章目录1.多之间多种连接查询1.交叉查询2.外连接2.1 左外连接2.2 右外连接3.内连接(重点)3.1 隐式内连接3.2 显式内连接3.3 举个栗子。。。2.子查询(重点)2.1 解析2.2 子查询进阶3...
  • 实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1多连接有哪些分类?1.2针对这些分类有哪些连接方法?1.3这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有场景和所有...
  • 实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1多连接有哪些分类?1.2针对这些分类有哪些连接方法?1.3这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有场景和所有...
  • Mysql 多表查询详解

    2018-05-31 13:48:21
    实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1 多连接有哪些分类?1.2 针对这些分类有哪些连接方法?1.3 这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有场景和...
  • 2.union 起到合并的作用,但会去除重复项,union all则不会去掉重复项;练习:将course,和course1合并二、联结联结分为交叉联结,内联结,左联结,右联结,全联结;其中交叉联结是其它联结的基...
  • SQL多连接查询

    2020-08-13 14:43:38
    Mysql 多表查询详解 一.前言 这里主要是以MYSQL为例来进行说明 1.1 多表连接有哪些分类? 1.2 针对这些分类有哪些连接方法? 1.3 这些连接方法分别作用于哪些应用场景? 这篇针对这三个点通过实例来讲述,目的是穷尽...
  • MySQL多表查询(解析)

    千次阅读 2018-04-19 16:59:52
    实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1 多连接有哪些分类?1.2 针对这些分类有哪些连接方法?1.3 这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有场景和...
  • 浅谈Sql多关联查询

    2020-04-02 19:15:24
    通过连接运算符可以实现多个表查询。做一些必要笔记,一来是对自己学习知识巩固,二来对有同样问题人有参考作用 文章目录一 内连接二 外连接三 交叉连接四 总结    连接查询主要分为三种:内...
  • 一、多表查询 1、交叉连接:不使用任何匹配条件,生成笛卡尔积 》》select * from 表1,表2;就是将表1每条记录和表2中所有记录组成一条记录 》》笛卡尔积:AxB 就是将A中每个元素和B中所有可能组成有序对 ...
  • Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行顺序,只涉及了一张表;实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1多表连接有哪些分类? 1.2针对这些分类...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 197
精华内容 78
关键字:

交叉表查询的作用