(但是包含主码声明的关系中不可以 , 因为这回违背主码的完整性约束 。例如上方的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;
看到这里可能会有人问,这有什么意义?当然,对于简短的语句效果不太明显 , 但是对于下方这种语句你就能看到它的好处了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为用户提供了对关系中元组显示次序的一些控制,
推荐阅读
- day08-MySQL事务
- 分布式存储系统之Ceph集群RBD基础使用
- MySQL 窗口函数
- 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
- mac通过docker一键部署MySQL8
- spring boot集成redis基础入门
- day07-2MySQL索引
- CentOS部署MySQL
- MySQL用户也可以是个角色
- python+request+pymysql+pytest数据驱动