**************************************************************************************** DML(Data Manipulation Language、資料操作語言),用於新增、刪除、更新和查詢資料庫記 錄,並檢查資料完整性。 主要的語句關鍵字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。 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