- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库复杂语句
1 课程名称: sql语句(二)
2 知识点概述
2.1、本次预备讲解的知识点
1、表之间的关联关系
2、多表的查询
3、分组统计
4、分页查询
3、具体内容
用Navicat 8 for Mysql 连接数据库基本操作如图:
1、建立连接
2、填写连接信息
3、双击以建立的连接名(connection_one)
4、双击要打开的数据库(db_temp)
5、单击右键,创建dept、emp表
6、填写dept、emp表结构详细信息
dept表
emp表
3.1、表之间的关联关系
数据库中的表一般存在三种关联关系
1、一对一
2、一对多、多对一
3、多对多
表之间的的关联关系,通过“外键”来体现,外键的作用就是建立表之间的关联关系,外键一般在多方表。一个表可以有多个“外键“
用Navicat 8 for Mysql 设计外键,操作如图:
1、右键--(选择设计表
2、选择创建栏位
3、添加如下选项
4、选择外键,按如下步骤填写外键信息
5、填写完外键信息选保存
此刻dept表、emp表就建立的一对多的关联关系。关联关系是为了保证数据库中数据的完整性
3.2、多表查询
如果查询使用一个以上的表就成为多表查询
在Navicat8中写SQL语句,则需使用查询窗体 如图所示:
右键单击查询
查询编辑选项中即可写SQL语句
3.2.1、多表查询基本语法
多表查询语法如下:
SELECT {DISTINCT} * | 表名.列名1 别名1.列明 ,表名.列名2,别名2.列明 ,…
FROM 表名称1 别名1,表名称2 别名2,…
{WHERE 条件{s}}
{ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC} 同时查询dept、emp表
SELECT * FROM dept,emp;
查询emp表的记录数
SELECT COUNT(*) FROM emp 查询dept表的记录数
SELECT COUNT(*) FROM dept dept表4条记录 emp表7条记录
在使用多表时会产生笛卡尔乘积,4 * 7 = 28 条记录,这些记录中许多是重复信息,所以在查询多表时要使用关联字段作为条件,去掉笛卡尔乘积
在dept表和emp表中关联的字段是: dept表的deptid字段与emp表的deptid,而且emp的deptid字段的值都来自dept的deptid,即dept.deptid = emp.empid
去掉笛卡尔乘积的查询为:
SELECT * FROM dept,emp WHERE dept.deptid = emp.deptid 使用多表查询,建议使用别名
查询员工编号,员工姓名,员工性别,员工年龄,员工地址,所属部门名称
|- 此查询包含了员工表中的信息,部门表中的信息,故使用多表查询
SELECT B.empid,B.empname,B.empsex,B.empage,B.empaddress,A.deptname
FROM dept A, emp B
WHERE A.deptid = B.deptid
3.2.2、左、右连接查询
在多表查询中还有一种查询方式,称为内连接查询,语法如下:
SELECT {DISTINCT} * | 表名.列名1 别名1.列明 ,表名.列名2,别名2.列明 ,…
FROM 表名称1 别名1 INNER JOIN表名称2 别名2,…
ON 关联条件
{WHERE 条件{s}}
{ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC}
查询部门表和员工表信息
SELECT * FROM dept INNER JOIN emp ON dept.deptid = emp.deptid 内连接查询其实就是去掉笛卡尔乘积的多表关联查询,注意:只查询关联字段,没有关联的不查询
左连接查询
SELECT *
FROM dept LEFT JOIN emp
ON dept.deptid = emp.deptid 以左边的表作为标准,无论关联与否左边表都查询
右连接查询
SELECT *
FROM dept RIGHT JOIN emp
ON dept.deptid = emp.deptid 以右边的表作为标准,无论关联与否右边表都查询
3.3、组函数及分组统计、
如需查询员工表中的性别为“男”或“女”的员工个数,则需要SQL语句中分组统计功能。
分组在SQL中用“GROUP BY”语法如下:
SELECT {DISTINCT} * | 列名1 别名1 ,列名2,别名2 ,…
FROM 表名称1 别名1
{WHERE 条件{s}}
GROUP BY 分组条件
{ORDER BY 排序字段 ASC|DESC,排序字段 ASC|D
文档评论(0)