mysql-7 数据检索(5)

联结(join)

SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结就是利用SQL的SELECT能执行的最重要的操作。

例子:此例子包含两个表,一个表是vendors , vendors表包含所有供应商信息,每个供应商占一行,每个供应商具有唯一的标识,此标识称为主键,可以是供应商ID或任何其他唯一值。

products表只存储产品信息,它除了存储供应商ID(vendors表的主键)外不存储其他供应商信息,vendors表的主键又叫做products的外键,它将vendors表与products表关联,利用供应商ID能从vnedors表中找出相应供应商详细信息。

SELECT * FROM products;

SELECT * FROM vendors;

SELECT * FROM orderitems;

两个表联结

SELECT vend_name , prod_name , prod_price FROM vendors , products WHERE vendors.`vend_id` = products.`vend_id` ORDER BY vend_name,prod_name;

SELECT vend_name , prod_name , prod_price FROM vendors INNER JOIN products ON vendors.`vend_id` = products.`vend_id`;

多个表联结

SELECT prod_name , vend_name ,prod_price , quantity FROM orderitems , products , vendors WHERE products.`vend_id` = vendors.`vend_id` AND orderitems.`prod_id` = products.`prod_id` AND order_num = 20005;

使用表别名

SELECT CONCAT(RTRIM(vend_name),‘(‘,RTRIM(vend_country),‘)‘) AS vend_title FROM vendors ORDER BY vend_name;

创建高级联结,使用表别名

SELECT cust_name , cust_contact FROM customers AS c , orders AS o ,orderitems AS oi WHERE c.`cust_id` = o.`cust_id` AND oi.`order_num` = o.`order_num` AND prod_id = ‘TNT2‘;

自联结

SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = ‘DTNTR‘);   自查询SELECT p1.prod_id,p1.prod_name FROM products AS p1, products AS p2 WHERE p1.`vend_id`=p2.`vend_id` AND p2.`prod_id`= ‘DTNTR‘;  自联结

自然联结

SELECT c.* , o.order_num ,o.order_date, oi.prod_id, oi.quantity, OI.item_price FROM customers AS c ,orders AS o, orderitems AS oi WHERE c.`cust_id` =o.`cust_id` AND oi.`order_num` = o.`order_num` AND prod_id = ‘FB‘;

外部联结

SELECT customers.`cust_id`,orders.`order_num` FROM customers LEFT OUTER JOIN orders ON customers.`cust_id` = orders.`cust_id`;

  

SELECT vend_name , prod_name , prod_price FROM vendors , products WHERE vendors.`vend_id` = products.`vend_id` ORDER BY vend_name,prod_name;
SELECT vend_name , prod_name , prod_price FROM vendors INNER JOIN products ON vendors.`vend_id` = products.`vend_id`;
SELECT prod_name , vend_name ,prod_price , quantity FROM orderitems , products , vendors WHERE products.`vend_id` = vendors.`vend_id` AND orderitems.`prod_id` = products.`prod_id` AND order_num = 20005;
SELECT CONCAT(RTRIM(vend_name),‘(‘,RTRIM(vend_country),‘)‘) AS vend_title FROM vendors ORDER BY vend_name;
SELECT cust_name , cust_contact FROM customers AS c , orders AS o ,orderitems AS oi WHERE c.`cust_id` = o.`cust_id` AND oi.`order_num` = o.`order_num` AND prod_id = ‘TNT2‘;
SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = ‘DTNTR‘);
SELECT p1.prod_id,p1.prod_name FROM products AS p1, products AS p2 WHERE p1.`vend_id`=p2.`vend_id` AND p2.`prod_id`= ‘DTNTR‘;
SELECT c.* , o.order_num ,o.order_date, oi.prod_id, oi.quantity, OI.item_price FROM customers AS c ,orders AS o, orderitems AS oi WHERE c.`cust_id` =o.`cust_id` AND oi.`order_num` = o.`order_num` AND prod_id = ‘FB‘;
SELECT customers.`cust_id`,orders.`order_num` FROM customers LEFT OUTER JOIN orders ON customers.`cust_id` = orders.`cust_id`;
时间: 2024-12-21 04:02:53

mysql-7 数据检索(5)的相关文章

MySQL数据检索+查询+全文本搜索

[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL数据检索+查询+全文本搜索" 的基础知识: [1]使用子查询 1)查询定义:任何sql 语句都是查询.但此术语一般指 select语句:SQL 还允许创建子查询,即嵌套在其他查询中的查询: 2)利用子查询进行过滤(where子句,in子句) 2.1)可以把一条select语句返回的结果用于另一条select语句的where子句: 3)作为计算字段使用子查询 3.1)

MySql必知必会实战练习(二)数据检索

在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT--->from--->where--->GROUP BY--->HAVING--->ORDER BY--->LIMIT (1)DISTINCT select verd_id from products; 使用DISTINCT检索出不同值的列表 select DISTINCT ve

mysql必知必会笔记

一.了解sql 数据库是一个以某种有组织的方式存储的数据集合. 数据库基础 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table) 某种特定类型数据的结构化清单. 模式(schema) 关于数据库和表的布局及特性的信息. 列(column) 表中的一个字段.所有表都是由一个或多个列组成的. 数据类型(datatype) 所容许的数据的类型.每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据. 行(row) 表中的一个记录. 主键(primar

mysql基础之创建数据库和表

假设你已拥有创建和修改服务器上数据库所必需的权限,那么我们来看一下如何创建数据库以及数据库中的表.在本章的示例中,我们将为一个虚拟的书店建立一个数据库: CREATE DATABASE bookstore; 通过这条简单的SQL语句,我们已经创建了名为bookstore的数据库.另外,MySQL语句以及子句中的保留字对大小写不敏感.数据库与表名对大小写是否敏感取决于你所用的操作系统,比如在Linux系统上对大小写是敏感的,而Window系统对大小写不敏感.按照通常的习惯,在SQL说明文档中保留字

mysql索引总结

今天抽空整理了下mysql的几种索引类型,以备加深印象: 在MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引,Hash 索引,Fulltext 索引和RTree索引 1.B-Tree 索引 B-Tree 索引是MySQL 数据库中使用最为频繁的索引类型,除了Archive 存储引擎之外的其他所有的存储引擎都支持B-Tree 索引.不仅仅在MySQL 中是如此,实际上在其他的很多数据库管理系统中B-Tree 索引也同样是作为最主要的索引类型,这主要是因为B-Tree 索引的存储结构

mysql & vs2013

一 mysql 版本介绍 在mysql的官网http://dev.mysql.com/上,mysql 大致分为两个版本,即免费的社区版(community)和 付费的商业版(commercial).其中商业版又可以细分,详细看官网介绍http://www.mysql.com/products/ community版下载地址:http://dev.mysql.com/downloads/mysql/ 目前出到5.7.5.7和5.6如果下载都是整套的下载,里面包括了以下两个工具及mysql util

数据库为什么要用B+树结构--MySQL索引结构的实现

B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘上 2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关.) 3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k) 4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续).

mysql的char数据类型和varchar数据类型的选择

mysql的char数据类型和varchar数据类型的选择 存储引擎对于选择char和varchar的影响: 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列.这样可以使整个表静态化,从而使数据检索更快,用空间换时间 对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用char不一定比使用 varchar更好,但由于varchar是按照实际的长度存储,比较节省空间,所以对磁盘I/O和数据存储总量比较好 mysql并

MySQL常见面试题

1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键: 是最小超键,即没有冗余元素的超键. 外 键: 在一个表中存在的另一个表的主键称此表的外键. 2.数据库事务的四个特性及含义 数据库事务transanction

MYSQL, char 与 varchar的区别!

一.char 和 varchar 的区别: 1)取值范围: char:取值范围:0~255 varchar:取值范围:0~65535 2)空间占用与速度: char: 定长字符串,占用空间大,速度快,一般用于固定长度的表单提交数据存储,例如:身份账号.电话号码.密码等 varchar:变长字符串,占用空间小,速度慢 3)存储与检索数据: char:存储的数据是否达到了给定值得字节,都要占用给定值大小的空间,不足的自动用空格填充,在检索时后面的空格会被自动去裁剪掉. 如:定义  tel char(