`
ronon
  • 浏览: 192825 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

问题消灭机

 
阅读更多

.distinct 的详细用法?是否只对第一个字段起作用?

-->

distinct用于select 后,需要查询的字段左,用于过滤重复记录,

影响查询结果的并不只是最靠近它的那个字段,而是select后的所有字段

 

例如有这么一个表#temp

type name

0      a

0      a

1      c

0      d

 

如果查询 select distinct type from #temp  会返回2行结果集

type

0

1

 

如果查询 select distinct type,name from #temp  会返回3行结果集

type name

0      a

1      c

0      d

 

总结为:distinct 会筛选掉 column1+column2+……+columnN 中的重复数据

显然通常情况下查询的列越少,结果集的行数也越少

 

.Exist的详细用法?目前只知道它返回的是bool,并且效率上比较快

-->

 

.Left Join ,Right Join,Inner Join,Join 的具体区别?

-->

 

有这两个表

drop table book
create table book
(
     id int identity(1,1) primary key,
     name varchar(100),
     booktype int references booktype(id) 
)
drop table booktype
create table booktype
(
    id int identity(1,1) primary key,
    typename varchar(100),
)

 

http://dl.iteye.com/upload/picture/pic/104062/678662f1-689d-3af4-9be9-310497e33e88.png

--left join  会返回左表的所有行,以及匹配条件的右表行,不匹配的显示为null

select a.id 书id,a.name 书名,b.typename 类型名
from book a
left join booktype b on b.id=a.booktype

 

 http://dl.iteye.com/upload/picture/pic/104054/d6b97276-4360-3978-a648-b43cdfdac33a.png

--right join 会返回右表的所有行,以及匹配条件的左表行,不匹配的显示为null

http://dl.iteye.com/upload/picture/pic/104058/9daa1d77-eeab-3fd6-bc2a-d01462cc9dc9.png

--join 只返回符合匹配条件的所有行

 http://dl.iteye.com/upload/picture/pic/104056/d6372728-4302-3ca1-bfa6-a10d31ed50ef.png

--inner join 在此例子中,查询结果和join没什么区别

 

--full join 返回左表和右表的所有行,不匹配的部分显示null

http://dl.iteye.com/upload/picture/pic/104060/80198a3e-a9ee-3dfb-b50b-ed5846ac7e12.png

 

 

.多个表连接时,此时"left join"的"left"表是指主表还是左边那个表?

-->

初步觉得应该"on" 后的那个表

有待检验

 

.在使用Group by 时,通常不需要汇总的字段都要写在Group by 后面,

那么,那些字段的先后顺序是否会对查询结果造成影响?

 

以下是从网上找来的答案,觉得能解开一部分疑惑:

写道
在SQL中使用GROUP BY来对SELECT的结果进行数据分组,在具体使用GROUP BY之前需要知道一些重要的规定。

•GROUP BY子句可以包含任意数目的列。也就是说可以在组里再分组,为数据分组提供更细致的控制。
如果在GROUP BY子句中指定多个分组,数据将在最后指定的分组上汇总。
•GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
•出了聚集计算语句外,SELECT语句中的每一列都必须在GROUP BY子句中给出。
•如果分组列中有NULL值,则NULL将作为一个分组返回。如果有多行NULL值,它们将分为一组。
•GROUP BY子句必须在WHERE子句之后,ORDER BY之前。
过滤分组
对分组过于采用HAVING子句。HAVING子句支持所有WHERE的操作。
HAVING与WHERE的区别在于WHERE是过滤行的,而HAVING是用来过滤分组。

另一种理解WHERE与HAVING的区别的方法是,WHERE在分组之前过滤,而HAVING在分组之后以每组为单位过滤。

分组与排序
一般在使用GROUP BY子句时,也应该使用ORDER BY子句。这是保证数据正确排序的唯一方法。

SQL SELECT语句的执行顺序:

1.from子句组装来自不同数据源的数据;
2.where子句基于指定的条件对记录行进行筛选;
3.group by子句将数据划分为多个分组;
4.使用聚集函数进行计算;
5.使用having子句筛选分组;
6.计算所有的表达式;
7.使用order by对结果集进行排序;
8.select 集合输出。
举个例子吧。 

select 考生姓名, max(总成绩) as max总成绩
from tb_Grade
where 考生姓名 is not null
group by 考生姓名
having max(总成绩) > 600
order by max总成绩

在上面的示例中 SQL 语句的执行顺序如下:

1.首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
2.执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
3.执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组
4.计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值
5.执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.
6.执行 ORDER BY 子句, 把最后的结果按 "Max 成绩" 进行排序.

 <!-- 本文来源于 简明现代魔法 http://www.nowamagic.net/ ,转载请务必注明出处 -->

以上只解决了一部分疑问,关于group by后的字段的次序问题还没得到解决

于是自己动手建了两个表,写了几个sql

1).两个表的源数据

 

 

2).次序1

3).次序2

 

4).次序3

 

5).group by 后定义三个分组字段

 

6).group by 后定义两个分组字段 

 

得出结论:
1).在group by 后的字段及数目完全相同的情况下,
改变字段的次序,不会影响查询结果,只会影响到排序情况,

即按照最靠近group by的那个字段来排序
2).当增、减group by后的字段时,会影响结果集行数

 

 

.什么时候使用子查询?(单个字段)不同的方式的表连接,得到的结果集行数

 

 

.Not in 怎么用?是否可以用于整个结果集的比较?

 

分享到:
评论

相关推荐

    消灭星星源代码

    通过对"消灭星星"源代码的学习,开发者不仅可以了解游戏开发的基本流程,还能提升在实际项目中解决问题的能力,为自己的游戏开发之路打下坚实基础。同时,这也是一个很好的实践平台,可以让初学者将理论知识转化为...

    java消灭泡泡糖

    8. **测试与调试**:在游戏开发过程中,测试和调试是非常重要的环节,开发者需要确保游戏在各种情况下都能正常运行,并能有效地定位和修复问题。 9. **优化**:为了提高游戏性能,开发者可能需要对代码进行优化,...

    微信小游戏消灭星星的设计与实现的毕业设计

    这种方式极大的提高了用户体验,用户不需要考虑手机空间的问题,同时也对开发人员更友好,开发人员可以借助微信平台来推广自己的小游戏,同时也不需要考虑跨平台的问题。所以微信小游戏的开发越来越受到开发人员的...

    2021年山东科技大学飞机大战C++MFC源码+实验报告(可运行)

    程序在mfc环境下可运行,跑不出有可能是版本问题,百度自己查一下(我是vs2019) 该游戏实现的基本功能有: 1.背景音乐的播放, 2.我方战机与敌机的飞行, 3.战机和敌机子弹的发射, 4.战机与敌机的碰撞效果设计, 5...

    基于Python的飞机大战游戏系统设计与实现源程序

    在“飞机大战”中,玩家控制一架飞机,通过躲避敌机和射击消灭它们,同时还要应对各种挑战,如导弹、障碍物等。游戏架构通常包含游戏循环(Game Loop)、对象管理、碰撞检测、分数计算等关键部分。 三、Pygame应用 ...

    电脑烤机软件大集合.doc

    通过这个测试可以提早发现电脑或某些特定配件存在的问题,然后可以在质保期内把问题解决,把问题消灭在萌芽之中。 电脑烤机软件大集合通常包括CPU稳定性测试软件、显卡稳定性测试软件、内存稳定性测试软件等。CPU...

    java 飞机大战飞机大战

    - **碰撞检测**:检测飞机、子弹和敌机之间的碰撞,这是游戏的核心部分,决定了何时飞机被击落或者敌人被消灭。 - **游戏循环**:游戏通常有一个主循环,负责更新游戏状态、处理输入、渲染画面等。 - **分数系统*...

    Funcode太空战机源码

    4. **碰撞检测(Collision Detection)**:游戏需要检测飞机和敌机、子弹之间的碰撞,以决定何时消灭敌人或扣除玩家的生命值。实现这一功能通常涉及几何算法和坐标比较。 5. **图形渲染(Graphics Rendering)**:...

    飞机大战+素材+python 源码

    同时,这也是一个很好的练习问题解决和调试技巧的机会,因为在游戏开发过程中,难免会遇到各种预期之外的问题。总之,"飞机大战"项目是一个寓教于乐的学习工具,对于想要在Python世界里展翅高飞的新手来说,无疑是一...

    原生JS简单版飞机大战游戏

    在“飞机大战”中,需要检测玩家飞机与敌机、子弹与敌机之间的碰撞,根据结果决定是否消灭敌机、损失玩家生命值或产生分数。 此外,`audio`目录中的文件用于实现游戏的声音效果。JavaScript可以使用`Audio`对象加载...

    C#2010 飞机大战

    在这款游戏中,玩家将控制一架飞机,与来自屏幕各方向的敌人进行战斗,通过躲避敌机和子弹,同时尽可能多地消灭敌人以获取高分。 首先,我们要理解C#2010的基础知识,这是Microsoft .NET Framework 4的一部分,提供...

    自己修改的飞机大战

    这种实践方式有助于提升编程技能,同时也能锻炼问题解决和创新思维。 【标签】"飞机大战"通常指的是飞机与敌机之间的战斗,这类游戏通常包含躲避、射击、升级等要素。在这个Python实例中,玩家操作的飞机需要通过...

    一种稳定性好的智慧二手车交易平台用终端机的制作方法.docx

    一种稳定性好的智慧二手车交易平台用终端机的制作方法能够解决现有的智慧二手车交易平台用终端机在日常用法放置时,其简洁因冲击而导致倾斜倒塌的问题,对此我们需要对其稳定性进行提高的问题。该终端机通过在终端机...

    飞机大战_简易版

    在这款游戏中,玩家可以控制一架飞机在屏幕上移动,通过射击消灭敌机,体验到基本的飞行战斗乐趣。游戏的核心在于其背后的算法设计,这些算法确保了游戏的运行流畅、交互响应及时以及游戏规则的正确执行。 1. **...

    JAVA飞机大战.zip

    答辩PPT通常会详细阐述项目的背景、设计思路、实现技术和遇到的问题及解决方案,对于学习者来说,这是一个了解项目全貌和学习设计思路的宝贵资源。项目素材可能包括游戏的图像、音频、关卡设计等,这些都是构建游戏...

    飞机坦克大战源码UTF-8.rar

    这是一个经典的2D射击游戏,源自于80年代的街机游戏,玩家需要操控坦克,在地图上消灭敌方坦克并保护基地。源码中的"TankGame1.3"代表游戏的1.3版本,可能包含了比早期版本更多的功能或优化。开发者可能已经实现了...

    c语言雷霆战机mini版-适合新手入门

    敌人将从顶部不断向下移动,玩家需要躲避敌人的攻击,同时尽可能地消灭更多的敌人。玩家可以使用发射的子弹来摧毁敌人,每击败一个敌人将获得一定的分数。 游戏中提供了简单的碰撞检测机制,当飞机与敌人相撞或被...

    html5+canvas+javascript开发打灰机游戏

    7. **分数和游戏结束**:显示玩家得分,并在所有敌人被消灭或飞机被击中时结束游戏。 8. **优化性能**:考虑使用批处理绘制、减少不必要的重绘,以及利用Canvas的路径优化技术来提高游戏性能。 通过这个项目,...

    Python小游戏-飞机大战.7z.zip

    开发Python小游戏-飞机大战的过程,可以帮助初学者熟悉Python编程和pygame库的使用,理解游戏开发的基本流程,同时提升编程技巧和问题解决能力。此外,通过修改游戏参数,如飞机速度、子弹发射频率等,可以实现游戏...

    VC++游戏雷霆战机源代码

    5. **碰撞检测**:游戏中的碰撞检测是关键,源代码会包含如何检测飞机与其他游戏对象间的碰撞,并据此执行相应的游戏逻辑,比如损失生命值或消灭敌人。 6. **音频处理**:游戏可能会包含背景音乐和音效,因此源代码...

Global site tag (gtag.js) - Google Analytics