为方便演示,先向student表中插入如下几条数据
INSERT INTO student VALUES('CairBin',1);INSERT INTO student VALUES('Bob',2);INSERT INTO student VALUES('Alice',3);INSERT INTO student VALUES('Alice',4);INSERT INTO course VALUES(4,'Alex','chemistry');INSERT INTO course VALUES(1,'CairBin','math');INSERT INTO course VALUES(2,'CairBin','chemistry');INSERT INTO course VALUES(3,'Alice','chemistry');单关系查询我们现在想要获取student关系中的所有学生的姓名,也就是Sname属性列下的所有数据,则可以使用如下语句
SELECT Sname FROM student;当然可以跟随多个属性,例如输出学生姓名和id
SELECT Sname,Sid FROM student;另外,在关系模型的形式化数学定义中,关系是一个集合,因此重复的元组不会出现在集合中 。但是对于实际操作来讲,去重是相当费时的,所以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';

文章插图
使用
as子句Select Sid as 学号 from student where Sname = 'Alice';
文章插图
当然还有
as在from中的情况,这种情况是为了方便指代关系名例如
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;看到这里可能会有人问,这有什么意义?当然,对于简短的语句效果不太明显,但是对于下方这种语句你就能看到它的好处了
经验总结扩展阅读
- 分布式存储系统之Ceph集群CephFS基础使用
- 圣诞祝福语句简短唯美
- 描写石钟乳和石笋的语句
- day08-MySQL事务
- 心中有爱的经典语句
- 墙上的梁叫什么梁
- 分布式存储系统之Ceph集群RBD基础使用
- MySQL 窗口函数
- 毛笔字的最基础的写法
- 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
