数据库复杂语句Word下载.docx

上传人:b****5 文档编号:21705253 上传时间:2023-01-31 格式:DOCX 页数:18 大小:584.72KB
下载 相关 举报
数据库复杂语句Word下载.docx_第1页
第1页 / 共18页
数据库复杂语句Word下载.docx_第2页
第2页 / 共18页
数据库复杂语句Word下载.docx_第3页
第3页 / 共18页
数据库复杂语句Word下载.docx_第4页
第4页 / 共18页
数据库复杂语句Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据库复杂语句Word下载.docx

《数据库复杂语句Word下载.docx》由会员分享,可在线阅读,更多相关《数据库复杂语句Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

数据库复杂语句Word下载.docx

emp表

3.1、表之间的关联关系

数据库中的表一般存在三种关联关系

1、一对一

2、一对多、多对一

3、多对多

表之间的的关联关系,通过“外键”来体现,外键的作用就是建立表之间的关联关系,外键一般在多方表。

一个表可以有多个“外键“

用Navicat8forMysql设计外键,操作如图:

1、右键--选择设计表

2、选择创建栏位

3、添加如下选项

4、选择外键,按如下步骤填写外键信息

5、填写完外键信息选保存

此刻dept表、emp表就建立的一对多的关联关系。

关联关系是为了保证数据库中数据的完整性

3.2、多表查询

如果查询使用一个以上的表就成为多表查询

在Navicat8中写SQL语句,则需使用查询窗体如图所示:

1、右键单击查询

2、查询编辑选项中即可写SQL语句

3.2.1、多表查询基本语法

多表查询语法如下:

SELECT{DISTINCT}*|表名.列名1别名1.列明,表名.列名2,别名2.列明,…

FROM表名称1别名1,表名称2别名2,…

{WHERE条件{s}}

{ORDERBY排序字段ASC|DESC,排序字段ASC|DESC}

同时查询dept、emp表

SELECT*FROMdept,emp;

查询emp表的记录数

SELECTCOUNT(*)FROMemp

查询dept表的记录数

SELECTCOUNT(*)FROMdept

dept表4条记录emp表7条记录

在使用多表时会产生笛卡尔乘积,4*7=28条记录,这些记录中许多是重复信息,所以在查询多表时要使用关联字段作为条件,去掉笛卡尔乘积

在dept表和emp表中关联的字段是:

dept表的deptid字段与emp表的deptid,而且emp的deptid字段的值都来自dept的deptid,即dept.deptid=emp.empid

去掉笛卡尔乘积的查询为:

SELECT*FROMdept,empWHEREdept.deptid=emp.deptid

使用多表查询,建议使用别名

查询员工编号,员工姓名,员工性别,员工年龄,员工地址,所属部门名称

|-此查询包含了员工表中的信息,部门表中的信息,故使用多表查询

SELECTB.empid,B.empname,B.empsex,B.empage,B.empaddress,A.deptname

FROMdeptA,empB

WHEREA.deptid=B.deptid

3.2.2、左、右连接查询

在多表查询中还有一种查询方式,称为内连接查询,语法如下:

FROM表名称1别名1INNERJOIN表名称2别名2,…

ON关联条件

查询部门表和员工表信息

SELECT*FROMdeptINNERJOINempONdept.deptid=emp.deptid

内连接查询其实就是去掉笛卡尔乘积的多表关联查询,注意:

只查询关联字段,没有关联的不查询

左连接查询

SELECT*

FROMdeptLEFTJOINemp

ONdept.deptid=emp.deptid

以左边的表作为标准,无论关联与否左边表都查询

右连接查询

FROMdeptRIGHTJOINemp

以右边的表作为标准,无论关联与否右边表都查询

 

3.3、组函数及分组统计、

如需查询员工表中的性别为“男”或“女”的员工个数,则需要SQL语句中分组统计功能。

1、分组在SQL中用“GROUPBY”语法如下:

SELECT{DISTINCT}*|列名1别名1,列名2,别名2,…

FROM表名称1别名1

GROUPBY分组条件

注意:

groupby的位置

以性别为标准对员工进行分组

SELECTempsexFROMempGROUPBYempsex

单独使用分组条件时,以什么字段作为分组条件,那么查询字段就必须是什么字段

2、SQL中常用的统计函数

~COUNT():

全部的记录数

~MAX():

最大值

~MIN():

最小值

~AVG():

平均数

~SUN():

求和

查询员工总数

SELECTCOUNT

(1)FROMemp

count

(1)中填写“1”有助于提高查询效率

查询员工年龄的最大值

SELECTMAX(empage)'

年龄最大值'

FROMemp

查询员工年龄最小值

SELECTMIN(empage)'

年龄最小值'

查询员工年龄的平均值

SELECTAVG(empage)'

年龄的平均值'

查询所有部门人数之和

SELECTSUM(deptnum)'

部门人数之和'

FROMdept

分组函数中使用的通常都是数值类型的字段,或日期类型字段

3、分组统计的综合应用

查询员工信息表中“男“、”女“员工的个数

分析:

|-以性别作为标准进行分组

|-使用COUNT()统计函数

SELECTempsex'

性别'

COUNT(empid)'

员工人数'

FROMemp

GROUPBYempsex

查询每个部门的员工人数

分析:

|-查询使用到了多表

|-以部门编号作为分组标准

SELECTA.deptid'

部门编号'

COUNT(B.empid)'

部门人数'

GROUPBYA.deptid

查询每个部门的员工的平均年龄

|-使用AVG()统计函数

AVG(B.empage)'

部门平均年龄'

在使用分组的时候,不能出现分组条件和分组函数之外的字段

4、HAVING的使用

HAVING是在分组的基础上进行筛选,语法如下:

GROUPBY分组条件{HAVING分组条件}

查询员工平均年龄在22岁之上所属部门编号

分析|-以部门编号作为分组标准

|-分组后,条件筛选使用AVG()函数

SELECTdeptid'

FROMemp

WHEREtrue

GROUPBYdeptid

HAVINGAVG(empage)>

22

小结:

只在某列中出现重复,才需要分组,否则没有意义

3.4、分页语句

如果数据特别多,一次在页面中展示不完,我们就需要用到分页展示数据,这就需要分页的sql语句

mysql分页的关键字为:

LIMITX,Y

X为起始的记录数(排除前几条记录开始),Y为每次展示的记录个数(分页标准)

语法如下:

{LIMITX,Y}

查询员工表中的前两条记录

SELECT*FROMempLIMIT0,2

查询员工表中的第3、4条记录

SELECT*FROMempLIMIT2,2

查询员工表中的第5、6条记录

SELECT*FROMempLIMIT4,2

查询员工表中的第7、8条记录

SELECT*FROMempLIMIT6,2

综上mysql中的分页语句为:

{LIMIT((当前页-1)*分页标准),分页标准}

第一页的记录数

SELECT*FROMempLIMIT((1-1)*2),2

(1-1)*2一般会在程序中直接算出结果,放入该位置即可

第二页的记录数

SELECT*FROMempLIMIT((2-1)*2),2

(2-1)*2一般会在程序中直接算出结果,放入该位置即可

4总结

5预习任务

6作业

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

当前位置:首页 > 初中教育

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

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