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');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章