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

版本声明:本文为作者原创文章,转载请注明出处! 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、练习题反复实践、温习

命名规则

在书写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(字符)的缩写,是用来指定存储字符串的列的数据类型(字符类型)。括号中指定该列可以存储的字符串的最大长度,字符串超出最大长度的部分是无法输入到该列中的。
    字符串是以定长字符串的形式存储在被指定为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
    原文地址: https://blog.csdn.net/AndroidXiXi/article/details/78593755
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞