创建联结:(使用WHERE联结)SELECTvend_name,prod_name,prod_priceFROMvendors,productsWHEREvendors.vend_id=products.vend_idORDERBYvend_name,prod_name;(保证所有联结都有WHERE子句,不然查询到的结果是两个表的笛卡

联结:

一种机制,用来在一条SELECT语句中关联表,因此称之为联结。它在数据库中不存在。联结由MySQL根据需要建立,它存在于查询的执行过程中。

创建联结:(使用WHERE联结)

SELECT vend_name, prod_name, prod_price

FROM vendors, products

WHERE vendors.vend_id = products.vend_id

ORDER BY vend_name, prod_name;

(保证所有联结都有WHERE子句,不然查询到的结果是两个表的笛卡尔积(第一个表的行乘以第二个表的行))

(使用INNER JOIN ... ON ...联结)

SELECT vend_name, prod_name, prod_price

FROM vendors INNER JOIN products

ON vendors.vend_id = products.vend_id

ORDER BY vend_name, prod_name;

MySQL可以联结多个表,但是联结处理有可能非常耗费资源,因此不要联结不必要的表,联结的表越多,性能下降越厉害。

使用表的别名:别名除了可以用于列名和计算字段外还可以用于给表起别名。例如:

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 = 0.order_num

AND prod_id = 'TNT2';

表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户机。

自联结:在一张表内部使用联结,自联结比子查询要快。例如完成如下功能:查询商品ID为DTNTR的供应商生产的其他商品。

子查询方式:

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';

这里的自联结使用了表的别名,看起来有点赘余,实际上这里的别名是必须要用的,倒不全是因为看起来清晰,更重要的是不让所写的SQL语句产生二义性,所有的计算机技术中最忌讳的东西就是二义性。如果这里使用了表的名字而没有使用别名的话SQL在解释的时候就无法确定到底哪个products语句对应的是哪个products实例化对象。

自然联结:无论什么时候进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有的数据,甚至相同的列多次出现。自然联结排除多次出现,每个列只返回一次。

外联结:外部联结并不要求联结的两个表的每一条记录在对方表中都有一条匹配的记录(甚至这条记录没有匹配的记录也要保留)

如下SQL语句查询所有客户及其订单:

SELECT customers.cust_id, orders.order_num

FROM customers INNER JOIN orders

ON customers.cust_id = orders.cust_id

(返回的结果中没有NULL的值)

如下SQL语句查询所有的客户及其订单(包含NULL的列):

SELECT customers.cust_id, orders.order_num

FROM customers LEFT OUTER JOIN orders

ON customer.cust_id = orders.cust_id

(返回的结果中包含NULL的值)

外联结的语法和内联结的语法很像,只是将INNER JOIN换成了[LEFT,RIGHT]OUTER JOIN。LEFT代表从左边的表中选择所有行,RIGHT表示从右边的表中选择所有行,在MySQL中外联结必须在OUTER JOIN之前使用LIFT或者RIGHT。(注意:MySQL不支持全外联结[左外来凝结和右外联结的并集],但是可以通过左右外联结的病机来模拟实现。)左外联结和右外联结可以通过颠倒FROM和WHERE子句中表的顺序相互转换,两种类型的外部联结究竟使用哪一种纯粹是根据方便而定。

带聚集函数的联结:聚集函数是用来汇总数据的,也可以和联结一起使用。比如现在要查询所有客户及每个客户所下的订单数,使用联结和COUNT()函数就可以完成此项任务。

SELECT customers.cust_id, custormers.cust_name, COUNT(orders.order_num) AS order_count

FROM custormer INNER JOIN orders

ON custormer.cust_id = orders.cust_id

GROUP BY custormer.cust_id;

上述SQL语句中的customers.cust_id中的customers不能省略,如果省略则会产生二义性。

SELECT customer.cust_name, customers.cust_id, COUNT(orders.order_num) AS order_count

FROM customers LEFT OUTER JOIN orders

ON customers.cust_id = orders.cust_id

GROUP BY customers.cust_id;

使用联结和联结条件1、注意所使用的联结类型。一般我们使用内部联结,但使用外部联结也是有效的。

2、保证使用正确的联结条件,否则将返回不正确的数据。

3、应该总是提供联结条件,否则会得出笛卡尔积。

4、在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做合法,一般也很有用,但应该在一起测试他们前,分别测试每个联结。这将使故障排除更为简单。

组合查询:MySQL允许执行多个查询,并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询。使用组合查询的两个基本情况是:

1、在单个查询中从不同的表返回类似结构的数据。

2、对单个表执行多个查询,按单个查询返回数据。

任何具有多个WHERE子句的单条查询完成的工作与具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出。

组合查询的重复行:组合查询的默认行为是自动从结果集中去除重复行,如果想要返回所有的行则可以使用UNION ALL。对组合查询的结果排序:在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后,对于结果集,不存在用一种方式排序一部分,而又使用另一种方式排序另一部分。因此不允许使用多条ORDER BY子句。

全文本搜索:MySQL支持集中几本的数据库引擎。并非所有的引擎都支持全文本搜索。两个最为常见的引擎为MyISAM和InnoDB,前者支持全文本搜索,而后者不支持。

为了使用全文本搜索必须索引被搜索的列,而且要随着数据的改变不断地对表进行适当的设计后,MySQL会自动进行所有的索引和重新索引。在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

进行全文本搜索:在索引之后,使用两个函数Match()和Against()执行全文本搜索,其中Match()制定被搜索的列,Against()制定要使用的搜索表达式。例如:

SELECT note_text

FROM productnotes

WHERE Match(note_text) Against('rabbit');

传递给Match的值必须与FULLTEXT中的值相同,如果有多个值则必须按照正确次序列出来。

全文本搜索的重要部分就是对结果进行排序。具有较高等级的行先返回(因为这些行很可能是你真正想要的行)。因为数据时索引的,所以全文搜索是相当快的。

布尔全文搜索:MySQL支持全文搜索的另外一种形式,称为布尔方式。以布尔方式,可以提供如下内容的细节:

1、要匹配的词

2、要排斥的词

3、排列提示

4、表达式分组

5、另外一些内容。

布尔方式不同于迄今为止使用的全文搜索语法的地方在于,即使没有定义FULLTEXT索引,也可以使用它,但这是一种非常缓慢的操作(其性能将随着数据量的增加而降低)。

全文本布尔操作符:MySQL学习笔记----子查询、联结表、组合查询、全文本搜索_MySQL

在布尔方式中,不按等级值降序排序返回的行。全文本搜索的使用说明:1、在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词(如果需要,这个数字可以更改)。

2、MySQL带有一个内建的非用词列表,这些词在索引全文数据时总是被忽略。如果需要,可以覆盖这个表。

3、许多词出现的频率很高,搜索它们没有用处(返回太多结果)。因此,MySQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。50%规则不用与IN BOOLEAN MODE。

4、如果表中的行数少于3行,则全文本搜索则不返回结果(因为每个词或者出现或者不出现,或者至少出现在50%的行中)。

5、忽略词中的单引号。

6、不具有词分隔符的语言不能恰当地返回全文本搜索结果。

7、如前所述,仅在MyISAM数据库引擎中支持全文搜索。

mysql中表联结_MySQL -- 表联结相关推荐

  1. mysql中表联结_Mysql表联结

    主键和外键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系 例: ...

  2. mysql中的联结_MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内 ...

  3. mysql 回收空间_MySQL表的碎片整理和空间回收小结

    MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...

  4. mysql join 自联结_MySQL JOIN | 联结

    联结是利用SQL的SELECT能执行的最重要的操作.为了提高存储的有效性和避免数据冗余,往往会将有关联的数据存储在好几张表中,那么怎样用一条SELECT语句就能检索出这些数据呢? 答案是JOIN(联结 ...

  5. mysql 唯一编号_Mysql表中唯一编号的分配机制

    最近遇到一个问题:高并发环境下,如何避免MYSQL一张表里的某些列不要重复. 方式一:使用Mysql自带的列唯一索引(Unique) 可以在声明表的时候就加入这样一个约束(下面是mysql的语法): ...

  6. mysql 修复模式_Mysql表修复

    mysqlcheck mysqlcheck客户端可以检查和修复MyISAM表.它还可以优化和分析表.mysqlcheck的功能类似myisamchk,但其工作不同. 主要差别是当mysqld服务器在运 ...

  7. mysql内部损坏_mysql表损坏故障案例

    开发人员反映猎豹有个功能报500错误,让我查一下服务器上有没有做过什么调整,额,不会吧,今天元旦啊,谁会闲的蛋疼去调试服务器啊,最后他们查到了和一个表有关的sql都执行不了, 那肯定是这个表损坏了,查 ...

  8. mysql一对一级联_MySQL 表的一对一、一对多、多对多问题

    将实体与实体的关系,反应到最终数据库表的设计上,将关系分为三种:一对一,一对多(多对一)和多对多,所有的关系都是表与表之间的关系; 一对一 一对一:一张表的一条记录只能与另外一条记录进行对应,反之亦然 ...

  9. mysql连接代码_MySQL 表连接

    MySQL数据库表有4种连接方式: 左连接(左外连接) 右连接(右外连接) 等值连接(内连接) 全连接(全外连接) 以下,小编将依次简要介绍,希望能对初学的小伙伴们有所裨益. 首先先介绍下将要使用的两 ...

最新文章

  1. python自定义库文件路径
  2. Java SE、Java EE、Java ME基本区别
  3. HDU 1695 BZOJ 2301 莫比乌斯反演
  4. tcp/udp高并发和高吐吞性能测试工具
  5. Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
  6. 如何获取客户端的真实IP
  7. NodeJS Web模块
  8. WEB网页专业词汇 汇总
  9. scala ip转换器
  10. python编程一球从100米_Python求解一个球从100米高度自由落下的问题
  11. 真实项目,用微信小程序开门编码实现(完结)
  12. 你,为什么需要加入一个Python社群呢?
  13. 3Q之战广东高院上演“熟人新案”
  14. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(1)
  15. 输出电阻与反馈网络的关系以及计算
  16. 计算机微机维修工四级理论知识试卷,计算机维修工中级理论知识试卷2
  17. AutoCAD中ObjectARX C++常用的方法
  18. 卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具Motrix!
  19. 第7-6课:遗传算法的两个应用实例
  20. 太阳系哪些星球上有水,含水量最大的星球是哪一颗?

热门文章

  1. IBM中高端阵列增加STEC MLC固态硬盘支持
  2. Mac常用快捷键一览
  3. 苹果4s怎么显示无服务器,苹果4s连接电脑没有反应怎么办 苹果4s怎么连接电脑...
  4. chrome浏览器字体小于12px的解决方式
  5. 抖音营销的6种方法5个套路
  6. SRV记录生成的完整教程
  7. 【设计模式】常见的23种设计模式
  8. An end-to-end heterogeneous graph representation learning-based framework for drug–target interactio
  9. html 组件化 编辑器,SpreadJS V14.0发布:组件化编辑器+数据透视表
  10. 用java编写连连看_用java语言编写连连看游戏