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条数据,如下图所示:

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

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

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

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

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

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

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

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

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

重点:

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

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

思考:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

信手之作:

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

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

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

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

效果如下图所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原因:

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

解决方法:

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

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

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

下图为证: 
SQL Sever 2008 R2 数据库(4) ——数据(记录)表 (重点)

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

例七: 复杂的查询和插入

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

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

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

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

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

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

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

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

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

二、利用update 语句更新记录

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

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

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

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

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

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

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

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

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

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

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

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

//再来查询下 产品 表。

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

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

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

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

    在SQL Server Management Studio中查看记录:

12.选择前1000行

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

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

2.返回前几行

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

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

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

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

13.查询表中所有列

例十三: 查询所有列

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

select * from 类别

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

14.查询表中某几列

例十四: 查询表中某几列

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

select 类别名称,说明 from 类别

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

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

15.为查询添加计算列

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

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

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

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

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

例: 关键字as 指定别名

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

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

16.查看最前记录

例十六: 查看前几条记录

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

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

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

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

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

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

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

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

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

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

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

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

select distinct 货主城市 from 订单

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

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

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

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

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

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

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

select $identity from 类别

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

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

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

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

例十九:  查询所有记录.

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

select * from 雇员

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

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

例二十: 两个表联合查询

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

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

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

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

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

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

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

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

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

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

重点:

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

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

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

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

重点:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

select  *  from  产品  where  库存量 = 0

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

PS:

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

23.设置多个查询条件

例二十三.  多个查询条件

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

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

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

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

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

PS:

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

25.更加复杂的查询

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

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

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

PS:

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


本文转自beyondhedefang

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

上一篇:APP兼容性(2)- 揭秘岩鼠智能遍历


下一篇:软考之路--数据结构之线性表