数据查询
查询数据库表的内容(所有行和列)
代码语言:javascript复制SELECT * FROM <表名>;
- 示例
计算
代码语言:javascript复制SELECT <数学多项式>;
- 示例
条件查询
代码语言:javascript复制SELECT * FROM <表名> WHERE <条件表达式>;
- 示例
- 注意:对于条件表达式,可以用逻辑运算符(
AND
、OR
、NOT
)将多个条件同时进行匹配;
- 对于三个及以上的条件,可以用小括号
()
进行条件运算;
- 常用条件表达式
条件 | 表达式举例1 | 表达式举例2 | 说明 |
---|---|---|---|
使用=判断相等 | score = 90 | name = ‘cunyu’ | 字符串需要用单引号括起来 |
使用>判断大于 | score > 90 | name > ‘cunyu’ | 字符串比较根据ASCII码,中文字符比较根据数据库设置 |
使用>=判断大于或相等 | score >= 90 | name >= ‘cunyu’ | |
使用<判断小于 | score < 90 | name <= ‘cunyu’ | |
使用<=判断小于或相等 | score <= 90 | name <= ‘cunyu’ | |
使用<>判断不相等 | score <> 90 | name <> ‘cunyu’ | |
使用LIKE判断相似 | name LIKE ‘ab%’ | name LIKE ‘�%’ | %表示任意字符,例如’ab%’将匹配’ab’,’abc’,’abcd’ |
投影查询
- 基本的投影查询
SELECT 列1,列2,列3 FROM ...;
- 对列名重命名的投影查询
SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ...;
- 注意: 别名是存在于内存中的,而
WHERE
仅适用于硬盘,但是HAVING
既可以针对硬盘,也可以针对内存条件进行查询;
分页查询
- 经排序后获取结果中第
M
条开始后N
条记录;
-- MySQL中两句等效
SELECT <列名> FROM <表名> ORDER BY <列名> LIMIT <M> OFFSET <N>;
SELECT <列名> FROM <表名> ORDER BY <列名> LIMIT <N> , <M>;
聚合查询
- 常用聚合函数
函数 | 说明 |
---|---|
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
COUNT | 统计某一列的个数 |
多表查询(笛卡尔查询)
代码语言:javascript复制SELECT * FROM <表1> <表2>
- 注意:多表查询时,使用
表名.列名
的方式,以防止结果集列名重复问题;
连接查询
- 定义:另一种类型的多表查询,它对多个表进行
JOIN
运算,即先确定一个主表作为结果集,然后将其他表的行有选择地“连接”到主表结果集中; - 内连接,以下是查询的写法:
SELECT ... FROM <表1> INNER JOIN <表2> ON <条件...>;
- 先确定主表,继续使用
FROM <表1>
的语法; - 再确定需要连接的表,使用
INNER JOIN <表2>
的语法; - 然后确定连接条件,使用ON <条件……>,这里的条件是s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需要连接;
- 可选:加上
WHERE
子句、ORDER BY
等子句;
- 外连接
- RIGHT OUTER JOIN:返回右表均存在的行;
- LEFT OUTER JOIN:返回左表均存在的行;
- FULL OUTER JOIN:将两张表中所有记录均选出来,且自动将对方不存在的列填充为
NULL
;
排序
- 正序(默认规则下为正序,以下两条语句功能相同)
SELECT <列名> FROM <表名> ORDER BY <列名> ASC;
SELECT <列名> FROM <表名> ORDER BY <列名>;
- 逆序
SELECT <列名> FROM <表名> ORDER BY <列名> DESC;
数据修改
INSERT
代码语言:javascript复制INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
UPDATE
代码语言:javascript复制UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
- 注意:不带
WHERE
的UPDATE
将会更新整个表的数据;
DELETE
代码语言:javascript复制DELETE FROM <表名> WHERE ...;
- 注意:不带
WHERE
的DELETE
将会删除整个表的数据;