DML
SELECT语句
主句
1 | select 字段列表 from 表名 |
字段列表:表中字段
多个字段之间用逗号分隔
所有字段可用通配符”*”表示
“字段名 AS 别名”替换列表标题
字段名前面加限制
DISTINCT:相同字段值只显示一条记录
1 | select distinct Academy from Course |
TOP n |m PERCENT :前n条或前m%条记录
1 | select top 3 * from Course |
1 | select top 20 percent * from Course |
例:
1 | select StudentCode, CourseCode, Grade+2 as 成绩, '情况属实' as 说明 |
可新增字段(常量、表达式)
| 函数名 | 函数功能 |
|---|---|
| AVG | 计算某一字段的平均值 |
| COUNT | 统计某一字段的个数 |
| MAX | 查找某一字段的最大值 |
| MIN | 查找某一字段的最小值 |
| SUM | 计算某一字段的总和 |
1 | select sum(Grade) as 总分, avg(Grade) as 平均分, max(Grade) as 最高分, min(Grade) as 最低分, count(StudentCode) as 总人次 |
加上 “INTO 表名“ 可创建一张新表
1 | select StudentName, Birthday into NewTable from Student |
子句
WHERE子句
1 | SELECT 字段列表 FROM 表名 |
查询条件:是一个关系或逻辑表达式
| 查询条件 | 谓词 |
|---|---|
| 比较 | >、>=、<、<=、=、<>(不等于)、!>(不大于)、!<(不小于)、!=(不等于) |
| 确定范围 | BETWEEN…AND、NOT BETWEEN…AND |
| 确定集合 | IN、NOT IN、EXISTS |
| 字符匹配 | LIKE、NOT LIKE |
| 空值 | IS NULL、IS NOT NULL |
| 否定 | NOT |
| 逻辑运算 | AND、OR |
比较运算
例:
1 | select StudentName, Sex from Student |
确定范围
例:
1 | select StudentCode, StudentName, Birthday from Student |
where语句中可替换为
Year(Birthday) not between 1990 and 1994
IN运算
1 | select StudentCode, StudentName, Sex, ClassCode from Student |
LIKE运算
确定字符串模式是否匹配
| 通配符 | 说明 |
|---|---|
| % | 匹配0个或多个任意字符 |
| _ | 匹配1个任意字符 |
| [ ] | 匹配集合中任意单个字符 |
| [ ^ ] | 不匹配集合中的任意单个字符 |
例:
1 | select StudentCode, StudentName from Student |
1 | select CourseCode, CourseName from Course |
GROUP BY子句
分类汇总。即按分组字段把具有相同值的记录汇总计算合并成一条记录
1 | select 字段列表 from 表名 |
分组字段必须出现在select后的字段列表中
1 | select CourseCode, Count(StudentCode) as 选课人数, str(avg(Grade),5,2) as 平均分 |
例:
1 | select Academy, Sex, Count(TeacherCode) as 教师人数 |
ORDER BY子句
按特定字段值为查询结果排序
1 | select 字段列表 from 表名 |
asc:ascending,升序,默认值
desc:descending,降序
1 | select * from Grade |
例:按班名升序(若班名相同,按姓名降序)查询各班的学生信息
1 | select ClassName, StudentCode, StudentName |
SELECT–多表联接查询
where
1 | select 字段列表 |
例:
1 | select Student.StudentCode, StudentName, CourseCode, Grade, LiveInDorm |
代码中select中的StudentCode前需要限定表名,不然系统不知道使用那个表的字段列表,会出现报错
where中的Student和Grade用StudentCode相等联接
1 | select StudentName, ClassName, GrantTime, GPA |
join…on
1 | select 字段列表 |
联接关键字:
[inner] join(内联接):默认,结果仅包括匹配行
left [outer] join(左外联接):左表所有行匹配
right [outer] join(右外联接):右表所有行匹配
比较运算符:= < > <= >= <>
字段1和字段2:必须同类型,但名称可不同。
例:
1 | select Student.StudentCode, StudentName, CourseCode, Grade, LiveinDorm |
3个数据表以上形成联接嵌套。
格式1:
1 | selse 字段列表 |
例:
1 | select StudentName, CourseName, Grade |
格式2:
1 | selse 字段列表 |
例:
1 | select StudentName, CourseName, Grade |
SELECT–子查询
当一个查询结果是另一个查询的条件时,称该查询为子查询。整个语句称为嵌套查询
例:
1 | select StudentCode, StudentName, ClassCode |
如果子查询结果返回多个值,主查询的where子句可使用集合判断
1 | where 字段 in 子查询:字段是否在子查询结果中 |
例:
1 | select StudentCode, StudentName, ClassCode |
in子查询通常也可以利用联接查询完成
缺点:没有子查询清晰
1 | select Student.StudentCode, StudentName, ClassCode |
子查询可以计算一个变化的聚集函数值返回给主查询
例:
1 | select StudentCode, StudentName, Birthday |
1 | where exists 子查询:结果集是否为空,非空返回Ture,空返回False |
例:
1 | select StudentCode, StudentName |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 雪天困不住的大孩子!











