数据库程序员

SQL——附加基本运算

2018-03-31  本文已影响103人  薛定谔与猫的故事

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');
上一篇下一篇

猜你喜欢

热点阅读