从今天开始,就要正式和SQL语句接触了。我们主要以MySQL的语句举例说明,其它类型的RDBMS语句也大同小异,只有个别地方有所区别。
SQL书写基本规则
1.每一条语句,最后必须以分号(;)结尾。
2.语句的关键字(具有一定功能)、表名、列名都对大小写不敏感,也就是说不区分大小写。尽管如此,为了便于理解,有时也可将关键字和表的首字母大写。
3.语句的内容之间,要用空格分开,不要连在一起写。
数据库和表的创建
首先我们当然要建立一个自己的数据库了,像之前那样用命令行登录MySQL。然后用create database name;语句来建立你数据库,这里的name就是你要创建的库的名字:
这里我们建立了一个名为“shell”的数据库。库的名称包括之后的表名、列名,只能用英文字母、数字和下划线(_)来创建。之后我们就要在库里面创建表了,需要先声明表名、列名等其他内容:
如上图,我们创建了一个叫做‘cargo’的表,下面有3列内容:最左边是列的名字,可以看到共有6列,中间是列的数据类型,右边是列的约束条件,最下面一行primary key也是约束条件。
其中,列的数据类型必须声明。上图共出现了4种数据类型,我们挨个来看。首先是CHAR(3),代表固定长度字符串,括号中的3代表字符串的最大长度为3,若长度小于3,会自动补齐。其次是DATE,代表日期类型,意思就是date这一列都是日期类的数据。接着是VARCHAR(50),代表可变长度字符串,括号中的50同样表示最大长度为50,但若长度小于50,不会自动补齐。最后是INTEGER,代表整数型,意味着这一列只能输入整数,不能输入小数。
再来看看约束的设置,上图中id、name、type这三列设置了NOT NULL的约束,意为这几列的数据不能为空,必须得填上。最后一行PRIMARY KEY是主键约束,主键保证这一列数据唯一。也就是说id列中的数据不能重复,唯一确定一行。
至此,我们就将表格的框架搭好了,下面就该往“shell”表里插入数据了:
start transaction表明要开始的事务,最后的commit表示提交事务。中间就是我们要插入的语句,insert into + 表名 + values(数据);插入时都是按一行一行来插,所以数据必须与其对应的列的类型相匹配。在表名和数据值之间我们省略了列名,意味着我们要对所有的列插入数据;如果只想对个别列插入数据,在表名后面加上对应的列的名字即可。
增删改查
插入数据后,我们如何查看表中的内容呢?可以用以下语句来实现:
select 后面的*代表选择所有列(数据量较大时,不建议这样写),一般我们选取其中几列就可以:
如果这个表作废,我们想删除掉呢?可以使用
drop table shell;
需要注意的是,删除掉的表是无法恢复的,所以要谨慎操作。
如果想在表中添加某些列呢?
alter table shell add column 列名 数据类型;
删除某一列:
alter table shell drop column 列名;
改变表的名字:
rename table shell to 新表名;
为列设定别名
有时为了方便查询和便于理解,我们会给列名设定一个其他的名字。只需在原列名后加入AS关键字即可:
注意,如果别名是中文,必须用双引号(英文状态)括起来才可以。as关键字同样不区分大小写。
select语句后也可以有常数:
如上图,结果会将每一行都加入此常数。这个常数可以是字符串、数字,也可以是日期。
删除重复行
如果我想知道这个表总共有多少种类型的数码产品呢?我们需要用distinct关键字来去重:
可以看到,去重后,共有5种类型。原来我们有6行数据,有2行是重复类型。如果distinct作用于多列,只有这几列的行数据完全一致,才会被删除。
where语句筛选行
之前我们的查询结果都是返回的所有行,如果我只想要其中一部分的数据呢?比如:
上图只返回了电脑类型的一些列,而其他手机、耳机等类别被where语句筛选掉了,where关键字后面跟一些条件表达式即可。
最后需要注意的是,SQL中语句的书写顺序是固定的,不可随意更改。正确的顺序如下:
select...
from...
where...;
一个语句最后的分号必须要写,切记!
今天的内容到此结束,SQL语句的长征才刚刚开始。