2.2 SQL查询的基本结构
*select相当于关系代数中的投影运算,from 相当于笛卡尔积运算,where相当于选择运算,是一个作用在from子句中关系的属性上的谓词。
1)单关系查询:
select name
from instructor; /*默认为不去除重复*/
select *
from instructor; /* *表示所有属性*/
可以用distinct和all来指定是否去除重复。
select distinct name
from instructor; /*去除重复*/
select name
from instructor
where dept_name=‘Comp.sci‘;
2)多关系查询:
select A1,A2,……,An;
from r1,r2,……,rm;
where P;
eg:
对于大学中所有讲授课程的老师,找出他们姓名以及所讲述课程标识:
select name,course_id
from instructor,teaches
where instructor.id=teaches.id;
3)自然连接
select A1,A2,……,An;
from r1 natural join r2 natural join r3……natural join rm;
上例例子可以写成:
select name,course_id
from instructor natural join teaches;
*using 子句,当自然连接运算的几个表中有多个相同属性时,可能会造成我们查询结果不正确,因此使用using子句来指定那些列应该相等。
select name,title
from (instructor natural join teaches) join course using name(course_id);
4)更名运算
无更名情况下,首先from子句的关系中可能存在同名属性,这样结果就会出现重复的属性名;其次,如果我们在select子句中使用算术表达式,则结果中属性就没有属性名;再次,有时候在实际应用中我们要根据需求改变结果中属性的名字。
as子句:oldname as newname
eg:
select T.name=S.course_id
from instructor as T,teaches as S
where T.id =S.id;
5)字符串运算
在字符串上可以使用like操作符来实现模式匹配。我们用两个特殊字符来描述模式:
百分号% :匹配任意子串。
下划线_ :匹配任意一个字符。(模式对大小写敏感)
字符串处理函数:
upper(s):将串s转换为大写
lower(s):将串s转换为小写
trim(s):去掉串s后面的空格
eg:找出所在建筑名称中包含子串Waston的所有系名
select dept_name
from department
where building like ‘%Waston%‘;
*当查询子串中包含%或_或转义字符时,要用转义字符’\‘,我们在like比较运算中用escape关键字来定义转义字符。
eg:like ’ab\%cd%‘ escape ‘ \ ‘ 匹配所有以“ab%cd”开头的字符串。
like ’ab\\cd%‘ escape ‘ \ ‘ 匹配所有以“ab\cd”开头的字符串。
原文:http://www.cnblogs.com/Dezhong-chen/p/4438738.html