精华内容
下载资源
问答
  • 交叉表查询语法比较
    2009-01-12 09:05:14
    交叉表查询语法比较 使用交叉表查询可以让汇总数据更容易阅读,交叉表查询计算总和、平均值或其他聚合函数 ,然后按照两组值对结果进行分组:一组值垂直分布在数据表的一侧,而另一组值水平分布在数据表的顶端。在运行交叉表查询时,结果显示在一个数据表中,该数据表的结构不同于其他类型的数据表,与显示相同数据的简单选择查询相比,交叉表查询的结构让数据更易于阅读。 SqlServer2005中对交叉表查询进行了语法上的简化,但是交叉表查询却不是SqlServer2005独有的,事实上Pivot语法源自Access数据库。而在没有这种新语法之前,SqlServer2000中通常使用Case语法来实现交叉表查询。 而这2种方式都不是标准的Sql语句, 其实还有另外一种交叉表查询方式,利用复杂的自我连接可以形成一个交叉表结果(但是可读性将非常差!)本文将会构造一个比较典型的简单例子,分别用几种方式实现,可以简单对比一下。 假设有学生分数表PupleMark如下(这表只是为了说明问题,这并不是一个好的设计,也不符合第3范式标准): Name Grade Project Mark 甲 1 数学 80 甲 1 语文 70 甲 1 地理 70 甲 1 英语 100 乙 5 语文 75 丙 4 数学 95 乙 5 数学 50 乙 5 英语 87 ...... ...... ....... ....... 假设我们需要查询出一个汇总表,看见3-6年级的数学、英语、语文(其他科目不需要,一二年级不需要)的平均分,大约如下: 语文 数学 英语 3 4 5 6 先来看看Access下的语法: TRANSFORM Avg(Mark) SELECT Grade FROM PupleMark WHERE Grade > 2 GROUP BY Grade ORDER BY Grade PIVOT Project IN ('语文','数学','英语') 接下来是SqlServer2000中常用的case语法: SELECT Grade, Avg(Case Project WHEN '语文' THEN Mark ELSE NULL END), Avg(Case Project WHEN '数学' THEN Mark ELSE NULL END), Avg(Case Project WHEN '英语' THEN Mark ELSE NULL END) FROM PupleMark WHERE Grade > 2 GROUP BY Grade ORDER BY Grade 然后是SqlServer2005中新增加的交叉表语法: SELECT Grade,语文,数学,英语 FROM (SELECT Grade, Mark, Project FROM PupleMark ) A PIVOT (Avg(Mark) FOR Project IN (语文,数学,英语)) WHERE Grade > 2 ORDER BY Grade 最后是可读性很差的标准连接语法: SELECT A.Grade, A.数学, B.语文,C.英语 FROM (SELECT Grade,Avg(Mark) AS 数学 FROM PupleMark WHERE Project='数学' GROUP BY Grade) A INNER JOIN (SELECT Grade,Avg(Mark) AS 语文 FROM PupleMark WHERE Project='语文' GROUP BY Grade) B ON A.Grade = B.Grade INNER JOIN (SELECT Grade,Avg(Mark) AS 英语 FROM PupleMark WHERE Project='英语' GROUP BY Grade) C ON B.Grade = C.Grade WHERE A.Grade > 2 ORDER BY Grade 
    更多相关内容
  • 查了一圈,网上关于带参数的交叉表查询的介绍很少。 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

    展开全文
  • Mysql5 实现交叉表查询

    千次阅读 2015-12-15 17:04:17
    交叉表、行列转换和交叉查询经典 一、什么是交叉表交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成:  行  列  摘要...

    交叉表、行列转换和交叉查询经典
    一、什么是交叉表

    “交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成:
        行
        列
        摘要字段
        “交叉表”中的行沿水平方向延伸(从一侧到另一侧)。在上面的示例中,“手套”(Gloves) 是一行。
        “交叉表”中的列沿垂直方向延伸(上下)。在上面的示例中,“美国”(USA) 是一列。
        汇总字段位于行和列的交叉处。每个交叉处的值代表对既满足行条件又满足列条件的记录的汇总(求和、计数等)。在上面的示例中,“手套”和“美国”交叉处的值是四,这是在美国销售的手套的数量。

    “交叉表”还可以包括若干总计:

        每行的结尾是该行的总计。在上面的例子中,该总计代表一个产品在所有国家/地区的销售量。“手套”行结尾处的值是 8,这就是手套在所有国家/地区销售的总数。

        注意:    总计列可以出现在每一行的开头。
        每列的底部是该列的总计。在上面的例子中,该总计代表所有产品在一个国家/地区的销售量。“美国”一列底部的值是四,这是所有产品(手套、腰带和鞋子)在美国销售的总数。

        注意:    总计列可以出现在每一行的顶部。
        “总计”(Total) 列(产品总计)和“总计”(Total) 行(国家/地区总计)的交叉处是总计。在上面的例子中,“总计”列和“总计”行交叉处的值是 12,这是所有产品在所有国家/地区销售的总数。

    二、行列转换和交叉查询:

    1: 列转为行:
    eg1:
    假设有张学生成绩表(CJ)如下
    name      subject         result
    张三         语文             80
    张三         数学             90
    张三         物理             85
    李四         语文             85
    李四         数学             92
    李四         物理             82
    相关sql语句:

    Create table CJ(name char(10),subject char(10),result int);
    insert into CJ(name,subject,result) values('张三','语文',99);
    insert into CJ(name,subject,result) values('张三','数学',86);
    insert into CJ(name,subject,result) values('张三','英语',75);
    insert into CJ(name,subject,result) values('李四','语文',78);
    insert into CJ(name,subject,result) values('李四','数学',85);
    insert into CJ(name,subject,result) values('李四','英语',78)

    select * from CJ

    想变成如下的交叉表    
    姓名        语文        数学        物理
    张三         99          90           85
    李四         85          92           82

    我们首先来看一下如何建立静态的交叉表,也就是说列数固定的交叉表,这种情况其实只要一句简单的Select查询就可以搞定:

    select name,sum(case when a.subject='语文' then result else null end) as "语文",
    sum(case when a.subject='数学' then result else null end) as "数学",
    sum(case when a.subject='英语' then result else null end) as "英语"
    from CJ a
    group by name;

    当要增加“总计”列:"合计总分"时,如下表所示:

    姓名        合计总分 语文        数学        物理
    张三          260             99          90          85
    李四          241             85          92          82

    只需增加sum(a.result) as "合计总分",sql如下:
    select name,sum(a.result) as "合计总分",
    sum(case when a.subject='语文' then result else null end) as "语文",
    sum(case when a.subject='数学' then result else null end) as "数学",
    sum(case when a.subject='英语' then result else null end) as "英语"
    from CJ a
    group by name;

    其中利用了CASE语句判断,如果是相应的列,则取需要统计的cj数值,否则取NULL,然后再合计。
    其中有两个常见问题说明一下:
    a、用NULL而不用0是有道理的,假如用0,虽然求和函数SUM可以取到正确的数,但类似COUNT函数(取记录个数),结果就不对了,因为Null不算一条记录,而0要算,同理空字串("")也是这样,总之在这里应该用NULL,这样任何函数都没问题。

    b、假如在视图的设计界面保存以上的查询,则会报错“没有输出列”,从而无法保存,其实只要在查询前面加上一段:Create View ViewName AS ...,ViewName是你准备给查询起的名称,...就是我们的查询,然后运行一下,就可以生成视图了,对于其他一些设计器不支持的语法,也可以这样保存。

    以上查询作用也很大,对于很多情况,比如产品销售表中按照季度统计、按照月份统计等列头内容固定的情况,这样就行了,但往往大多数情况下列头内容是不固定的,象City,用户随时可能删除、添加一些城市,这种情况就是我们所说的动态交叉表,在SQLServer中我们可以用存储过程来解决。下面我们补充一些知识:

    相关子查询

    相关子查询和普通子查询区别在于:相关子查询引用了外部查询的列。这种引用外部查询的能力意味着相关子查询不能自己独立运行,其中对于外部查询引用会使会使其无法正常执行。因此相关子查询的执行顺序如下:
    1.首先执行一遍外部查询
    2.对于外部查询的每一行分别执行一遍子查询,而且每次执行子查询时候都会引用外部的当前行的值。使用子查询的结果来确定外部查询的结果集。
    举个例子;
    SELECT t1.type
    FROM titles t1
    GROUP BY t1.type
    HAVING MAX(t1.advance) >=ALL
    (SELECT 2 * AVG(t2.advance)
    FROM titles t2
    WHERE t1.type = t2.type)
    这个结果返回最高预付款超过给定组中平均预付款两倍的书籍类型。
    再举个例子:
    要求返回每一个编号的最大值(列出id,name,score)
    ID Name(编号) Score(分数)
    1          a                   88
    2          b                   76
    3          c                   66
    4          c                   90
    5          b                   77
    6          a                   56
    7          b                   77
    8          c                   67
    9          a                   44
    select * from t a where score=
    (select Max(Score) from t b       where a.name=b.name)
    再给一个排位的sql语句
    SELECT (
    SELECT count(*) 1 as dd
    FROM [Test ] as a where a.[F2]<b.[F2] ) AS ord,b.[F1], b.[F2]
    FROM [Test ] as b
    order by b.[F2];
    好了关于sql的相关子查询先讲到这里。

    SQLServer中局部变量赋值方法
    有两种:
    一种: set @变量名 = 值
    二种: select @变量名 = 值

    第二种可以从某个表中得到数据再赋值给变量
    例: 从用户信息表中查询中cid为 20 的用户姓名将他赋值给变量 name
    declare @name varchar(10) --用户名
    select @name=userName from userInfo where cid = 20
    print 'cid为20的用户姓名:' + @name

    递归的select变量

    递归的select变量是指使用select语句和子查询将一个变量与其自身拼接起来。语法形式如下:select @variable = @variable + table.column from table---见《sql server2000宝典》:P354,这是一种很优美的查询方法.从而将基础表中垂直的列数据改为水平方向的数据。这样就可以替代游标。动态的交叉表这样就代替了传统的游标。

    SQL语句解决方法:

    写法一:

    declare @sql varchar(4000)
    set @sql = 'select name'
    select @sql = @sql + ',sum(case subject when '''+subject+''' then result end) as '+subject
                 from (select distinct subject from CJ) as a
    select @sql = @sql+' from CJ group by name'
    exec(@sql)

    写法二:

    declare @sql varchar(4000)
    set @sql = 'select name'
    select @sql = @sql + ',sum(case subject when '''+subject+''' then result end) as '+subject
               +' from CJ group by subject
    select @sql = @sql+' from CJ group by name'
    exec(@sql)

    具体不同的多种写法参见本文相关链接文章中的其他例子

    在Access中还提供了TransForm来实现行列转换
    TRANSFORM count(Result) AS number
    SELECT 姓名
    FROM 学生成绩表
    GROUP BY 姓名
    PIVOT Subject;

    TransForm 用法如下:
    =========================================================
    TRANSFORM aggfunction
    selectstatement
    PIVOT pivotfield [IN (value1[, value2[, ...]])]

    TRANSFORM 语句可分为以下几个部分:

    部分                 描述
    aggfunction 在选定数据上运作的 SQL 合计函数。
    selectstatement       SELECT 语句。
    pivotfield 在查询的结果集中创建列标题时用的字段或表达式。
    value1, value2 用来创建列标题的固定值。

    说明
    使用交叉表查询来摘要数据时,从指定的字段或表达式中选定值作为列标题,
    这样,可以用比选定查询更紧凑的格式来观察数据。
    TRANSFORM 是可选的,但在使用它时,要作为       SQL 字符串中的第一个语句。
    它出现在 SELECT 语句(指定作为行标题的字段的)之前,还出现在 GROUP BY 子句
    (指定行分组的)之前。可以有选择地包含其它子句,例如 WHERE 子句,它指定附
    加的选择或排序条件。也可以将子查询当作谓词,特别是在叉表查询的 WHERE 子句中。

    pivotfield 返回的值被用作查询结果集中的列标题。
    例如,在交叉表查询中,将根据销售图表按销售月份创建 12 个列。
    可以限制 pivotfield 用列在可选的 IN 子句中的固定值(value1, value2)来创建标题。
    也可以用没有数据存在的固定值来创建附加的列。

    2. 列行转换
    暂时保留

    3. 行列转换--加合并
    有表A,
    id pid
    1        1
    1        2
    1        3
    2        1
    2        2
    3        1
    如何化成表B:
    id      pid
    1       1,2,3
    2       1,2
    3       1

    创建一个合并的函数
    create function fmerg(@id int)
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+','+cast(pid as varchar) from 表A where id=@id
    set @str=right(@str,len(@str)-1)
    return(@str)
    End
    go

    --调用自定义函数得到结果
    select distinct id,dbo.fmerg(id) from 表A

    Java代码   收藏代码
    1. # Host: localhost    Database: test  
    2. # ------------------------------------------------------  
    3. # Server version 5.0.45-community-nt-log  
    4.   
    5. #  
    6. # Table structure for table sale  
    7. #  
    8.   
    9. DROP TABLE IF EXISTS `sale`;  
    10. CREATE TABLE `sale` (  
    11. `id` int(10) unsigned NOT NULL auto_increment,  
    12. `year` int(11) NOT NULL,  
    13. `quarter` int(11) NOT NULL,  
    14. `amount` decimal(15,2) NOT NULL,  
    15. PRIMARY KEY (`id`)  
    16. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;  
    17.   
    18. #  
    19. # Dumping data for table sale  
    20. #  
    21.   
    22. /*!40101 SET NAMES latin1 */;  
    23.   
    24. INSERT INTO `sale` VALUES (1,2004,1,2328);  
    25. INSERT INTO `sale` VALUES (2,2004,2,3822);  
    26. INSERT INTO `sale` VALUES (3,2004,3,7071);  
    27. INSERT INTO `sale` VALUES (4,2004,4,8931);  
    28. INSERT INTO `sale` VALUES (5,2005,1,2633);  
    29. INSERT INTO `sale` VALUES (6,2005,2,3910);  
    30. INSERT INTO `sale` VALUES (7,2005,3,237193);  
    31. INSERT INTO `sale` VALUES (8,2005,4,567444);  
    32. INSERT INTO `sale` VALUES (9,2006,1,12313);  

    插入数据后结果为:
    id    year    quarter    amount
    1    2004    1    2328.00
    2    2004    2    3822.00
    3    2004    3    7071.00
    4    2004    4    8931.00
    5    2005    1    2633.00
    6    2005    2    3910.00
    7    2005    3    237193.00
    8    2005    4    567444.00
    9    2006    1    12313.00

    交叉表查询语句:
    select a.year, 1d, 2d, 3d, 4d from
    (select distinct year from sale) a left join
    (select year, amount 1d from sale where quarter=1 group by year) a1d on a.year = a1d.year
    left join (select year, amount 2d from sale where quarter=2 group by year) a2d on a2d.year=a.year
    left join (select year, amount 3d from sale where quarter=3 group by year) a3d on a3d.year=a.year
    left join (select year, amount 4d from sale where quarter=4 group by year) a4d on a4d.year=a.year
    该语句查询某年的四个季度的amount,以行显示,显示结果:

    year    1d    2d    3d    4d
    2004    2328.00    3822.00    7071.00    8931.00
    2005    2633.00    3910.00    237193.00    567444.00
    2006    12313.00    NULL    NULL    NULL

    实现定长列的查询(即quarter的最大取值为4,定长为4列).

    展开全文
  • sql 交叉查询

    千次阅读 2019-12-26 17:32:17
    日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求。比如,左表一条关联右表多条记录时,我需要控制右表的某一条或多条记录跟左表匹配。貌似,INNER ...

     

    日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求。比如,左表一条关联右表多条记录时,我需要控制右表的某一条多条记录跟左表匹配。貌似,INNER JOIN 或 LEFT OUTER JOIN 不能很好完成。但是 CROSS APPLY 与 OUTER APPLY 可以,下面用示例说明。

     

    1. 示例一
      • 有两张表:Student(学生表)和 Score(成绩表),数据如下:

    clip_image002[10]

     

    1. 查询每个学生最近两次的考试成绩
    1. 先试下 INNER JOIN
    1. SQL 代码

    SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1

    INNER JOIN Score AS T2 ON T1.StudentNo = T2.StudentNo

    1. 结果:

    clip_image003[12]

    1. 咦,不对,这不是我想要的结果。

     

    1. 再看看 CROSS APPLY
    1. SQL 代码

    SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1

    CROSS APPLY(

        SELECT TOP 2 * FROM Score AS T

        WHERE T1.StudentNo = T.StudentNo

        ORDER BY T.ExamDate DESC

    ) AS T2

    1. 结果:

    clip_image004[12]

    1. 嗯,这次对了,并且还是按照“考试时间”倒序排序的。

     

    1. 查询每个学生最近两次的考试成绩,没有参加考试的同学成绩补 null
    1. 先试下 LEFT OUTER JOIN
    1. SQL 代码

    SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1

    LEFT OUTERJOIN Score AS T2 ON T1.StudentNo = T2.StudentNo

    1. 结果:

    clip_image005[12]

    1. 咦,不对,这又不是我想要的结果。

     

    1. 再看看 OUTER APPLY
    1. SQL 代码

    SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1

    OUTER APPLY(

        SELECT TOP 2 * FROM Score AS T

        WHERE T1.StudentNo = T.StudentNo

        ORDER BY T.ExamDate DESC

    ) AS T2

    1. 结果:

    clip_image006[10]

    1. 嗯,这次对了,不但按照“考试时间”倒序排序的,而且没有考试的同学也被查出来了。

     

    • 总结
    1. 理解 CROSS APPLY 与 OUTER APPLY(个人理解)
    1. CROSS APPLY 的意思是“交叉应用”,在查询时首先查询左表,然后右表的每一条记录跟左表的当前记录进行匹配。匹配成功则将左表与右表的记录合并为一条记录输出;匹配失败则抛弃左表与右表的记录。(与 INNER JOIN 类似)
    2. OUTER APPLY 的意思是“外部应用”,与 CROSS APPLY 的原理一致,只是在匹配失败时,左表与右表也将合并为一条记录输出,不过右表的输出字段为 null。(与 LEFT OUTER JOIN 类似)

     

    1. CROSS APPLY 与 INNER JOIN 的区别
    1. CROSS APPLY 可以根据当前左表的当前记录去查询右表,但是 INNER JOIN 不可以,INNER JOIN 是根据左表的当前记录匹配右表整个结果集。
    2. 两者都是匹配成功才输出。

     

    1. OUTER APPLY 与 LEFT OUTER JOIN 的区别
    1. 它们和(CROSS APPLY 与 INNER JOIN)类似。
    2. 只是两者都是匹配失败也会输出。

     

    1. 使用场景:
    1. 一个商品有多张图片,但是只想取最近的一张图片跟商品匹配。

     

    1. 总结一句话:右表可以是有条件的跟左表的记录匹配,而条件的值可以来至于左表。
    展开全文
  • 交叉表、行列转换和交叉查询经典

    千次阅读 2016-11-23 09:44:45
    交叉表、行列转换和交叉查询经典 一、什么是交叉表交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成: ...
  • MySql多表查询优化

    千次阅读 2021-01-18 21:21:22
    一、多表查询连接的选择相信内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上,我就补贴出来了,这个图只是让大家熟悉一下各种连接查询。然后要告诉大家的是,需要根据查询的信息,想好...
  • 表查询(1)选择表中的若干列① 查询指定列② 查询全部列③ 查询经过计算的值❶ 算术表达式❷ 字符串常量及函数❸ 使用列别名改变查询结果的列标题(2)选择表中的若干元组(行)① 关键词DISTINCT去掉表中重复的...
  • MySQL多表查询优化

    千次阅读 2021-02-08 19:53:03
    一、多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根据查询的情况,想...
  • MySQL-多表查询

    2022-04-02 20:35:36
    表查询有多种方法,隐式查询、链接查询(包括外连接查询和内连接查询)、交叉查询。 例如: result表 student表 在如上两张表中,如果要查询 result 表中 studentResult 字段值大于80的学生姓名 studentName...
  • sql指令和多关系 ### 1. 排序 (order by) 数据库的查询(排序:order by) 默认是按升序排列的,但是升序ASC最好写上,代码可读性! SELECT * FROM 表名 ORDER BY 排序字段 ASC(升序)|DESC(降序); 如果排序列的值...
  • Mysql 多表查询总结

    千次阅读 2018-05-01 10:34:26
    在做毕业设计时,对数据库的查询用到了多表查询, 之前学的一知半解的,借着这个机会,又查了些资料,复习了一下,记录下来,以便日后用到时能快速解决问题。 下面实例中用到的是 MySQL:mysql-5.7.13-winx64, ...
  • 交叉表查询中的累计

    千次阅读 2010-01-10 22:49:00
    交叉表查询无疑有使用中可以很方便的进行数据的分析处理。你可以通过向导来生成(在向导中你可以选择是否生成行合计)或者直接按照这个ACCESS特有JET-SQL语法来写这个SQL语句。TRANSFORM合计函数 selectstatement ...
  • 连接查询

    千次阅读 2021-01-17 16:52:08
    一、多表查询的基础语法 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column; 二、表与表之间的连接 在Oracle中主要有如下3种类型的连接: 1、内连接,这种连接但会即...
  • SQL语句(四)联表查询

    千次阅读 2021-08-02 17:16:00
    文章目录一、关联查询的分类按年代分按功能分二、sql92语法的链接语法1. 简单应用2. 为起别名3. 加入筛选4. 加入分组5. 三连接6. 非等值连接7. 自连接 一、关联查询的分类 按年代分 sql92:仅仅支持内连接 sql99...
  • SQL多表查询的几种连接方式

    千次阅读 2021-02-02 17:50:57
    一、基础1.1 SQL查询的基本原理第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。第二、两表连接查询:对两表求积...
  • 表查询

    千次阅读 2020-10-15 18:08:57
    1.创建student和score CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建...
  • MySQL 数据表查询语句

    千次阅读 2021-04-25 16:32:03
    MySQL 数据表查询语句 在 MySQL 中,使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。 SELECT 的语法格式如下: SELECT {* | <...
  • MySQL数据库的多表查询以及外键约束

    千次阅读 2021-01-21 18:25:02
    原标题:MySQL数据库的多表查询以及外键约束来源:Java联盟https://mp.weixin.qq.com/s/QmbWy1OO2UDrRDnz7G9mZQ程序员共读整理发布,转载请联系作者获得授权看到好多伙伴留言~想要了解MySQL的多表查询~那么我们今天...
  • MySQL多表查询(解析)

    千次阅读 2018-04-19 16:59:52
    实际应用大部分情况下,查询语句都会涉及到多张表格 :1.1 多连接有哪些分类?1.2 针对这些分类有哪些连接方法?1.3 这些连接方法分别作用于哪些应用场景?这篇针对这三个点通过实例来讲述,目的是穷尽所有的场景和...
  • 因为mybatis使用的基本是原生sql语句 所以首先从数据库开始说 ...sql语句举例:联接查询user,order中user的id相同的数据,前五列为user的内容,后面的是order。 SELECT * FROM `user` INNER JO...
  • 提起这几种连接方式就让人头大,想当初还因为这个面试被刷了,长得挺像,用法挺像,可就是有点不一样,其实的它们的差异不是固定的,要在一个具体的环境下才能进行对比,比如在Mysql环境下, JOIN, INNER JOIN, ...
  • 数据库连表查询

    千次阅读 2019-05-19 23:57:53
    通常情况下,该值在该行数据插入到数据库时即被确定且唯一。 ROWID它是一个伪列,它并不实际存在于中。它是ORACLE在读取中数据行时, 根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的...
  • MYSQL外键约束多表查询外连接内连接自连接子查询索引 -------------缪林 自2014-10月总结,转载请尊重原创   字段值类型:date:日期,time,时间,datetime:日期时间,timestamp时间戳,自动刷新,用于记录修改时间 ...
  • Mysql 多表查询详解

    万次阅读 多人点赞 2016-04-27 16:33:48
    实际应用大部分情况下,查询语句都会涉及到多张表格 : 1)多连接有哪些分类; 2)针对这些分类有哪些连接方法? 3)这些连接方法分别作用于哪些应用场景? 这篇针对这三个点通过实例来讲述,目的是穷尽所有的场景和...
  • SqlServer生成交叉表大全

    万次阅读 2007-12-05 16:39:00
    SqlServer如何生成动态交叉表查询VB+MS SqlServer,是我们目前开发数据库应用系统最常用的模式,翻翻以前的老帖子,有一些SqlServer的问题经常被提出来,但正确解答甚少,现把我对这些问题的见解贴出来,这次先讲讲...
  • 一. 面试题及剖析 1. 今日面试题 说一下SQL查询语句的执行顺序; ...我们知道,SQL语句中最复杂的肯定是查询语句,其他的增删改创建授权等语句,基本没有太大的难度,所以本文主要分析SQL查询
  • SqlServer如何生成动态交叉表查询

    千次阅读 2004-07-27 14:03:00
    SqlServer如何生成动态交叉表查询 fuxc(原作) 关键字 交叉表 SQL 存储过程 VB+MS SqlServer,是我们目前开发数据库应用系统最常用的模式,翻翻以前的老帖子,有一些SqlServer的问题经常被提出来,但正确解答甚...
  • mysql单表、多表查询

    千次阅读 2018-08-15 23:14:56
    1.单表查询  1.1mysql的基本查询语句:  SELECT 属性列表 FROM 表名和视图列表  [WHERE 条件表达式 1]  [GROUP BY 属性名 1[HAVING 条件表达式 2]]  [ORDER BY 属性名 2[ASC|DESC]]  1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,358
精华内容 13,343
关键字:

交叉表查询的作用