国开《MySQL数据库应用》形考1-4(试题及答案)_第1页
国开《MySQL数据库应用》形考1-4(试题及答案)_第2页
国开《MySQL数据库应用》形考1-4(试题及答案)_第3页
国开《MySQL数据库应用》形考1-4(试题及答案)_第4页
国开《MySQL数据库应用》形考1-4(试题及答案)_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《MySQL数据库应用》形考1・4(试题及答案)

实验训练1在MySQL中创建数据库和表

实验目的

熟悉MySQL环境的使用,掌握在MySQL中创建数据库和表的方法,理解MySQL

支持的数据类型、数据完整性在MySQL下的表现形式,练习MySQL数据库服务器

的使用,练习CREATETABLE,SHOWTABLES,DESCRIBETABLE,ALTER

TABLE,DROPTABLE语句的操作方法。

实验内容:

【实验1-1】MySQL的安装与配置。

参见4.1节内容,完成MySQL数据库的安装与配置。

【实验1-2】创建“汽车用品网上商城系统”数据库。

用CREATEDATABASE语句创建Shopping数据库,或者通过MySQLWorkbench

图形化工具创建Shopping数据库。

【实验1-3]在Shopping数据库下,参见3.5节.,创建表3-4〜表3-11的八个表。

可以使用CREATETABLE语句,也可以用MySQLWorkbench创建表。

【实验1-4]使用SHOW、DESCR旧E语句查看表。

【实验1-5]使用ALTERTABLE.RENAMETABLE语句管理表。

【实验1-6】使用DROPTABLE语句删除表,也可以使用MySQLWorkbench册ij除

表。

(注意:删除前最好对已经创是的表进行复制。)

【实验1-7】连接、断开MySQL服务器,启动、停止MySQL服务器。

【实验1-8】使用SHOWDATABASE.USEDATABASE>DROPDATABASE语句

管理“网上商城系统"Shopping数据库。

实验要求:

1.配合第1章第3章的理论讲解,理解数据库系统。

2.掌握MySQL工具的使用,通过MySQLWorkbench图形化工具完成。

3.每执行一种创建、删除或修改语句后,均要求通过MySQLWorkbench查看执

行结果。

4.将操作过程以屏幕抓图的方式复制,形成实验文档。

参考答案:

MySQL图形化管理工具MySQLWorkBench的使用MySQL是一个非常流行的关系

型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一

特点,许多中小型网站为了降低网站总体拥有成本都愿意选择MySQL作为网站的数

据库。MySQL的管理维护工具很多,除了系统自带的命令行管理工具之外,还有许

多其他的图形化管理工具,图形化管理工具可以极大的方便数据库的操作与管理,

MySQLWorkBench就是常用的图形化管理工具之一。接下来,我将以大家看得懂、

学得会,容易上手的方式来介绍MySQLWorkBench的基本使用。首先,打开我们之

前安装好的MySQLWorkBench这个工具,如下图:(图1)上图出现的界面是工具的

主页,点击红色圈选区域即可连接MySQL,如果连接的MySQL服务已经启动,就会

出现如下图的界面,输入密码直接登录连接即可。(图2)点击图1的红色圈选区域,

如果连接的MySQL服务没有启动,就会出现如下的界面:(图3)上图显示的当前

MySQL的服务状态为停止状态,点击图中圈选区域的链接,即可实现数据库实例的

启动或关闭的相关处理了。如下图所示:(图4)单击上图的Startserver按钮,启动

服务,启动过程中会出现启动信息日志,如下图:(图5)启动过程中会提示输入密

码,按要求输入即可,启动成功后,MySQL的服务状态变成运行状态,如下图:(图

6)MySQL服务启动后,就可以进行正常使用了,如下图:(图7)给大家介绍一个

上图各个框选区域的功能,①数据库操作的列表。②数据库服务器己经创建的数据库

列表,比如book库就是我们曾经创建的数据库。③SQL的编辑器和执行环境。④数

据库的连接信息。⑤执行结果的列表。接下来我们利用这个工具实现一些数据库与数

据表的操作。首先看创建数据库,如下图:(图8)如上图,可以直接点击建库的图

标,或者鼠标右击SCHEMAS区域的空白处选择"CreateScrema...”创建数据库,境

写数据库名称,如mytest,然后点击Apply按钮,出现下图:(图9)上图为检查确

认一下创建数据库的SQL脚本,然后按下"Apply"按钮,进入下一个界面:(图10)

上图为执行建库的SQL脚本,按下“Finish"按钮,完成创建数据库的操作。(图11)

如上图,我们可以对创建好的数据库进行修改或删除,也可以创建新的数据库,数据

库已经有了,接下来我们看一下创建数据库表的操作:(图12)如上图,可以直接

点击最上面的建表图标,或者鼠标右击Tables,选择"CreateTable../*,实现建表的

操作,建表需要填写表的名称,列名,选择数据类型,添加约束,如果设置外键约束,

可以选择"ForeignKeys"这个选项面板,进入下图:(图13)上图中,①处填写表名

②处填写外健名③处填写外键关联的表④处填写外键列的名称⑤处填写外键关联

的其它表中的主键列。当外键约束创建完成按下"Apply”按钮。然后再按下"Columns”

这个选项面板回到图12中创建表的界面,按下"Apply”按钮,进入检查确认建表SQL

脚本的界面和执行建表SQL脚本的界面。(图14)(图15)建表成功后,我们可以

对表进行修改、删除或创建其它新表,如下图:(图16)表已经创建好了,接下来

我们看一下,怎么向表中插入数据,可以选择上图中的"SelectRowsLimit-10000,在

查看数据的同时,也可以添加、修改或删除数据,如下图:(图17)上图中,双击

记录行,可以添加数据或修改数据,选中记录行,鼠标右击在出现的菜单中选中

''DeleteRows",可以删除记录行。按下"Apply"按钮,进入确认执行SQL脚本的后,

完成表的创建。上面都是通过图形化的方式完成的建库、建表、插入、查询数据的操

作,在MySQLWorkbench_L具中同样也可以在SQL编辑器中通过SQL语句来操作

数据库,比如下图查询表中数据的操作:(图18)当执行上图中的SQL语句时,按

下圈选的闪电形状的图标即可。图形化工具还能创建数据库的实体关系模型,如下图:

(图19)点击上图圈选的图标,进入下图的界面:(图20)在上图中,按、'的图标,

在出现的菜单中选择划红线的子菜单,进入下图界面:(图21)上图参数按默认的

就可以,单击"Next"按钮,进入下一个界面:(图22)上图中,按要求填写连接密码,

进入下图:(图23)在上图中选择数据库名称后,进入下图:(图24)(图25)图24,

图25不用任何设置直接下一步即可,最后进入下图:(图26)上图即为实体关系模

型,在此模型中我们能够很清晰的看到各个表之间的关系,比如图书信息表与图书类

别表的外键关联关系。当我们鼠标悬停在这个线上时,能够很清晰的看到两个表是通

过哪两个字段关联的了

实验训练2:数据查询操作

实验目的:

基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL运算符、函数、

谓词,练习Select语句的操作方法。

实验内容:

1.单表查询

【实验2.1]字段查询

(1)查询商品名称为“挡风玻璃”的商品信息。

分析:商品信息存在于商品表,而且商品表中包含商品名称此被查询信息,因此这是

只需要涉及一个表就可以完成简单单表查询。

(2)查询ID为1的订单。

分析:所有的订单信息存在于订单表中,而且订单用户ID也存在于此表中,因此这

是只需要查询订单表就可以完成的查询。

【实验2.2】多条件查询

查询所有促销的价格小于1000的商品信息。

分析:此查询过程包含两个条件,第一个是是否促销,第二个是价格,在商品表中均

有此信息,因此这是一个多重条件的查询。

【实验2.3]DISTINCT

(1)查询所有对商品ID为1的商品发表过评论的用户ID。

分析:条件和查询对象存在于评论表中,对此商品发表过评论的用户不止一个,而且

一个用户可以对此商品发表多个评论,因此,结果需要进行去重,这里使用DISTIN

CT实现。

(2)查询此汽车用品网上商城会员的创建时间段,1年为一段。

分析:通过用户表可以完成查询,每年可能包含多个会员,如果任此表中的创建年份

都列出来会有重复,因此使用DISTINCT去重。

【实验2.4】ORDERBY

(1)查询类别ID为1的所有商品,结果按照商品ID降序排列,

分析:从商品表中可以查询出所有类别ID为1的商品信息,结果按照商品ID的降序

排列,因此使用ORDERBY语句,降序使用DESC关键字。

(2)查询今年新增的所有会员,结果按照用户名字排序。

分析:在用户表中可以完成查询,创建日期条件设置为今年,此处使用语句ORDER

BYo

【实验2.5】GROUPBY

(1)查询每个用户的消费总金额(所有订单)。

分析:订单表中包含每个订单的订单总价和用户ID。现在需要将每个用户的所有订单

提取出来分为一类,通过SUM。函数取得总金额。此处使用GROUPBY语句和SU

M()函数。

(2)查询类别价格一样的各种商品数量总和。

分析:此查询中需要对商品进行分类,分类依据是同类别和价格,这是“多列分组,

较上一个例子更为复杂。

2.聚合函数查询

【实验2.6]COUNT()

(1)查询类别的数量。

分析:此查询利用COUNT。函数,返回指定列中值的数目,此处指定列是类别表中

的ID(或者名称均可)。

(2)查询汽车用品网上商城的每天的接单数。

分析:订单相关,此处使用聚合函数COUNT。和Groupby子句。

【实验2.7】SUM()

查询该商城每天的销售额。

分析:在订单表中,有一列是订单总价,将所有订单的订单总价求和,按照下单日期

分组,使用SUM()函数和Groupby子句。

【实验2.8]AVG()

(1)查询所有订单的平均销售金额。

分析:同上一个相同,还是在订单表中,依然取用订单总价列,使用AVG()函数,对

指定列的值求平均数。

【实验2.9]MAX()

(1)查询所有商品中的数量最大者。

分析:商品的数量信息存在于商品表中,此处查询应该去商品表,在商品数量指定列

中求值最大者。使用MAX()函数。

(2)查询所有用户按字母排序中名字最靠前者。

分析:MAX()或者MIN()也可以用在文本列,以获得按字母顺序排列的最高或者最低

者。同上一个实验一样,使用MAX()函数。

【实验2.10]MIN()

(1)查询所有商品中价格最低者。

分析:同MAX()用法相同,找到表和列,使用MIN()函数。

3.连接查询

【实验2.11】内连接查询

(1)查询所有订单的发出者名字。

分析:此处订单的信息需要从订单表中得到,订单表中主键是订单号,外键是用户I

D,同时查询需要得到订单发出者的姓名,也就是用户名,因此需要将订单表和用户

表通过用户ID进行连接。使用内连接的(INNER)JOIN语句。

(2)查询每个用户购物车中的商品名称。

分析:购物车中的信息可以从购物车表中得到,购物车表中有用户ID和商品ID两项,

通过这两项可以与商品表连接,从而可以获得商品名称。与上一个实验相似,此查询

使用(INNER)JOIN语句。

【实验2.12]外连接查询

(1)查询列出所有用户ID,以及他们的评论,如果有的话。

分析:此查询首先需列出所有用户ID,如果参与过评论的话,再列出相关的评论。此

处使用外查询中的LEFT(OUTER)JOIN语句,注意需将全部显示的列名写在JOIN

语句左边。

(2)查询列出所有用户ID,以及他们的评论,如果有的话。

分析:依然是上一个实验,还可以使用RIGHT(OUTER)JOIN语句,注意需将全部

显示的列名写在JOIN语句右边。

【实验2.13】复合条件连接查询

(1)查询用户ID为1的客户的订单信息和客户名。

分析:复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结

果,使查询的结果更加准确。化查询需在内查询的基础上加上另一个条件,用户iD

为1,使用AND语句添加精确条件。

(2)查询每个用户的购物车中的商品价格,并且按照价格顺序排列。

分析:此查询需要先使用内连接对商品表和购物车表进行连接,得到商品的价格,在

使用ORDERBY语句对价格进行顺序排列。

4.嵌套查询

【实验2.14】IN

(1)查询订购商品ID为1的订单ID,并根据订单ID查询发出此订单的用户ID。

分析:此查询需要使用IN关键字进行子查询,子查询是通过SELECT语句在订单明

细表中先确定此订单ID,在通过SELECT在订单表中查询到用户IDO

(2)查询订购商品ID为1的订单ID,并根据订单ID查询未发出此订单的用户ID。

分析:此查询和前一个实验相似,只是需使用NOTIN语句。

【实验2.15】比较运算符

(1)查询今年新增会员的订单,并且列出所有订单总价小于100的订单ID。

分析:此查询需要使用嵌套,子查询需先查询用户表得到今年创建的用户信息,在将

用户ID匹配找打订单信息,其中使用比较运算符提供订单总价小于100的条件。

(2)查询所有订单商品数量总和小于100的商品ID,并将不在此商品所在类别的其

他类别的ID列出来。

分析:此查询需要进行嵌套查询,子查询过程需要使用到SUM。函数和GROUPBY

求出同种商品的所有被订数量,使用比较运算符得到数量总和小于100的商品ID,

再使用比较运算符“不等于”得到非此商品所在类的类别ID。

【实验2.16】EXISTS

(1)查询表中是否存在用户ID为100的用户,如果存在,列出此用户的信息。

分析:EXISTS关键字后面的参数是一个任意的子查询,系统对于查询进行运算以判

断它是否返回行,如果至少返回一行,那以EXISTS的结果为TRUE,此时外层查询

语句将进行查询。此查询需要对用户ID进行EXIST操作。

(2)查询表中是否存在类别ID为100的商品类别,如果存在,列出此类别中商品价

格小于5的商品ID.

分析:与上一个实验相似,此实验在外查询过程添加了比较运算符。

【实验2.17]ANY

查询所有商品表中价格比订单表中商品ID对应的价格大的商品ID。

分析:ANY关键字在一个比较操作符的后面,表示若与子查询返回的任何值比较为T

RUE,则返回TRUE。此处使用ANY来引出内查询。

【实验2.18】ALL

查询所有商品表中价格比订单表中所有商品ID对应的价格大的商品ID.:

分析:使用ALL时需要同时满足所有内层查询的条件。ALL关键字在一个比较操作

符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE。此处使用ALL

来引出内查询。

【实验2.191集合查询

(1)查询所有价格小于5的商品,查询类别ID为1和2的所有商品,使用UNION

连接查询结果。

分析:由前所述,UNION将多个SELECT语句的结果组合成一个结果集合,第1条

SELECT语句查询价格小于5的商品,第2条SELECT语句查询类别ID为1和2的

商品,使用UNION将两条SELECT语句分隔开,执行完毕之后把输出结果组合为单

个的结果集,并删除重复的记录。

(2)查询所有价格小于5的商品,查询类别ID为1和2的所有商品,使用UNION

ALL连接查询结果。

分析:使用UNIONALL包含重复的行,在前面的例子中,分开杳询时,两个返回结

果中有相同的记录,使用UNION会自动去除重亚行。UNIONALL从查询结果集中

自动要返回所有匹配行,而不进行删除。

实验要求:

1.所有操作必须通过MySQLWorkbench完成;

2.每执行一种查询语句后,均要求通过MySQLWorkbench查看执行结果;

3.将操作过程以屏幕抓图的方式拷贝,形成实验文档。

参考答案:

对mysql数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如

只取10条数据、对查询结果进行排序或分组等等。

一、按关键字排序

使用select语句可以将需要的数据从mysql数据库中查询出来,如吴对查询的结果进行排

序操作,可以使用orderby语句完成排序,并且最终将排序后的结果返回给客户。这个语

句的排序不光可以针对某一个字段,也可以针对多个字段。

ASC是按照升序进行排序的,是默认的排序方式,即ASC可以省略。

SELECT语句中如果没有指定具体的排序方式,则默认按ASc方式进行排序。

DESC是按降序方式进行排列

当然ORDERBY前囿也可以使用WHERE子句对查询结果进一步过滤。

语法格式:

select字段1,字段2...from表名orderby字段1,字段2...asc#查询结果以升序方式显示,

asc可以省略

select字段1,字段2...from表名orderby字段1,字段2,…desc#查询结果以降序方式

显示

ASC是按照升序进行排名的,是默认的排序方式,即ASC可以省略

DESC是按照降序的方式进行排序的

orderby也可以通过where子句对查询结果进行进一步的过渡

可进行多字段的排序

1

2

3

4

5

6

7

8

9

10

11

1.1创建一个模板表

createtableschool(idint,namevarchar(lO)primarykeynotnull,

scoredecimal(5,2),addressvarchar(20),hobbidint(5));

,

insertintoschoolvalues(l/zhangsan'z70/shanghai76);

insertintoschoolinsertintoschoolvalues(2,'lisi',80,,nanjing,,5);

1

2

3

4

5

6

7

8

9

1.2单字段排序

1.2.1按分数排序

默认不指定是升序排列

select*fromschoolorderbyscore;(asc默认省略)

1

1.2.2按分数降序排序

selectname,scorefromschoolorderbyscoredesc;

1

1.2.3结合where进行条件过漉

筛选地址是北京的学生按分数升序排列

selectname,score,addressfromschoolwhereaddress='beijing'orderbyscore;

1.3多字段排序

ORDERBY语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的

情况下,这些多条的记录再按照第二个字段进行排序,ORDERBY后面跟多个字段时,字段

之间使用英文逗号隔开,优先级是按先后顺序而定,但。rderby之后的第一个参数只有在

出现相同值时,第二个字段才有意义。

1.3.1查询学生信息(先按兴趣id升序排列,相同分数的,id按降序排列)

selectid,name,hobbidfromschoolorderbyhobbid,iddesc;

1

二、区间判断及查询不重复记录

2.1AND/OR——且/或的使用

selectid,namefromschoolwhereid>2andid<5;

1

#列出school表里满足id>2或者id小于5的id,name列

selectid,namefromschoolwhereid>2orid<5;

1

2

2.2嵌套/多条件

#列出school表里满足(id>3且id小于5)或者id>2的id,name列

selectid,namefromschoolwhereid>2or(id>3andid<5);

1

2

#大于90小于100的数据

selectid,name,scorefromschoolwherescore<60or(score>90andscore<100);

1

2

3

#查看分数大于70小于等于95的数据

selectid,name,scorefromschoolwherescore>70andscore<=90;

1

2

3

#查看分数小于70或者大于90的数据,按降序显示

selectid,name,scorefromschoolwherescore<70orscore>90orderbyscoredesc;

1

2

2.3distinct查询不重复记录

格式:

selectdistinct字段from表名;

#distinct必须放在最开头

#distinct只能使用需要去重的字段进行操作

#distinct去重多个字段时,含义是:几个字段同时重生时才能被过滤,会默认按左边第一

个字段为依据。

1

2

3

4

5

6

7

8

2.3.1查看hobbid有多少种

selectdistincthobbidfromschool;

1

三、groupby-对查询结果进行分组

通过SQL查询出来的结果,还可以对其进行分组,使用GROUPBY语句来实现,GROUPBY

通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、求和(SUM)、

求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUPBY分组的时候可以按一个

或多个字段对结果进行分组处理。

select字段,聚合函数from表名(where字段名(匹配)数值)groupby字段名;

1

3.1对hobbid进行分组查询,并显示最大的id

selecthobbid,max(id)fromschoolgroupbyhobbid;

1

3.2按hobbid相同的分组,计算相同得的个数

selectcount(name),hobbidfromschoolgroupbyhobbid;

1

3.3结合where语句

筛选分数大于等于80的分组,计算学生个数

selectcountfnameLscorefromschoolwherescore>80groupbyscore;

1

count(name):计数score分数:

结合orderby把分数按降序排列

selectcount(name),scorefromschoolwherescore>80groupbyscoreorderbyscoredesc;

1

2

3

4

5

四、限制结果条目

limit限制输出的结果记录

在使用MySQLSELECT语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅

需要返回第一行或者前几行,这时候就需要用到LIMIT子句

语法格式:

select字段from表名limit[offset,]number

limit的第一个参数是位置偏移量(可选参数),是设置mysql从哪一行开始

如果不设定第一个参数,将会从表中的第一条记录开始显示。

第一条偏移量是0,第二条为1

offset为索引下标

number为索引下标后的几位

1

2

3

4

5

6

7

8

9

10

11

12

13

4.1查询所有信息显示前4行记录

select*fromschoollimit4;

1

4.2从第4行开始,往后显示3行内容

select*fromschoollimit3,3;

1

4.3按score降序查询前三的数据

select*fromschoolorderbyscoreimit3;

1

五、select设置别名(alias---as)

在mysql查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者多次

使用相同的表,可以给字段列或表设置别名,方便操作,增强可读性。

列的别名select字段as字段别名表名

表的别名select别名.字段from表名as别名

as可以省略

1

2

3

4

5

使用场景:

1、对更杂的表进行查询的时候,别名可以缩短杳询语句的长度

2、多表相连查询的时候(通俗易懂、减短sql语句)

1

2

3

5.1查询表的记录数量,以别名显示

selectcount)*)asnumberfromschool;

1

5.2利用as,将查询的数据导入到另外一个表内

创建Another表,将school表的查询记录全部插入Another表

createtableAnotherasselect*fromschool;

1

此处as起到的作用:

创建了一个新表,并定义表结构,插入表数据(与school表相同)

但是”约束“没有被完全”复制“过来的日.是如果原表设置了主键,

那么附表的:default字段会默认设置一个0

1

2

3

4

5

6

相似:

克隆、复制表结构

也可以加入where语句判断

在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。

列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用

selectaddressas地区fromAnother;

利用as,将Another表中的address设置别名地区,进去查询

1

2

六、select通配符查询

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。

通常通配符都是跟like一起使用,并协同where子句共同来完成查询任务。

常用的通配符有两个,分别是:

#语法:

select字段名from表名where字段like模式

%:百分号表示零个、一个或多个字符

下划线表示单个字符

1

2

3

4

6.1查询以什么开头或以什么结尾

查询以什么结尾的‘%r

查询以什么开头的'I%'

selectid,namefromschoolwherenamelike'I%';

2

3

4

5

查询字段中包含某个字段‘%i%'

selectid,namefromschoolwherenamelike'%i%';

1

2

3

6.2查找某个字段开头长度固定

使用匹配字段中的一个字符

selectid,namefromschoolwherenamelike'I_

1

2

6.3使用“%”与组合使用查询

使用“%”与“,组合使用查询

selectid,namefromschoolwherenamelike

1

2

3

七、select子查询

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。

子查询语句是先于主查询进行下一步的查询过滤。

在子查询中可以与主语句查询相同的表,也可以是不同的表

7.1select相同表查询

语法格式

select字段1,字段2from表名1where字段in(select字段from表名where条件);

1

2

3

相同表查询

selectname,scorefromschoolwhereidin(selectidfromschoolwherescore>80);

1

7.2select多表查询

selectnamezscorefromschoolwhereidin(selectidfromschool?whereage>25);

1

NOT取反,将子查询的结果,进行取反操作

selectname,agefromschool?whereidnotin(selectidfromschoolwherescore<90);

1

2

7.3select结合insert进行操作

子查询还可以用在insert语句中,子查询的结果集可以通过insert语句插入到其它表中

insertintoAnother?select*fromschoolwhereidin(selectidfromschool);

1

7.4select结合update进行操作

update语句也可以使用子查询,update内的子查询,在set更新内容时,可以是单独的一列,

也可以是多列。

updateschoolsetscore=77whereidin(selectidfromschool?whereid<4);

1

7.5select结合delete进行操作

deletefromschoolwhereidin(selectidfromschool?wherescore<60);

1

7.6select结合exists进行操作

exists这个关键字在子查询时,主要用于判断子查询的结果集是否为空,如果不为空,则返

回true,反之则返回false

注:在使用exists时,当子查询有结果时,不关心子查询的内容,执行主查询操作;当子查

询没有结果时,则不执行主查询操作。

selectcount(*)fromschoolwhereexists(selectidfromschoolwherescore=100);

selectcount(*)fromschoolwhereexists(selectidfromschoolwherescore=90);

1

2

3

7.7select结合as别名进行操作

将结果集作为一张表进行查询的时候,需要用到别名

将结果集作为一张表进行查询

将结果集做为一张表进行查询的时候,我们也需要用到别名

1

2

3

从class表中的id和name字段的内容做为“内容"输出id的部分

select*from表名此为标准格式,而以上的查询语句,“表名”的位置其实是一个结果集,

mysql并不能直接识别,而此时给与结果集设置一个别名,以“selecta.idfroma”的方式查

询将此结果集是为一张“表",就可以正常查询数据了,如下:

selectcount(*)from(selectidfromschoolwherescore>80)a;

1

八、MySql视图

视图时一张虚拟的表,这张虚拟表中不包含真实数据,只是做了真实数据的映射

8.1功能

简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性

本质而言,视图是一种select(结果集的呈现)

注:视图适合于多表浏览时使用,不适合增、删、改

视图与表的区别和联系:

8.2区别

视图是已经编译好的sql语句。而表不是

视图没有实际的物理记录。而表有

表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修

改,但视图只能有创建的语句来修改

视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语

句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构

表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表

视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响

到基本表的)

视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自

基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。

视图是基本表的抽象和在逻辑意义上建立的新关系

#创建视图

createview视图表名asselect*from表名where条件;

#查看视图

select*from视图表名

#查看表状态

showtablestatus\G

#查看视图结构

desc视图表名

1

2

3

4

5

6

7

8

查看视图与源表结构

修改视图表数据

当数据发生变化时,若数据与之前创建视图表时的关联条件不一致时,视图表的数据将会发

生改变

更改源表数据

九、NULL值

在SQL语句使用过程中,经常会碰到NULL这几个字符。通常使用NULL来表示缺失的值,

也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用NOT

NULL关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没

有NOTNULL并且没有值,这时候新记录的该字段将被保存为NULLo需要注意的是,NULL

值与数字0或者空白(spaces)的字段是不同的,值为NULL的字段是没有值的。在SQL

语句中,使用ISNULL可以判断表内的某个字段是不是NULL值,相反的用ISNOTNULL可

以判断不是NULL值

9.1NULL值与空值区别

空值长度为0,不占空间,NULL值的长度为null,占用空间

isnull无法判断空值

空值使用”="或者”<>"来处理(!=)

count()计算时,NULL会忽略,空值会加入计算

注:NULL是占用内存空间的,而空值则不占用内存空间

1

2

3

4

5

十、连接查询

MySQL的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的

共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择

性的连接到选定的主表结果集上。使用较多的

连接查询包括:内连接、左连接和右连接

10.1内连接

MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在

FROM子句中使用关键字INNERJOIN来连接多张表,并使用ON子句设置连接条件,内连

接是系统默认的表连接,所以在FROM子句后可以省略INNER关键字,只使用关键字

JOINo同时有多个表时,也可以连续使用INNERJOIN来实现多表的内连接,不过为了更好

的性能,建议最好不要超过三个表

select表名1.字段1,表名1.字段2from表名1innerjoin表名20n表名1.字段=表名2.

字段;

内连查询:通过innerjoin的方式将俩张表指定的相同字段的记录行输出出来

1

2

3

4

10.2左连接

左连接也可以被称为左外连接,在FROM子句中使用LEFTJOIN或者LEFTOUTERJOIN关

犍字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的

记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。

10.3右连接

右连接也被称为右外连接,在FROM子句中使用RIGHTJOIN或者RIGHTOUTERJOIN关键

字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并

用这些记录与左表中的行进行匹型。

总结

在MySQL中,视图表与索引一样,都是MySQL数据库的一种优化,其可以加快查询速度,

但需要注意的时,视图表一般只作查询使用,不对其进行增、删、改;视图表并不占用实际

内存

在表中的NULL值与空值,NULL值是占用内存空间,但是不计入数据统计,而空值是不占内

存空间,但是算数据,计入数据统计的。内连接innerjoin,显示的数据为左右表都同时满

足条件,左连接Ie代join,是以左表为基础显示,右表需满足条件,右连接rightjoin,是

以右表为基础显示,左表需满足条件。

实验训练3数据增删改操作

实验目的:

基于实验1创建的汽车用品网上商城数据库Shopping,练习Insert.Delete.TRUN

CATETABLE.Update语句的操作方法,理解单记录插入与批量插入、DELETE与

TRUNCATETABLE语句、单表修改与多表修改的区别。

实验内容:

【实验3-1】插入数据

(1)使用单记录插入Insert语句分别完成汽车配件表Autoparts、商品类别表categ

ory、用户表Client、用户类别表Clientkind、购物车表shoppngcart、订单表Ord

er、订单明细表order_has_Autoparts、评论Comment的数据插入,数据值自定;

并通过select语句检查插入前后的记录情况。

(2)使用带Select的Insert语句完成汽车配件表Autoparts中数据的批量追加;并

通过select语句检查插入前后的记录情况。

【实验3-2】删除数据

(1)使用Delete语句分别完成购物车表shoppingcart、订单表Order、订单明细表

Order_has_Autoparts评论Comment的数据删除,删除条件自定;并通过select

语句检查删除前后的记录情况。

(2)使用TRUNCATETABLE语句分另U完成购物车表shoppingcart、评论Comme

nt的数据删除。

【实验3-3】修改数据

使用Update分别完成汽车配件表Autoparts、商品类别表category、用户表Client、

用户类别表Clientkind、购物车表shoppingcart、订单表Order、订单明细表Order_

has_AutopartSx评论Comment的数据修改,修改后数据值自定,修改条件自定;并

通过select语句检查修改前后的记录情况。

实验要求:

1.所有操作必须通过MySQLWorkbench完成;

2.每执行一种插入、删除或修改语句后,均要求通过MySQLWorkbench查看执行

结果及表中数据的变化情况;

3.将操作过程以屏幕抓图的方式拷贝,形成实验文档。

参考答案:

使用Workbench操作数据库

打开MySQLWorkbench软件,如下图所示,方框标识的部分就是当前数据库服务器中

已经创建的数据库列表。

在MySQL中,SCHEMAS相当于DATABASES的列表。在SCHEMAS列表的空白处

右击,选择RefreshAll即可刷新当前数据库列表。

■MySQLWorkbench

/LocalinstanceMySQLRouterX

Fil«EditVirrQutryDtttbas*StrverToolsScriptingH«lp

说8厘1圉园瓦阿出

Navigator

MANAGEMENT/

ServerStatus

±ClientConnections

UsersandPrrvileges

&StatusandSystemVariables

iDataExport

DataImport/Restore

INSTANCEO

QStartup/Shutdown

AServerLogs

7OptionsFile

PERFORMANCE

。Dashboard

望PerformanceReports

C、PerformanceSchemaSetup

Information

Noobjectselected

ObjectInfoSession

1)创建数据库

在SCHEMAS列表的空白处右击,选择"CreateSchema...”,则可创建一个数据库,如

下图所示。

SCHEMAS

QFilterobjects

sakila

sys

world

RefreshAll

在创建数据库的对话框中,在Name框中输入数据库的名称,在Collation下拉列表中

选择数据库指定的字符集。单击Apply按钮,即可创建成功,如下图所示。

Name:testdb

RenameReferences

CoHatnn:ServerDefault

A

b»g5-defaulteolation

big5-big5_chinese_d

big5-big5_bin

dec8-defeultcoRation

dec8-dec8_swedish_d

dec8-dec8_bin

cp850-defeulteolation

cp850-q5850_general_d

cp850-cp850g

hp8-deceitcollation

hp8-hp8_english-d

hp8-hp8_bin

koi8r-defaulteolation

koi8r-koi8r_general_d

koi8r-koi8r_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论