(原创)SQL总结(一)

最近刚刚刷完SQL必知必会,按照代码走了一遍,感觉并不难,主要是需要注意的地方挺多的,现在就把需要的记录一下。
就按照书中目录的顺序来。

数据库基础

按照之前的随笔,我们已经生成了数据库和相应的表。在这里,数据库就是orderdb,表就是customers,orders,orderitems等。

概念

数据库:保存有组织的数据的容器,注意数据库不是软件
表:结构化的文件,可以存储某种特定类型的数据,数据库的每个表都有一个名字来标识自己
模式:关于数据库和表的布局及特性的信息
列:列存储表中某部分的信息,比如我们之前的cust_id,cust_name等都是表customers的列
行:表中的数据按行存储,每个记录存储在自己的行内,行就是表的一个记录。又称为数据库记录。
主键:每一行都有一列或者几列唯一标识自己,表中的任何列都可以作为主键,只要满足以下条件:
任意两行都不具有相同的主键值
每一行都必须有主键,主键列不允许NULL
主键列的值不允许更新或者修改
主键值不能重用
SQL是专门用来与数据库沟通的语言

检索数据SELECT

最常使用的就是SELECT,从一个或多个表中检索信息

检索单个列、多个列、所有列

SELECT prod_id,prod_name FROM Products;
其中prod_id prod_name是表Products中的列,在这里我们通常将SQL的关键词设置为大写,表设置为首字母大写,列设置为小写,但这只是为了方便查看,SQL本身不区分大小写。
另外,SQL语句后必须加分号!
SQL的语句可以写为一行,也可以写成多行,多行的时候只需要在最后的一行后面加上分号。
SELECT * FROM Products; 表示检索表Products所有列。

检索不同的值

如果我们想检索出某一列的不同的取值,而不是将该列下的所有行的值都得出,那么就用下面的语句
SELECT DISTINCT proud_id FROM Products;
注意,如果写成SELECT DISTINCT proud_id,prod_name FROM Products;那么DISTINCT作用于两个列,输出的就是两个列复合的不同值的行。

限制结果

限制不会输出全部数据,而是输出其中的一部分,比如前五个或者后五个,此时不同的数据库的语法不同,以MYSQL为例:
SELECT prod_name FROM Products LIMIT 5;输出前五个
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;指示返回从第5行起的5行数据,不包括第5行,第一个数字是检索的行数,第二个数字是指从哪儿开始。
注意:第一个检索的是第0行,而不是第1行。
MYSQL支持简化的搜索,即用LIMIT3,4代替LIMIT 4 OFFSET 3;

注释

SQL用--表示注释,注意--和对应的注释之间有一个空格,比如“-- 这是一条注释”
在一行的开始添加#将使得整行作为注释,用/..../表示多行注释。

指定排序方向

排序数据

对于之前select出的数据没有特定顺序,可以使用ORDER BY加一个或多个列的名字,表示对输出进行排序
SELECT prod_id,prod_name FROM Products ORDER BY prod_id;将以prod_id对数据进行排序输出
SELECT prod_id,prod_name,prod_price FROM Products ORDER BY prod_id,prod_name;将以两个列prod_id,prod_price进行排序输出。

按列位置进行排序

SELECT prod_id,prod_name,prod_price FROM Products ORDER BY 2,3;表示按照name和price两列排序输出

排序方向

默认为升序
SELECT prod_id,prod_name FROM Products ORDER BY prod_id DESC;表示降序
SELECT prod_id,prod_name,prod_price FROM Products ORDER BY prod_id DESC,prod_name;注意DESC只作用于它前面的一个列名。
如果想对所有列都按降序,那么每个列后面都要跟上DESC。

posted @ 2018-05-09 21:25  歪胡子的日常  阅读(197)  评论(0编辑  收藏  举报