《SQL必知必会》学习笔记(二):数据库基础和简单SELECT

摘要:本文主要是对《SQL必知必会》Lesson 1-3学习总结,主要包括数据库的相关概念,简单的SELECT语句(没有WHERE)以及带ORDER BY的排序检索。

1、数据库相关概念

      数据库,一个存储有组织有结构数据的容器。数据库管理系统(DBMS)是用来管理数据库的一个软件,包括一些数据库的创建、删除等等。

      表(Table),一种结构化数据的容器,里面存储着多条结构化的记录。

      列(Column),一个单一的特定类型的数据域,一个表中的记录由一个或多个列构成,这也就是所谓的结构化。

      行(Row),表中的一条记录叫做一行,它由一个或多个列组成,是结构化的,表是行的集合。如果把行比作一个结构体类型,那么表便是该结构体的数组。

      主键(Primary Key),一列或者多列,能够唯一的标识表中一条记录的数据域。尽管主键不是一定要求每张表结构都有,但经验告诉我们,务必每张表都定义主键,便于数据库的操作和管理。那么,什么样的数据域(列)可以定义为主键呢?只要满足下面所列条件,即可定义为主键:

       (1)任意两行都不具有相同的主键值;

       (2)每个行的主键值不允许为NULL;

       (3)主键列中的值不允许修改或者更新;

       (4)主键值不能被二次重用;也即,如果某行从表中删除,它的主键值不能赋给以后的新行作为主键值。

       SQL,Structured Query Language的缩写,结构化查询语言,专门用来和数据库通信的语言。

2、简单SELECT语句

      SELECT语句,它的功能是从数据库中检索数据,也即读数据,并不作修改。可以检索单个列,也可以检索多个列,也可以附加一些过滤规则和条件;当然,这里介绍的简单SELECT语句没有包括条件过滤语句,而且是单表检索。

   2.1  检索单列

      语法格式:   SELECT   列名    FROM  表名        --尾部的’;‘不要忘记,SELECT 和 FROM  我们称为SQL的关键字

      看个例子:从Products中检索所有的产品名称,SELECT  prod_name  FROM Products;  结果如下图左图所示:

                                

       在书写sql语句的时候,可以使用一个大长行把所有语句写下来,但通常不易读;像其他的语言一样,可以采用换行缩进,mysql是忽略空白符的,这样一目了然。

    2.2 检索多个列

       语法格式:SELECT 列名1 [, 列名2, …]  FROM 表名;        --在选择多个列时,注意列名之间用’,‘隔开

       看个例子,我们检索产品id,产品名和产品的价格,SELECT prod_name, prod_price  FROM  Products;  如上图右图所示。

    2.3 检索所有列

       语法格式:  SELECT * FROM  表名

                      或 SELECT 列名1,列名2, …… , 列名n  FROM 表名;      --这里的表共有n个列,全部一一列出
       第一种格式使用通配符 ‘ * ’ 代表所有一个表中所有列,检索的列名位置和表定义时的列名顺序一致;第二种格式是将所有列名写出来,这样检索出来的列名的位置和sql语句中列名位置一致。

       看个例子,我们检索Orders表中所有的列,用两种方式:(a)SELECT *  FROM Orders;  (b) SELECT order_num, order_date, cust_id  FROM Orders;  (c)SELECT order_num, cust_id, order_date  FROM Orders;   其中c是为了作对比,检索出来的列的位置不一样。如下图所示:

          

3、排序检索

      前面两部分讲了简单的SELECT语句,但是有时候我们希望检索的结果按照某个字段或多个字段有序排列,在这里需要用到ORDER BY子句。

   3.1 单列排序

      语法格式:SELECT 列名  FROM  表名   ORDER BY 列名

      看个例子,从Products中检索所有的产品名称和价格,并按照价格排序:SELECT prod_name, prod_price  FROM Products ORDER BY prod_price; 如下图所示,

              VS  

      上面左图是使用了ORDER BY子句,右图没有使用,可以看到左边是有序的。除了按照单列,也可以按照多列进行排序。

   3.2 多列排序

      语法格式:SELECT 列名 FROM 表名  ORDER BY  列名1,列名2,…,列名n;

      看个例子,检索prod_id, prod_price, prod_name,并首先按价格排序,然后再按名称排序:  SELECT prod_id, prod_price, prod_name  FROM Products  ORDER BY prod_price, prod_name; 结果如下图所示:

     

       可以看到,首先按价格有序;其次,价格相同的,再按照name排序。这类似于数据结构中的基数排序,即多关键字排序。

    3.3 排序方向

       上面排序的例子,我们发现,排序都是从小到大排序,即升序,这是ORDER BY子句默认的排序方向,那么如果我们想某列从大到小排序,即降序,该怎么办呢?我们只需要在该列后加上关键词DESC,descending的缩写。升序的关键词为ASC, ascending的缩写。注意:DESC或ASC只对其紧邻的前面的列起作用,若是需要指定多个列的排序方向,则需要在每个列后都指定方向。

       语法格式: ORDER BY 列名1  DESC|ASC, 列名2  DESC | ASC, …;

       看个例子,我们按照检索的prod_price价格降序排列: SELECT prod_name, prod_price  FROM Products ORDER BY prod_price DESC; 如下图左图所示:

            

      同时,我们可以对3.2中的例子进行改变,先按照price升序排序,再按照price降序排列,如上图右图所示。

      注意:ORDER BY子句必须是SELECT语句中的最后一个子句。
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值