- 1 --SQL查询
- 2 --1,笛卡尔积
- 3 --多张表相乘,需要显示所有的数据
- 4
- 5 ----内连接:笛卡尔积 数据都是有关联的
- 6 select * from左表 , 右表where左表.主键=右表.外键;
- 7 select * from左表inner join右表on左表.主键=右表.外键
- 8
- 9 ----左连接:笛卡尔积 左边表中的数据都要显示
- 10 select * from左表left join右表on左表.主键=右表.外键;
- 11 select * from左表,右表where左表.主键=右表.外键(+);
- 12
- 13 ----右连接:笛卡尔积 右边表中的数据都要显示
- 14 select * from左表right join右表on左表.主键=右表.外键;
- 15 select * from左表,右表where左表.主键(+)=右表.外键;
- 16
- 17
- 18 --2,
- 19 --DDL 数据定义语言--对象操作 create,drop,alter
- 20 --DML 数据操作语言--数据操作 select,insert,update,delete
- 21 --DCL 数据控制语言--对象权限 grant..to... revoke...from ...
- 22
- 23
- 24 --3,语法---
- 25 --3.1、排序 order by 升序 asc (默认) 降序desc
- 26 ----先按部门号升序来排序,再按照工资的降序来排序
- 27 select * fromemporder bydeptnoasc,saldesc ;
- 28
- 29 ----distinct 去掉重复数据
- 30 select distinct(deptno)from emp;
- 31 ----group by 分组 一般情况和聚合函数一起用
- 32 ------统计每个部门发了多少工资
- 33 selectdept.dname,nvl(sum(emp.sal),0)fromdeptleft joinempondept.deptno=emp.deptnogroup by dept.dname;
- 34 selectdept.dname,count(emp.ename)fromdeptleft joinempondept.deptno=emp.deptnogroup by dept.dname;
- 35
- 36 ------请找出 每个月工资超过10000元的部门
- 37 selectdept.dname,nvl(sum(emp.sal),0)fromdeptleft joinempondept.deptno=emp.deptnogroup bydept.dnamehavingnvl(sum(emp.sal),0)>10000;
- 38 ----聚合函数作为条件的时候不能放在where 后面,只能用 having 代替 where ,放到having 后面
- 39
- 40 --3.2、模糊查询 下划线 任意一个字符 %任意多个字符
- 41--like 'a__'
- 42--like '%a%'
- 43--like '_a_'
- 44 ----查询名字中有A的人
- 45 select * fromempwhereenamelike '%A%';
- 46 ----查询名字以A开头的人
- 47 select * fromempwhereenamelike 'A%'
- 48 ----查询名字中第二个字符是A的所有员工
- 49 select * fromempwhereenamelike '_A%'
- 50 ----查询编号是7900的员工
- 51 select * fromempwhereempno=7900;
- 52 select * fromempwhereempnolike 7900;
- 53 ----子查询 in () 在什么区间里面
- 54 select * fromempwheredeptnoin(selectdeptnofromdeptwheredname='RESEARCH' ordname='SALES' );
- 55
- 56 --4,
- 57 ----4.1、exists() 小括号中如果有数据结果就执行 exists 前面的内容返回数据和结构 ,否则值返回表结构
- 58 select * fromempwhere exists(select * fromempwhereempno=7900)
- 59
- 60 ----4.2、not exists ()小括号中如果有数据结果就返回表结构,没有数据就返回表结构和数据
- 61 select * fromempwhere not exists(select * fromempwhereempno=0);
- 62
- 63 ----4.3、union ---合并数据
- 64 --将部门的编号和名称 与 员工编号和名称显示到一起去
- 65 selectDEPTNOasno, DNAMEasnamefrom dept
- 66 union
- 67 selectEMPNOasno , ENAMEasnamefrom emp;
- 68
- 69 --5,复制新的表和数据
- 70 create tablenew_empas selectename,salfrom emp;
- 71 ----只是复制新的表,加一个无数据的条件就可以了
- 72 create tablenew_empas selectename,salfromempwhereempno=0;
- 73
- 74 ----复制数据
- 75 insert intoA (a,b)selecta,bfrom B;
- 76 insert intonew_empselectename,salfromemp;
来源: http://www.bubuko.com/infodetail-1968172.html