MySQL子查询

子查询是指嵌套在其他SQL语句内的查询语句。

子查询指嵌套在查询内部,且必须始终出现在圆括号内。

子查询的结果作为外层另一个查询的过滤条件。

用any、all、some关键字修饰子查询

1、放在比较运算符的后面。

2、any和some是同义词,表示满足内层子循环中的任何一个条件。

3、all表示需要同时满足所有内层查询的条件。

in关键字:进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。

not in与in的作用相反

例:select * from table where exists(子查询);

① 判断子查询是否返回行;

② 如果返回,那么exists的结果为true;

③ 如果没有返回任何行,那么exists返回的结果为false。

插入记录时使用子查询

insert into select语句从一个表复制数据,然后把数据插入到一个已存在的表中。

多表连接查询

语法结构:       table_reference

                         [inner] join {left|right} [outer] join

                         Table_reference

                         on conditional_ecpr

内连接:根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的数据行,组合成新纪录。

语法结构:        select column_list

                          From t1

                          [inner] join t2 on join_condition1

                          [inner join t2 on join_condition2

                          …]

                          where where_conditions;

外连接:查询多个表中相关联的行。

左外连接:显示左表全部记录,右表满足连接条件的记录。

右外连接:显示右表全部记录,左表满足连接条件的记录。

语法结构:        select column_list

                          From t1

                          left|right [outer] join t2 on join_condition1;

自连接:如果在一个连接查询中,涉及的两个表都是同一个表。

自连接是一种特殊的连接查询,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。

例:     select t1.category_id as '图书类别编号',

             t1.category as '图书类别名称',

             t2.category as '图书上级分类名称'

             from bookcategory t1

             left join bookcategory t2 ON t.parent_id = t2.category_id;

多表更新

update tabl1 {[inner] join | {left | right} [outer] join} table2

on 连接条件

set 列名1 = {值1 | default}

[,列名2 = {值2 | default}]…

[where 筛选条件]

多表记录删除

delete 表1[.*],表2[.*]

from 表1 {内连接|外连接} 表2

on 连接条件

[where 筛选条件]

上一篇:python Non-UTF-8 code starting with '\xe7' 的中解决办法


下一篇:Non-selective query against large object type (more than 200000 rows)