复习笔记,来自于机械工业出版社的《数据库系统全书》。因为这本书和中讲述的方式不似其他书从关键字简单罗列,所以很快系统的记住:
使用下面的数据库模式做例子:
Movie(title, year, length, inColor, stydioName, producerc# )
SQL大小写无关;但是在引号里的有关
SQL中规定在字符串中连续两个单引号表示一个单引号。
1. SQL中最基本的查询方式:select L from L where R
2. 投影,就是select子句中*所在的位置。*位置是你想求的结果关系属性
找出 “Disney”1990年出产的电影,输出它的长度和标题。
Select title, length
From Movie
Where studio = ‘Disney’ and year = 1990;
如果你希望结果关系中属性名字和给出的名字不同,可以使用as保留字来完成
Select title as name, length as duration
From Movie
Where studio = ‘Disney’ and year = 1990;
如果你需要把长度由分钟表示改为小时,可以:
Select title as name, length*0.016667 as lengthInhour
From Movie
Where studio = ‘Disney’ and year = 1990;
甚至你要添加一个新常量属性在结果关系中,下面添加长度单位小时到结果关系中:
Select title as name, length*0.016667 as lengthInhour, ‘hrs’as inHours
From Movie
Where studio = ‘Disney’ and year = 1990;
3. 选择:where子句中的表达式,可以通过比较运算符来建立(=, <>, <, >, <=, >=),在比较前也可以使用运算符作用于数值上,也可以使用||连接字符和逻辑运算符。逻辑运算符的优先级和其他高级语言一样:and优先级高于or,not具有最高级优先级。
查找1970年以后的黑白电影:
select title
from Movie
where year > 1970 or lenth < 90 and not inColor;
4. 字符串的比较:
SQL允许不同类型的字符串,如固定字符串数组和可变长度的字符串链表。因此需要考虑不同类型字符串类型之间的转换。如果使用<或者>=等比较运算符做比较运算,实际比较的是词典顺序(如词典顺序和字母表顺序)。例如:’fidder’ < ‘fio’,因为每个字符串的开头都是’fi’,但是’fidder’中的第三个字符在’foo’第三个字符之前。
SQL也提供了模式匹配用于字符串的比较:s like p和s not like p,其中s是字符串,p是模式。模式中使用_匹配任意单个字符,%匹配任意数目字符串。
查找所有电影名中含有所有格’s的电影:
select title
from Movie
where title like ‘%’’s%’;
注意:如果要在查询提哦案件中直接使用_和%怎么办?通过在模式后面跟一个保留字escape和一个单引号括起来的字符指定转义字符。跟在转义字符后面的_和%将作为它本身的字符出现:
s like ‘x%%x%’ escape ’x’;
表示的是x%%x%
5.
日期和时间:是时间和日期后面加一个符合标准格式的字符串。
Data’1983/5/4
Time’15:00:02.5’下午三点过两秒半。
如果要把日期和时间组合表示则要使用关键字timestamp,加日期加空格加时间,如
timestamp’1948-4-5 12:00:00’
6.
空值及涉及空值的比较:
首先记住空值适宜个可以出现在元组中的值,但是它不是一个常量。
对null进行算术运算结果是空值;当使用比较运算符比较空值和任意值时结果是unkown值
如:x的值是null,那么x+3也是null,但是null是非法的SQL表达式。同样的x=3是unkown但是null=3是非法的。
判断x是否是空值可以使用x is null和x is not null表示。
处理空值使用is()和coalesce()函数
7
.布尔值:unkown, false, ture 。unkown是1/2;true是 1,false是0。
Or运算取两者大者;and取两者小者;not为1-v,其中v是三者中的一个。
8.
输出排序:使用oeder by
如果要按默认顺序排就加上desc(降序)和asc(可以省略)