MySQL数据库技术(16)

晶心志家

晶心志家

2016-02-19 20:33

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐MySQL数据库技术(16),无聊中的都看过来。

    3.6 检索记录

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

    除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。这就是SELECT 语句的用途,即帮助取出数据。SELECT 大概是SQL 语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较。SELECT 语句的语法如下:

    除了词“ S E L E C T”和说明希望检索什么的column_list 部分外,语法中的每样东西都是可选的。有的数据库还需要FROM 子句。MySQL 有所不同,它允许对表达式求值而不引用任何表:

    3.6.1 平凡连接

    最简单的连接是平凡连接( trivial join),这种连接中只指定一个表。在此情况下,行从指定的表中选择。如:

    有的作者根本就不考虑这种SELECT 连接的形式,仅对从两个或多个表中检索记录的SELECT 语句使用“连接”这个术语。本人认为那只是看法不同而已。

    3.6.2 全连接

    如果指定多个表,将各个表名用逗号分隔,就指定了全连接。例如,如果连接两个表,来自第一个表中的每行与第二个表中每行进行组合:

    全连接也称为叉连接,因为每个表的每行都与其他表中的每行交叉以产生所有可能的组合。这也就是所谓的笛卡儿积。这样连接表潜在地产生数量非常大的行,因为可能得到的行数为每个表中行数之积。三个分别含有1 0 0、2 0 0、3 0 0行的表的全连接将产生1 0 0×2 0 0×3 0 0= 6百万行。即使各表很小,所得到的行数也会很大。在这样的情形下,通常要使用W H E R E
子句来将结果集减少为易于管理的大小。

    如果在WHERE 子句中增加一个条件使各表在某些列上进行匹配,此连接就是所谓的等同连接(e q u i - j o i n),因为只选择那些在指定列中具有相等的值的行。如:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

    J O I N、CROSS JOIN 和INNER JOIN 连接类型都与“,”连接操作符意义相同。STRAIGHT_JOIN 与全连接类似,但各表按FROM 子句中指定的次序进行连接。一般情况下,在全连接中MySQL 优化程序自身完全不考虑安排各表的顺序,以便使记录的检索更快。在有的场合,优化程序将作出非优化的选择,这样将忽略STRAIGHT_JOIN 关键字。在SELECT 语句中,可在两个位置给出S T R A I G H T _ J O I N。一个位置是在SELECT 关键字与选择列表之间,将其放在这里对语句中所有全连接具有整体作用。另一个在FROM 子句中。下面两条语句是等价的:

    限定列引用

    SELECT 语句中列的引用必须对FROM 子句中指定的每个表是无歧义的。如果FROM 子句中仅指定了一个表,则无歧义存在,因为所有列必须是该表的列。如果指定了多个表,只出现在一个表中的列名也是无歧义的。但是,如果某个列名出现在多个表中,该列的引用必须用表名来限定,用tbl_name.col_name 语法来表明所指的是哪个表。如果表my_tbl1 含有列a 和b,表my_tbl2 含有列b 和c,则列a 和c 的引用是无歧义的,但b 的引用必须限定为my_tbl1.b 或m y _ t b l 2 . b,如:

    有时,表名限定符还不能解决列的引用问题。例如,如果在一个查询中多次使用一个表,用表名限定列名没有什么用处。在此情况下,为表达您的想法可使用别名。给表指派一个别名,利用这个别名来引用列,其语法为: alias _ name.col _ name。下面的查询将表与自身进行连接,给表指派了一个别名,以便应付引用列时有歧义的情况:

    3.6.3 左连接

    等价连接只给出两个表匹配的行。左连接也给出匹配行,但它还显示左边表中有的但在右边表中无匹配的行。对于这样的行,从右边表中选择的列都显示为N U L L。这样,每一行都从左边表中选出。如果右边表中有一个匹配行,则该行被选中。如果不匹配,行仍然被选中,但它是一个“假”行,其中所有列被设置为N U L L。换句话说,LEFT JOIN 强制结果集包含对应左边表中每一行的行,而不管左边表中的行在右边表中是否有匹配的行。匹配是根据ON 或USING( ) 子句中给出的列进行的。不管所连接的列是否具有相同的名称,都可使用ON。如:

展开更多 50%)
分享

猜你喜欢

MySQL数据库技术(16)

编程语言 网络编程
MySQL数据库技术(16)

Access数据库技术(16)

电脑网络
Access数据库技术(16)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL数据库技术(13)

编程语言 网络编程
MySQL数据库技术(13)

MySQL数据库技术(33)

编程语言 网络编程
MySQL数据库技术(33)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库技术(24)

编程语言 网络编程
MySQL数据库技术(24)

MySQL数据库技术(12)

编程语言 网络编程
MySQL数据库技术(12)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MySQL数据库技术(36)

MySQL数据库技术(36)

HTML教程-各窗口间相互操作(Frame Target)

HTML教程-各窗口间相互操作(Frame Target)
下拉加载更多内容 ↓