查询使用的数据库文件下载
1. SQL 查询的基本结构构成
- SQL 查询的基本结构由三个子句构成:select、from、where
- select子句用于列出查询结果中所需要的属性;
- from子句是一个查询求值中需要访问的关系列表(查询的输入);
- where子句是一个作用在from子句中关系的属性上的谓词;
2. SQL 查询
- 单关系查询
- 形式:select A from r;
- 去重需添加distinct关键字:select distinct A from r;
- 非去重(默认)添加all关键字:select all A from r;
- select 语句可以包含算术表达式,表达式可包含字段名、常量、运算符(+、-、*、\)
- select ID, name, dept_name, salary*1.1 from instructor;
- * 表示选择表的所有字段(属性)
- select * from instructor;
- where 子句允许我们选择那些在from子句的结果关系中满足特定谓词的元祖:
- SQL 允许where子句中使用逻辑连词and、or、not
- 逻辑连词的运算对象可包含比较运算符、算术表达式以及特殊类型;
- 形式:select A from r;
- 多关系查询
- 形式
select A_1, A_2, ..., A_n from r_1, r_2, r_3 where P;
- from子句定义了一个在该子句中所列出关系上的笛卡尔积
for each tuple_1 in r_1: for each tuple_2 in r_2: ... for each tuple_n in r_n: insert (tuple_1, tuple_2, ..., tuple_n) in r;
- 理解顺序:from—where—select
- 事实上,SQL 的实现不会执行这种顺序的查询,它会通过只产生满足where子句谓词的笛卡尔积元素来进行执行优化;
- 通过笛卡尔积得到的关系一般过于庞大,可以通过where子句限制
- select name,course_id from instructor, teaches where instructor. id = teaches. id
- 自然连接:通常来说,两个关系上的自然连接运算所匹配的元祖在两个关系共有的所有属性列上取值相同。
- 形式:
select A_1, A_2, ..., A_n from r_1 natural join r_2 natural join ... natural join r_n
- 下面两个查询结果一致
select name, course_id from instructor natural join teaches;
select name,course_id from instructor, teaches where instructor.id = teaches.id
3. 例子
- 列出教师的名字及其所讲授课程的名称
select name,title
from instructor natural join teaches,course
where teaches.course_id=course.course_id
查询结果与以下结果不同,以下查询会忽略“教师讲授的课不是其所在系的课程”的对(由instructor. dept_name=course. dept_name造成):
select name,title
from instructor natural join teaches natural join course
通过SQL
的自然连接的构造形式(即join…using…,允许用户指定需要哪些列相等)可改为:
select name,title
from (instructor natural join teaches) join course using(course_id)
附:
-
查看MySQL提供的所有存储引擎:show engines;
-
查看MySQL当前默认的存储引擎:show variables like ‘%storage_engine%’;
-
查看表的存储引擎:show table status like “table_name” ;
References:
[1] Abraham Silberschatz, Henry F Korth, S Sudarshan. Database System Concepts. New York: McGraw-Hill, 2010
Database System Concepts