结构化查询语言之 SQL 查询基本结构(以 MySQL 为例)


查询使用的数据库文件下载


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_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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值