sql操作資料庫(1)–>DDL、DML、DQL

SQL 操作資料庫

概念:結構化查詢語言 Structured Quary Language

作用:

 1.是一種資料庫的查詢的標準,對所有的資料庫都支援

 2.不同的資料庫SQL語句可能有點不同 (方言),mysql oracle DB2

sql語句分類

 1.DDL:操作資料庫、表  數據定義語言 Data Definition Language

 2.DML:增刪改表中的記錄 數據操作語言 Data Manipulation Language

 3.DQL: 查詢表中的記錄 數據查詢語言 Data Query language

 4.DCL:管理用戶與授權  數據控制語言 Data Control language

DDL 語言

1.操作資料庫 CRUD操作

 1.創建資料庫 方式有很多種: C —create

  • create database 資料庫名;

  • create database if not exists 資料庫名;// 創建的時候先判斷資料庫是否存在

  • create database 資料庫名 character set 編碼字符集;// 創建資料庫的指定編碼字符集

-- 分號 一般是sql語句的結束標誌
create DATABASE java31;
-- 創建資料庫的第二種方式 create database if not exists 資料庫名;
create database if not EXISTS apartment;
-- 創建資料庫的第三種方式  create database 資料庫名 character set 編碼字符集;
create database school character set utf8;
-- 三者組合到一起表達
create database if not EXISTS college character set utf8;

 2. 查詢 r —>retrieve

  • 查詢當前資料庫伺服器的所有的資料庫
    show databases;

  • 查詢某個資料庫的編碼字符集:查詢某個創建的資料庫的編碼字符集
    show create database 資料庫名稱;

 3.修改 u–>update

  • 修改資料庫的編碼字符集
    alter database 資料庫名稱 character set 編碼字符集;
-- alter  database 資料庫名稱 character set 編碼字符集;
alter database college character set gbk;

 4. 刪除 d –>delete drop

  • 刪除資料庫
    drop database 資料庫名稱;

  • 判斷資料庫是否存在,如果存在刪除掉
    drop database if exists 資料庫名稱;

--  drop database if exists 資料庫名稱;
drop database if EXISTS school;
  1. 操作表

 1. 創建表 C –> create

  • 語法:

    create table 表名(

    ​ 列名1 數據類型,

    ​ 列名2 數據類型,

    ​ 。。。。。。。

    );

  • 數據類型

    • 整數類型 tinyint(微整形) 8位 smallint(小整形)16位 mediumint(中整形)24位 int(integer) 整形32位

    • 小數類型 double 8個位元組 float 4個位元組

    • 日期類型 date (年月日) time (時分秒) datetime (年月日時分秒) timestamp 時間戳 年月日時分秒

    時間戳,如果該欄位為時間戳類型,沒有賦值或者該欄位值為null,則默認使用系統當前的時間自動賦值。一般情況一張表中只能有一個欄位使用時間戳數據類型。

  - 字元串類型   char(固定長度的字元串)     varchar(可變長度的字元串)  使用幾個字元就占幾個

  - 二進位類型    tinyblob(允許0~255個位元組)   big large  blob(允許0~65535個位元組)  longblob(非常大)

  - 文本類型      tinytext (允許長度為0~255個位元組)  text(允許0~65535個位元組) longtext(非常大)

 2. 查看錶 查詢 retrieve

  • show tables 查看當前使用的資料庫下面的所有的表

  • desc 表名; 描述該表的結構

  • 查看創建的表 show create table 表名;—->查看該表創建使用到的sql語句

  • 快速創建一個表結構相同的表 create table 新表名 like 舊錶名;

 3. 修改 update

  • 修改表名 alter
    alter table 舊錶名 rename to 新表名;

  • 修改表的字符集
    alter table 表名 character set 編碼字符集;

  • 添加一列欄位 add
    alter table 表名 add 列名 數據類型;

  • 刪除一列 drop
    alter table 表名 drop 列名;

  • 修改列名 數據類型

    • change alter table 表名 change 舊列名 新列名 新數據類型;
    • modify alter table 表名 modify 列名 新數據類型;

 4. 刪除 delete

  • 刪除表 drop table 表名;

  • 刪除判斷表是否存在 drop table if exists 表名;

大多數情況下我們是直接藉助於圖形化管理工具 Navicat直接操作。

DML 增刪改資料庫中的表的數據

  1. 添加數據:

    • 語法:

      • ​ insert into 表名(列名1,列名2,……列名n) values(值1,值2,……值n);

      • ​ 注意事項:

        • 列名和後面值的類型要保持一致。

        • 如果表名後面沒有指定列名,默認為給該表中的所有的列添加對應的值。注意依然是有順序的。

          insert into 表名 values(值1,值2,……值n);

        • 除了數字類型外(int,double),其他類型一律要使用引號(單引號和雙引號都可以)引起來。

  2. 刪除數據:

    • 語法: delete

      delete from 表名 [where 條件];

    • 注意事項:

      • 如果後面不跟條件 ,則刪除整張表的數據

      • 刪除表的所有的記錄 delete from student / truncate table 表名;(底層是先把表刪除掉,然後再創建一張一模一樣的表)

      • 如果條件中的欄位值有重複的,凡是符合條件的都刪除。

  3. 修改數據:update

    • 語法:

      update 表名 set 列名1 = 替換值1, 列名2 =替換值2,…..列名n = 替換值n [where 條件];

    • 注意:

      • 如果不帶條件,則會修改表中的所有記錄

DQL 查詢表中的記錄 select …. from …..

  • 語法

    ​ select 需要查詢的資訊(列名1,列名2,…….列名n) / * from 表名 [where 條件];

    ​ 完善下:

    ​ select
    ​ 欄位列表

    ​ from
    表名列表

    ​ where
    條件列表

    ​ group by
    分組欄位

       having 
          分組之後的條件
    

    ​ limit
    分頁限定

  • 去重查詢 distinct

    • 使用關鍵字 distinct 去掉重複的記錄

    • 語法格式: select distinct 欄位名 from 表名;

      例如:

      -- 查詢本班同學都來自於哪些地方法?
      select distinct address from student;
      
  • 查詢的結果值可以參與數學運算

  • ifnull表達式 ifnull(表達式1,表達式2)

    ​ 表達式1: 代表那個欄位需要判斷是否為null

    ​ 表達式2:如果該欄位值為null 後面的進行替換

  • 起別名操作

    ​ 語法 as 也可以省略不寫
    ​ 表名 as 新的名字

    ​ 查詢出來的欄位資訊 as 新名字

    ​ 當你查詢同一張表,並且進行多次查詢的時候可以使用起別名來實現

    • 對指定列進行別名操作: select 列名1 as 新名字,列名2 as 新名字,….. from 表名;

    • 對錶和列同時進行別名操作: select 列名1 as 新名字,列名2 as 新名字,….. from 表名 as 新表名;

      如:對學生表進行操作:查詢學生表的姓名和年齡;

      select 
          s.age as 年齡,
          s.name as 姓名
      from 
           student as s;     
      -- as關鍵字可以省略不寫。     
      

    ​ 注意:

    ​ 起別名 只是在sql語句中方便查詢使用的,並不會對數據原來的文件起到任何影響