文档章节

四、mysql 查询

图样图森破
 图样图森破
发布于 2017/04/26 23:35
字数 648
阅读 14
收藏 0

一、连接查询

    1.内连接(INNER JOIN)

        按照匹配风湿范围以下三种:

                自然连接:

SELECT * FROM table_a a, table_b b;
SELECT * FROM table_a a INNER JOIN table_b b;

                等值连接:

SELECT * FROM table_a a, table_b b WHERE a.id = b.id;
SELECT * FROM table_a a INNER JOIN table_b b ON a.id = b.id;

                不等连接:

SELECT * FROM table_a a, table_b b WHERE a.id <> b.id;
SELECT * FROM table_a a INNER JOIN table_b b WHERE a.id <> b.id;

    2.外连接(OUTER JOIN)

        按照保留不匹配条件数据记录来源可以分为以下三种:

                左外连接(LEFT OUTER JOIN):

SELECT * FROM table_a a  LEFT JOIN table_b b WHERE ON a.id = b.id;

                右外连接(RIGHT OUTER JOIN)

SELECT * FROM table_b b RIGHT JOIN table_a a WHERE ON a.id = b.id;

                全外连接(FULL OUTER JOIN)

SELECT * FROM table_b b FULL JOIN table_a a WHERE ON a.id = b.id;

二、合并查询

    1. UNION

            将查询的数据合并在一起,并去除重复数据

SELECT * FROM table_a a
UNION
SELECT * FROM table_b b;

    2. UNION ALL

            将查询数据合并在一起,不去除重复数据

SELECT * FROM table_a a
UNION ALL
SELECT * FROM table_b b;

 

三、子查询

    连接查询会若导致笛卡尔积过大,则需使用子查询来提升查询效率。

    1.单行单列的子查询

SELECT * FROM table_a a 
WHERE a.age > (
    SELECT b.age FROM table_b b
    WHERE b.name = 'sixgod');

    2.单行多列子查询

SELECT * FROM table_a a
WHERE (a.name, a.age) = (
    SELECT b.name, b.age FROM table_b b
    WHERE b.id = 1);

    3.多行单列子查询

-- 使用IN
SELECT * FROM table_a a
WHERE a.name IN (
    SELECT b.name FROM table_b b
    WHERE b.age = 1);

-- 使用ANY  
-- =ANY与IN相同 
-- >ANY 查询比子查询中返回数据中最小的值还要大的值
-- >=ANY 查询比子查询中返回数据中最大的值还要小的值
SELECT * FROM table_a a
WHERE a.name ANY(
    SELECT b.name FROM table_b b
    WHERE b.age = 1);

-- 使用ALL
-- >ALL 查询比子查询中返回数据中最大的还要大的数据
-- <ALL 查询比子查询中返回数据中最小的还要小的数据
SELECT * FROM table_a a
WHERE a.name > ALL(
    SELECT b.name FROM table_b b
    WHERE b.age = 1);

-- 使用EXISTS
-- EXISTS是一个布尔类型,当返回结果时为true,不返回结果时为false。查询时EXISTS对外表采用遍历的方式逐条查询,
-- 每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则为真,此时返回当前遍历到记录。
-- 反之EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。
SELECT * FROM table_a a
WHERE EXISTS(
    SELECT * FROM table_b b
    WHERE b.id = a.id);

    4.多行多列子查询

-- 将子查询当做一个临时表进行连接查询
SELECT * FROM table_a a
INNER JOIN (
    SELECT * FROM table_b b
    WHERE b.age = 1) c
ON a.name = c.name;

 

© 著作权归作者所有

图样图森破
粉丝 3
博文 28
码字总数 16472
作品 0
东城
程序员
私信 提问
MySQL中怎么查询二维表

MySQL中怎么查询二维表,就是如果查询出三列: 姓名 买到的产品 金额 张三 A 500 张三 B 300 李四 A 200 李四 B 100 直接在MySQL中用SQL语句将查出来的数据显示为: 姓名 A B 张三 500 300 李...

wangaowell
2014/03/21
1K
5
MySQL5.7 galera cluster 死锁

问题: 数据库更换成 mysql galera cluster(三台服务器) + keepalived lvs(两台服务器)后,tomcat 日志偶尔报出 mysql deadlock,详细日志如下: 以前环境: 四台 tomcat 服务器连接一台...

Colben
2018/07/31
782
0
MySQL慢查询 ------ 开启慢查询

一、简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。 二、参数说明 slowquerylog 慢查询开启状态 slowquerylog...

a928154159
2018/01/16
0
0
MySQL的binlog日志

binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务...

闪电
2016/07/23
41
0
MySQL事务autocommit自动提交

MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocom...

DYOS
2015/03/07
764
0

没有更多内容

加载失败,请刷新页面

加载更多

uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
20分钟前
4
0
Tomcat是如何实现异步Servlet的

前言 通过我之前的Tomcat系列文章,相信看我博客的同学对Tomcat应该有一个比较清晰的了解了,在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设...

木木匠
45分钟前
18
0
mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系...

IT干货栈
今天
10
0
OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
749
11
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部