SQL基础语句入门( 三 )


SELECT s FROM( SELECT Sname AS s, Sid AS id FROM student) AS TWHERE T.id>1;字符串运算SQL标准是对字符串大小写敏感的,但是在一些数据库系统如MySQL、SQL Server中是不区分大小写的 。
SQL还允许对字符串进行函数操作,如upper()将字符串转大写,lower()转小写,trim()去掉字符串后面的空格 。不同数据库系统提供的函数可能会不同 。
在字符串上可使用like运算符来实现模式匹配,模式是大小写敏感的(但MySQL中,或在PostgreSQL中使用ilike时例外)
一般用两个特殊字符来描述模式,一个是百分号%,另外一个是下划线_
前者是个通配符,也就是说表示某个字符后面所有的位;后者是个占位符,仅表示某个字符后的一位,下面举例
SELECT Sname FROM student WHERE Sname LIKE 'C%';输出结果是CairBin
SELECT Sname FROM student WHERE Sname LIKE 'C_';输出结果是一张空表
前者会查找Sname列所有以C开头的数据,后者会查找Sname列所有以C开头但C后面仅有一位(也就是说总长度为两字符)的数据
当然,SQL允许使用转义字符来表示特殊字符
SELECT Sname FROM student WHERE Sname LIKE 'C/%%' ESCAPE '/';该语句会用/来表示转义字符,作用是查找以C和百分号开头的数据 。在语句中/%%应当分成/%%来看,前者是个转义字符,表示普通的百分号,后者是个通配符表示后面的任意位为任意数字 。
排序SQL为用户提供了对关系中元组显示次序的一些控制,order by子句可以让查询结果中的元组按排列顺序显示 。
例如,升序输出student关系中的学生id
SELECT Sid FROM student ORDER BY Sid;该子句还有两个关键字,asc表示升序,desc表示降序
接下来进行降序输出
SELECT Sid FROM student ORDER BY Sid DESC;between谓词X between a and b表示X属性列中取大于等于a小于等于b的值
SELECT * FROM student WHERE Sid BETWEEN 1 AND 3;该语句相当于下方语句
SELECT * FROM student WHERE Sid >= 1 AND Sid <= 3;集合运算SQL的unionintersectexcept对应数学上集合的交集、并集、差集运算
例如student表中学号小于2与学号大于3的学生信息元组组成的集合的并集
(SELECT * FROM student where Sid <2) union (select * from student where Sid>3);注意:MySQL不支持except
聚集函数聚集函数是以值集为输入并返回单个值的函数 。SQL标准提供了五个固有的聚集函数:

  • 平均值 avg()
  • 最小值 min()
  • 最大值 max()
  • 求和 sum()
  • 计数 count()
基本聚集操作比较简单,例如要求student关系中所有学生id的平均值
SELECT AVG(Sid) FROM student;还有一种操作是分组聚集,它可以将聚集函数作用在一组元组集上
例如求student中每组同名学生的id之和
SELECT Sname,SUM(sid) FROM student GROUP BY Sname;在有些时候,某属性的取值可能为空,但需要对该属性列进行聚集,但SQL聚集函数并不认为结果为null,而是认为应该跳过该值 。
另外,在SQL:1999中引入了布尔类型,它可以取truefalseunknown,聚集函数some()every()可应用于布尔值的集合,并分别计算这些值的析取(or)和合取(and)
having子句有些时候我们对分组有限定条件要求,例如求student中每组同名学生的id之和,但是要求和在5以上的,这种操作需要利用

经验总结扩展阅读