数据查询是数据库的核心操作,SQL提供了 select 语句实现查询功能
1、查询指定的列
格式:
select 查询列表,查询列表 from 查询的表名
2、查询全部列(查询的顺序不同)
(1) select 所有的列都列出 from 查询的表名
(2) select * 查询的表名
3、查询经过计算的值(可以是表中的属性列,算术表达式,字符串常量,函数)
select 进行相应的运算方法 from 查询的表名
查询结果的列名,如果查询对应的是基本表列名,结果表该列也是列名,如果是其它表达式,SQL Server则处理为 “ 无列名 ”。
查询表的结果可以指定列名:
select 列(运算表达式)+ 空格(或 as ) +结果表的列名 from 查询的表名
选择表中的若干元组
从行方向查询,关系代数中的选择运算
1、消除重复的行
经过投影运算后,原来不相同的元组可能变成相同了,可以用 distinct 取消重复行,即只保留一行
语法:
select distinct 需要查询的列 from 查询的表名
2、查询满足条件的元组
通过where 子句实现,where(关键字)+ 条件表达式 ,常用的查询条件及谓词,如下表:
查询条件 | 谓词 |
比较 | =(等于) >(大于)、>=(大于等于) <(小于)、<=(小于等于) !=(不等于)、<>(不等于国际通用的) !>(不大于)、!<(不小于): not+ (逻辑非)+ 上述比较运算符 |
确定范围 | not(逻辑非)+ between 起始范围 and 结束范围 (闭区间,包括端点值) |
确定集合 | in + 集合(前面的值在这个集合里就是逻辑真) not in |
字符匹配 | like + 模式 (查询的表达式与查询的模式相匹配就是真,否则为假) not like |
空值 | is null (不能使用=)、 is not null |
逻辑运算 | and (与)、 or (或)、not (非) |
(1)比较查询
语法:(【】代表可省略)
【not】字段表达式 + 比较运算符 +表达式 当运算结果为真时,相应的记录就加入结果集、
例:查询计算机科学系全体学生的姓名
select sname from student where sdept = ' CS '(注意:字符串需要加单引号定界)
例:
查询所有年龄在20岁以下的男同学姓名及其年龄
select sname ,sage from student where sage <20 and ssex = ’ 男 ‘
(注意数值不需要单引号定界,还有单引号定界时注意界内空格)
(3)范围查询:
范围查询指查找属性值在(或不在)指定范围内的元组,具体格式:
【not】beteen exp1 and exp2 (等价于:属性列x>=exp1 and 属性列 x<=exp2)
例:查询年龄在20~23岁(包括20、23)之间的姓名和年龄
select sname, sage from student where beteen 20 and 23
(4)集合查询:
查找属性值属于或不属于指定集合的怨怒。
语法:
字段表达式【not 】in (集合元素列表)
例:查询信息系(‘is’)、数学系(ma)和计算机系(‘cs’)的姓名和性别:
select sname, sex from student where sdept in ( ' is ' , ' ma ' , ' cs ')
查询不是信息系(‘is’)、数学系(ma)和计算机系(‘cs’)的姓名和性别:
select sname, sex from student where sdept not in ( ' is ' , ' ma ' , ' cs ')
(5)字符匹配查询:
谓词like 可以用来进行字符的匹配查询。
语法:
match_expression 【not】like pattern
作用是查找指定的属性列与pattern相匹配的元组。
pattern ( 模式 )可以是字符串也可以是含有通配符%和 _ ,
其中:
%代表任意长度(长度可以为 0 ) 的字符串。
_ 代表任意单个字符
当字符串包含通配符时,需要使用 escape ' <换码字符> '进行转义(有点类似重新定义 _ )
例子:
查询姓刘学生的姓名、学号和性别
select sname, sno , sex from student where like ' 刘%'
查询两个字,姓刘学生的姓名、学号和性别
select sname, sno , sex from student where like ' 刘_'
查询以 ‘ DB ’ 开头,且倒数第三个字符为 i 的课程的详细情况
查询左右姓刘学生的姓名、学号和性别
select * from course where cname like ' DB\_%i__'escape ' \ '
换码字符(转意字符)‘ \ ’ ,表明其后面的一个字符是普通字符而不是通配符。换码符可以任意