SQL2-子查询、join查询
SQL常用高级查询包括:Join查询、子查询。
子查询:
- USE flowershopdb
- --子查询:在一个select语句使用另一个select 语句作为条件或数据来源.
- --查询块:一个select子句.
- --嵌套查询:在一个查询块中嵌套另一个查询块.内层查询叫子查询,外层查询叫主查询.
- --1 不相关子查询:子查询不依赖于主查询,子查询可以独立执行.
- --作为条件
- SELECT * FROM tb_detailed
- WHERE c_id = (SELECT c_id FROM tb_category WHERE c_name='生日花')
- --作为列
- SELECT (SELECT c_name FROM tb_category WHERE c_id=1000),(SElECT d_remark FROM tb_detailed WHERE d_id=2000)
- --2 相关子查询:子查询依赖于主查询,子查询不可以独立执行.
- SELECT de.* FROM tb_detailed de
- WHERE de.c_id = (SElECT ca.c_id FROM tb_category ca WHERE ca.c_id=1001 AND ca.c_id=de.d_id )
- --关键字:IN ALL ANY
- --注:子查询必需有括起来().
- --IN 表示查询结果是否在子查询结果集中
- --All 表示查询结果要满足子查询的所有条件
- --Any 表示查询结果要满足子查询的的任一个条件
- -- IN 用于多个结果集
- SELECT * FROM tb_detailed
- WHERE d_id IN (SElECT d_id FROM tb_detailed WHERE d_remark='生日用花')
- -- ALL
- -- >all、<all、>=all、<all
- SELECT de.* FROM tb_detailed de
- WHERE de.d_id > ALL(SElECT pr.d_id FROM tb_product pr WHERE pr.p_price>3)
- --相当于
- SELECT de.* FROM tb_detailed de
- WHERE de.d_id > (SElECT MAX(pr.d_id) FROM tb_product pr WHERE pr.p_price>3)
- -- ANY
- -- >any、<any、<=any、>=any
- SELECT de.* FROM tb_detailed de
- WHERE de.d_id > ANY(SElECT pr.d_id FROM tb_product pr WHERE pr.p_price>3)
- --相当于
- SELECT de.* FROM tb_detailed de
- WHERE de.d_id > ANY(SElECT MIN(pr.d_id) FROM tb_product pr WHERE pr.p_price>3)
- --关键字:
- --EXISTS 用于检查子查询是否至少会返回一行数据,该子查询实际上不返回任何数据,而是返回true或false【指定子查询,检测行的存在】
- SELECT * FROM tb_user WHERE EXISTS (SELECT NULL)
- --等同于
- SELECT * FROM tb_user
- SELECT de.* FROM tb_detailed de
- WHERE EXISTS(SElECT ca.c_id FROM tb_category ca WHERE ca.c_id=1001 AND ca.c_id=de.d_id )
- --等同于
- SELECT de.* FROM tb_detailed de
- WHERE de.c_id IN(SElECT ca.c_id FROM tb_category ca WHERE ca.c_id=1001 AND ca.c_id=de.d_id )
- --NOT EXISTS 如果子查询没有返回行,则满足Not Exists中的Where子句
- SELECT de.* FROM tb_detailed de
- WHERE NOT EXISTS(SElECT ca.c_id FROM tb_category ca WHERE ca.c_id=1001 AND ca.c_id=de.d_id )
Join查询:
- CREATE DATABASE selectdb
- USE selectdb
- SELECT * FROM A
- SELECT * FROM B
- --多表条件查询
- SELECT * FROM A,B WHERE A.A=B.A
- --Jion表连接
- --[join是和哪个表连接,on后是连接的关系是什么]
- --内连接 INNER JOIN
- -- 只连接匹配的行
- SELECT A.A,A.B,A.C,B.D,B.E FROM A INNER JOIN B
- ON A.A=B.A
- --左外连接 LEFT [OUTER] JOIN
- --包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
- SELECT A.A,A.B,A.C,B.D,B.E FROM A LEFT JOIN B
- ON A.A=B.A
- --右外连接 RIGHT [OUTER] JOIN
- --包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
- SELECT A.A,A.B,A.C,B.D,B.E FROM A RIGHT JOIN B
- ON A.A=B.A
- --全连接 FULL [OUTER] JOIN
- -- 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
- SELECT A.A,A.B,A.C,B.D,B.E FROM A FULL JOIN B
- ON A.A=B.A
- --交叉连接 CROSS JOIN
- -- 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
- --A中的每一条数据与B中的每一条数据交叉 3*3
- SELECT * FROM A CROSS JOIN B
- --自连接
- --自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。
- SELECT *
- FROM B b1
- JOIN B b2
- ON b1.A=b2.D
- SELECT * FROM B
更多查询链接:http://www.cnblogs.com/hoojo/archive/2011/07/16/2108129.html
SQL2-子查询、join查询的更多相关文章
- 基于双下划线的跨表查询 (join查询)
因为你的数据库中的查询就是重点 那么你的django提供的orm也是查询语句最重点 ,也提供的查询方法比较的多,下面我们学习下类似于MYSQL的连表(join)查询 Django 还提供了一种直观而 ...
- tp5 thinkphp5 多表关联查询 join查询
model下: $res = \think\Db::name('article') ->alias("a") //取一个别名 ->join('admin ad','a. ...
- Mysql 拼接字段查询语句和join查询拼接和时间查询
个人平时记录的,有点乱 1.修改时间字段,如果时间字段的类型是date或者是datetime类型的 update 表名 set 时间字段 = DATE_FORMAT(NOW(),'%Y-%m-%d % ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- sql 内连接 子查询 合并查询
-- 内连接:-- 显示员工姓名.工资和公司所在地 select e.ename, e.sal, d.dname from emp e,dept d; -- 笛卡尔积 select e.ename, ...
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...
- 【HIVE】(3)联合查询join、时间戳函数、字符串函数
数据 t_join1.txt 1,a,1 2,b,2 3,c,4 t_join2.txt 1,2a 2,2b 3,2c 建表.导入: create table t_join1(id int, name ...
- 子查询 & 联合查询
子查询 嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert.update.delete.select等,一般select作为外层语句较多.外面如果为select语句, ...
随机推荐
- python单/双下划线使用
在Python编程中经常会遇到函数(function),方法(method)及属性(attribute)以下划线'_'作为前缀,这里做个总结. 主要存在四种情形: 1. object # public ...
- javascript事件:获取事件对象getEvent函数
在javascript开发中我们会经常获取页面中的事件对象,然后来处理这些事件,例如下面的getEvent函数就是获取javascript下的页面事件对象. function getEvent(eve ...
- C# 懒人常用异步方法
Winform this.Invoke(new Action(() => { })); Wpf this.Dispatcher.Invoke(DispatcherPriority.Normal, ...
- & 和 && 区别
java中&和&&的区别,&和&&虽然都是逻辑运算符,都是判断两边为真,则语句成立,但是在运行的时候,还是有差别的,下面举例来说明. java中& ...
- lightoj 1038 Race to 1 Again
题意:给一个数,用这个数的因数除以这个数,直到为1时,求除的次数的期望. 设一个数的约数有M个,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(E[a[M]]+1)/M ...
- JVM学习之内存分配一
转自:http://blog.csdn.net/mazhimazh/article/details/16879055,多谢博主分享 我们知道计算机的基本构成是:运算器.控制器.存储器.输入和输出设备, ...
- Linux学习之route
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...
- 持续集成 之 apache-continuum
作者:许振坪,http://blog.csdn.net/benkaoya 1.前言 最近在研究持续集成,摸索了很多持续集成的工具,Apache Continuum也包括其中.既然飞过,那就留下点什么吧 ...
- javascript 学习笔记(权威指南)
1.数组的sort()方法默认是按照字母排序的,下面举个栗子说明: 1)全是字母: var arr =["zu","fan","an",&q ...
- Cmd批处理语法实例
@echo on :循环获取指定目录下以php为后缀的文件,且重命名后缀为html :for /r "E:\aaa\web" %%v in (*.php) do ren " ...