SELECT 字段1, 字段2, …
FROM 表1名称 , 表2名称, …
WHERE 条件(S)/消除笛卡尔积连接
[ORDER BY 排序字段 [ASC|DESC] [, 排序字段 [ASC|DESC], …]];
注意:
在 WHERE 子句中写入连接条件;
当多个表中有重名列时,必须在列的名字前加上表名作为前缀或者表的别名(使用别名更简单,性能更高);
等值连接是连接操作中最常见的一种,通常是在存在主外键约束条件的多表上建立的,连接条件中的两个字段通过等号建立等值关系。
3.2、显式内连接查询:
语法:
SELECT 字段1, 字段2, …
FROM 表1名称 JOIN 表2名称
ON 表1名称.条件 =表2名称.条件
WHERE 条件
多个表时:
SELECT 字段1, 字段2, …
FROM 表1名称
JOIN 表2名称
ON 表1名称.条件 =表2名称.条件
JOIN
ON 表3名称.条件=.......
WHERE 条件
隐式与显式两者区别:
显示内连接查询:查询的结果和隐式内连接一模一样。区别在于:
显示内连接可以看到 JOIN;
消除笛卡尔积条件使用写在 ON 子句。
四、外连接查询:
4.1、左外连接查询 (left)
语法:
SELECT 字段1, 字段2, …
FROM 表1名称 LEFT JOIN 表2名称
ON 表1名称.条件 =表2名称.条件
WHERE 条件
SELECT 字段1, 字段2, …
FROM 表名称1 , [表名称2 , …]
WHERE 条件(s)
GROUP BY 分组字段1 [, 分组字段2 ,…]-------------------------->GROUP BY 必须写在where之后
ORDER BY 排序字段 ASC | DESC [, 排序字段 ASC | DESC];
对分组查询完之后的数据结果不满意,还想过滤一次。
注意:若一个SOL 语句同时出现 WHERE 、GROUP BY 、 HAVING ,where 是分组之前过滤,是分组后过滤HAVING
注意:
(1)、不能在 WHERE 子句中对分组限定,限制组须使用 HAVING 子句;
(2)、不能在 WHERE 子句中使用统计函数,而在 HAVING 子句可使用统计函数。
例子:查询年龄大于20的学生及平均年龄。
select sex ,avg(sin) s from student GROUP BY sex HAVING a>18 ---and ......
多个条件时
七、子查询:
7.1、定义和作用
子查询指的就是在一个查询之中嵌套了其他的若干查询。
在使用 SELECT 语句查询数据时,有时候会遇到这样的情况,在 WHERE 查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果
7.2、语法:
SELECT 字段1
FROM 表1
WHERE 条件表达式 (SELECt 字段2 FROM 表2)
注意:
(1).子查询一般出现在 FROM 和 WHERE子句中;(2).子查询要使用圆括号括起来;(3).将子查询放在比较运算符的右边(增强可读性);(4).子查询在主查询前执行一次,主查询使用子查询的结果;但不宜嵌套过多。
一般用于 WHERE 之后的子查询,子查询结果是一行一列记录。
使用单行记录比较运算符:=、>、>=、<、<=、<>。
7.5、多行单列
一般也用于 WHERE 子句中,子查询结果只有一列,但是有多行。使用多行比较运算符:
IN :与列表中的任意一个值相等
ANY :与子查询返回的任意一个值比较
=ANY :此时和 IN 操作符相同
>ANY :大于子查询中最小的数据
<ANY :小于子查询中最大的数据
ALL :与子查询返回的每一个值比较
>ALL :大于子查询中最大的数据
<ALL :小于子查询中最小的数据