1、單關(guān)系查詢
1)查詢通式:
select 屬性1,屬性2,……
from 表
where P;(P是謂詞)
盡管各子句必須以select、from、where的次序?qū)懗?,但理解查詢所代表的的最容易方式是運算的順序來考察各子句:首先是from,然后是where,最后是select。
2)示例
# 查詢表中所有屬性
SELECT *FROM department;
# 查詢表中的某些屬性
SELECT dept_name FROM department;
SELECT dept_name,building FROM department;
SELECT budget FROM department;
# 想要去除重復(fù)時,可在select后加上distinct。
SELECT DISTINCT budget FROM department;
# where 子句允許我們選出那些在from子句的結(jié)果關(guān)系中滿足特定謂詞的元組
# (注:查詢一個關(guān)系得到的結(jié)果是一個新的關(guān)系)
SELECT budget FROM department WHERE budget>=15;
3)結(jié)果截圖

SELECT *FROM department;

SELECT dept_name FROM department;

SELECT dept_name,building FROM department;

SELECT budget FROM department;

SELECT DISTINCT budget FROM department

SELECT budget FROM department WHERE budget>=15
2、多關(guān)系查詢
1)查詢通式:
select 屬性1,屬性2,……
from 表1,表2,……
where P;(P是謂詞)
2)示例:
SELECT department.dept_name,name,building
FROM department,instructor
WHERE department.dept_name = instructor.dept_name;
該示例的原理:
通過from子句定義了一個該子句中所列出關(guān)系上的笛卡爾積。它可以用集合理論來形式化地定義,但最好是通過迭代過程來理解,此過程可為from子句的結(jié)果產(chǎn)生關(guān)系元組。
for each 元組1 in 關(guān)系1(表1)
for each 元組2 in 關(guān)系2
……
for each 元組t in 關(guān)系t
把元組1,元組2,……元組t連接成單個元組m
把元組m加到結(jié)果關(guān)系中
然后從結(jié)果關(guān)系中查詢滿足謂詞P的元組
笛卡爾積:
例如:關(guān)系1和關(guān)系2如下:
| name | age | salary |
|---|---|---|
| smith | 34 | 7000 |
| white | 25 | 8000 |
| name | com | favorite |
|---|---|---|
| smith | unknow | football |
| white | unknow | table ball |
那么這兩個關(guān)系的笛卡爾積如下(結(jié)果是新的關(guān)系):
| name | age | salary | name | com | favorite |
|---|---|---|---|---|---|
| smith | 34 | 7000 | smith | unknow | football |
| smith | 34 | 7000 | white | unknow | table ball |
| white | 25 | 8000 | smith | unknow | football |
| white | 25 | 8000 | white | unknow | table ball |
3)結(jié)果:

關(guān)系表instructor

關(guān)系表department

查詢結(jié)果表
3、自然連接運算(natural join)
1)定義:
它作用于兩個關(guān)系,并產(chǎn)生一個關(guān)系作為結(jié)果。自然連接只考慮那些在兩個關(guān)系模式中都出現(xiàn)的屬性上取值相同的元組對。
例如:
| name | age | salary |
|---|---|---|
| smith | 34 | 7000 |
| white | 25 | 8000 |
| name | com | favorite |
|---|---|---|
| smith | unknow | football |
| black | unknow | table ball |
則結(jié)果為:
| name | age | salary | name | com | favorite |
|---|---|---|---|---|---|
| smith | 34 | 7000 | smith | unknow | football |
2)通用形式:
select 屬性1,……
from 關(guān)系1 natural join 關(guān)系2 …… natural join 關(guān)系t
where P
示例:
SELECT department.dept_name,name,building
FROM department NATURAL JOIN instructor;
結(jié)果是等價于(當且僅當department是instructor的參照):
SELECT department.dept_name,name,building
FROM department,instructor
WHERE department.dept_name = instructor.dept_name;
那么如何判斷兩個表之間的參照關(guān)系:
假設(shè)關(guān)系B中含有關(guān)系A(chǔ)的主碼(屬性),則B參照了A。這個屬性在B上稱作參照A的外碼。關(guān)系B也稱為外碼依賴的參照關(guān)系,關(guān)系A(chǔ)稱作外碼的被參照關(guān)系。