深入学习Mysql(五)连接查询
1、准备数据库:
CREATE DATABASE IF NOT EXISTS `db_book2` DEFAULT CHARACTER SET UTF8;

USE `db_book2`;

DROP TABLE IF EXISTS `t_book`;

CREATE TABLE `t_book` (
`id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`bookName` VARCHAR(20) DEFAULT NULL,
`price` DECIMAL(6,2) DEFAULT NULL,
`author` VARCHAR(20) DEFAULT NULL,
`bookTypeId` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=UTF8; INSERT INTO `t_book` VALUES (NULL,'Java编程思想','100.00','埃史尔',1),(NULL,'Struts2权威指南','80.00','李刚',1),(NULL,'三剑客','70.00','大仲马',2),(NULL,'生理学(第二版)','24.00','刘先国',3); DROP TABLE IF EXISTS `t_booktype`; CREATE TABLE `t_booktype` (
`id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`bookTypeName` VARCHAR(20) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=UTF8; INSERT INTO `t_booktype`(`id`,`bookTypeName`) VALUES (1,'计算机类'),(2,'文学类'),(3,'教育类');
 
 
2、连接查询:连接查询是将2个或者2个以上的表按照某个条件连接起来,从中选取需要的数据。
2.1、内连接:内连接可以查询2个或者2个以上的表;
例:查询t_book表中的编号,作者,书名和t_bookType表的类别名称:

SELECT t1.id,t1.author,t1.bookName,t2.bookTypeName FROM t_book t1,t_booktype t2 WHERE t1.bookTypeId=t2.id;
+----+-----------+----------------------+--------------+
| id | author | bookName | bookTypeName |
+----+-----------+----------------------+--------------+
| 1 | 埃史尔 | Java编程思想 | 计算机类 |
| 2 | 李刚 | Struts2权威指南 | 计算机类 |
| 3 | 大仲马 | 三剑客 | 文学类 |
| 4 | 刘先国 | 生理学(第二版) | 教育类 |
+----+-----------+----------------------+--------------+
4 rows in set (0.02 sec)
2.2.外链接查询:
外链接可以查询出某一张表中的所有信息;
SELECT 属性名列表FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表名1.属性名1=表名2.属性名2;
2.2.1:左连接查询:可以查询出表名1的所有记录,而表名2中只能查出匹配的记录:
例:以左外连接查询t_book 中的所有信息:
SELECT * FROM t_book t1 LEFT JOIN t_bookType t2 ON t1.bookTypeId = t2.id;

SELECT * FROM t_book t1 LEFT JOIN t_bookType t2 ON t1.bookTypeId = t2.id;
+----+----------------------+--------+--------------+------------+------+--------------+
| id | bookName | price | author | bookTypeId | id | bookTypeName |
+----+----------------------+--------+--------------+------------+------+--------------+
| 1 | Java编程思想 | 100.00 | 埃史尔 | 1 | 1 | 计算机类 |
| 2 | Struts2权威指南 | 80.00 | 李刚 | 1 | 1 | 计算机类 |
| 3 | 三剑客 | 70.00 | 大仲马 | 2 | 2 | 文学类 |
| 4 | 生理学(第二版) | 24.00 | 刘先国 | 3 | 3 | 教育类 |
| 5 | 大主宰 | 20.00 | 天蚕土豆 | 4 | NULL | NULL |
+----+----------------------+--------+--------------+------------+------+--------------+
5 rows in set (0.00 sec)
 
2.2.2右连接查询:
SELECT * FROM t_book t1 LEFT JOIN t_bookType t2 ON t1.bookTypeId = t2.id;
+------+----------------------+--------+-----------+------------+----+--------------+
| id | bookName | price | author | bookTypeId | id | bookTypeName |
+------+----------------------+--------+-----------+------------+----+--------------+
| 1 | Java编程思想 | 100.00 | 埃史尔 | 1 | 1 | 计算机类 |
| 2 | Struts2权威指南 | 80.00 | 李刚 | 1 | 1 | 计算机类 |
| 3 | 三剑客 | 70.00 | 大仲马 | 2 | 2 | 文学类 |
| 4 | 生理学(第二版) | 24.00 | 刘先国 | 3 | 3 | 教育类 |
+------+----------------------+--------+-----------+------------+----+--------------+
4 rows in set (0.00 sec)
2.2.3:多条件查询:
例: 查询t_book表中编号,作者,书名和t_bookType表的的类别名称,价格在20-30之间的记录
 
mysql> SELECT t1.id,t1.author,t1.bookName,t1.price,t2.bookTypeName FROM t_book t1,t_booktype t2 WHERE t1.bookTypeId=t2.id AND price BETWEEN 20 AND 30;
+----+-----------+----------------------+-------+--------------+
| id | author | bookName | price | bookTypeName |
+----+-----------+----------------------+-------+--------------+
| 4 | 刘先国 | 生理学(第二版) | 24.00 | 教育类 |
+----+-----------+----------------------+-------+--------------+
1 row in set (0.00 sec)
2.2.4:自连接查询
例:以自连接方式查询t_book表中作者不是天蚕土豆的所有记录:
SELECT t1.* FROM t_book t1,t_book t2 WHERE t1.id=t2.id AND t2.author<>'天蚕土豆';
mysql> SELECT t1.* FROM t_book t1,t_book t2 WHERE t1.id=t2.id AND t2.author<>'天蚕土豆';
+----+----------------------+--------+-----------+------------+
| id | bookName | price | author | bookTypeId |
+----+----------------------+--------+-----------+------------+
| 1 | Java编程思想 | 100.00 | 埃史尔 | 1 |
| 2 | Struts2权威指南 | 80.00 | 李刚 | 1 |
| 3 | 三剑客 | 70.00 | 大仲马 | 2 |
| 4 | 生理学(第二版) | 24.00 | 刘先国 | 3 |
+----+----------------------+--------+-----------+------------+
4 rows in set (0.00 sec)
 
 
 
 
 
 
 

深入学习之mysql(五)连接查询的更多相关文章

  1. MySql的连接查询

    类似于oracle的连接查询,mysql连接查询也有左外连接.右外连接.内连接查询.但是,不同的是没有直接 的全外连接查询. 这里介绍MySql的连接查询: 这里已两张表为例:STUDENT 表 和 ...

  2. MySQL查询优化:连接查询排序limit

    MySQL查询优化:连接查询排序limit(join.order by.limit语句) 2013-02-27      个评论       收藏    我要投稿   MySQL查询优化:连接查询排序 ...

  3. 【杂记】mysql 左右连接查询中的NULL的数据筛选问题,查询NULL设置默认值,DATE_FORMAT函数

    MySQL左右连接查询中的NULL的数据筛选问题 xpression 为 Null,则 IsNull 将返回 True:否则 IsNull 将返回 False. 如果 expression 由多个变量 ...

  4. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  5. mysql学习之路_连接查询

    回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...

  6. Mysql表连接查询

    原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等 ...

  7. MySQL常见连接查询

    在实际应用中,由于不同的业务需求,一般的select查询语句无法满足要求.所以就需要了解一些MySQL的高级查询方式 内连接 inner join 典型的连接查询,有相等(=)连接和不等(<&g ...

  8. 【mysql】连接查询

  9. MySQL之连接查询

    主要是多表查询和连接查询

  10. mysql之连接查询、联合查询、子查询

    本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...

随机推荐

  1. File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)

    File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录) 以前的两篇文章(收录在书本「上集」的第十七章) 请看「ASP.NET专题实务」,松岗出版 File 与 Log ...

  2. 如何在SAP云平台上使用MongoDB服务

    首先按照我这篇文章在SAP云平台上给您的账号分配MongboDB服务:如何在SAP云平台的Cloud Foundry环境下添加新的Service 然后从这个链接下载SAP提供的例子程序. 1. 使用命 ...

  3. NOIP2018提高组Day1 解题报告

    前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...

  4. Tarjan在图论中的应用(一)——用Tarjan来实现强连通分量缩点

    前言 \(Tarjan\)是一个著名的将强连通分量缩点的算法. 大致思路 它的大致思路就是在图上每个联通块中任意选一个点开始进行\(Tarjan\)操作(依据:强连通分量中的点可以两两到达,因此从任意 ...

  5. 关于profile集合

    profile集合是mongodb的慢操作日志 > db.getProfilingStatus() { , , } 可以通过getProfilingStatus来查看当前profile设置 pr ...

  6. BZOJ 1229: [USACO2008 Nov]toy 玩具

    BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...

  7. Vue 恢复初始值的快速方法

    vue 中经常定义很多data ,在用户进行一些操作后,需要讲data中的某个对象定义为初始值 例如 form: { title: '', describe: '', inspectionCatego ...

  8. 稍微深入点理解C++复制控制【转】

    通过一个实例稍微深入理解C++复制控制过程,参考资料<C++ primer>,介绍点基本知识: 1.在C++中类通过特殊的成员函数:复制构造函数.赋值操作符和析构函数来控制复制.赋值和撤销 ...

  9. 【luogu题解】P1546 最短网络 Agri-Net

    题目 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场.为了用最小的消费,他想铺设最短的光纤去连接所有的农场. 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并 ...

  10. P4746 C’s problem(c)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差,经常通宵研究数学问题. 这次它因为这个数 ...