导语:
企业最重要的是:以最小的成本,获取最大的利润!(利润最大化)公司的一切业务都必须以此为核心!公司管理层尤甚(牢记在心且付诸行动)!不然,公司花那么多银子请我们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条数据,如下图所示:
3.例三: 插入值少于字段数的记录
在“类别”表中输入1条记录。其中,“类别名称”字段的值为“图书”,“说明”为“所有类型的图书”。
insert into 类别 (类别名称,说明) values (N’图书’,N’所有类型的图书’)
4.例四: 在标识列字段里插入字段内容
在“类别”表中输入1条记录。其中,“类别ID”为100,“类别名称”为电器。
重点:
类别ID是标识列,一般情况下,是只读列!不允许插入数据!若要插入数据必须先用:set identity_insert XXX on; 然后,才可以在该字段内插入数据。
如在上图中,再插入1条记录,则“类别ID”自动变成 101
思考:
如果我先插入类别ID为100的那条记录,再插入”类别ID”为9的那条记录呢?
//因为我已经插入了,所以现在删除这2条记录,如下图所示:
//先插入类别ID为100的那条记录,如下图所示:
//再插入”类别ID”为9的那条记录
//依”类别ID” 的值 按升序查询!
5.例五: 从数据表中查询记录并插入到另一个表中
从“雇员”表里查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“城市”、“地址”、“家庭电话”7个字段,组成一个“雇员通讯录”表,代码如下:
//再从“雇员”表里查出所有雇员记录中的有效字段,然后插入到“雇员通讯录”表中。
//用select语句查看刚才插入的结果。
//删除第10条记录,如下图所示:
信手之作:
(1)如果有多条语句,而只选其中几条,则仅执行那几条!
(2)将下图所标的 记录(行)和字段(列) 修改修改哈! 利用update语句更新记录,如下图所示:
效果如下图所示:
//用update修改记录时,可不带”set identity_insert XXXX on;” (有资料说要带),如下图示:
(3) 如果我们要查询 产品 表中, 产品名称为 酱油 的记录信息,如下图所示:
6.例六:将查询出来的部分记录插入到另一个表中
从“雇员”表里查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“地址”,插入到“雇员通讯录”表。其代码如下:
//先删除”雇员通讯录”表(此前我创建过),如下图所示:
//再将查询出来的部分记录插入到另一个表中
//如何要查询黄家驹这条记录(行)信息,如下图所示:
PS: 如何去掉上图中的红色波浪线 ?
原因:
SQL Server 客户端, 在连接到 SQL Server 数据库以后。会自动读取数据库的 数据字典信息。也就是 当前数据库,有哪些表/字段/视图/存储过程等基础信息。保存在客户端的内存里面。这样。当你在客户端输入 SQL 语句的时候,输入表名字.会自动弹出 这个表的字段列表,让你选择。但是,当你新建了一个对象的时候, 例如表, 或者你的那个例子,是新建存储过程abc这个时候,数据库那里,已经有存储过程abc 了。但是客户端的缓存里面,并没有 存储过程 abc 的信息。 因为内存里面的信息,没有更新。因此,在客户端那里。输入EXEC abc,abc下有红线。将 客户端关闭后,重新打开, 由于客户端重新加载了 数据库的基础信息。知道了 当前数据库里面,有 一个名字叫 abc 的存储过程因此,就不出红线了。
解决方法:
在Microsoft sql server management studio里点击“编辑”——“IntelliSense”——“刷新本地缓存”
就会发现红色波浪线没了,如下图所示:
7.从数据表中查询记录插入其他表并为字段添加固定内容
例七: 复杂的查询和插入
从“雇员”表中查出“雇员ID”、“姓氏”、“名字”、“邮政编码”、“地址”5个字段,插入到“雇员通讯录”表,并在插入的所有记录的“城市”字段都填入“北京”字样。
8.在insert语句里使用exec子句
例八: 查看数据库实例中当前用户和进程的信息,插入到一个表中。
9.在数据中只插入默认值
例九: 插入带默认值的记录
在“用户与进程信息”表中插入一条记录,该记录只插入了有默认值的字段内容。
二、利用update 语句更新记录
10.使用计算值来更新记录
例十: 通过计算值来更新记录
在“产品”表中,苹果汁涨价50%,其代码如下:
//先查询下,苹果汁未涨价之前的价格
//再来更新苹果汁涨价后的单价,代码如下图所示:
11.引用其他表中的字段值来更新记录
例十一: 通过其他表的字段值来更新记录
把“订单明细”表中订单产品为“苹果汁”的单价改为“产品”表中“苹果汁”的单价一致(涨价50%),代码为:
//外甥打灯笼---照舅(旧),先来查询哈 “订单明细”表中,苹果汁的单价是多少 (实质产品ID=1那条记录就是……哈……)
//再来查询下 产品 表。
//由上2图中,可以看出来:订单明细 表中的 产品ID = 产品 表中的 产品ID 并且只更新产品表中 产品名称为苹果汁的这条记录
三、数据/记录查询select语句使用频率非常之高!需高度重视!哈……
在SQL Server Management Studio中查看记录:
12.选择前1000行
2.返回前几行
13.查询表中所有列
例十三: 查询所有列
查看"类别"表中的所有记录
select * from 类别
14.查询表中某几列
例十四: 查询表中某几列
查看"类别"表中的"类别名称"和"说明"字段.
select 类别名称,说明 from 类别
15.为查询添加计算列
例十五: 为查询添加计算列
查看”订单明细”表中每个订单的总价.
先查看”订单明细”表中有哪些列,如下图:
例: 关键字as 指定别名
select 订单ID as 订单编号,产品ID as 产品编号,单价,数量,折扣,单价*(1-折扣)*数量 as 总价 from 订单明细
16.查看最前记录
例十六: 查看前几条记录
查看订购数量最多的10条订单记录:
select top 10 * from 订单明细 order by 数量 desc
例:如要显示所有记录中的前10%条记录。percent [p??sent]n.百分比,百分数
select top 10 percent * from 订单明细 order by 数量 desc
例:select top 9意即:显示前9条记录,如果第10条记录与第9条记录”数量”相同(120)呢?那么,用select top 9就不能显示出来了!因此,就用到with ties关键字,ties表示是”与……打成平局”,也就是显示并列的记录。17.查看不重复记录
例十七: 查看不带重复记录的结果。
查看货物在哪些城市里有过销售记录。在”订单”表里有一个字段是”货主城市”,通过查询这个字段,可以了解货物经销哪些城市。
select 货主城市 from 订单 //显示有很多重复城市的记录!
例:如果不要显示重复城市的记录呢?
select distinct 货主城市 from 订单
distinct关键字可以同时指定多个字段,当同时指定2个字段,则查询结果是2个字段同时不重复的记录。
select distinct 货主名称,货主城市 from 订单
注: 由上可知,有”货主名称”相同的记录,但是没有”货主名称”与”货主城市”同时相同的记录!
18.查询表中的标识列或GUID列
例十八: 查询表的标识列.
查看”类别”表中的标识列:
select $identity from 类别
注: 虽然没有指定要查询的字段名,但是还是返回”类别ID”列,因为一个表中只能有一个标识列。同理,一个表中只能有一个GUID列,故可用如下代码:
19.用from子句指定查询哪些表
重点: from子句的作用是指定要查询数据的来源!
例十九: 查询所有记录.
查看”雇员”表中所有记录:
select * from 雇员
20.从两个表中联合查询记录
例二十: 两个表联合查询
查看所有产品名称和类别.
如果单独查询”类别”表,只能查询到”类别ID”和”类别名称” :
select 类别ID,类别名称 from 类别
如果单独查询”产品”表,只能查询到”产品ID”、”产品名称”和”类别ID” :
select 产品ID,产品名称,类别ID from 产品
我们先来看看,产品表中有哪些字段/列,如下图:
下面我们只需上图红框中的字段/列,代码如下图所示:
重点:
在”类别”表和”产品”表里,同时存在着”类别ID”字段.
(1)在”产品”表中获得”类别ID”的内容,然后从”类别”表中查询相同的”类别ID”的记录,可知”产品”表中该产品的类别名称.在select语句中,通过join将2个表中的记录联接起来进行查询.
select 产品ID,产品名称,类别名称 from 产品 join 类别 on 产品.类别ID = 类别.类别ID
重点:
(1)join的作用是: 将2个或2个以上的表的记录横向联接起来,
on的作用是: 设置查询条件,将无用的记录过滤掉.
(2)强烈建议用: join …… on …… 语句来进行联合查询,其可读性比较强,并且还有left join , full join ,right join等不同的显示方式可以运用,是where子句所不能比拟的!
例:如果在上例中多查询一个”类别编号” ,如下图所示:
如果碰到”产品”表和”类别”表中都有”类别ID”字段,则必须指明是那个表中的”类别ID”字段. 表示法为: 表名.字段名 如: 类别.类别ID
select的where子句也可以设置过滤条件:
21.从多个表中联合查询记录
例二十一: 多个表联合查询
查看订单的产品名称、单价、数量、折扣和订购日期。
由于以上字段分别在”产品”表、”订单明细”表和”订单”表中;故必须将3个表联合起来进行查询:
select 产品.产品名称,订单明细.单价,订单明细.数量,订单明细.折扣,订单.订购日期 from 订单明细 join 订单 on 订单明细.订单ID = 订单.订单ID join 产品 on 订单明细.产品ID = 产品.产品ID
在多个表中进行join查询时,可用小括号来指定join的顺序:
select 产品.产品名称,订单明细.单价,订单明细.数量,
订单明细.折扣,订单.订购日期
from (订单明细 join 订单 on 订单明细.订单ID = 订单.订单ID)
join 产品 on 订单明细.产品ID = 产品.产品ID
上图中可以看作: 先将”订单明细”表与”订单”表join后,形成一个新表,然后和”产品”表join .
22.用where子句设定查询条件
例二十二: 查看“产品”表中库存量为零的产品,其代码为:
select * from 产品 where 库存量 = 0
PS:
查询条件有:=(等于)、<>(不等于)、!=(不等于)、>(大于)、>=(大于或等于)、!>(不大于)、<(小于)、<=(小于或等于)、!<(不小于)、not是将条件取反值。
23.设置多个查询条件
例二十三. 多个查询条件
查看“产品”表中类别为“调味品”(类别ID=2)、库存量为零的产品,其代码为:
select * from 产品 where 库存量 = 0 and 类别ID = 2
24.若不知调味品的类别ID=2,则可通过联合查询来获取记录:
PS:
若查询的条件比较多,则可用and(和)、or(或)来连接不同的查询条件。还可以用小括号来拽明查询and和or的顺序,使其更加条理清晰明了!
25.更加复杂的查询
查看“产品”表中类别为“调味品”和“日用品”、库存量为零的产品,其代码为:
select 产品.* from 产品 join 类别 on 产品.类别ID = 类别.类别ID where 产品.库存量 = 0 and (类别.类别名称 = N'调味品' or 类别.类别名称 = N'日用品')
PS:
《SQL Sever 2008 R2 数据库(4) ——数据(记录)表 (重点)》此为“抛砖引玉”而已,其实还有很多内容,我们要在工作中学习,在学习中工作!二者合一!善于总结、善于学习! 共同学习,共同进步!
本文转自beyondhedefang
51CTO博客,原文链接:http://blog.51cto.com/beyondhdf/1168972 ,如需转载请自行联系原作者