单表查询
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 JOIN 或 JOIN 或“,”(英文逗号)将两个表进行交叉连接;
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下面两篇博客是单表查询和多表查询的练习:
单表查询:
多表查询: