内连接:
INNER JOIN 关键字连接表
ON 过滤条件
只显示匹配条件的记录
SELECT t1.s_id, s_name, f_name, f_price
FROM t1 INNER JOIN t2
ON t1.s_id = t2.s_id;
外连接:
LEFT JOIN:返回左表的所有记录,包括不匹配过滤条件的记录。右表只返回匹配条件的记录。如果左表的某行在右表中没有匹配行,结果中,右表的所有选择列表均为空值。
RIGHT JOIN:同上相反
复合查询:连接查询 ON后面添加过滤条件,可以限制查询的结果,使结果更准确
子查询:一个查询语句嵌套在另一个查询语句内部,子查询结果作为外层另一个查询的过滤条件。常用的操作符有:ANY(SOME) ALL IN EXISTS
创建两张表
CREATE TABLE t1 (num1 int(11) NOT NULL);
CREATE TABLE t2 (num2 int(11) NOT NULL);
INSERT INTO t1 VALUES (1),(23),(12),(233);
INSERT INTO t2 VALUES (6),(23),(11),(25);
- ANY(SOME)子查询:表示满足任何一个条件,允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询的任何一个条件,就返回一个结果作为外层查询的条件
SELECT num1 FROM t1 WHERE num1 > ANY(SELECT num2 FROM t2);
- ALL 子查询:必须满足所有内层查询的条件。
SELECT num1 FROM t1 WHERE num1 > ALL(SELECT num2 FROM t2);
- EXISTS查询:EXISTS后面的参数是任意一个子查询,如果子查询至少返回一行,结果为true,此时外层查询进行查询。相反,结果为false,外层语句不进行查询
SELECT num1 FROM t1 WHERE EXISTS (SELECT num2 FROM t2 WHERE num2 > 500);
另外EXISTS关键字可以和条件表达式一起使用
NOT EXISTS 跟 EXISTS 使用方法相同,返回结果相反
-IN 查询:内层查询返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作
SELECT num1 FROM t1 WHERE num1 IN
(SELECT num2 FROM t2);
另外子查询还可以使用其他的比较运算符,如 < 、>等
合并查询结果 UNION / UNION ALL:给出多条SELECT 语句,并将他们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。
UNION 删除重复的记录。
UNION ALL 不删除重复行。但是执行 UNION ALL所需的资源少,所以尽可能使用它,以提高运行效率。
SELECT num1, t_name FROM t1
UNION
SELECT num2, t_name FROM t2;
AS 可以对表或字段 改名
正则表达式 REGEXP:匹配文本内容,字母不区分大小写
SELECT *FROM t1 WHERE t_name REGEXP '^M';
匹配以字母M 数据
Union 跟 Union ALL 区别:Union 进行去重