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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

导语:

企业最重要的是:以最小的成本,获取最大的利润!(利润最大化)公司的一切业务都必须以此为核心!公司管理层尤甚(牢记在心且付诸行动)!不然,公司花那么多银子请我们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语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2天前
|
分布式计算 Java 关系型数据库
|
2天前
|
SQL 数据库
数据库SQL语言实战(六)
本次实战的重点就在于对表格本身的一些处理,包括复制表格、修改表格结构、修改表格数据
|
2天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(五)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
|
2天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
|
2天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(三)
本篇文章重点在于SQL中的各种删除操作
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0
|
3天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
4天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
11天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
11天前
|
SQL 关系型数据库 MySQL
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)