sql体会
A. 急求sql数据库的实训总结,以及在实训中碰到的问题和体会
都差不多吧!我也写过一次,给你吧,希望能够帮到你
这个星期是我们SQL Server 数据库管理课的实训,经过一个星期的实训,让我领会到了许多平时课堂上所没有接受的课外知识,很让人受益匪浅,懂得如何去运用,而进行的一次分析设计综合的训练。而本次实训的目的是让我们掌握数据库系统的原理、技术。将理论与实际相结合,应用现有的数据库管理系统软件,规范、科学地完成一个设计与实现。
这次我们实训的内容是从数据库、数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从实训中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际应用中多使用表,对表的规划和理解就会越深刻。我们实训的另一个内容是数据库的约束、视图、查询。从中我们了解到查询语句的基本结构,和简单SELECT语句的使用,多表连接查询。而在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的大部分操作,使用视图一样可以完成。使用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向基表中添加、修改和删除数据。存储过程、触发器也是我们实训的内容之一, 在操作中有建立存储过程,执行存储过程,及查看和修改存储过程,这些都是非常基础的东西,但对用户却是非常重要的呢,只有熟悉了T_SQL语言,才能更好的掌握更多的东西。我们还学习了,SQL管理、数据的导入、导出、备份和还原。有SQL Server 安全访问控制;登录账户的管理;数据库角色的管理;用户权限管理。维护数据库的安全是确保数据库正常运行的重要工作。数据的备份是对SQL Server数据事务日志进行拷贝,数据库备份记录了在进行备份操作的数据库中所有数据的状态。而数据的备份还分为数据库完整备份、差异备份、事务日志备份、文件及文件组备份。做数据备份就是为了以后的数据库恢复用。在实训内容上我们还做了仓库管理数据库,其中的要求包含了许多数据库的对象,综合了我们所学的许多知识,让我们更努力的把所学到的东西运用上去。
实训课是在学习与探索中度过的,短暂的一星期实训是结束了,但其中让我们学到了许多知识,出现许多未知的为什么,如仓库管理数据库的初步设置、数据备份与还原的步骤,如何建立视图、触发器等一系列的问题,正是在老师和同学的共同努力之下,我们才一步步把问题解决了,最终完成了不可能完成的任务。
B. 请教下SQL问题
所有的聚合函数都要有的,顾名思义,函数要你告诉他以哪个字段来聚合,比如你用sum(*)来查每个班有多少人,肯定要 group by 班级的,要不函数不知道把人数按照什么条件来加,也许把一班加到二班里去了,好好体会一下就懂了,不过min,max不是聚合函数
C. SQL Server 相比 MySQL 有何优势
其实两种产品并不是一样的类型,mysql是单纯的数据库存储,mssql是一整套数据解决方案。如果有兴趣可以去了解一下microsoft sql server business intelligence和data mining相关的产品,以及data cube,高斯分布计算等各种features,你就会改变观念了。
mysql是互联网公司广泛使用的,免费的(最重要),容易使用的存储方案,标准做法是单纯的业务crud,核心任务是扛住qps和tps,没有存储过程,扩展函数等逻辑(从安全,性能,逻辑控制考虑)。
回到你的问题,如果要比较,那就得把sql server降级到这个角色来。单纯的crud情况下,同样的配置,它的优势有:
1. 更好的读写性能,因为和windows framework绑定一起,底层操作系统级优势。而mysql则有可能oom,被linux无差别清理掉
2. 数据可靠性更好:数据安全,一致性等
3. 存储过程。oracle和mssql都有强大的存储过程,银行系统甚至有规定凡是和资金相关的逻辑必须写在存储过程里,禁止写在应用程序里。而mysql的存储过程则一直是鸡肋。用c语言写的扩展存储过程,即运行在数据库内存中的程序代码,两个都支持,这个不在讨论范围之内
4. 方便的性能监控。打开profiler,可以在生产环境中实时看各个query的执行详情,还可以按需过滤,而且不影响系统性能
5. 方便的sql debug。这个主要用于函数和存储过程,可以设断点,单步,跳步等执行,就像程序debug一样。mysql没有ide能这样做,调试存储过程比较困难
6. 说到ide了,当然是出品过vs这种神器的微软的天下了,mssql management studio各种好用,查询管理都很方便
7. 可靠的数据库复制。做过mysql dba的应该都有体会,主要的折腾工作就是db replication,敲得最多的就是show slave status… mssql有data mirror,log shipping等多种复制方式,且都很可靠。至少我那么多年没处理过主备数据不一致的修补工作。mysql主备读写分离曾经是mysql一个优势,以前的mssql mirror备库不可读。但现在的版本已经可读了,所以不存在这个缺陷了
其实还有很多,但那样的话回答就成长篇大论了。总之选择什么数据库并不是程序员或dba来决定的,而且行业和成本。难以想象杭州或北京一个互联网startup会购买昂贵的数据库licence,即便是云计算数据库
D. 查询及sql语句的使用实验总结与体会
检查与管理的重要。
没有范文。
以下供参考,
主要写一下主要的工作内容,如何努力工作,取得的成绩,最后提出一些合理化的建议或者新的努力方向。。。。。。。
工作总结就是让上级知道你有什么贡献,体现你的工作价值所在。
所以应该写好几点:
1、你对岗位和工作上的认识2、具体你做了什么事
3、你如何用心工作,哪些事情是你动脑子去解决的。就算没什么,也要写一些有难度的问题,你如何通过努力解决了
4、以后工作中你还需提高哪些能力或充实哪些知识
5、上级喜欢主动工作的人。你分内的事情都要有所准备,即事前准备工作以下供你参考:
总结,就是把一个时间段的情况进行一次全面系统的总评价、总分析,分析成绩、不足、经验等。总结是应用写作的一种,是对已经做过的工作进行理性的思考。
E. sql数据库学了对人力资源有什么用
提升人们的工作效率。
伴随着计算机技术的不断发展,有助于企业有效的管理人力资源,利用数据库管理系统,能够在一定程度上提升人们的工作效率,也可以大量节约使用费用,对于企业的健康发展,能够显示出较为重要的作用。
现在,我们可以将人力资源信息化发展史,分为工业时代、营销时代、互联网时代这三大时代来看待。每个时代都有各自独特的历史印记、衍生的具体工具。通过它们,我们也能真实地感受到人力资源管理不断变革的脚步,更深刻地体会到信息化工具的便捷与高效性。在遥远的工业大时代,社会需求是大于社会生产的,人成为重要的生产要素之一。这个时代下,人被当成一种资源来进行最大化的使用,鲜活的人和冰冷的机器价值之间是没有差别的。因此,人事管理的核心是人与事务管理,所有的管理方法论都是工具的标准化、动作的标准化。
F. sql 查询 高手的进!自连接的一点疑惑~~~~~~~~~~~~
SELECT TOP 2 student.student_id
from student
WHERE student.cid = student1.cid
ORDER BY corde DESC
这个查询不能单独拿出来,student1.cid 与前面的主表相关联了。
这个查询可以这样分析,对主表中的每条数据进行筛选,如第一条数据(1 1 99)cid=1,通过子查询,查询出cid=1的课程中,成绩在前两名的学生的student_id为(2,3),那么第一条数据的student_id=1,没有通过筛选。依次往下筛选第二条数据,符合条件。
G. SQL中变量的种类及表现形式
MS SQL Server中的变量- -
在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。当然MS SQL Server的全局变量也很有用。
>>>>局部变量
声明:DECLARE @local_variable data_type
@local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。
示例:
use master
declare @SEL_TYPE char(2)
declare @SEL_CUNT numeric(10)
set @SEL_TYPE = 'U'/*user table*/
set @SEL_CUNT = 10
/*返回系统中用户表的数目*/
select @SEL_CUNT = COUNT(*)
from sysobjects
where type = @SEL_TYPE
select @SEL_CUNT as 'User table ''s count'
如果要返回系统表的数目,可以用set @SEL_TYPE = 'S'
可能这个例子并不能说明使用变量的好处,我只是想说明使用方法。当一组(几个甚至几十个)SQL语句都使用某个变量时,就能体会到他的好处了。
>>>>全局变量
全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。下面是我统计了一些较为常用的变量。
@@CONNECTIONS
返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格行的数量。
@@DATEFIRST
返回每周第一天的数字
@@ERROR
返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
@@IDENTITY
返回最后插入的标识值
@@LANGID
返回当前所使用语言的本地语言标识符(ID)。
@@LANGUAGE
返回当前使用的语言名。
@@LOCK_TIMEOUT
返回当前会话的当前锁超时设置,单位为毫秒。
@@PROCID
返回当前过程的存储过程标识符 (ID) 。
@@ROWCOUNT
返回受上一语句影响的行数。
@@SERVERNAME
返回运行 的本地服务器名称。
@@SPID
返回当前用户进程的服务器进程标识符 (ID)。
@@TRANCOUNT
返回当前连接的活动事务数。
@@VERSION
返回当前安装的日期、版本和处理器类型。
H. 初学SQL语句,不知道从何开始入手。
关于sql的学习,无法从两头开始:
1. 从理论开始,如果有兴趣从头学起的话,先学习一下关系代数,各个范式。 再来学习sql,按照教材逐步学习。
2. 从实践开始,如果嫌理论学习起来麻烦,可以直接从sql查询开始学起,先不学数据库设计,比如oracle的emp,熟悉一下都有哪些表,字段,然后根据要求,写sql查询,把自己写的和别人写的答案比较,体会实现的思路。 进一步再学数据库设计
I. 如何优化SQL语句
一、问题的提出
在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。
在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。
二、SQL语句编写注意问题
下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。
1.
IS
NULL
与
IS
NOT
NULL
不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。
任何在where子句中使用is
null或is
not
null的语句优化器是不允许使用索引的。
2.
联接列
对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。我们一起来看一个例子,假定有一个职工表(employee),对于一个职工的姓和名分成两列存放(FIRST_NAME和LAST_NAME),现在要查询一个叫比尔.克林顿(Bill
Cliton)的职工。
下面是一个采用联接查询的SQL语句,
select
*
from
employss
where
first_name||''||last_name
='Beill
Cliton';
上面这条语句完全可以查询出是否有Bill
Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。
当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。
***
where
first_name
='Beill'
and
last_name
='Cliton';
.
带通配符(%)的like语句
同样以上面的例子来看这种情况。目前的需求是这样的,要求在职工表中查询名字中包含cliton的人。可以采用如下的查询SQL语句:
select
*
from
employee
where
last_name
like
'%cliton%';
这里由于通配符(%)在搜寻词首出现,所以Oracle系统不使用last_name的索引。在很多情况下可能无法避免这种情况,但是一定要心中有底,通配符如此使用会降低查询速度。然而当通配符出现在字符串其他位置时,优化器就能利用索引。在下面的查询中索引得到了使用:
select
*
from
employee
where
last_name
like
'c%';
4.
Order
by语句
ORDER
BY语句决定了Oracle如何将返回的查询结果排序。Order
by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order
by语句的非索引项或者有计算表达式都将降低查询速度。
仔细检查order
by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order
by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order
by子句中使用表达式。
5.
NOT
我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:
...
where
not
(status
='VALID')
如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT运算符包含在另外一个逻辑运算符中,这就是不等于(<>)运算符。换句话说,即使不在查询where子句中显式地加入NOT词,NOT仍在运算符中,见下例:
...
where
status
<>'INVALID';
对这个查询,可以改写为不使用NOT:
select
*
from
employee
where
salary<3000
or
salary>3000;
虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。
虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。