在數據庫test中創建數據表
CREATE TABLE salestotal
(
user_id int(8) not null,
name varchar(50),
englishname varchar(50),
totalsales decimal(5,2),
PRIMARY KEY (user_id)
);
然後可以使用嵌套INSERT INTO… SELECT 在新表中插入數據:
INSERT INTO salestotal(user_id,name,englishname,totalsales)
SELECT user.user_id,name,englishname,SUM(price)
FROM user INNER JOIN items ON user.user_id = items.user_id
GROUP BY items.user_id;
SELECT 的查詢字段對應INSERT INTO的相應字段,並且 VALUES不能和 INSERT語句一同使用。
查詢創建的表結構
SHOW COLUMNS FROM salestotal;
作用同上
DESC salestotal;
表結構如下:
限制:
- 查詢不能包含ORDER BY
FROM子句不能包含INSERT INTO的目標表
SELECT 和CREATE TABLE 同時使用
CREATE TABLE salestotals
SELECT user.user_id,name,englishname,SUM(price)
FROM user INNER JOIN items ON user.user_id = items.user_id
GROUP BY items.user_id;
結果和之前的SQL運行結果相同,差異在於無法控制字段名稱和類型定義,也無法控制索引。字段名稱由SELECT 語句複製得到,類型由mysql選擇(通常與來源字段相同),索引需另外創建。但是名稱爲SUM(price)的字段不易應用,需手動修改。
ALTER TABLE salestotals INDEX ids(user_id);
//爲字段user_id創建名稱爲ids的索引
ALTER TABLE salestotals DROP INDEX ids; 或者DROP INDEX ids ON salestotals
//移除字段user_id的索引
ALTER TABLE salestotals DROP user_id;
//移除字段user_id
ALTER TABLE salestotals MODIFY user_id smallint;
//修改user_id類型爲smallint
ALTER TABLE salestotals CHANGE user_id id smallint;
//將user_id改爲id
ALTER TABLE salestotals MODIFY name varchar(30);
//修改字段長度
ALTER TABLE salestotals RENAME sales;
//修改表名稱
當然也可以對該語句進行優化:
CREATE TABLE salestotals(
user_id int(8) not null,
name varchar(50),
englishname varchar(50),
totalsales decimal(5,2),
PRIMARY KEY (user_id)
)
SELECT user.user_id,name,englishname,SUM(price) as totalsales
FROM user INNER JOIN items ON user.user_id = items.user_id
GROUP BY items.user_id;
注:
在SELECT查詢過程中必須爲字段設置別名,否則查詢的字段與表結構不相同的字段會被默認爲新的字段插入到表中。
使用現有的表結構創建表:
CREATE TABLE salesuntilyesterday LIKE salestotal;