本文共 2809 字,大约阅读时间需要 9 分钟。
select 目标列表表达式
from 表名 或 视图名 where 条件表达式eg:在“课程”表中查询所有学生的“课程号”和“课程名称”。
use studentgoselect distinct 课程号,课程名称from 课程go
注意:目标列表表达式可以是:(属性列,字符串常量,算数表达式,函数)
distinct 目标属性 :去掉重复行(1)比较大小
where A 比较符号 B (2)确定范围 范围内:where between …and … 范围外:where not between …and …eg:在“课程号”表中查询“学分”在4-6之间的课程的“课程号”和“课程名称”。
use studentgoselect 课程号,课程名称from 课程where 学分>=4 and 学分<=6go
(3)确定集合
指定集合内:where 列名 in(‘A’,‘B’,‘C’) 指定集合外:where 列名 not in(‘A’,‘B’,‘C’) (4)字符匹配 匹配: like 匹配串 不匹配:not like 匹配串注意:匹配符可以结合% -使用
% | 表示任意的,表示0到无穷大的长度 |
---|---|
- | 表示单个字符 |
like | 匹配的意思(后边有匹配符号只能用like) |
is | 匹配的意思(为空只能用is,不能用=) |
= | 等于 |
>< | 不等于的意思 |
eg:在“课程”表中查询所有“课程名称”中包含“数据库”字样的课程的全部信息
use studentgoselect *from 课程where 课程名称 like '%数据库%'
(5)涉及空值的查询
use studentgoselect 课程名称,学分from 课程where 先修课程 is nullgo
(6)多重条件的查询
and 并且 or 或(1)简单分组查询
select 目标列表表达式 from 表名 where 条件表达式 group by 列名(2)带having 字句的分组查询
select 目标列表表达式 from 表名 group by 列名 having 条件表达式eg:查询至少选修了2门课程以上的学生的学号。
use studentgoselect distinct 学号from 学生成绩group by 学号having count(*)>=2 go
select 目标列表表达式
(into 新表名) from 表名 或 视图名 where 条件表达式 order by 列名 asc 或 desceg:在“课程”表中查询所有“课程名称”中包含“数据库”字样的课程的全部信息,将查询结果按“课程名称”降序排列。
use studentgoselect *from 课程where 课程名称 like '%数据库%'order by 课程名称 DESCgo
连接查询:
(1)内连接 select 列名 from 表1 inner join 表2 on 连接条件表达式(2)外连接(左外连接+右外连接)
左外连接: select 列名 from 表1 left join 表2 on 连接条件表达式右外连接:
select 列名 from 表1 right join 表2 on 连接条件表达式 (3)交叉连接(笛卡尔积) select 列名 from 表1 cross join 表2 on 连接条件表达式集合比较运算符:
all | 全部都满足 |
---|---|
any | 满足任何一个 |
between | 在某个范围内 |
exists | 查询结果包含一些行(结果不为空) |
in | 操作数等于列表中的一个 |
not | 取值反 |
some | 有一些满足 |
子查询:将第一步查询嵌入到第二步查询的条件中(嵌套查询)
(1)无关子查询
(先执行子查询语句,得到的结果传递给父查询语句使用) use 数据库名 select 列名 from 表格 where 列名 比较运算符(select 列名 from 表格 where 列名)eg:查询其它系中比“管理系”的所有学生年龄都小的学生的“姓名”、“年龄”和“性别”。
use studentgoselect 姓名,性别,年龄from 学生信息where 所在系 != '管理系' and 年龄
eg:查询“赵燕”同学选修的所有课程“课程名称”、“学分”、“分数”,对结果按照“分数”升序排列。
use studentgoselect 课程名称,学分,分数from 学生成绩,课程where 学生成绩.课程号 = 课程.课程号 and 学号 in( select 学号 from 学生信息 where 姓名 = '赵燕')order by 分数go
(2)相关子查询
(子查询的执行依赖于父查询,多数情况下是因为子查询的where 子句引用了父查询的表) (3)表数据维护的子查询 插入子查询结果 带子查询的删除语句(1)集合并运算(会自动去除重复)
… … union … …(2)集合交运算
… … intersect … …(3)集合差运算(前—后的意思)
… … except … …(1)输出前n行
use 数据库名 select top n 列名 from 表格 where 条件语句 (2)百分比输出 use 数据库名 select top n percent 列名 from 表格 where 条件语句 (3)查询结果输出到新建表中 use 数据库名 select 列名 into 新表格 from 原表格 where 条件语句select 目标列表表达式 into 新表名
from 表名 where 条件表达式eg:将“学生信息”表中“计算机系”的学生的全部信息插入到“计算机系学生信息”表中。
use studentgoselect *into 计算机系学生信息from 学生信息where 所在系 = '计算机系'go
eg:创建和“学生信息”表的表结构相同的“管理系学生信息”表,但该表中不包含任何记录。之后用带子查询的INSERT将“管理系”学生的全部信息插入到“管理系学生信息”表中。
use studentgoselect * into 管理系学生信息from 学生信息where 学号 is null gouse student --调用数据库goinsert into 管理系学生信息select * from 学生信息where 所在系 = '管理系'go
转载地址:http://grawi.baihongyu.com/