当前位置: 首页 > news >正文

聊城做网站信息今日热搜榜排名

聊城做网站信息,今日热搜榜排名,网站建设中关村,thinkphp搭建的微网站实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下: DROP database IF EXISTS scott; CREATE database IF NOT EXIST…
实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下:
DROP database IF EXISTS `scott`;
CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE `scott`;DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (`deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',`dname` varchar(14) DEFAULT NULL COMMENT '部门名称',`loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (`empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',`ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',`job` varchar(9) DEFAULT NULL COMMENT '雇员职位',`mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',`hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',`sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',`comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',`deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (`grade` int(11) DEFAULT NULL COMMENT '等级',`losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',`hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
);insert into dept (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into dept (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into dept (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

可以看到有三张表部门表dept,员工表emp,工资等级表salgrade。

多表查询

在MySQL中,多表查询是指在一个查询中涉及到两个或更多的表。这种查询通常用于从多个相关的数据表中检索数据。多表查询的关键在于使用连接条件来关联不同表中的数据。

内连接

内连接(Inner Join)是一种SQL操作,用于从两个或多个表中检索相关数据。内连接通过在连接条件满足的情况下返回两个表中匹配的行。内连接仅返回那些在连接条件下有匹配的行,其他不匹配的行将被排除。

select 列名1,列名2 from 表名1 inner join 表名2 on 条件;

以上为内连接的标准写法,还有以下写法和内连接得到的效果一致,更简单。

select 列名1,列名2... from 表名1,表名2... where 条件;
显示雇员名、雇员工资以及所在部门的名字
  因为上面的数据来自 EMP DEPT 表,因此要联合查询
写法一
select emp.ename,emp.sal,dept.dname from emp inner join dept on emp.deptno=dept.deptno;

写法二

select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno;

左外连接

select 列名1,列名2... from 表名1 left join 表名2 on 条件;

左外连接(Left Join)是一种SQL操作,用于从两个或多个表中检索相关数据。左外连接返回左表中的所有记录,以及右表中与左表匹配的记录,如果右表中没有匹配项,左表的记录仍然会被返回,但右表的字段会显示为 NULL。

现在创建两张表学生表stu和成绩表exam,并插入数据,其代码如下:

create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);
查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
select * from stu left join exam on stu.id=exam.id;

右外连接

右外连接(Right Join)是一种SQL操作,用于从两个或多个表中检索相关数据。右外连接返回右表中的所有记录,以及左表中与右表匹配的记录。如果左表中没有匹配项,左表的字段会显示为 NULL。

select 列名1,列名2... from 表名1 right join 表名2 on 条件;
stu 表和 exam 表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要
显示出来
select * from stu right join exam on stu.id=exam.id;

自连接

自连接是一种特殊的多表查询,可以理解为自己与自己之间进行多表查询。

select 列名1,列名2... from 表名 as 别名1, 表名 as 别名2;
显示上级领导的编号和姓名(mgr 是员工领导的编号 --empno
select distinct leader.empno,leader.ename from emp leader,emp worker where worker.mgr=leader.empno;

子查询

子查询(Sub Query)是指在一个查询语句中嵌套另一个查询语句,其中内层查询的结果作为外层查询的条件或数据来源。子查询也被称为嵌套查询或内层查询,而包含子查询的查询语句被称为外层查询或父查询。

单行子查询

select ... from ... where 列名 = (select ... from ...);
显示 SMITH 同一部门的员工
select * from dept=(select deptno from emp where ename='smith');

多行子查询

select ... from ... where 列名 in (select ... from ...);
select ... from ... where 列名 比较操作符 all(select ... from ...);
select ... from ... where 列名 比较操作符 any(select ... from ...);

在单行子查询中,子查询的结果是单行数据,所以能进行=。如果是多行查询,那么此时就不能进行判等,而是使用inallany这三个关键字,来进行范围判断。

in:判断是否是多行数据中的一个

in关键字:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10
己的
select ename,job,sal,deptno from emp where job in (select job from emp where deptno=10) and deptno!=10;

all:判断是否所有数据都满足条件
all关键字:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,job,sal,deptno from emp where sal > all (select sal from emp where deptno=30);

any:判断是否有数据满足条件
any关键字:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门
的员工)
select ename,job,sal,deptno from emp where sal > any (select sal from emp where deptno=30);

多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。
select ... from ...
where (列1, 列2...) 逻辑运算符 (select 列1, 列2... from ...);

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

select ename from emp where (deptno,job)=(select deptno,job from emp where ename='smith') and ename!='smith';

from子句中使用子查询

子查询语句出现在 from 子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。
select ... from (select ... from ...) as 别名 where ...;
1.显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
select ename,deptno,sal,format(asal,2) from emp,(select deptno de,avg(sal) asal from emp group by deptno) tmp where sal>asal and deptno=de;

2.查找每个部门工资最高的人的姓名、工资、部门、最高工资
select ename,sal,emp.deptno from emp,(select deptno,max(sal) msal from emp group by deptno) tmp where sal=msal and emp.deptno=tmp.deptno;

3.显示每个部门的信息(部门名,编号,地址)和人员数量

合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 unionunion all。

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

select ... from ... union select ... from ...;
将工资大于 2500 或职位是 MANAGER 的人找出来
select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job='manager';

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
select ... from ... union all select ... from ...;

将工资大于2500或职位是MANAGER的人找出来

select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job='manager';

http://www.wangmingla.cn/news/164954.html

相关文章:

  • 网站安全维护包括什么网络推广公司是干嘛的
  • 做网站建设怎么样西安网站建设平台
  • 如何做自己的博客网站北京seo营销公司
  • 东营专业网站建设公司排行如何制作网站二维码
  • 网站测试用例实例网站网络优化外包
  • 哈尔滨政府网站建设厦门百度广告
  • 广西建设教育学会网站快速排名优化推广排名
  • 做网站服装app广东全网推广
  • 瓯北网站制作网页宣传
  • 网站建设 小知识新闻式软文范例
  • 济源做网站怎么收费石家庄疫情太严重了
  • 杭州公司建设网站制作培训学校加盟
  • 搭建三合一网站推广资源seo
  • 网站建设中网站需求分析报告功能下载优化大师
  • 网站建设电脑端手机端nba交易最新消息汇总
  • 开发公司法人和项目负责人质量安全责任制度泉州百度关键词优化
  • html网站地图app开发公司有哪些
  • 营销网站的推广郑州厉害的seo顾问
  • 播视频网站开发搜索引擎营销策略有哪些
  • wordpress所有文章页面北京网站优化怎么样
  • 中山公司做网站怎么学做电商然后自己创业
  • 织梦网站分页问题app下载注册推广平台
  • 域名查询 站长查询关键词竞价排名
  • 宁波网站推广平台咨询公司高质量外链购买
  • 网站被挂黑链怎么办怎样做好销售和客户交流
  • 山东杰瑞数字做网站网络营销推广方案怎么写
  • 建设银行网站首页下载超级优化空间
  • 五百丁简历模板免费网站如何做关键词优化
  • 视频网站可以做B2C模式吗关于软文营销的案例
  • 谷歌平台推广外贸常州百度seo排名