数据库学习——“用活SQL”

今天早上老师在课堂上介绍了一些简语句标准格式,围绕“用活SQL”的主题介绍了SQL语句效率比较、Oracle数据库环境操作系统和网络的优化等其他知识。

开始,老师以“SELECT DISTINCT”和“SELECT DISTINCT FROM 表名”与SELECT COUNT结合查询法人表中“国营”、“三资”、“集体”、“私营”企业的数量为例,让我们看到了两种相差不大的语句执行效率的不同。对其内容进行分析可以看到,SELECT DISTINCT在表中进行了一次以上的查询(如本题将进行4次查询),而SELECT DISTINCT FROM 表名只进行了一次查询。因此后者更快。

 

SELECT DISTINCT 
	(SELECT COUNT(*) FROM LegalEntityT WHERE ENATURE='国营' ),
	(SELECT COUNT(*) FROM LegalEntityT WHERE ENATURE='三资' ),
	(SELECT COUNT(*) FROM LegalEntityT WHERE ENATURE='集体' ),
	(SELECT COUNT(*) FROM LegalEntityT WHERE ENATURE='私营' )
(FROM LegalEntityT)

子查询可以出现在WHERE、FROM和其他子句中,这些查询语句的标准格式都是固定的,在此不赘述。老师特别提到的是,子查询的结果存在于在内存中生成的一个临时表;在IN和EXISTS的执行效率时,我们发现当表中的内容足够多时,才可以发现EXISTS的效率比IN更高,否则二者差别不大。在网上查找了一下,其原理的解释为:IN是把外表和内表作hash连接,而EXISTS是对外表作loop循环,每次loop循环再对内表进行查询。而且在演示中可以看出来,同样的表单,只用IN或EXISTS的执行效率也不同,因为它会受到系统里其他因素的影响。 

Select *
From LegalEntityT
Where Eno 
    in (Select Eno From loant where lamount>1000)
Select *
From LegalEntityT
Where Exists( 
    Select Eno From loant where loant.Eno= LegalEntityT.Eno 
        and lamount>1000)

在case表达式的妙用中,老师让我们比较了一下两种能实现相同目的case when then end的不同表达式:

 

select count(case enature when '国营' then ' 国营 ' end) as '国营',
count(case enature when '私营' then ' 私营 ' end) as '私营',
count(case enature when '集体' then ' 集体 ' end) as '集体',
count(case enature when '三资' then ' 三资 ' end) as '三资'
from dbo.LegalEntity

 

select count(case enature when '国营' then '1' end) as '国营',
count(case enature when '私营' then '2' end) as '私营',
count(case enature when '集体' then '3' end) as '集体',
count(case enature when '三资' then '4' end) as '三资'
from dbo.LegalEntity

  

其中第二种代码比较少见,数字替换为了他条件表达式。如果有多个CASE WHEN表达式符合条件,将只返回第一个符合条件的子句,其余子句将被忽略。

在与数据库设计的部分,根据以前所学内容,我们比较熟悉的是概念设计、关系设计,而对与数据库底层实现相关的物理设计比较陌生。它由数据库的存储结构、存取方式、存取路径、存放位置和系统配置决定

 

最后贴一个今天打开SQL Sever 2014 Management Studio的错误解决方式:

错误如下:

与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)“

解决参考资料:http://www.jb51.net/article/59352.htm

猜你喜欢

转载自yummyyoung.iteye.com/blog/2382330