創建表: 修改表結構: 向數據表中添加數據: 修改表中數據: 特別註意一個問題,我在安裝的時候設置的預設編碼是utf8,但是windows預設的是gbk, 如果打開命令行會發現出現亂碼問題,解決辦法:在控制臺中如果想顯示正常的漢字,加入這一行: 查詢表中的數據: 排序查詢: 聚合函數: 分組查詢: ...
創建表:
/* 創建資料庫 create database 資料庫名; */ CREATE DATABASE mybase; /* 使用資料庫 use 資料庫名 */ USE mybase; /* 創建數據表的格式 create table 表名( 列名1 數據類型 約束, 列名2 數據類型 約束, 列名3 數據類型 約束 ); 創建用戶表,用戶編號,姓名,用戶的地址 將編號列,設置為主鍵約束,保證列的數據唯一性,非空性 primary key AUTO_INCREMENT 這一句意思是讓主鍵列數據,實現自動增長 */ CREATE TABLE users ( uid INT PRIMARY KEY AUTO_INCREMENT , uname VARCHAR(20), uaddress VARCHAR(200) );
/*
表的操作,不常用
show tables 顯示所有數據表 desc users 查看表中結構 drop table users 刪除數據表 */
修改表結構:
CREATE TABLE users ( uid INT PRIMARY KEY AUTO_INCREMENT, uname VARCHAR(20), uaddress VARCHAR(200) ); /* 添加列,添加欄位 alter table 表名 add 列名 數據類型 約束 */ ALTER TABLE users ADD tel INT ; /* 修改列, 在原有的列上修改 修改列名,數據類型約束 alter table 表名 modify 列名 數據類型 約束 */ ALTER TABLE users MODIFY tel VARCHAR(50); /* 修改列名 alter table 表名 change 舊列名 新列名 數據類型 約束 */ ALTER TABLE users CHANGE tel newtel DOUBLE; /* 刪除列 alter table 表名 drop 列名 */ ALTER TABLE users DROP newtel; /* 修改表名 rename table 表名 to 新名 */ RENAME TABLE users TO newusers
向數據表中添加數據:
CREATE TABLE product( -- 主鍵列,自動增長 id INT PRIMARY KEY AUTO_INCREMENT, -- 商品名字,可變字元,非空 pname VARCHAR(100) NOT NULL, -- 商品的價格,double price DOUBLE ); /* 向數據表中添加數據 insert 格式: insert into 表名(列名1,列名2,列名3) values (值1,值2,值3) 註意:對應問題和類型問題 */ INSERT INTO product (id,pname,price) VALUES (1,'電腦',6666.66); INSERT INTO product (id,pname,price) VALUES (2,'手機',1888.88); /* 添加數據格式,不考慮主鍵 格式: insert into 表名 (列名) values (值) */ INSERT INTO product (pname,price) VALUES('洗衣機',800); /* 添加數據格式,所有值全給出 格式: insert into 表名 values (全列值) */ INSERT INTO product VALUES (4,'微波爐',300.25); /* 添加數據格式,批量寫入 格式: insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3) */ INSERT INTO product (pname,price) VALUES ('智能機器人',25999.22), ('彩色電視',1250.36), ('沙發',5899.02)
修改表中數據:
/* 對數據進行更新操作 數據在原有的基礎上修改 格式: update 表名 set 列1=值1,列2=值2 where 條件 where 條件: 數據中的唯一性 */ -- 修改 UPDATE product SET price = 15999 WHERE id=2 -- 修改 UPDATE product SET pname='黑白電視機', price=100 WHERE id = 6 /* 修改條件的寫法 id=6 等於,不要寫雙等於 id<>6 不等於 id<=6 與或非 && || ! &&要寫成 and ||要寫成 or ! 要寫成 not id in (1,3,4,5,6) 包含 */ UPDATE product SET price = 2000 WHERE id = 1 OR id = 7; /* 刪除表中的數據 格式: delete from 表名 where 條件 drop table 表名 刪除整個數據表 還有一個truncate方法也是刪除,區別在於刪除後重建新表,自增重新開始,而delete方法不影響自增 */ -- 刪除 DELETE FROM product WHERE id=8;
特別註意一個問題,我在安裝的時候設置的預設編碼是utf8,但是windows預設的是gbk,
如果打開命令行會發現出現亂碼問題,解決辦法:在控制臺中如果想顯示正常的漢字,加入這一行:
SET NAMES gbk;
查詢表中的數據:
CREATE TABLE zhangwu ( id INT PRIMARY KEY AUTO_INCREMENT, -- 賬務ID zname VARCHAR(200), -- 賬務名稱 zmoney DOUBLE -- 金額 ); INSERT INTO zhangwu(id,zname,zmoney) VALUES (1,'吃飯支出',247); INSERT INTO zhangwu(id,zname,zmoney) VALUES (2,'工資收入',12345); INSERT INTO zhangwu(id,zname,zmoney) VALUES (3,'服裝支出',1000); INSERT INTO zhangwu(id,zname,zmoney) VALUES (4,'吃飯支出',325); INSERT INTO zhangwu(id,zname,zmoney) VALUES (5,'股票收入',8000); INSERT INTO zhangwu(id,zname,zmoney) VALUES (6,'打麻將支出',8000); INSERT INTO zhangwu(id,zname,zmoney) VALUES (7,NULL,5000); /* 查詢指定列的數據 格式: select 列名1,列名2 from 表名 */ SELECT zname,zmoney FROM zhangwu; /* 查詢所有列的數據 格式: select * from 表名 */ SELECT * FROM zhangwu; /* 查詢去掉重覆記錄 DISTINCT 關鍵字 跟隨列名 */ SELECT DISTINCT zname FROM zhangwu /* 查詢重新命名列 as 關鍵字 */ SELECT zname AS 'name' FROM zhangwu /* 查詢數據中,直接進行數學計算 列對數字進行計算 */ SELECT zname,zmoney+1000 AS'sum' FROM zhangwu -- 查詢所有的吃飯支出 SELECT * FROM zhangwu WHERE zname='吃飯支出' -- 查詢金額大於1000 SELECT * FROM zhangwu WHERE zmoney>1000 -- 查詢金額在2000到5000之間 SELECT * FROM zhangwu WHERE zmoney >= 2000 AND zmoney <= 5000 -- 改造成between and 方式 SELECT * FROM zhangwu WHERE zmoney BETWEEN 2000 AND 5000 -- 查詢金額是 1000,3500,5000 其中一個 SELECT * FROM zhangwu WHERE zmoney = 1000 OR zmoney=3500 OR zmoney=5000 -- 改造成in方式 SELECT * FROM zhangwu WHERE zmoney IN (1000,3500,5000) -- like 模糊查詢 配合通配符 -- 查詢所有的支出(含有這兩個字即可查出) SELECT * FROM zhangwu WHERE zname LIKE '%支出%' -- 查詢賬務名字,五個字元的 SELECT * FROM zhangwu WHERE zname LIKE'_____' -- 查詢賬務名,不為空的 SELECT * FROM zhangwu WHERE zname IS NOT NULL SELECT * FROM zhangwu WHERE NOT ( zname IS NULL)
排序查詢:
/* 查詢,對結果集進行排序 升序,降序,對指定列排序 order by 列名 [desc][asc] desc 降序 asc 升序排列,可以不寫 */ -- 查詢賬務表,價格進行升序 SELECT * FROM zhangwu ORDER BY zmoney ASC -- 查詢賬務表,價格進行降序 SELECT * FROM zhangwu ORDER BY zmoney DESC -- 查詢賬務表,查詢所有的支出,對金額降序排列 -- 先過濾條件 where 查詢的結果再排序 SELECT * FROM zhangwu WHERE zname LIKE'%支出%' ORDER BY zmoney DESC
聚合函數:
/* 使用聚合函數查詢計算 */ -- count 求和,對錶中的數據的個數求和 count(列名) -- 查詢統計賬務表中,一共有多少條數據 SELECT COUNT(*)AS'count' FROM zhangwu -- sum求和,對一列中數據進行求和計算 sum(列名) -- 對賬務表查詢,對所有的金額求和計算 SELECT SUM(zmoney) FROM zhangwu -- 求和,統計所有支出的總金額 SELECT SUM(zname) FROM zhangwu WHERE zname LIKE'%收入%' INSERT INTO zhangwu (zname) VALUES ('彩票收入') -- max 函數,對某列數據,獲取最大值 SELECT MAX(zmoney) FROM zhangwu -- avg 函數,計算一個列所有數據的平均數 SELECT AVG(zmoney)FROM zhangwu
分組查詢:
/* 查詢所有的數據 吃飯支出 共計多少 工資收入 共計多少 服裝支出 共計多少 股票收入 共計多少 打麻將支出 共計多少錢 分組查詢: group by 被分組的列名 必須跟隨聚合函數 select 查詢的時候,被分組的列,要出現在select 選擇列的後面 */ SELECT SUM(zmoney),zname FROM zhangwu GROUP BY zname -- 對zname內容進行分組查詢求和,但是只要支出 SELECT SUM(zmoney)AS 'getsum',zname FROM zhangwu WHERE zname LIKE'%支出%' GROUP BY zname ORDER BY getsum DESC -- 對zname內容進行分組查詢求和,但是只要支出, 顯示金額大於5000 -- 結果集是分組查詢後,再次進行篩選,不能使用where, 分組後再次過濾,關鍵字 having SELECT SUM(zmoney)AS 'getsum',zname FROM zhangwu WHERE zname LIKE'%支出%' GROUP BY zname HAVING getsum>5000