Chapter 3 Introduction to SQL

查询二三事(Chapter 3)

select 子句

格式

select语句的格式如下

SELECT <[DISTINCT] c1,c2,...> 
FROM <r1,r2,...>
[WHERE <condition>]
[GROUP BY <c1,c2,...> [HAVING <condition>]]
[ORDER BY <c1 [DESC][,c2[DESC|ASC],...]>]
  • select后的东西可以加上+-*/等符号
  • 条件可以舍去
  • 执行顺序是from,where,select
    为from子句中列出的关系产生笛卡儿积
    在其结果上应用where语句中所指定的条件
    输出select语句中指定的属性或表达式的结果
  • order by 默认升序

Natural join

按照相同的属性对应来连接两张表
先列出两个关系模式中的共同属性,然后是表一的独有属性,表二的独有属性
可以用在from子句中

SELECT [DISTINCT] 列名(或表达式)
FROM 表1 NATURAL JOIN 表2
WHERE 条件

如果两张表中不止一个相同的属性,那么natural join只会在所有同名属性都相同的时候才连接
如果不希望要求所有的都相同时才连接,而是以其中一个属性为连接纽带
可以用这样的形式来
表明将表一与表二按照属性来连接

FROM 表1 JOIN 表2 USING 属性1

集合运算

UNION并

可自动去除重复,要保留的话用UNION ALL

INTERSECT交

可自动去除重复,要保留的话用INTERSECT ALL

EXCEPT差

可自动去除重复,要保留的话用EXCEPT ALL


NULL

  • 用在where语句中
IS NULL
IS NOT NULL
  • 所有含有NULL的运算结果都是NULL
  • 所有含有NULL 的比较都返回unknown
  • OR,AND,NOT
unknown or true=true
unkonwn or false=unknown
unknown or unknown=unknown

true and unknown=unknown
false and unknown=false
unknown and unknown=unknown

not unknown=unknown
  • Aggregate Function会忽略NULL值,除了Count

Aggregate Function

  • avg()
  • min()
  • max()
  • count()
  • sum()

使用聚合函数的时候,如果select的东西有不是聚合函数的,就用group by子句来整合

select avg(salary), company_name
from works
group by company_name;

返回的是各个公司的平均薪水


特殊子句

Exists 结构

exists结构在作为参数的子查询非空时返回true
关系A包含关系B可以写成

NOT EXISTS (B except A)

即不存在有元素在B中却不在A中,也就是B中的全在A中

select Name As Customers
from Customers
where not exists(select * from Orders where Customers.Id=Orders.CustomerId);

对Customers中的每一个tuple进行检查,如果“not exists”后中的查询语句搜索不出任何东西,那么该tuple中的name选择出来

Unique结构

结构在作为参数的子查询中没有重复结果的时候返回true

SELECT 
    T.course_id
FROM
    course AS T
WHERE
    UNIQUE( SELECT 
            R.couse_id
        FROM
            section AS R
        WHERE
            T.course_id = R.course_id);

等效于下面这样的表达

SELECT 
    T.course_id
FROM
    course AS T
WHERE
    1 >= (SELECT 
            COUNT(R.couse_id)
        FROM
            section AS R
        WHERE
            T.course_id = R.course_id);

with子句

用于定义临时关系

WITH 新表名 (c1,c2,...) AS(
    SELECT 子句
)

like 子句

  • 百分号%:匹配任意字符串
  • 下划线_:匹配任意一个字符
select Name
from Department
where Building like '%Waston%';

找到building属性含有Waston子串的tuple,返回其Name属性

  • like子句中使用escape来定义转义字符
like 'abc\%d%' escape '\'

表明匹配以abc%d开头的字符串

  • 可以使用not like搜寻不匹配项

between and

select name
from works
where salary  between 9000 and 10000;

等效于

select name
from works
where salary>=9000 and salary<=10000;

All & Some

用于集合的比较

  • some 表示子查询中的某一条record
    eg. “至少比某一个要大”可用“> some”来表示
SELECT 
    name
FROM
    works
WHERE
    salary > SOME (SELECT 
            salary
        FROM
            works
        WHERE
            company = 'xxxx');

表示找出至少比xxxx公司某一个员工工资高的name

  • all 表示子查询中的所有record
    eg. “大于所有的”可用“> all”来表示
SELECT 
    name
FROM
    works
WHERE
    salary > ALL (SELECT 
            salary
        FROM
            works
        WHERE
            company = 'xxxx');

表示找出比xxxx公司所有员工工资都高的name

数据修改,插入,删除

update中的case语句

case
    when p1 then r1
    when p2 then r2
    when p3 then r3
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容