单表查询

1、MySQL的基本语句查询

select 属性列表 from 表名和视图列表
[where 条件表达式 1]
[group by 属性名 1[having 条件表达式 2]]
[order by 属性名 2[ASC(升序)|DESC(降序)]]	//不写默认为升序

“ * ”代表查询所有字段
在满足where条件下查询字段 1和字段 2:
select 字段名 1,字段名 2 from 表名 [where 条件];

1.1 使用IN关键字

[NOT] IN(元素 1,元素 2,......,元素n)

IN关键字可以判断某个字段的值是否在指定的集合中。

1.2 使用BETWEEN关键字

[NOT] BETWEEN value 1 AND value 2;

BETWEEN关键字可以判断某个字段的值在value 1和value 2之间,取值范围包括value 1和value 2。

1.3 使用LIKE关键字

[NOT] LIKE '字符串'

LIKE 关键字可以匹配字符串是否相等。“%”:匹配任意长度的字符串; “-”:只能匹配单个字符。

1.4 使用NULL关键字

IS [NOT] NULL

IS NULL 关键字可以用来判断字段的值是否为空值。

1.5 使用LIMIT关键字

select 属性列表 from 表名 LIMIT [初始位置],记录个数

LIMIT关键字可以指定显示多少个记录,例如:查询第n行到第m行的记录,初始位置为n-1,记录个数为m-n+1。

2、聚合函数

2.1 求和SUM

select *,SUM(字段 n) from 表名

2.2 最大值MAX/最小值MIN

select *,MAX(字段 n),MIN(字段 n) from 表名

2.3 平均值AVG

select *,AVG(字段 n) from 表名

2.4 计数COUNT(*)

select *,COUNT(字段 n) from 表名

使用DISTINCT关键字可对重复数据进行过滤;
使用AS为表起别名,AS可以省略,直接写在表或者字段后面。

3、多表查询

3.1 交叉连接(CROSS JOIN)

select * from 表1 CROSS JOIN 表2 [where 条件]

1)交叉连接会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;
2)可用 CROSS JOINJOIN 或“,”(英文逗号)将两个表进行交叉连接;
3)在使用连接查询时,字段选取、连接条件和过滤条件可使用“表名.列名”的方式选择过滤 哪一个表的列。特别是对于两个表中具有相同列名的列,必须通过表名来指定。
3.2 内连接(INNER JOIN)

select * from  表1  INNER JOIN 表2 ON 连接条件 [where 条件]

3.3 外连接(LEFT/RIGHT JOIN)

select * from   表1  LEFT [OUTER] JOIN 表2  ON 连接条件 [where 条件]

LEFT JOIN 为左连接,RIGHT JOIN 为右连接;

总结一:HAVING 与 WHERE 区别
相同点:
HAVING 和 WHERE 语句都是对查询结果进行筛选,其后都可跟条件判断。
不同点:
(1) HAVING 只能用于 GROUP BY 后,WHERE 不可用于 GROUP BY 后。
(2) HAVING 后可使用聚合函数,WHERE 不可以
(3) 作用时机不同,WHERE 对表数据进行筛选,HAVING 对分组后的数据进行筛选。
总结二:查询语句执行顺序
WHERE -> GROUP BY-> 聚合-> HAVING -> ORDER BY -> LIMIT

下面两篇博客是单表查询和多表查询的练习:
单表查询:
多表查询: