• 计科入门11: 最贵的电影【表格数据】

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 表格数据

    注意:

    1. 今天的程内容并不来自于Coursera

    2. 对应练习的网站也不来自于斯坦福,而是SQL ZooSQL公园】

     

    ----------------------------------------------

    就好像我用中文彼此交流,用英文和外教交流一

    一直在用JavaScript和图形图像交流

    今天我来学用一种新的SQL来和一种新的形式的数据交流:

     

    • 表格数据

    今天的学习,你可以通过编写SQL代码段

    回答下面的问题:

    ----------------------------------------------

    1. 中国的人口是多少?

    2. 爱因斯坦什么时候获得的诺贝尔奖?

    3. 2000年好莱坞都拍了什么电影?

    ----------------------------------------------

     

     

    首先进入到我们的练习网站:SQL ZOO (SQL 公园)

    ----------------------------------------------

    进入网址:http://sqlzoo.net/wiki/SELECT_basicsSQL基础】

    【注意:如果用非常老版本的IE7.0之前,显示的效果可能不一样,建议下载一个Chrome或者Firefox用】

    ----------------------------------------------

    在网页右上角

    我们会看到这个黑色的表格,这个就是我们要处理的

     

    • "世界World"表格数据:

    由于是英文的,给大家翻译一下【其实英文单词也并不难】

    这个表格的结构中:

    1. 第一行是每一列的列名,让我们知道每一列都是什么信息

    2. 第二行向下N多行

    则是这个表格里存在的国家的相关信息

    比如:第一行介绍了阿富汗的的名称,所在大洲,国土面积(平方公里),人口,国民生产总值

    Afghanistan

    阿富汗

    Asia

    652230

    25500100

    20343000000

     

    ---------------------------------------------

    OK, 如下有一个国家:

    他在非洲西南部,这个国家叫做:安哥拉【Angola

     

    • 试一试:

    你能从表格中找到我们安哥拉的人口是多少么?

    ----------------------------------------------

     

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    你一定找到了,他是

    20, 609,294

    ----------------------------------------------

    现在让我们来回顾一下我们是怎么找的?

    1. 从上到下一行一行的过滤

    2. 对于每一行,看它的国家名称 【name】列是不是Angola

    3. 如果是,就找这一行的人口 【population】列的值,就是安哥拉的人口

    ----------------------------------------------

    下流程图描述了比较

     

    • 完整的过程

    ----------------------------------------------

    我们的过程可以

     

    • 简化成:
    1. 扫描表中每一行 【从上到下一行一行的扫描我们的World表】

    2. 判断列【判断扫描到的表的name列的值是不是Angola

    3. 显示列【如果是,就显示这一行的population这一列的信息】

    ----------------------------------------------

    OK,这三步确定下来之后,怎么让计算机按照这三步走呢?

    【注意,我们已经不在用JavaScript了,所以我们不能用我们熟悉的FOR循环来做这个操作】

    ----------------------------------------------

    我们要用一种新语言叫做:

     

    • SQL

    对应我们刚才的三个步骤

    我们只需要按照SQL语法写如下三句话就行了:

    步骤

    SQL语法

    意义

    扫描表中每一行

    FROM world

    world表中【from world】得到要扫描的每一行

    判断列

    WHERE name = Angola

    条件是【where】该行 “名字”【name】这一列等于 “安哥拉”【Angola

    显示列

    SELECT population

    选择【select】“人口”【population】那一列显示出来

    注意:因为SQL中没有x=2这种赋值语句,所以判断等于与否只需要一个等号

    ----------------------------------------------

    我们就按照顺序把我们这三句话输入到代码的输入框中看看有什么效果:

    ----------------------------------------------

    FROM world

    WHERE name = Angola

    SELECT population

    ----------------------------------------------

    错误提示:You have an error in your SQL syntax; 意义是:你的SQL中有语法错误

     

    • 我们的错误在哪儿呢?

    讲原因之前

    先跑题一下

    看看中文和英文的一个小小的习惯区别:

    在中文中我们如果需要找朋友的帮忙

    我们习惯说:

    ----------------------------------------------

    如果你有时间,能帮我一下么?【先说前提,再说结果】

    ----------------------------------------------

    但是在英文会更习惯说:

    ----------------------------------------------

    Can you please help me, if you have the time

    你能帮我以下么,如果你有实践的话?【先说结果,再说前提】

    ----------------------------------------------

    我们以上SQL是这样写的:

    SQL语法

    意义

    FROM world

    从世界这个表中

    WHERE name = Angola

    找到安哥拉那一行

    SELECT population

    如果找到了,显示那一行的人口

    语法错误就在于我们用了中文的思维方式

    ----------------------------------------------

    标准的语法如下

    SQL语法

    意义

    SELECT population

    显示找到的那一行的人口

    FROM world

    如果从世界这个表中

    WHERE name = Angola

    能找到安哥拉那一行

    ----------------------------------------------

    改变了语法顺序之后,我们就有结果了

     

    • 但是注意!!!!

    这里提醒大家一下一定要注意:

    只是这样写对于说英语国家的人来说更好理解一些

    所以SQL的发明者让我们这样写了

    实际计算机在运行代码的时候

    还是按照如下顺序运行的

    步骤

    SQL语法

    意义

    扫描表中每一行

    FROM world

    world表中【from world】得到要扫描的每一行

    判断列

    WHERE name = Angola

    条件是【where】该行 “名字”【name】这一列等于 “安哥拉”【Angola

    显示列

    SELECT population

    选择【select】“人口”【population】那一列显示出来

     

    所以大家写SQL的时候先

     

    • 这样考虑问题:
    1. 嗯,要分析哪个表呢?哦world, 那就先写 FROM world

    2. 条件是什么呢?嗯…国家名称必须是安哥拉,那就再写 WHERE name= “Angola”

    3. 要得到什么结果:人口!OK在最上面加一行,写SELECT population

    ----------------------------------------------

    这个先写后两句

    再写第一句的方法

    虽然开始可能有些别扭

    但是习惯就好了

    而且会让你今后复杂SQL的书写变得很容易

     

     

    • 练习1:
    1. 找到中国的人口,你的结果应该等于:1347350000

    2. 找到法国(France)的面积,你的结果应该等于:640679

    3. 得到欧洲(Europe)所有的国家,你的结果应该等于:

    name

    Albania

    Andorra

    Azerbaijan

    Austria

    Armenia

    Belgium

    Bosnia and Herzegovina

    Bulgaria

    有好多行

     

     

     

    • 练习2

    进入网页:http://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial 这里面有一个表叫做 nobel

    他包含有3列信息(yr年,subject奖励类别,winner获奖者)

    期中奖励类别包括:Chemistry 化学奖,Literature 文学奖,Medicine 医学奖

    1. 1991年的所有诺贝尔奖获得信息【注意如果要最终显示ABC列信息,只需要Select A, B, C,或者Select *显示所有信息】

    YR

    SUBJECT

    WINNER

    1991

    Medicine

    Erwin Neher

    1991

    Medicine

    Bert Sakmann

    1991

    Peace

    Aung San Suu Kyi

    1991

    Physics

    Pierre-Gilles de Gennes

    1991

    Chemistry

    Richard R. Ernst

    1991

    Economics

    Ronald H. Coase

    1991

    Literature

    Nadine Gordimer

     

    1. 爱因斯坦“Albert Einstein获得的诺贝尔奖?

    yr

    subject

    winner

    1921

    Physics

    Albert Einstein

     

    1. 居里夫人“Marie Curie获得了多少个诺贝尔奖?

    yr

    subject

    winner

    1911

    Chemistry

    Marie Curie

    1903

    Physics

    Marie Curie

     

     

     

     

    • 练习3

    进入网页: http://sqlzoo.net/wiki/More_JOIN_operations

    我们会发现这一页提供的数据表有三个:movie电影,actor所有演员,casting某个电影的演员

    具体的数据没有写出来,我们不管后两个表,只管第一个movie

    movie(id号,title电影名称,yr年份,director导演,budget预算,gross票房)

    1. 票房是:1, 843, 201, 268 【十八亿多,注意逗号不要输入进去】的影是什么?

    2. 票房是:2, 147, 483, 647【二十多亿影】是哪个?【呵呵,比泰坦尼克更多的那个是哪个呢?】

    • 标签:
    • 人口
    • 显示
    • 练习
    • 数据
    • world
    • 表格
    • 一行
    • 学习元
    • 注意
    • 20130714215940
    • angola
    • sql
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部