附加的基本運算
- 附加的基本運算
- 更名運算
- 使用更名運算的理由:
- 使用as 語句進行重命名運算
-
- 查詢1. 一個普通的查詢
- 查詢2. 用名字instructor_name代替屬性名name
- 查詢3. 簡化名稱
- 查詢4. 同關系查詢
-
- 字元串運算
- like操作符
-
- 查詢5.like表達式
- 使用escape關鍵字定義轉義字元
- 可以使用not like 比較運算符搜尋不比對項
-
- like操作符
- select子句中的屬性說明
-
-
- 查詢6. 星号表示所有的屬性
-
-
- 排列元組的顯示次序
-
- 使用order by子句
- 查詢7. order by 查詢
- 查詢8. 使用asc和desc
- 使用order by子句
-
- where子句謂詞
- between 謂詞
-
- 查詢9. 可以取代查詢10
- 查詢10.
-
- not between
- (v1,v2,…,vn)n維元組比較
-
- 查詢11. 等價于查詢12
- 查詢12. 等價于查詢11
-
- between 謂詞
- 更名運算
更名運算
使用更名運算的理由:
- from子句中的幾個關系中有同名的屬性;
- select子句中使用了算術表達式,該結果屬性沒有名字;
- 講一個長的關系名,替換成一個短的,友善操作;
- 比較同一個關系中的元組的情況;
- 沒有理由,就想給它改個名字!!!
使用as 語句進行重命名運算
SQL中提供了一個重命名結果關系中屬性的方法,使用如下的as子句:
old-name as new-name
as子句既可以出現在select子句中,也可以出現在from 子句中。
查詢1. 一個普通的查詢
select name, course_id
from instructor, teaches
where instructor.ID = teaches.ID;
結果是一個具有下列屬性的關系:
name,course_id
查詢2. 用名字instructor_name代替屬性名name
select name as instructor_name, course_id
from instructor, teaches
where instructor.ID = teaches.ID;
結果是一個具有下列屬性的關系:
instructor_name,course_id
查詢3. 簡化名稱
select T.name,S.course_id
from instructor as T, teaches as S
where T.ID = S.ID;
查詢4. 同關系查詢
找出滿足下面條件的所有教師的名字,他們的工資至少比Biology系某一個教師的工資要高。
select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';
S和T被認為是instructor的兩個拷貝,更準确的說是被聲明為instructor關系的别名。
S和T這樣的辨別符在SQL标準中被稱作:
相關名稱(correlation name) 或 表别名(table alias) 或 相關變量 (correlation variable) 或 元組變量(tuple variable)
字元串運算
SQL允許在字元串上有多種函數,例如:
upper(s),lower(s),trim(s)等。
不同的資料庫系統提供的字元串函數集不同個,這裡不列舉。
like操作符
使用like操作符可以實作模式比對:
*
%
:比對任意字元串
*
_
: 比對任意一個字元
例如:
* ‘Intro%’:
* ‘%comp%’:
* ‘_ _ _’:
查詢5.like表達式
找出所在建築物名稱中包含子串‘Watson’ 的所有系名。
select dept_name
from department
where building like '%Watson%';
使用escape關鍵字定義轉義字元
/*使用反斜杠(\)作為轉義字元,
比對所有以“ab%cd”開頭的字元串*/
like 'ab\%cd%' escape '\'
/* 比對所有以“ab\cd”開頭的字元串 */
like 'ab\\cd%' escape '\'
可以使用not like 比較運算符搜尋不比對項
select子句中的屬性說明
星号“*” 可以用在select 子句中表示“所有的屬性”。
查詢6. 星号表示所有的屬性
下面的查詢中,instructor中所有的屬性都被選中。
select instructor.*
from instructor, teaches
where instructor.ID = teaches.ID;
排列元組的顯示次序
使用order by子句
查詢7. order by 查詢
按字母順序列出在Physics系的所有教師
select name
from instructor
where dept_name = 'Physics'
order by name;
order by 預設使用升序(asc)。
我們可以使用desc表示降序。
查詢8. 使用asc和desc
按salary的降序列出整個instructor關系,如果有幾個教師的工資相同,将他們按照名字升序排列。
select *
from instructor
order by salary desc, name asc;
where子句謂詞
between 謂詞
between比較運算符來說明一個值小于或等于某個值,同時大于或等于另一個值
查詢9. 可以取代查詢10
找出工資在90000美元到100000美元之間的教師的姓名
select name
from instructor
where salary between and ;
查詢10.
找出工資在90000美元到100000美元之間的教師的姓名
select name
from instructor
where salary <= and salary >=;
not between
使用方法類似于between
(v1,v2,…,vn)n維元組比較
SQL允許我們使用記号(v1,v2,…,vn)表示一個分量值分别為v1,v2,…,vn的n維元組。
在元組上可以運用比較運算符,按照字典順序進行比較。例如:
(a1,a2) <= (b1,b2)在 a1 <= b1且a2 <= b2時為真。
查詢11. 等價于查詢12
查找Biology系講授了課程的所有教師的姓名和他們所講授的課程。
select name, course_id
from instrucotr,teaches
where instructor.ID = teaches.ID and dept_name = 'Biology';
查詢12. 等價于查詢11
select name, course_id
from instructor, teaches;
where (instructor.ID, dept_name) = (teaches.ID, 'Biology');