单表与条件查询
7.5 SELECT 查询数据
7.5.1 查看表的结构
DESCRIBE 教师;
DESC 教师;
SHOW CREATE TABLE 教师;
7.5.2 关系代数基础
辅助运算符:
| 类型 |
运算符 |
| 算术运算符 |
+、-、*、/ |
| 比较运算符 |
>、>=、<、<=、=、<>(或!=) |
| 逻辑运算符 |
NOT、AND、OR |
| 包含运算符 |
IN、NOT IN |
7.6 单表查询
7.6.1 基本查询
查询表内全部信息
SELECT * FROM 学院;
查询某些特定的列
SELECT 学院名称, 学院电话 FROM 学院;
查询并去掉重复行
SELECT DISTINCT 职称 FROM 教师;
SELECT DISTINCT 学院编号, 职称 FROM 教师;
7.6.2 字符串处理函数
SELECT
LEFT('Hello', 2),
RIGHT('Hello', 3),
TRIM(' Hello '),
LTRIM(' Hello'),
RTRIM('Hello '),
LENGTH('Hello'),
CHAR_LENGTH('你好');
| 数据库 |
长度函数 |
'你好'的结果 |
| SQL Server |
LEN('你好') |
2 |
| MySQL |
LENGTH('你好') |
6(字节长度,UTF-8每汉字3字节) |
| MySQL |
CHAR_LENGTH('你好') |
2(字符长度) |
💡 处理中文时推荐使用 CHAR_LENGTH()
7.6.3 列重命名(AS)
SELECT
学院名称,
RIGHT(TRIM(学院电话), 8) AS 教务办电话
FROM 学院;
AS 的妙用:
- 建表时:用于计算列(生成列)
- 查询时:用于列重命名
7.7 条件查询 WHERE
7.7.1 常用条件关键字
| 关键字 |
说明 |
示例 |
| = |
等于 |
WHERE 性别 = '男' |
<>, != |
不等于 |
WHERE 状态 <> '已完成' |
AND |
与 |
WHERE 年龄 > 18 AND 性别 = '女' |
OR |
或 |
WHERE 城市 = '北京' OR 城市 = '上海' |
IN |
在...之中 |
WHERE 城市 IN ('北京', '上海') |
BETWEEN...AND |
在...之间(含两端) |
WHERE 成绩 BETWEEN 60 AND 100 |
LIKE |
模糊匹配 |
WHERE 姓名 LIKE '张%' |
IS NULL |
为空 |
WHERE 备注 IS NULL |
IS NOT NULL |
不为空 |
WHERE 电话 IS NOT NULL |
7.7.2 LIKE 通配符
| 通配符 |
含义 |
示例 |
% |
代表任意多个字符(包括0个) |
'张%' - 以"张"开头 |
_ |
代表单个字符 |
'_阳%' - 第二个字是"阳" |
SELECT * FROM 学生 WHERE 姓名 LIKE '_阳%';
LIKE 模式示例:
| 模式 |
含义 |
'张%' |
以"张"开头 |
'%明' |
以"明"结尾 |
'%大%' |
包含"大" |
'_阳%' |
第二个字是"阳" |
'___' |
正好三个字符 |
7.7.3 AND 条件
SELECT 课程名称, 学分数, 学时数
FROM 课程
WHERE 学分数 < 3 AND 课程性质 = '必修';
7.7.4 BETWEEN AND
SELECT 课程名称, 学时数
FROM 课程
WHERE 学时数 BETWEEN 40 AND 60;
SELECT 课程名称, 学时数
FROM 课程
WHERE 学时数 >= 40 AND 学时数 <= 60;
7.7.5 LIKE 与 LEFT 的互换
SELECT * FROM 教师 WHERE 籍贯 LIKE '四川%';
SELECT * FROM 教师 WHERE LEFT(籍贯, 2) = '四川';
SELECT * FROM 教师 WHERE 籍贯 LIKE '江西%' AND 性别 = '男';
SELECT * FROM 教师 WHERE LEFT(籍贯, 2) = '江西' AND 性别 = '男';
7.7.6 OR 与 IN 的互换
SELECT 编号, 姓名, 籍贯, 所属学院
FROM 教师
WHERE 姓名 = '刘星' OR 姓名 = '徐丹丹';
SELECT 编号, 姓名, 籍贯, 所属学院
FROM 教师
WHERE 姓名 IN ('刘星', '徐丹丹');
7.7.7 IS NULL 判断空值
SELECT * FROM 教师 WHERE 密码 IS NULL;
SELECT * FROM 教师 WHERE 密码 = NULL;
7.7.8 复杂条件组合
SELECT * FROM 学生
WHERE 性别 = '女' AND 籍贯 LIKE '山东%'
OR 籍贯 LIKE '江苏%'
OR 籍贯 LIKE '重庆%';
SELECT * FROM 学生
WHERE 性别 = '女'
AND (籍贯 LIKE '山东%' OR 籍贯 LIKE '江苏%' OR 籍贯 LIKE '重庆%');
SELECT * FROM 学生
WHERE 性别 = '女'
AND LEFT(籍贯, 2) IN ('山东', '江苏', '重庆');
7.8 生成表查询
7.8.1 MySQL 语法
CREATE TABLE `22软1学生信息表` AS
SELECT 学号, 姓名, 出生日期
FROM 学生
WHERE 专业班级 = '22软件本科1班';
SELECT * FROM `22软1学生信息表`;
| 数据库 |
语法 |
| SQL Server |
SELECT 列 INTO 新表 FROM 原表 WHERE 条件 |
| MySQL |
CREATE TABLE 新表 AS SELECT 列 FROM 原表 WHERE 条件 |
CREATE TABLE 女生信息表 AS
SELECT 学号, 姓名, 出生日期
FROM 学生
WHERE 性别 = '女';
SELECT * FROM 女生信息表;
💡 注意:当 SELECT 中包含计算列时,新表中的相应列不再是计算列,只保留计算结果的值。
⬅️ 数据的增删改 🏠 00-数据库 ➡️ 聚合排序与分页
💬 评论