標籤:null ted 單行 demo 表結構 最小值 之間 關鍵字 隨機數
第三章:進階查詢(-)3.1:修改表
3.1.1:修改表
文法:
Alter table <舊錶名> rename [ TO] <新表名>;
例子:Alter table `demo01` rename `demo02`;
3.1.2:添加欄位
文法:
Alter Table 表名 ADD 欄位名 資料類型 [屬性];
例子:Alter Table `Demo02` ADD `passWord` varchar(50) not null;
3.1.3:修改欄位
文法:
Alter table 表名 change 原欄位名 新欄位名 資料類型 [屬性];
%修改欄位名%
Alter Table `Demo02` change `name` `username` char(10) NOT NULL;
3.1.4 刪除欄位
刪除欄位是將資料表中的某個欄位從表中移除:
文法: ALTER TABLE 表名 DROP 欄位名;
3.1.5 添加主外鍵
添加主鍵約束
文法: ALTER TABLE 表名 ADD CONSTRAINT 主鍵名 PRIMARY KEY 表名(主鍵欄位);
添加外鍵約束
文法: ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (外鍵欄位) REFERENCES 關 聯表名(關聯欄位);
3.2 DML語句回顧
3.2.1 插入資料記錄
插入單行資料
文法: INSERT INTO 表名 [(欄位名列表)] VALUES (值列表);
插入多行資料
文法:INSERT INTO 新表 (欄位名列表) VALUES (值列表1), (值列表2), ......, (值列表n);
注意:在是INSERT語句插入記錄時,如果不包含欄位名稱,VALUES後值列表中各欄位的順序必須和表定義中各欄位的順序相同,如果表結構變了(如執行了添加資料操作) 則值列表也要變化,否則會出現錯誤.如果指定了插入的欄位名,就會避免這個問題,因此,建議在插入資料時指定具體欄位名.
將查詢結構插入到新表
文法1:
INSERT INTO 新表(欄位1,欄位2,......)
SELECT 欄位1,欄位2,......
FROM 原表;
文法2:
CREATE TABLE 新表 (SELECT 欄位1,欄位2, ........FROM 原表);
3.2.2 更新資料記錄
文法: UPDATE 表名 SET 欄位1=值1,欄位2=值2,........欄位n=值n [WHERE 條件];
3.2.3 刪除資料記錄
文法: DELETE FROM 表名 [WHERE條件];
文法: TRUNCATE TABLE 表名;
3.3 資料查詢
3.3.1 DQL語句回顧
SQL Server中資料查詢語句:
文法: SELECT<欄位名列表>
FROM<表名或視圖>
[WHERE <查詢條件>]
[GROUP BY <分組的欄位名>]
[HAVING <條件>]
[ORDER BY <排序的欄位名> [ASC 或 DESC]];
3.3.2 LIMIT子句
文法: SELECT<欄位名列表>
FROM<表名或視圖>
[WHERE <查詢條件>]
[GROUP BY <分組的欄位名>]
[ORDER BY <排序的欄位名> [ASC 或 DESC]]
[LIMIT [位置位移量, ]行數];
其中:1.位置位移量指從結果集中第幾條資料開始顯示(第一條記錄的位置位移量是0,第2條 是1,....),當省略時從第一條記錄開始顯示.
行數值顯示記錄的條數
3.3.3 常用函數
常用彙總函式:
|
AVG() |
返回某欄位的平均值 |
|
COUNT() |
返回某欄位的行數 |
|
MAX() |
返回某欄位的最大值 |
|
MIN( ) |
返回某欄位的最小值 |
|
SUM( ) |
返回某欄位的和 |
|
函數名 |
作用 |
常用的字串函數
|
函數名 |
作用 |
舉例 |
|
CONCAT(str1,str2,...,strn) |
連接字串str1,str2,...,strn為一個完整字串 |
SELECT CONCAT(‘My’,’S’,’QL’);
返回:MySQL |
|
INSERT(str,pos,len,newstr) |
將字串str從pos位置開始,len個字元長的子串替換為字串newstr |
SELECT INSERT(‘這是SQL SERVER資料庫’,3,10,’MySQL’);
返回:這是MySQL資料庫 |
|
LOWER(str) |
將字串str中所有字元變為小寫 |
|
|
UPPER(str) |
將字串str中所有字串變為大寫 |
SELECT UPPER(‘MySQL’);
返回: MYSQL |
|
SUBSTRING(str,num,len) |
返回字串str的第num個位置開始長度為len的子字串 |
|
3.時間日期函數
|
函數名 |
作用 |
舉例 |
|
CURDATE() |
擷取當前日期 |
SELECT CURDATE(); |
|
CURTIME() |
擷取目前時間 |
|
|
NOW() |
擷取當前日期和時間 |
|
|
WEEK(date) |
返回日期date為一年的第幾周 |
|
|
YEAR(date) |
返回日期date的年份 |
|
|
HOUR(time) |
返回時間Time的小時值 |
|
|
MINUTE(time) |
返回時間Time的分鐘值 |
|
|
DATEDIFF(date1,date2) |
返回日期參數date1和date2之間相隔的天數 |
|
|
ADDDATE(date,n) |
計算日期參數date加上n天后的日期 |
|
數字函數
|
函數名 |
作用 |
舉例 |
|
CEIL(x) |
返回大於或等於數值x的最小整數 |
SELECT CEIL(2.3)
返回:3 |
|
FLOOR(x) |
返回小於或等於數值x的最大整數 |
|
|
RAND() |
返回0~1間的隨機數 |
|
3.4 子查詢
3.4.1 簡單子查詢
文法:SELECT ...FROM 表1 WHERE 欄位1 比較子(子查詢);
使用AS關鍵字,符合ANSI標準
SELECT 欄位列表 FROM 表名 AS 表的別名;
使用空格,簡便的方法
SELECT 欄位列表 FROM 表名 表的別名;
3.5 IN和NOT IN 子查詢
3.5.1 IN子查詢
使用子查詢 當返回結果有多條記錄時,則把條件的 =改為 in
IN子查詢後面可跟隨返回多條記錄的子查詢,用於檢測某欄位的值是否存在於某個範圍中.
3.5.2 NOT IN子查詢
不在IN子查詢範圍內的其他資料.
MySQL_第三章