DML(Data Manipulation Language、資料操作語言),用於新增、刪除、更新和查詢資料庫記

正霜霜儿發表於2024-04-02
****************************************************************************************
DML(Data Manipulation Language、資料操作語言),用於新增、刪除、更新和查詢資料庫記
錄,並檢查資料完整性。
主要的語句關鍵字包括 INSERTDELETEUPDATESELECT 等。
SELECT是SQL語言的基礎,最為重要。

資料匯入指令;source d:\xxxx.sql 
1. 基本的select 語句
    select 標識選擇哪些列
    FROM 標識從哪個表中選擇
    選擇全部列: select * from students;
    選擇特定的列: select id, last_name from students; 
    列的別名:  select last_name ln from students; -- ln 就是別名
    去除重複行:select DISTINCT last_name from students; -- DISTINCT 其實是對後面所有列名的組合進行去重
    我們需要保證表中的欄位、表名等沒有和保留字、資料庫系統或常用方法衝突。如果真的相同,請在SQL語句中使用一對``(著重號)引起來。
2. 顯示錶結構
    desc 表名稱 
WHERE 語句
    select 欄位1,欄位2 FROM 表名 where 過濾條件
3. 排序資料
3.1 排序規則
    使用order by 子句排序
        ASC:升序;DESC:降序 ;ORDER BY 子句在select 語句的結尾
        select id,last_name, email from students ORDER BY id DESC ;
        SELECT id, last_name,email from students order by class_id, id ASC; 
        -- 多表排序:在對多列進行排序的時候,首先排序的第一列必須有相同的列值,才會對第二列進行排序。如果第
    --  列資料中所有值都是唯一的,將不再對第二列進行排序。
3.2 分頁 
    LIMIT 位置偏移量,行數
    *公式:(當前頁數-1*每頁條數,每頁條數
    -- 前10條記錄:
    SELECT * FROM 表名 LIMIT 0,10;或者 SELECT * FROM 表名 LIMIT 10;
    -- 第11至20條記錄:
    SELECT * FROM 表名 LIMIT 10,10;
    -- 第21至30條記錄:
    SELECT * FROM 表名 LIMIT 20,10;
    注意:LIMIT 子句必須放在整個SELECT語句的最後!
4. REGEXP 運算子
    (1)‘^’匹配以該字元後面的字元開頭的字串。
            查詢last_name 以字母a 為開頭的記錄:
            select * from students WHERE last_name REGEXP '^a';
    (2)‘$’匹配以該字元前面的字元結尾的字串。
            查詢last_name 以字母b 為開頭的記錄:
            select * from students WHERE last_name REGEXP 'b$';
    (3)‘.’匹配任何一個單字元。
            查詢last_name中包含x和y的記錄:
            select * from students WHERE last_name REGEXP 'x.y';
    (4)“[...]”匹配在方括號內的任何字元。例如,“[abc]”匹配“a”或“b”或“c”。為了命名字元的範圍,使用一個‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字。
            查詢last_name欄位中包含字母‘o’或者‘t’的記錄,SQL語句如下:
            select * from students WHERE last_name REGEXP '[ot]';
    (5)‘*’匹配零個或多個在它前面的字元。例如,“x*”匹配任何數量的‘x’字元,“[0-9]*”匹配任何數量的數字,而“*”匹配任何數量的任何字元。
   (6)使用{n,}或者{n,m}來指定字串連續出現的次數 “字串{n,}”表示至少匹配n次前面的字元;“字串
      {n,m}”表示匹配前面的字串不少於n次,不多於m次。例如,a{2,}表示字母a連續出現至少2次,也可以大於2次;a{2,4}表示字母a連續出現最少2次,最多不能超過4次。
             在fruits表中,查詢f_name欄位值出現字母‘x’至少2次的記錄,SQL語句如下:
             SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';
             在fruits表中,查詢f_name欄位值出現字串“ba”最少1次、最多3次的記錄,SQL語句如下:
             SELECT * FROM fruits WHERE fname REGEXP 'ba{1,3}';
    5. 建立和管理表
    5.1 一條資料儲存過程: 建立資料庫-->確認欄位--> 建立資料表--> 插入資料
            從Mysql 資料庫系統從大到小依次為: 資料庫伺服器,資料庫,資料表,資料表的行和列
    5.2 建立和管理資料庫
            方式一:建立資料庫:create database 資料庫名;
            方式二:建立資料庫並指定字符集:create database 資料庫名 character set 字符集
            方式三:判斷資料庫是否存在,不存在則建立資料庫(推薦 )create DATABASE if not EXISTS 資料名
    5.3 使用資料庫
            檢視當前所有資料庫: show databases;
            檢視當前正在使用的資料庫:select database atguigudb;
            檢視指定資料庫下所有的表:show tables from 資料庫名
            使用/切換資料庫:USE 資料庫名;
    5.4 修改資料庫
            更改資料庫字符集:ALTER database 資料庫名 character set 字符集 #比如:gbk,utf8. 
            刪除指定資料庫: drop database 資料庫名;
            刪除指定資料庫 :drop database if exists 資料庫名;
    6. 建立表 
    6.1.1 建立表方式一
            create table [if not exists] 表名(
            欄位1,資料型別 [約束條件][預設值],
            欄位2,資料型別 [約束條件][預設值],
            欄位3,資料型別 [約束條件][預設值],
            ......
            表約束條件
            );-- 加上了IF NOT EXISTS關鍵字,則表示:如果當前資料庫中不存在要建立的資料表,則建立資料表;如果當前資料庫中已經存在要建立的資料表,則忽略建表語句,不再建立資料表。
            必須指定:表名 列名(或欄位名),資料型別,長度
            可選指定:約束條件,預設值
            create table employee1(
            id int primary key,
            last_name varchar(25),
            email varchar(35),
            hire_date DATE,
            salary double );
            desc employee1
6.1.2 建立表方式二
            使用AS subquery 選項
            指定的列和子查詢中的列要一一對應,透過列名和預設定義列
            CREATE table emp1 as SELECT * from employees; d
            CREATE table emp2 as select employee_id,last_name,salary*12 annsal from employees where department_id = 80;
          SELECT * from emp2;
6.2 使用alter table 語句修改已經存在的資料表的結構
6.2.1 追加列
            alter table 表名 add column欄位名 欄位型別;
            alter table emp2 add hire_date DATE;
            修改列
            alter table 表名 modify column 欄位名1 欄位型別
            alter table emp2 modify last_name VARCHAR(30);
            重新命名列
            alter table 表名 change column 列名 新列名 新資料型別
            alter table emp2 change last_name `name` varchar(25);
            刪除一個列
            alter table 表名 drop [column]欄位名
            alter table emp2 drop annsal;
6.3   刪除表
            drop table if exists 表名
            drop table if exists emp1 
6.4   清空表
            truncate table -- 刪除表中所有資料,釋放表的儲存空間 不建議使用
            truncate語句不能回滾,而使用delete 語句刪除資料可以回滾。
        
7 資料處理之增刪改
7.1 插入資料
        方式一:values的方式新增,使用這種語法一次只能向表中插入一條資料
        情況1 :為表中的所有欄位按預設順序插入資料,插入的值的順序必須和資料表中定義時的順序一致
        insert into 表名 VALUES(value1, value2,value3......)
        情況2 指明要新增的欄位 (推薦)
        INSERT INTO emp1(id,hire_date,salary,`name`)
        VALUES(2,'1999-09-09',4000,'Jerry');
        # 說明:沒有進行賦值的hire_date 的值為 null
        INSERT INTO emp1(id,salary,`name`)
        VALUES(3,4500,'shk');
        情況3 同時插入多條記錄 (推薦)
        INSERT INTO emp1(id,NAME,salary)
        VALUES(4,'Jim',5000),(5,'張俊傑',5500);
7.2 更新資料
        使用update語句更新資料
        update employees 
        set department_id = 70 where employee_id = 113; 
7.3 刪除資料
        delete from table_name where <condition>
        delete from students where id = 3;
        如果省略where 的子句,則表中的全部資料將全被刪除
        delete from stu1

相關文章