开发者社区> 技术小牛人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQL Sever 2008 R2 数据库(4) ——数据(记录)表 (重点)

简介:
+关注继续查看

导语:

企业最重要的是:以最小的成本,获取最大的利润!(利润最大化)公司的一切业务都必须以此为核心!公司管理层尤甚(牢记在心且付诸行动)!不然,公司花那么多银子请我们ITer来干什么???(哈……)

信息化部门职能:以“利润最大化”为核心,来规划整个集团信息化,以助公司实现利润最大化!(个人语

一、简单的insert插入语句:

1.例一:插入一条记录

在“订单明细”表里插入一条记录。其中“订单ID”字段为10248,“产品ID”为1,“单价”为10,“数量”为2,“折扣”为0.8 代码是:

insert 订单明细 values (10248,1,10,2,0.8) //实战中win SQL 2008 R2 中不行,还是要写如下所示:

insert 订单明细 (订单明细ID,产品ID,单价,数量,折扣) values (10248,1,10,2,0.8)

2. 例二:按表中不同字段顺序插入记录

在“订单明细”表里插入一条记录。其中,“订单ID”字段为10248,“产品ID”为2,“单价”为26,“数量”为3,“折扣”为0.8 。其代码是:

insert 订单明细 (订单明细ID,产品ID,单价,数量,折扣) values (10248,2,26,3,0.8)

注: 我们来查询哈上面例一、二中所插入的2条数据,如下图所示:

clip_image002[1]

clip_image004[1]

3.例三: 插入值少于字段数的记录

在“类别”表中输入1条记录。其中,“类别名称”字段的值为“图书”,“说明”为“所有类型的图书”。

insert into 类别 (类别名称,说明) values (N’图书’,N’所有类型的图书’)

clip_image006[1]

4.例四: 在标识列字段里插入字段内容

在“类别”表中输入1条记录。其中,“类别ID”为100,“类别名称”为电器。

clip_image008[1]

重点:

类别ID标识列,一般情况下,是只读列!不允许插入数据!若要插入数据必须先用:set identity_insert XXX on; 然后,才可以在该字段内插入数据。

如在上图中,再插入1条记录,则“类别ID”自动变成 101

思考:

如果我先插入类别ID为100的那条记录,再插入”类别ID”为9的那条记录呢?

//因为我已经插入了,所以现在删除这2条记录,如下图所示:

clip_image010[1]

clip_image012[1]

//先插入类别ID为100的那条记录,如下图所示:

clip_image014[1]

//再插入”类别ID”为9的那条记录

clip_image016[1]

//依”类别ID” 的值 按升序查询!

clip_image018[1]

5.例五: 从数据表中查询记录并插入到另一个表中

从“雇员”表里查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“城市”、“地址”、“家庭电话”7个字段,组成一个“雇员通讯录”表,代码如下:

clip_image020[1]

//再从“雇员”表里查出所有雇员记录中的有效字段,然后插入到“雇员通讯录”表中。

clip_image022[1]

//用select语句查看刚才插入的结果。

clip_image024[1]

//删除第10条记录,如下图所示:

clip_image026[1]

信手之作:

(1)如果有多条语句,而只选其中几条,则仅执行那几条!

clip_image028[1]

(2)将下图所标的 记录(行)和字段(列) 修改修改哈! 利用update语句更新记录,如下图所示:

clip_image030[1]

效果如下图所示:

clip_image032[1]

//用update修改记录时,可不带”set identity_insert XXXX on;” (有资料说要带),如下图示:

clip_image034[1]

(3) 如果我们要查询 产品 表中, 产品名称为 酱油 的记录信息,如下图所示:

clip_image002

6.例六:将查询出来部分记录插入到另一个表中

从“雇员”表里查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“地址”,插入到“雇员通讯录”表。其代码如下:

//先删除”雇员通讯录”表(此前我创建过),如下图所示:

clip_image036[1]

//再将查询出来的部分记录插入到另一个表中

clip_image038

//如何要查询黄家驹这条记录(行)信息,如下图所示:

image

PS: 如何去掉上图中的红色波浪线 ?

原因:

SQL Server 客户端, 在连接到 SQL Server 数据库以后。会自动读取数据库的 数据字典信息。也就是 当前数据库,有哪些表/字段/视图/存储过程等基础信息。保存在客户端的内存里面。这样。当你在客户端输入 SQL 语句的时候,输入表名字.会自动弹出 这个表的字段列表,让你选择。但是,当你新建了一个对象的时候, 例如表, 或者你的那个例子,是新建存储过程abc这个时候,数据库那里,已经有存储过程abc 了。但是客户端的缓存里面,并没有 存储过程 abc 的信息。 因为内存里面的信息,没有更新。因此,在客户端那里。输入EXEC abc,abc下有红线。将 客户端关闭后,重新打开, 由于客户端重新加载了 数据库的基础信息。知道了 当前数据库里面,有 一个名字叫 abc 的存储过程因此,就不出红线了。

解决方法:

在Microsoft sql server management studio里点击“编辑”——“IntelliSense”——“刷新本地缓存”

就会发现红色波浪线没了,如下图所示:

clip_image040

下图为证: 
clip_image042

7.从数据表中查询记录插入其他表并为字段添加固定内容

例七: 复杂的查询和插入

从“雇员”表中查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“地址”5个字段,插入到“雇员通讯录”表,并在插入的所有记录的“城市”字段都填入“北京”字样。

clip_image044

8.在insert语句里使用exec子句

例八: 查看数据库实例中当前用户和进程的信息,插入到一个表中。

clip_image046

9.在数据中只插入默认值

例九: 插入带默认值的记录

在“用户与进程信息”表中插入一条记录,该记录只插入了有默认值的字段内容。

image

二、利用update 语句更新记录

10.使用计算值来更新记录

例十: 通过计算值来更新记录

在“产品”表中,苹果汁涨价50%,其代码如下:

//先查询下,苹果汁未涨价之前的价格

image

//再来更新苹果汁涨价后的单价,代码如下图所示:

image

11.引用其他表中的字段值来更新记录

例十一: 通过其他表的字段值来更新记录

    把“订单明细”表中订单产品为“苹果汁”的单价改为“产品”表中“苹果汁”的单价一致(涨价50%),代码为:

//外甥打灯笼---照舅(旧),先来查询哈 “订单明细”表中,苹果汁的单价是多少 (实质产品ID=1那条记录就是……哈……)

image

//再来查询下 产品 表。

image

//由上2图中,可以看出来:订单明细 表中的 产品ID = 产品 表中的 产品ID 并且只更新产品表中 产品名称为苹果汁的这条记录

image

三、数据/记录查询select语句使用频率非常之高!需高度重视!哈……

    在SQL Server Management Studio中查看记录:

12.选择前1000行

clip_image048

clip_image050

2.返回前几行

clip_image052

clip_image054

clip_image056

clip_image058

13.查询表中所有列

例十三: 查询所有列

查看"类别"表中的所有记录

select * from 类别

clip_image060

14.查询表中某几列

例十四: 查询表中某几列

查看"类别"表中的"类别名称"和"说明"字段.

select 类别名称,说明 from 类别

clip_image062

clip_image064

15.为查询添加计算列

例十五: 为查询添加计算列

查看”订单明细”表中每个订单的总价.

先查看”订单明细”表中有哪些列,如下图:

clip_image066

clip_image068

例: 关键字as 指定别名

select 订单ID as 订单编号,产品ID as 产品编号,单价,数量,折扣,单价*(1-折扣)*数量 as 总价 from 订单明细

clip_image070

16.查看最前记录

例十六: 查看前几条记录

查看订购数量最多的10条订单记录:

select top 10 * from 订单明细 order by 数量 desc

clip_image072

例:如要显示所有记录中的前10%条记录。percent [p??sent]n.百分比,百分数

select top 10 percent * from 订单明细 order by 数量 desc

clip_image074

例:select top 9意即:显示前9条记录,如果第10条记录与第9条记录”数量”相同(120)呢?那么,用select top 9就不能显示出来了!因此,就用到with ties关键字,ties表示是”与……打成平局”,也就是显示并列的记录clip_image07817.查看不重复记录

例十七: 查看不带重复记录的结果。

查看货物在哪些城市里有过销售记录。在”订单”表里有一个字段是”货主城市”,通过查询这个字段,可以了解货物经销哪些城市。

select 货主城市 from 订单 //显示有很多重复城市的记录!

clip_image080

例:如果不要显示重复城市的记录呢?

select distinct 货主城市 from 订单

distinct关键字可以同时指定多个字段,当同时指定2个字段,则查询结果是2个字段同时不重复的记录。

select distinct 货主名称,货主城市 from 订单

clip_image082

注: 由上可知,有”货主名称”相同的记录,但是没有”货主名称”与”货主城市”同时相同的记录!

18.查询表中的标识列或GUID列

例十八: 查询表的标识列.

查看”类别”表中的标识列:

select $identity from 类别

注: 虽然没有指定要查询的字段名,但是还是返回”类别ID”列,因为一个表中只能有一个标识列。同理,一个表中只能有一个GUID列,故可用如下代码:

clip_image084

19.用from子句指定查询哪些表

重点: from子句的作用是指定要查询数据的来源!

例十九:  查询所有记录.

查看”雇员”表中所有记录:

select * from 雇员

clip_image086

20.从两个表中联合查询记录

例二十: 两个表联合查询

查看所有产品名称和类别.

如果单独查询”类别”表,只能查询到”类别ID”和”类别名称” :

select 类别ID,类别名称 from 类别

clip_image088

如果单独查询”产品”表,只能查询到”产品ID”、”产品名称”和”类别ID” :

select 产品ID,产品名称,类别ID from 产品

我们先来看看,产品表中有哪些字段/列,如下图:

clip_image090

下面我们只需上图红框中的字段/列,代码如下图所示:

clip_image092

重点:

在”类别”表和”产品”表里,同时存在着”类别ID”字段.

(1)在”产品”表中获得”类别ID”的内容,然后从”类别”表中查询相同的”类别ID”的记录,可知”产品”表中该产品的类别名称.在select语句中,通过join将2个表中的记录联接起来进行查询.

select 产品ID,产品名称,类别名称 from 产品 join 类别 on 产品.类别ID = 类别.类别ID

clip_image094

重点:

(1)join的作用是: 将2个或2个以上的表的记录横向联接起来,

   on的作用是: 设置查询条件,将无用的记录过滤掉.

(2)强烈建议用: join …… on …… 语句来进行联合查询,其可读性比较强,并且还有left join , full join ,right join等不同的显示方式可以运用,是where子句所不能比拟的!

例:如果在上例中多查询一个”类别编号” ,如下图所示:

clip_image096

如果碰到”产品”表和”类别”表中都有”类别ID”字段,则必须指明是那个表中的”类别ID”字段. 表示法为: 表名.字段名 如: 类别.类别ID

image

select的where子句也可以设置过滤条件:

clip_image099

21.从多个表中联合查询记录

例二十一:  多个表联合查询

查看订单的产品名称、单价、数量、折扣和订购日期。

由于以上字段分别在”产品”表、”订单明细”表和”订单”表中;故必须将3个表联合起来进行查询:

select 产品.产品名称,订单明细.单价,订单明细.数量,订单明细.折扣,订单.订购日期 from 订单明细 join 订单 on 订单明细.订单ID = 订单.订单ID join 产品 on 订单明细.产品ID = 产品.产品ID

clip_image101

在多个表中进行join查询时,可用小括号来指定join的顺序:

select 产品.产品名称,订单明细.单价,订单明细.数量,

订单明细.折扣,订单.订购日期

from (订单明细 join 订单 on 订单明细.订单ID = 订单.订单ID)

join 产品 on 订单明细.产品ID = 产品.产品ID

clip_image103

上图中可以看作: 先将”订单明细”表与”订单”表join后,形成一个新表,然后和”产品”表join .

22.用where子句设定查询条件

例二十二:  查看“产品”表中库存量为零的产品,其代码为:

select  *  from  产品  where  库存量 = 0

image

PS:

    查询条件有:=(等于)、<>(不等于)、!=(不等于)、>(大于)、>=(大于或等于)、!>(不大于)、<(小于)、<=(小于或等于)、!<(不小于)、not是将条件取反值。

23.设置多个查询条件

例二十三.  多个查询条件

查看“产品”表中类别为“调味品”(类别ID=2)、库存量为零的产品,其代码为:

select * from 产品 where 库存量 = 0 and 类别ID = 2

image

24.若不知调味品的类别ID=2,则可通过联合查询来获取记录:

image

PS:

    若查询的条件比较多,则可用and(和)、or(或)来连接不同的查询条件。还可以用小括号来拽明查询and和or的顺序,使其更加条理清晰明了!

25.更加复杂的查询

    查看“产品”表中类别为“调味品”和“日用品”、库存量为零的产品,其代码为:

select  产品.*  from  产品  join  类别 on  产品.类别ID = 类别.类别ID  where  产品.库存量 = 0  and  (类别.类别名称 = N'调味品' or 类别.类别名称 = N'日用品')

image

PS:

  《SQL Sever 2008 R2 数据库(4) ——数据(记录)表 (重点)》此为“抛砖引玉”而已,其实还有很多内容,我们要在工作中学习,在学习中工作!二者合一!善于总结、善于学习! 共同学习,共同进步!


本文转自beyondhedefang

 51CTO博客,原文链接:http://blog.51cto.com/beyondhdf/1168972 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL数据库学习之路(九)
目录   数据库创建补充: 为数据库用户赋予权限 在数据库表中使用视图进行添加修改 数据库创建补充: 以文本格式显示自己创建的数据库表                                          以网格格式显示自己创建的数据库表 可以右键数据库--属性---选项,在选项中可以设置数据库的兼容性,还有是否可以让多人同时访问或者单人访问。
888 0
SQL数据库学习之路(练习)---C#登录界面连数据库
目录 C#登录界面连数据库 一、在数据库中先创建一个数据库。 二、在VS中创建C#的windows窗体应用程序 三、在VS中连接到数据库 四、设计登录界面 五、设置注册界面 六、将form1的按钮和form2进行关联 七、设置form2界面的注册按钮 八、form1的登录按钮设置 九、运行成果 参考文章: C#登录界面连数据库 一、在数据库中先创建一个数据库。
2785 0
SQL数据库学习之路(八)
数据库介绍: 在网页上的主程序中进行注册操作,然后把数据发送给人,人传递这些数据到数据库当中。   为什么学ADO.NET:之前我们所学的只能在查询分析器中查看数据,操作数据。
893 0
SQL数据库学习之路(七)
在SQL server managerment中可以点击帮助,会有帮助文档。 一、联合查询 将多个查询结果集合并成一个。
833 0
SQL数据库学习之路(六)
一、连接查询:当需要的结果需要从多张表中取时 关键问题:哪些表、关系(学生表的Id联系到班级表的Id) 内连接:inner join,两表中完全匹配的数据。
922 0
SQL数据库学习之路(四)
要求:通过SQL语句创建以下基本表:    教师关系 T(T#, TNAME,TITLE)    课程关系 C(C#,CNAME,T#)    学生关系 S(S#,SNAME,AGE,SEX)    选课关系SC(S#,C#,SCORE)    班级关系CLASS(CLASSID,CLASSNAME)    其中红色粗体为主键,带下划线的属性为外键。
825 0
SQL数据库学习之路(三)
一.表数据的操作 1.简单查询 select * from 表名 2.增加数据 insert into 表名(列名) values(值)                   ----要求值的列名与值要位置对应   ...
801 0
SQL数据库学习之路(二)
(一)1.约束:实现数据的有效性检查---------主键(保证值是唯一的) 2.非空(输入的数据不允许为空) 3.唯一(存入的数据不能重复) 4.默认(自己不给数据添加值,值会默认添加) 5.检查(给值一个选定的范围) 6.外键(对关系的有效性进行检查,有关系才有外键) (二)脚本操作数据库 1.不区分大小写,字符串使用单引号,末尾不需要加分号。
815 0
SQL数据库学习之路(一)
1.数据库简介(一个放数据的仓库)  解决的问题:持久化存储,优化读写,保证数据的有效性 关系型数据库:    基于E-R模型(实体-联系图Entity Relationship)    使用sq|语言进行操作(SQL...
1032 0
SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务
我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理呢?SSIS内建的事务处理可以解决这个问题。在此之前首先来熟悉一下SQL Server中的事务的概念。
661 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Sever迁移PG经验
立即下载
时序数据库TSDB新功能 - 如何用SQL进行时序查询
立即下载
用SQL做数据分析
立即下载