数据库-连接语句和分组

一、左、右连接(重点)

多表联合查询时,可能导致数据的丢失,因此要用到左右连接做到数据连接。

(+)在连接条件的左边的时候,叫右连接;(+)在连接条件的右边的时候,叫左连接

哪边缺数据,哪边放(+)

1、SELECT * FROM emp e,dept d WHERE e.deptno(+)=d.deptno;   //dept表中一共有4个部门,emp表中有16行数据,分属三个部门,emp表就少了一个部门。所以(+)放在emp表

2、SELECT e.empno,e.ename,e.mgr,m.ename 上司 FROM emp e,emp m WHERE e.mgr = m.empno(+);    //员工表有16行数据,但king总裁是没有上司的,所以是上司表少数据。

3、员工表、经理表、以及他们所在的部门,这个题。员工和他的领导不一定属于同一个部门吧,比如king和他的下属;king属于10号部门,但他的下属10、20、30部门都有

SELECT e.empno,e.ename,d1.*,e.mgr,m.ename 上司,d2.* FROM emp e,emp m,dept d1,dept d2 WHERE e.mgr=m.empno(+) AND d1.deptno=e.deptno AND d2.deptno=m.deptno; //运行故障:ORA-01417表可以外部连接到至多一个其他的表,此程序需要使用层次查询解决,待后续讲解

二、SQL1999(了解)

1、交叉连接(cross join),产生笛卡尔积

SELECT * FROM emp CROSS JOIN dept;

2、自然连接(nature join)

关联条件为=的,可以使用此连接,非=使用此连接,会出现笛卡尔积

SELECT * FROM emp NATURAL JOIN dept;          //效果和下面代码一致

SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;

3、using子句

用于=关联的语句

SELECT * FROM emp JOIN dept USING(deptno);

4、on子句:用户自己编写关联条件

SELECT * FROM emp e JOIN dept d ON(e.deptno=d.deptno);

SELECT * FROM emp e JOIN salgrade s ON (e.sal BETWEEN s.losal AND s.hisal);

5、LEFT/RIGHT连接子句

LEFT/RIGHT,是哪边多就用谁

SELECT * FROM emp e RIGHT OUTER JOIN dept d ON(e.deptno=d.deptno);

SELECT * FROM emp e,dept d WHERE e.deptno(+)=d.deptno;

三、组函数

COUNT()、MAX()、MIN()、AVG()、SUM()

SELECT COUNT(empno),MAX(sal),MIN(sal),AVG(sal),SUM(sal) FROM emp;

四、分组统计

语法格式:SELECT * FROM 表名 WHERE 关联条件 GROUP BY 分组条件 HAVING 过滤条件;

SELECT dname,COUNT(empno) FROM emp e,dept d WHERE d.deptno=e.deptno(+) GROUP BY dname;

GROUP BY后面的分组条件,必须在SELECT后面出现;同理,SELECT后面的列名,必须在GROUP BY分组条件中出现。

1、GROUP BY和HAVING后面不可使用列别名,或者*;但可使用函数

2、所以GROUP BY后面的列名,必须和SELECT的列名保持一致

3WHERE后面不能有组函数作为过滤条件,要使用组函数需要使用HAVING语句(不可以使用别名)

SELECT e.deptno,dname,loc,COUNT(empno),to_char(hiredate,'yyyy') FROM emp e,dept d WHERE d.deptno=e.deptno(+)  GROUP BY e.deptno,dname,loc,to_char(hiredate,'yyyy') HAVING to_char(hiredate,'yyyy')>1981;

SELECT deptno,ROUND(AVG(sal)) FROM emp GROUP BY deptno HAVING ROUND(AVG(sal))>2000;         //如不使用HAVING语句,会报错

SELECT e.deptno,dname,loc,COUNT(empno) FROM emp e,dept d WHERE d.deptno=e.deptno(+)  GROUP BY e.deptno,dname,loc HAVING COUNT(empno)>5;  //部门人数大于5的部门信息

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,878评论 0 4
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,192评论 0 0
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,275评论 0 3
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 556评论 0 0
  • 人生,就像一杯浑浊的水,需要不断的沉淀,才会露出自己的价值
    12fbbe26e6c7阅读 103评论 0 0