SQL基础语句入门( 二 )


(但是包含主码声明的关系中不可以 , 因为这回违背主码的完整性约束 。例如上方的student关系,它不允许两个名为Alice的学生的id号码相同)
我么执行下方语句
SELECT Sname FROM student;结果如下
SnameCairBinBobAliceAlice这在SQL表达式结果中出现重复,如果想要强行去重,则需要用到关键字distinct
我们对该语句进行变形
SELECT DISTINCT Sname FROM student;查看结果发现两个Alice只剩下一个了
select子句中还可含有加减乘除运算符+ - * /
例如查询每个学生的id,并输出它们各自乘10的结果
SELECT Sid*10 FROM student;where子句会筛选处那些在from子句所指定关系中满足特定条件的元组 , 并且where子句允许使用如下逻辑连词以及运算符
逻辑连词以及运算符描述and且not非or或<小于<=小于等于>大于>=大于等于=等于<>不等于例如我们要输出student中id大于1的学生姓名
Select Sname from student where Sid>1;这里应当注意,以下语句是不符合SQL标准的,对于一些数据库或者它们的早期版本会报错(例如MySQL,尽管在后来版本进行了支持 , 但是不要这样做)
SELECT Sname FROM student WHERE 1<Sid;多关系查询例如我们要输出course中Sname属性与student的Sname属性取值相同的课程名和学生名:
SELECT Cname,student.Sname FROM course,student WHERE course.Sname = student.Sname;更名运算更名运算用到了as子句,它既可以出现在from中也可以出现在select中,作用是重新命名
(由于早期SQL没有as关键字,在像Oracle这样的数据库中 , 不允许form出现as关键字 , 如果要做别名,则需将oldName as newName改成oldName newName
我们先看看原语句效果
Select Sid from student where Sname = 'Alice';

SQL基础语句入门

文章插图
使用as子句
Select Sid as 学号 from student where Sname = 'Alice';
SQL基础语句入门

文章插图
当然还有asfrom中的情况,这种情况是为了方便指代关系名
例如
SELECT course.Cname,student.Sname FROM course,student WHERE course.Sname = student.Sname;利用as可以这样写
SELECT c.Cname,s.Sname FROM course AS c,student AS s WHERE c.Sname = s.Sname;看到这里可能会有人问,这有什么意义?当然,对于简短的语句效果不太明显 , 但是对于下方这种语句你就能看到它的好处了
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为用户提供了对关系中元组显示次序的一些控制,

推荐阅读