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查询的更多相关文章

  1. 基于双下划线的跨表查询 (join查询)

    因为你的数据库中的查询就是重点  那么你的django提供的orm也是查询语句最重点 ,也提供的查询方法比较的多,下面我们学习下类似于MYSQL的连表(join)查询 Django 还提供了一种直观而 ...

  2. tp5 thinkphp5 多表关联查询 join查询

    model下: $res = \think\Db::name('article') ->alias("a") //取一个别名 ->join('admin ad','a. ...

  3. Mysql 拼接字段查询语句和join查询拼接和时间查询

    个人平时记录的,有点乱 1.修改时间字段,如果时间字段的类型是date或者是datetime类型的 update 表名 set 时间字段 = DATE_FORMAT(NOW(),'%Y-%m-%d % ...

  4. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  5. sql 内连接 子查询 合并查询

    -- 内连接:-- 显示员工姓名.工资和公司所在地 select e.ename, e.sal, d.dname from emp e,dept d; -- 笛卡尔积 select e.ename, ...

  6. MySQL的查询,子查询,联结查询,联合查询

    MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...

  7. 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

    -- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...

  8. 【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 ...

  9. 子查询 & 联合查询

    子查询 嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert.update.delete.select等,一般select作为外层语句较多.外面如果为select语句, ...

随机推荐

  1. javascript高级知识分析——定义函数

    代码信息来自于http://ejohn.org/apps/learn/. 可以使用哪些方式来声明函数? function isNimble(){ return true; } var canFly = ...

  2. ThinkPHP 的CURD

    1.ThinkPHP 3 读取数据 (重点) 对数据的读取 Read $m=new Model('User'); $m=M('User'); select $arr = $m->select() ...

  3. Windows使用过程中的一些常见问题的解决方案

    Win8安装程序出现2502.2503错误解决方法 参见百度经验帖子:http://jingyan.baidu.com/article/a501d80cec07daec630f5e18.html

  4. C++中将int转变成string和string转变成int

    int to string #include<iostream> #include<string> using namespace std; int main() { stri ...

  5. linux文件名乱码解决办法

    1.linux解压压缩文件乱码 unzip -O CP936 xxx.zip 2.一般文件用convmv sudo convmv -f gbk -t utf-8 -r --notest /your_d ...

  6. Linux彩色输出

    在linux下,可以使用一些宏,加上自定义格式输出,让输出更易于调试: 排版出来可能有些乱,注意do{ }while(0);是在一行里就可以了. #include <stdio.h> #i ...

  7. Android手势源码浅析-----手势绘制(GestureOverlayView)

    Android手势源码浅析-----手势绘制(GestureOverlayView)

  8. XOR双向链表

    这是一个数据结构.利用计算机的的位异或操作(⊕),来降低双向链表的存储需求. ... A B C D E ... –> next –> next –> next –> < ...

  9. C++ 栈的实现

    #ifndef _STACK_H #define _STACK_H #pragma once template< class T >class Stack{public: Stack( v ...

  10. ntpd和ntpdate的区别

    之前配置ntpd的时候搜到一句话,印象很深刻,也觉得很有标题党的效果,就借鉴为标题了:“我认为有几种人是必须不招聘/裁掉的: 1 用ntpdate代替ntpd的人”但具体原因不太懂,总觉得还是用ntp ...