1SQL语言基础mySql.docx

上传人:b****4 文档编号:2946594 上传时间:2022-11-16 格式:DOCX 页数:21 大小:219.38KB
下载 相关 举报
1SQL语言基础mySql.docx_第1页
第1页 / 共21页
1SQL语言基础mySql.docx_第2页
第2页 / 共21页
1SQL语言基础mySql.docx_第3页
第3页 / 共21页
1SQL语言基础mySql.docx_第4页
第4页 / 共21页
1SQL语言基础mySql.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

1SQL语言基础mySql.docx

《1SQL语言基础mySql.docx》由会员分享,可在线阅读,更多相关《1SQL语言基础mySql.docx(21页珍藏版)》请在冰豆网上搜索。

1SQL语言基础mySql.docx

1SQL语言基础mySql

第一节SQL语言基础

目标:

1.掌握sql建表,CRUD常用语法;

2.能使用复杂的查询语句;

目录

1.创建表:

3

1.mySQL中建库:

3

2.创建表:

3

2.更新表结构:

4

2.管理约束:

4

1.主键:

5

2.外键:

5

3.唯一性约束:

6

4.创建索引:

6

3.Insert插入数据:

6

1.向表中插入一行完整数据:

7

2.插入部分数据:

7

3.插入一个查询结果:

7

4.update/Delete语句:

8

1.更新某一列:

8

2.更新多列:

9

3.删除表数据:

9

4.清空表:

9

5.事务支持:

9

6.Select简单查询:

10

1.简单查询:

10

2.对结果排序:

10

7.条件查询11

1.非null查询11

2.in查询:

11

3.模糊查询:

11

4.andor查询:

12

5.别名查询:

12

6.聚集查询:

13

7.常用函数查询:

14

8.分组查询:

14

9.使用子(组合)查询:

15

1.子查询示例1:

15

2.子查询示例2:

16

3.外连结查询:

16

10.sql语言总结:

17

1.sql语句分类:

17

1.根据性质分类:

17

2.根据操作对象分类:

17

2.sql数据类型和关键字:

18

1.sql的数据类型18

2.sql关键字:

19

总结和任务:

19

 

一行好SQL,胜过万行程序!

1.创建表:

1.mySQL中建库:

我们以mysql5.0为例,安装好后,从命令行登陆mysql:

在命令行输入mysql–u用户名–p

然后根据提示输入密码,即登陆数据库:

登陆后,可以用showdatabases查看数据库中有哪些库:

其中的:

information_schema

mysql

test

这三个库是mysql安装后自带的,接下来,我们要创建自己的数据库来使用:

OK,我们自己创建的数据库名为netjavablog;要使用这个数据库,还必须再执行如下命令:

表示我们当前要使用的数据库是netjavaBlog。

OK,准备工作完毕,接下来开始练习sql语句:

2.创建表:

如创建用户信息表:

创建成功后,显示表结构:

2.更新表结构:

更新表的定义,使用ALTERTABLE命令:

给表中增加一列:

删除表中一列:

删除整个表:

 

2.管理约束:

约束(constraint):

定义插入或处理数据库数据的规则。

1.主键:

主键所在列值是唯一的,用以唯一标识表中的一行数据。

例如,我们定义了BlogInfo表:

然后,修改这个表的id列为主键:

特别注意的是:

主键列必须保持唯一,在本例中,id的值需要由插入程序保证其唯一性----而不是依赖与数据库的自增长字段实现。

2.外键:

外键也是表中的一列,但其值必须在另外一个表的列中存在,外键用以保证表数据引用的完整性。

如果B表的b.aid列引用了A表的id做为外建,A表的id必须是A表的主键。

例如我们创建一个bloginfo表,用以保存用户所发表的日志信息----每一条日志记录都必须对应于userinfo表的一个用户的id.

创建bloginfo表如下:

给bloginfo表的id_user列加上对userinfo表的id列的外键引用:

以上语句执行后,就会bloginfo表加上了一个名为fk_bloginfo_uid的外健引用约束;并且设定了级联删除---当从userinfo表中删除一个用户时,此用户id对应的在bloginfo表中的记录都会delete!

要取消这个约束,只需执行如下语句即可:

注意:

在mysql中,外键必须是其所在表中的主键且自增长,且引用双方的数据类型必须相同!

3.唯一性约束:

唯一性约束用以保证表中的一列(或一组列)数据的唯一性,类似于主键,但于主键有如下区别:

1.一个表只能有一个主键,但可有多个约束;

2.唯一约束列中可含有Null值;

3.唯一约束不能被定义为外键引用;

例如,在用户表中,所有的用户名字应是唯一的:

执行如上语句,就给userinfo表的name列加上了一个名为index_unique的唯一性约束,数据库在检查这个约束时使用HASH算法。

要取消此约束:

4.创建索引:

索引在数据库中用以加快搜索和排序的速度---如果你查过字典的话;

前面我们创建的主键,唯一约束都是一种索引;索引可以提升查询速度,这并不意味着表中的索引越多越好,对于插入量大的表,建过多的索引显然不是合适的做法;如果要经常根据表中某个字段查询,就可以给它建上索引。

以上语句,就给bloginfo表的title列加上了名字index_title的索引,算法使用Btree算法;如果要取消,执行如下语句:

3.Insert插入数据:

现在的Userinfo表结构如下:

向表中插入数据,要使用Insert语句,格式为:

Insertinto表名(列名1,列名2,…)values(值1,值2,…)

1.向表中插入一行完整数据:

注意:

插入时我们并没有写id列名和值,这个列值是由数据库自增长生成的,所以不需要写。

2.插入部分数据:

Userinfo表中的descre列充许不插入值,在sql插入数据时,就可以插入部分数据,如:

但如不插入name列的值,就会出错,因为name列中数据库中设定的是非空约束。

同样,也不能插入重复name列的值,你试下?

3.插入一个查询结果:

可以将另一个select的结果集插入到一张表中,例如数据库中temUser表结构如下:

其中插入了如下值:

要想把temuser中这三个列的所有值插入(复制)到userinfo表中,就可以使用如下语句:

注意:

temuser和Userinfo表的三个字段名并不需要一致,但数据类型必须相同!

4.update/Delete语句:

1.更新某一列:

2.更新多列:

3.删除表数据:

4.清空表:

Truncate与delete的区别是:

前者是物理删除,不支持事务!

即删掉的数据是无法恢复的!

所以在使用truncate时,要特别注意!

5.事务支持:

事务是指一组sql语句的执行,要么全部成功,要么全部失败!

开启事务,在mysql中使用如下命令:

在此行后执行的sql(对表的CRUD)操作,都只是对当前用户可见,并没有物理的写入数据库。

连结执行多条sql后,再执行如下语句,即所有操作生效:

如果执行中出错或要撒消以前(在starttransaction后)的sql操作,可以使用如下命令让数据恢复到事务开启前状态:

请完成对事务命令使用的测试。

6.Select简单查询:

1.简单查询:

查询时,使用*会返回所有列,当然,你也可以如上示例,指定需要的列。

2.对结果排序:

Orderby列名desc|asc会对结果集进行升序或降序排列,如果要排列的列是字符串呢?

7.条件查询

Select语句后可以跟where子句指定查询条件,where条件中可以指定如下操作符:

说明

关键字

多重条件

And、or

比较条件

=、>、<、!

=、!

>、!

<、not+比较条件

是否在某一范围

In(<可选值集>)、notin(<可选值集>)

是否空值

Isnull:

某列为null时为真,isnotnull:

某列非空时为真

模糊匹配

Like‘%/_<字符串>’,

%模糊匹配任意内容,例:

a%b表示以a开头,以b结尾的任意长度的字符串。

如acb,addgb,ab等都满足该匹配串;

_模糊匹配某一个字符,例:

a_b表示以a开头,以b结尾的长度为3的任意字符串。

如acb,afb等都满足该匹配串。

当用户要查询的字符串本身就含有%或_时,要使用ESCAPE'<换码字符>'短语对通配符进行转义。

1.非null查询

查询userinfo表中所有descre非null的行:

2.in查询:

查询所有age为21,22,23的行:

3.模糊查询:

查询所有name列值以三个字符结尾,且前面两个为et的:

4.andor查询:

如下示例:

5.别名查询:

查询时,可以为列或列指定别名,如下示例:

6.聚集查询:

在查询时,根据业务需要使用统计函数,可以大大提高效率,一般数据库除了有自己内置的函数外,都支持如下六个常用函数:

函数名

用途

COUNT(*)

计算总行数

SUM(列名)

计算某例值的总和

AVG(列名)

计算某例值的平均值

MAX(列名)

查找某例值的最大值

MIN(列名)

查找某例值的最小值

DISTINCT(列名)

不显示列值重复的行

例如:

查找post表中记录个数:

注意,count统计的是所有行数,不能再同时查询其它列值。

查找pageview最大的的记录:

统计平均viewcount的值:

统计keyword列不重复的有多少行:

 

7.常用函数查询:

函数查询会因数据库而异,具体请参考各数据库说明手册,如下示例:

将name列转为大写:

8.分组查询:

分组查询可将结果集分成指定的逻辑组,以生成类似报表方式的统计结果,本例中,我们使到到bloginfo表,结构如下:

其中的id_user引用了userinfo表的id做主键;如果要根据用户id对用户发文张的数量进行排序---即统计用户发文张的排行榜,使用如下语句:

如果要根据用户的名字,进行分组查询,那就要使用到联合查询:

特别注意:

分组查询是最为常用的,最能提升程序效率的一种查询方式,请多多思考,多多练习。

9.使用子(组合)查询:

子查询是指多个查询嵌套在一起的查询,这样可以将库中的多个表结合起来得到我们所要的某一查询结果,在示例之前,我们还需要在库中创建一张表,用以存放其它用户对某个用户的文张评论内容的表,即replyInfo表:

其中的id_user引用Userinfo表的id做外键,代表是哪个用户回复的;

Id_blog引用bloginfo表的id做外键,代表是回复的哪篇文张。

1.子查询示例1:

查询所有年令在20和25之间的用户的文张:

2.子查询示例2:

查询所有年令在20和25之间的用户的回复的id和文张标题,文张用户名:

3.外连结查询:

如查询所有回复用户的名字,回复的内容和用户id,就要连结Replyinfo和Userinfo两个表:

如上示例的为左连结(leftjoin),如果你喜欢,也可以用右连结:

rightouterjoin;

10.sql语言总结:

1.sql语句分类:

1.根据性质分类:

数据库相关的操作都可以通过sql语句完成,sql语句根据其性质可以分为如下几类:

SQL功能

核心动词

说明

数据库定义

CREATE,DROP,ALTER

创建/修改数据库对象,如表,用户,序列、索引、主外键等。

数据查询

SELECT

执行数据查询,

数据操作

INSERT,UPDATE,DELETE

增、删、改操作

数据控制

BRANT,REVOKE

用户权限控制

2.根据操作对象分类:

对于结构查询语言(有时称S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1