SQL——附加基本运算
1、更名运算
1)通用形式:
old-name as new-name
2)存在原因:
a)from子句的两个关系中可能存在同名属性,在这种情况下,结果中就会出现重复的属性名
b)select子句中使用算术表达式,结果属性就没有名字
c)有时候我们看某个名字不爽,就可更改那个名字[捂脸.jpg]
3)示例:
SELECT name AS instructor_name,course_id
FROM instructor,teaches
WHERE instructor.id = teaches.id;
#在这里呢?很明显是为了凸显这个name(名字)是属于instructor(教师)的。
as子句在重命名关系中很有用。重命名关系是把长的关系名变成短的,使得查询更加方便。例如
SELECT T.name,S.course_id
FROM instructor AS T,teaches AS S
WHERE T.id = S.id;
如果你是在IDE上操作数据库,是没啥感觉的(因为有自动补全功能),但在命令行中,重命名关系就显得重要了。
在上面的查询中,T和S可以认为是关系的拷贝,更准确说是关系的别名。诸如T、S,被称作相关名称,通常也称作表别名、相关变量、元组变量等等。
2、字符串运算
在SQL中,使用一对单引号来标识字符串,例如'hello world'。而如果单引号是字符串的一部分,那就用两个单引号表示,如:'it''s right' 表示 it's right。
在SQL标准中,字符串的相等运算时大小写敏感的。在其他数据库方言中可能并非如此,如MySQL,SQL Server中是不区分大小写的(当然,你也可以更改这些设置)
SQL字符串操作函数:
1)upper(s)将字符串转换为大写;
2)lower(s)将字符串转换为小写;
3)trims(s)去掉字符串后面的空格;
使用like实现字符串的模式匹配:
使用两个特殊的字符来描述模式(模式匹配是大小写敏感的):
百分号(%):匹配任意字符串;
下划线(_):匹配任意一个字符;
示例:
1)‘str%’匹配任何一str开头的字符串;
2)‘%com%’匹配任何包含‘com’子串的字符串,例如‘company’,‘compute’等。
3)‘_ _ _’匹配只含三个字符的字符串;
4)‘ _ _ _ %’匹配至少含三个字符的字符串;(三条下划线是没有空格,空格也是字符)
SQL示例:
#将教师名字转化为大写
SELECT upper(name) AS upname
FROM instructor
where name LIKE '%e%';
# 找出名字包含有e的教师的信息
SELECT*
FROM instructor
where name LIKE '%e%'
instructor表的所有数据
限制操作后的结果表
转换大写
值得注意的是:
但我们所要限制的字符串当中包含%或者_时,则需要使用转义字符,SQL中使用escape来定义转义字符,例如
#匹配所有以开头为‘ab%cd’的字符串
like 'ab\%cd%' escape '\';
#匹配所有以‘ab\cd’开头的字符串
like 'ab\\cd%' escape '\';
当然转义字符不一定是这里所写的'\',也可以是其他字符,不过在大多编程语言当中,用'\'来充当转义字符。
3、排列元组的显示次序:
order by子句:默认使用升序。
通用形式:
order by 要排序的属性名 <method>;
<method>表示可写或不写, 选项有desc(降序),asc(升序);
示例:
# 根据属性id降序输出结果关系
SELECT *
FROM instructor
ORDER BY id DESC ;
降序输出
4、where子句谓词的简化:
between子句:表示在某个闭区间内;
同理,not between 表示不再某个区间内;
#下面两条句子是等价的
SELECT *
FROM instructor
WHERE salary BETWEEN 10000 AND 12000;
SELECT *
FROM instructor
WHERE salary>=10000 AND salary<=12000;
再有:
# 下面两条句子是等价的
SELECT *
FROM instructor
WHERE salary = 66000.00 AND dept_name = 'biology';
SELECT *
FROM instructor
WHERE (salary,dept_name) = (66000.00,'biology');