您的位置:首页 > 数据库

SQL基础教程学习(二)开始学习SQL语句

2017-11-21 16:10 357 查看
版本声明:本文为作者原创文章,转载请注明出处! http://blog.csdn.net/AndroidXiXi

本文根据《SQL基础教程第二版》(作者:[日本]MICK)的部分内容实践、整理得出,旨在对所学知识进行梳理

全面系统学习请参考原著书籍http://product.dangdang.com/25094702.html

SQL概述

书中要学习的SQL(Structured Query Language,结构化查询语言)是用来操作关系型数据库的语言,国际化标准组织(ISO)为SQL制定了相关的标准,以此为基准的SQL被称为标准SQL。虽然有时需要根据不同的RDBMS来编写特定的SQL语句,但是大同小异,学会标准的SQL语句就可以在各种RDBMS中书写SQL语句了

SQL语句及其种类

SQL语句用关键字、表名、列名等组合而成的一条语句来描述操作的内容

关键字:指那些含义或者使用方法已经事先被定义好的英语单词

根据RDBMS赋予的指令种类的不同,SQL语句可以分为:

DDL
DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表等对象,包含以下几种:
CREATE:创建数据库以及表等对象
DROP:删除数据库和表等对象
ALTER:修改数据库和表等对象的结构

DML
DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录,包含以下几种:
SELECT:查询表中的数据
INSERT:向表中插入新数据
UPDATE:更新表中的数据
DELETE:删除表中的数据

DCL
DCL(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定,包含以下几种:
COMMIT:确认对数据库中的数据进行的变更
ROLLBACK:取消对数据库中的数据进行的变更
GRANT:赋予用户操作权限
REVOKE:取消用户的操作权限

SQL的基本书写规则

SQL语句要以分号(;)结尾
在RDBMS中,SQL语句是逐条执行的,一条SQL语句可以描述一个数据库操作

SQL语句不区分大小写
SQL不区分关键字的大小写,SELECT、select都可以,但是为了区分SQL语句的其他部分,以及养成良好的代码编写习惯,可以采用以下的书写规则:
- 关键字大写
- 表名的首字母大写
- 其余部分小写
但是想要操作数据库中的数据需要区分大小写,例如字符串数据’Computer’、’COMPUTER’、’computer’三者是不一样的

常数的书写方式是固定的
常数:在SQL语句中直接书写的字符串、日期或者数字称为常数
字符串和日期常数需要使用单引号( ’ )括起来,如’abc’,’2017-11-21’
数字常数无须加注单引号,直接书写数字即可

单词需要用半角空格或者换行来分隔
SQL语句的单词之间需使用半角空格或换行符来进行分隔,但是不能使用全角空格作为单词的分隔符,否则会发生错误,请注意当前输入法的状态

接下来开始SQL语句书写的学习

环境的搭建

书中作者推荐、使用的是PostgreSQL,笔者实践使用的是MySQL,安装相关环境可以通过互联网搜索下载资源和安装方法。笔者认为,SQL的学习需要对各种情况动手实践,方能加深对SQL的理解,建议将书中的相关Demo、练习题反复实践、温习

[b]命名规则[/b]

在书写SQL之前可以先约定相关命名规则

只能使用半角英文字母、数字、下划线(_)作为数据库、表、列的名称,例如标准SQL不允许使用连字符,例如列名不能写成product-id

名称必须以半角英文字母作为开头

在同一个数据库中不能创建两个相同名称的表,在同一个表中不能创建两个相同名称的列

数据库的创建(CREATE DATABASE 语句)

数据存储于数据库中,首先要进行对数据库的创建,执行CREATE DATABASE语句就可以在RDBMS上创建数据库了,如下:

-- 创建数据库的语法
CREATE DATABASE <数据库名称>;

-- 创建数据库shop
CREATE DATABASE shop;


表的创建

执行CREATE TABLE语句可以在数据库中创建表,如下:

-- 创建表的语法
-- 每一列的数据类型是必须的,有时也需要为列设置约束条件
CREATE TABLE <表名>
<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
.
.
.
<该表的约束1>,<该表的约束2>...);

-- 创建Product表
CREATE TABLE Product(
product_id     CHAR(4)       NOT NULL,
product_name   VARCHAR(100)  NOT NULL,
product_type   VARCHAR(32)   NOT NULL,
sale_price     INTEGER       ,
purchase_price INTEGER       ,
regist_date    DATE          ,
PRIMARY KEY(product_id)
);


数据类型的指定

列名右边的INTEGER、CHAR等关键字,用来声明该列的数据类型,所有的列都必须指定数据类型
数据类型表示数据的种类,包括数字型、字符型和日期型等等,每一列不能存储与该列数据类型不符的数据,常见的几种基本数据类型:

INTEGER型
用来指定存储整数的列的数据类型(数字型),不能存储小数

CHAR型
- CHAR是CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符类型)。括号中指定该列可以存储的字符串
4000
的最大长度,字符串超出最大长度的部分是无法输入到该列中的。
- 字符串是以定长字符串的形式存储在被指定为CHAR型的列中,当列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足。例如,想CHAR(8)的列中输入’abc’时,数据库会以’abc ‘(abc之后五个半角空格)的形式保存起来。
- 数据区分大小写

VARCHAR型
- 和CHAR类型一样,VARCHAR型也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过在括号中指定字符串的最大长度。
- 和CHAR不同的是,VARCHAR是以可变长字符串的形式来保存字符串的,当字符数未达到最大长度的时候,并不会用半角空格补足
- 和CHAR一样,数据区分大小写

DATE型
用来指定存储日期(年月日)的列的数据类型(日期型)

约束的设置

product_id  CHAR(4)  NOT NULL,


约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能,例如上个SQL语句示例中的“NOT NULL”,称为“NOT NULL约束”。NULL是代表空白(无记录)的关键字,在NULL之前加上了表示否定的NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束

PRIMARY KEY (product_id)


上例中“PRIMARY_KEY”用来指定主键约束
:在指定特定数据时使用的列的组合。
主键:可以特定一行数据的列,相当于一行数据的唯一标识

表的删除(DROP TABLE语句)

可以使用DROP TABLE语句删除指定名称的表

# 删除表语法
DROP TABLE <表名>;

# 删除Product表
DROP TABLE Product;


特别注意:删除的表是无法恢复,现实中可能会引发灾难,数据无价,三思而行

表定义的更新(ALTER TABLE 语句)

表的结构是可以改变的,通过ALTER TABLE 语句变更表的定义,这样就不用删除表,重新创建,很方便

可以通过ALTER TABLE ADD为表增加一个列

#ALTER TABLE ADD 语法
ALTER TABLE <表名> ADD COLUMN <列的定义>;

#MySQL向表中添加一个列
ALTER TABLE Product ADD product_test VARCHAR(100);
ALTER TABLE Product ADD COLUMN product_test VARCHAR(100);

#MySQL添加多个列
ALTER TABLE Product ADD(
product_testA INTEGER,
product_testB CHAR(100),
product_testC DATE
);


可以用ALTER TABLE DROP删除指定列

#ALTER TABLE DROP 语法
ALTER TABLE <表名> DROP COLUMN <列名>;

#MySQL从表中删除一个列
ALTER TABLE Product DROP product_test;
ALTER TABLE Product DROP product_testA;
ALTER TABLE Product DROP product_testB;
ALTER TABLE Product DROP product_testC;

#按照上面添加多列的方式推测删除多列的方法
#但是MySQL无法运行,原因未知
#ALTER TABLE Product DROP (
#   product_testA,
#   product_testB,
#   product_testC
#);


注意,通过ALTER TABLE对表定义的变更后是无法恢复的

ALTER TABLE操作的对象是表的列名(字段名),如果表名穿件出现问题,就需要使用RENAME来变更表名

# MySQL语法
sp_rename 'Poduct' 'Product';


可以使用INSERT向表中插入一些数据

#向表中插入数据
INSERT INTO product values('0001','T恤衫','衣服',1000,500,'2009-09-20');
INSERT INTO product values('0002','打孔器','办公用品',500,320,'2009-09-11');
INSERT INTO product values('0003','运动T恤','衣服',4000,2800,NULL);
INSERT INTO product values('0004','菜刀','厨房用具',3000,2800,'2009-09-20');
INSERT INTO product values('0005','高压锅','厨房用具',6800,5000,'2009-01-15');
INSERT INTO product values('0006','叉子','厨房用具',500,null,'2009-09-20');
INSERT INTO product values('0007','擦菜板','厨房用具',880,790,'2008-04-28');
INSERT INTO product values('0008','圆珠笔','办公用品',100,NULL,'2009-11-11');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 数据库 基础