--多表连接查询,在多张表中查询符合条件的记录
--注意:给表起简短的别名
select * from emp e
--给字段起别名:字段名 别名,当别名为数字(包括数字开头)或者有空格时需要用双引号括起来
select sysdate "2017" from dual

--内连接也称为等值连接
--语法:表1 inner join 表2 on 条件,同时inner可以省略
--查询工资大于2000元的员工的姓名,工资和部门名称,按照工资降序排列
--分析:工资和姓名在emp表,部门名称在部门表,涉及到两张表
select e.ename,e.sal,d.dname
from emp e,dept d where e.sal>2000 and e.deptno = d.deptno order by e.sal desc

select e.ename,e.sal,d.dname
from emp e inner join dept d on e.deptno = d.deptno where e.sal>2000 order by e.sal desc

--查询每个学生每门课的成绩,显示学生姓名,课程名,成绩
select st.stuname,sc.scores,co.cname
from student st,score sc,couse co where st.stuid = sc.stuid and sc.cid = co.cid

--右连接,查询已右表为基础,右表中的记录全部显示,左表只显示符合条件的记录,不符合条件的以null填充
--语法:表1 right join 表2 on 条件
--语法2:表1,表2 where 表1.字段(+)= 表2.字段
--查询每个部门的员工姓名,工资,部门名
select e.ename,e.sal,d.dname
from emp e right join dept d on e.deptno = d.deptno
--查询工资大于2000元的员工的姓名,工资和部门名称,按照工资降序排列(右连接)
select e.ename,e.sal,d.dname
from emp e right join dept d on e.deptno = d.deptno where e.sal>2000 order by e.sal desc

select e.ename,e.sal,d.dname
from emp e,dept d where e.deptno (+)= d.deptno and e.sal>2000 order by e.sal desc

--左连接,以左表为基础,左表的记录全显示,右表只显示符合条件的记录,不符合的以null填充
--语法:表1 left join 表2 on 条件
--语法:from 表1,表2 where 表1.字段 = 表2.字段(+)
--查询工资大于2000元的员工的姓名,工资和部门名称,按照工资降序排列(右连接)
select e.ename,e.sal,d.dname
from dept d left join emp e on d.deptno = e.deptno where e.sal>2000 order by e.sal desc

--注意:所谓的左右连接,一般都是主键表为基准的,主键表在左边就是左外连接,主键表在右边就是右外连接

--全连接
--语法:表1 full join 表2 on 条件
select * from emp e full join dept d on e.deptno = d.deptno
--自然连接:两张表中必须有相同,即列名相同,列的数据类型相同,oracle自动根据相同的列来查询,不需要条件
select * from emp e natural join dept d

--子查询
--在select update delete语句中又包含了select,即内部的查询结果作为外部的查询条件来使用。
--查询出我们的销售部SALES下面的员工的姓名,工资
--分析:select deptno from dept where dname = ''SALES --查询出销售部的部门编号
select ename,sal from emp where deptno=(select deptno from dept where dname = 'SALES')
--单行子查询:子查询的结果为一个值,需要用到运算符 = ,!= ,<>,< ,>,>=,<=
--查询出平均工资高于部门编号为30的最高工资的部门信息
--分析:求出部门号为30的员工的最高工资
select e.deptno,avg(e.sal) from emp e
group by e.deptno
having avg(e.sal)>(select max(sal) from emp where deptno=30)

--查询出工资比本部门平均工资高的员工的姓名,工资,部门号
select e1.ename,e1.sal,e1.deptno from emp e1
where e1.sal>(select avg(e2.sal) from emp e2 where e1.deptno = e2.deptno)

--自连接:给一张表起两个别名,相当于在两张表中查询数据
--查询所有员工的姓名即上级的姓名
select e1.ename 员工姓名,e2.ename 经理姓名
from emp e1,emp e2 where e1.mgb = e2.empno

--多行子查询:子查询的结果为多个值,需要用的运算符in all any
--any 与子查询结果中的任意一个相比,只要符合条件,就被查询出来
--查询工资低于任意一个销售SALES员的工资的员工信息
select ename,sal,job from emp
where sal<any(select sal from emp where job='SALESMAN')

select ename,sal,job from emp where sal<any(1600,1500,1250)

--in子查询,只要在in后面的数值列表里就会被查出来
select * from emp where empno in(7699,7566,7902)
--查询部门号大于10的员工的姓名,工作,部门号
select ename,job,deptno from emp where deptno in(select distinct deptno from emp where deptno>10)
--批量删除的时候,把员工编号是7902 7566 7998 9999 8888
delete from emp where deptno in(7902,7566,7998,9999,8888)
delete from emp where deptno not in(7902,7566,7998,9999,8888)

--在子查询中如果聚合函数作为一列必须起别名

sql语句回忆录1-多表连接子查询的更多相关文章

  1. 常用sql语句总结(一)(查询)

    常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...

  2. 查看oracle的sql语句历史记录和锁表的情况

    查看oracle的sql语句历史记录和锁表的情况 (2012-01-04 20:59:59) 转载▼ 标签: 杂谈 分类: database 查询sql的历史记录 select * from v$sq ...

  3. 使用SQL语句清空数据库所有表的数据

    使用SQL语句清空数据库所有表的数据 近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进 ...

  4. 使用sql语句复制一张表

    如何使用sql语句复制一张表? 方法一:第一步:先建一张新表,新表的结构与老表相等. create table newbiao like chengjibiao(老表名); 第二步:将老表中的值复制到 ...

  5. sql 语句 获取某张表某列字段最短的某几行数据

    sql 语句 获取某张表某列字段最短的某几行数据 SELECT C_name,C_code FROM Catalog where LEN(C_code)=LEN((SELECT top 1 C_cod ...

  6. 使用Sql语句快速将数据表转换成实体类

    开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...

  7. 使用sql语句备份一张表

    如何使用sql语句复制一张表? 方法一:第一步:先建一张新表,新表的结构与老表相等. create table newtable like oldtable; 第二步:将老表中的值复制到新标中. in ...

  8. SQL Server参数化SQL语句中的like和in查询的语法(C#)

    sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...

  9. 如何用sql语句复制一张表

    如何用sql语句复制一张表 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...

  10. powerdesigner 外键生成sql语句设置在创建表里面

    根据情况需要将创建外键表的sql语句生成在创建表的sql语句中,如下设置:

随机推荐

  1. Frameset框架集的应用

    Frameset框架集常用于写网站后台页面,大多数"T字型"布局后台页面,就是应用Frameset框架集来做的.Franeset框架集的优点是,他可以在同浏览器窗口显示不同页面内容 ...

  2. js实现存储对象的数据结构hashTable和list

    以下代码是typescript语言来写的,其实和es6面向对象的写法基本一致.大家阅读后都明白这些方法的作用. hash hash结构用于处理和表现类似key/value的键值对,其中key通常可用来 ...

  3. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  4. 细说Handler

    今天来说说Android一个重要类吧:Handler (我写的博客风格不适合新手,因为我讨厌新手教学,我都是直奔主题,不交代前因后果) 大家都知道Handler的用法一般是线程间的通讯,当然,一个线程 ...

  5. wampserver2.5局域网IP访问配置

    wampserver2.5集成环境的安装和使用就不多说了,网上有很多教材.安装好后找到apache的配置文件httpd.conf.默认位置是: swap安装目录\wamp\bin\apache\apa ...

  6. HTTP消息中Header头部信息整理

    1.HTTP请求方式 GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEAD 检查一个对象是否存在 ...

  7. RxSwift 系列(五) -- Filtering and Conditional Operators

    前言 本篇文章将要学习RxSwift中过滤和条件操作符,在RxSwift中包括了: filter distinctUntilChanged elementAt single take takeLast ...

  8. 途虎养车Tuhu商城系统开发

    途虎养车Tuhu商城系统开发,咨询:何经理152-2217-7508(微信同号)途虎养车商城小程序开发,途虎养车商城小程序平台开发,途虎养车商城小程序系统开发. 为什么能做得这么好,里面的门道确实不少 ...

  9. JavaScript垃圾收集-标记清除和引用计数

    JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存. 垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地执行这一操作:找出那些 ...

  10. thinkphp 5 前台格式化输出日期

    thinkphp格式化输出 {$time|strtotime|date="Y年m月d日",###}   $time 是日期字符串,一般后台的时间是"Y-m-d h:i:s ...