1. 程式人生 > 實用技巧 >初識MySQL筆記

初識MySQL筆記

一、建庫建表

1).新建資料庫,表之前先判斷是否存在(if exists)
2).資料庫建好之後需要使用(use 資料庫名)
3).主鍵:primary key
4).唯一:unique
5).自增:auto_increment
6).外來鍵新增:constraint FK_empId foreign key(empId) references deptInfo(empId)
7).設定引擎:engine=innodb default charset=UTF8 auto_increment=1001

二、資料庫的增刪查改

1).增:insert into 表名 values();
2).刪:delete from 表名 where 條件;

3) .查:select * from 表名 where 條件;
4).改:update 表名 set ... where 條件;

-- 判斷資料庫是否存在
DROP DATABASE IF EXISTS EMPDB;

-- 新建資料庫
CREATE DATABASE EMPDB;

-- 使用資料庫
USE EMPDB;

-- 判斷表DeptInfo是否存在
DROP TABLE IF EXISTS DeptInfo;

-- 新建表
CREATE TABLE DeptInfo(
   DeptID VARCHAR(10) PRIMARY KEY,
   DeptName VARCHAR(20
) NOT NULL UNIQUE )ENGINE=INNODB CHARSET=utf8; -- 判斷表EmpInfo是否存在 DROP TABLE IF EXISTS EmpInfo; -- 新建表 CREATE TABLE EmpInfo( EmpID INT PRIMARY KEY AUTO_INCREMENT, EmpName VARCHAR(20) NOT NULL, EmpSex VARCHAR(2) NOT NULL DEFAULT '', EmpBirth DATETIME NOT NULL, EmpTel VARCHAR(20) NOT NULL
UNIQUE, DeptID VARCHAR(10) NOT NULL, CONSTRAINT FK_DeptID FOREIGN KEY(DeptID) REFERENCES DeptInfo(DeptID) )ENGINE=INNODB CHARSET=utf8 AUTO_INCREMENT=1001; -- 新增初始資料 INSERT INTO DeptInfo VALUES('A02','財務部'); INSERT INTO DeptInfo VALUES('A05','工程部'); INSERT INTO DeptInfo VALUES('A01','人事部'); INSERT INTO DeptInfo VALUES('A03','銷售部'); INSERT INTO DeptInfo VALUES('A04','研發部'); INSERT INTO EmpInfo VALUES(DEFAULT , '陳二' , '' , '1991-05-02' , '189199' , 'A04'); INSERT INTO EmpInfo VALUES(DEFAULT , '陳七' , '' , '1991-01-13' , '189111' , 'A02'); INSERT INTO EmpInfo VALUES(DEFAULT , '黃二' , '' , '1991-03-01' , '189321' , 'A03'); INSERT INTO EmpInfo VALUES(DEFAULT , '李四' , '' , '1991-02-08' , '189456' , 'A05'); INSERT INTO EmpInfo VALUES(DEFAULT , '劉一' , '' , '1991-07-07' , '189654' , 'A05'); INSERT INTO EmpInfo VALUES(DEFAULT , '錢七' , '' , '1991-05-23' , '189331' , 'A02'); INSERT INTO EmpInfo VALUES(DEFAULT , '孫八' , '' , '1991-09-09' , '189122' , 'A04'); INSERT INTO EmpInfo VALUES(DEFAULT , '王五' , '' , '1991-11-06' , '189789' , 'A05'); INSERT INTO EmpInfo VALUES(DEFAULT , '吳十' , '' , '1991-09-28' , '189166' , 'A01'); INSERT INTO EmpInfo VALUES(DEFAULT , '楊九' , '' , '1991-01-14' , '189177' , 'A01'); INSERT INTO EmpInfo VALUES(DEFAULT , '張三' , '' , '1991-01-01' , '189123' , 'A01'); INSERT INTO EmpInfo VALUES(DEFAULT , '趙六' , '' , '1991-10-02' , '189987' , 'A03'); INSERT INTO EmpInfo VALUES(DEFAULT , '周八' , '' , '1991-04-21' , '189661' , 'A03'); INSERT INTO EmpInfo VALUES(DEFAULT , '朱三' , '' , '1991-08-08' , '189551' , 'A05'); -- 查詢 SELECT * FROM DeptInfo; SELECT * FROM EmpInfo; -- 新增一個新部門,生產部,部門編號A06 INSERT INTO DeptInfo VALUES('A06','生產部'); -- 新增一個新員工資訊,該員工分配到銷售部 INSERT INTO EmpInfo VALUES(DEFAULT , '田七' , '' , '1991-07-24' , '189591' , 'A03'); -- 修改剛新新增的員工的性別和出生日期 UPDATE EmpInfo SET EmpSex='',EmpBirth='1991-08-01' WHERE EmpName='田七'; -- 刪除這個新員工的資訊 DELETE FROM EmpInfo WHERE EmpName='田七'; -- 查詢顯示所有員工的編號,姓名,性別 SELECT ALL EmpID,EmpName,EmpSex FROM EmpInfo;

三、簡單常用查詢語句

1).設定各種欄位的別名(as)
2).All關鍵字(不寫編輯器自動新增)
3).limit關鍵字(MySQL不支援top 關鍵字,SQL Server支援top關鍵字)
4).distinct關鍵字:過濾重複記錄
5).where關鍵字:條件
6).between...and...
7) .in / not in
8) .邏輯運算(and not or)
9).like關鍵字(模糊查詢)
10).order by(desc:降序 asc:升序)
11) .對查詢結果進行計算(sum,avg,max,min)
12).count統計資料
13).內部連結查詢(inner join on)
14).外部連結查詢(left join on,right join on)

-- 如果empDB資料庫存在則刪除掉
DROP DATABASE IF EXISTS empDB;

-- 建立資料庫
CREATE DATABASE empDB;

-- 使用empDB庫
USE empDB;

-- 如果departinfo表存在則刪除掉
DROP TABLE IF EXISTS departinfo;  

-- 在empDB資料庫中建立表
CREATE TABLE departinfo(
deptId VARCHAR(11) PRIMARY KEY, -- 部門的編號 字串 主鍵
deptName VARCHAR(32) NOT NULL   -- 部門的名稱 字串 不為空
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

-- 如果empinfo表存在則刪除掉
DROP TABLE  IF EXISTS empinfo;

-- 在empdb資料庫中建立empinfo表
CREATE TABLE empinfo(
empid INT PRIMARY KEY AUTO_INCREMENT, -- 員工的編號 字串 主鍵
empName VARCHAR(20) NOT NULL,  -- 員工的名字 字串不為空
empSex VARCHAR(2) NOT NULL DEFAULT '', -- 員工的性別 字串 不為空 預設男
empBirthday DATE NOT NULL,-- 員工的生日 日期型別 不為空
empTel VARCHAR(20) NOT NULL UNIQUE, -- 員工的電話 字串不為空 不重複
deptId VARCHAR(11) NOT NULL,
score DOUBLE,
CONSTRAINT FK_deptId FOREIGN KEY(deptId) REFERENCES departinfo(deptId)
)ENGINE=INNODB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1001;

-- 新增初始化的測試資料
INSERT INTO departinfo VALUES('A01','開發部');
INSERT INTO departinfo VALUES('A02','測試部');
INSERT INTO departinfo VALUES('A03','人事部');
INSERT INTO departinfo VALUES('A04','開發部');
INSERT INTO departinfo VALUES('A05','測試部');
INSERT INTO departinfo VALUES('A06','人事部');

INSERT INTO empinfo VALUES(DEFAULT,'李豐',DEFAULT,'2001-1-1','1234567894','A01',45);
INSERT INTO empinfo VALUES(DEFAULT,'李佳偉','','2001-1-1','1234567895','A02',85);
INSERT INTO empinfo VALUES(DEFAULT,'李江嵐','','2002-1-1','1234567896','A03',87);
INSERT INTO empinfo VALUES(DEFAULT,'李豐',DEFAULT,'2001-1-1','1234517894','A01',78.5);
INSERT INTO empinfo VALUES(DEFAULT,'李佳偉','','2001-1-1','1234527895','A02',75.6);
INSERT INTO empinfo VALUES(DEFAULT,'李江嵐','','2002-1-1','1234467896','A03',95);
INSERT INTO empinfo VALUES(DEFAULT,'李豐',DEFAULT,'2001-1-1','1234545894','A01',70);
INSERT INTO empinfo VALUES(DEFAULT,'李佳偉','','2001-1-1','1278567895','A02',79);
INSERT INTO empinfo VALUES(DEFAULT,'李江嵐','','2002-1-1','1234561196','A03',97);

-- 查詢資料
SELECT * FROM departinfo;
SELECT * FROM empinfo;

-- limit關鍵字
SELECT empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo LIMIT 0,2;

-- as關鍵字
SELECT empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo;

-- 欄位的計算 (字串拼接)
SELECT empid+'-'+empName AS '員工編號-員工姓名' FROM empinfo;

-- all關鍵字
SELECT ALL empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo;

-- distict關鍵字
SELECT DISTINCT deptName AS 部門名稱 FROM departinfo;

-- where關鍵字
SELECT empName AS 員工姓名 FROM empinfo WHERE empid > 1005;

-- between... and...
SELECT empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo WHERE empid BETWEEN 1003 AND 1006;

-- in / not in
SELECT empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo WHERE empid IN(1001,1003,1008);

-- 邏輯運算(and or not)
SELECT empid AS 員工編號 ,empName AS 員工姓名 FROM empinfo WHERE empSex= AND 

-- like關鍵字(模糊查詢)
SELECT * FROM empinfo WHERE empName LIKE('%江%');

-- order by排序 (desc 降序 asc 升序)---也可以對字串型別的數字進行排序
SELECT * FROM empinfo ORDER BY empid DESC;
SELECT * FROM empinfo ORDER BY empTel ASC;

-- 對查詢結果進行計算(sum avg min max)
SELECT SUM(score) AS 總成績 FROM empinfo;
SELECT AVG(score) AS 平均分 FROM empinfo;
SELECT MAX(score) AS 最高分 FROM empinfo;
SELECT MIN(score) AS 最低分 FROM empinfo;

-- count統計行數
SELECT COUNT(*) AS 學生數 FROM empinfo;
SELECT COUNT(empid) FROM empinfo;

-- 內部連結查詢
SELECT * FROM departinfo INNER JOIN empinfo ON departinfo.deptId=empinfo.deptId;
SELECT * FROM departinfo , empinfo WHERE departinfo.deptId=empinfo.deptId;

-- 外部連結查詢
SELECT * FROM departinfo LEFT JOIN empinfo ON departinfo.deptId=empinfo.deptId;
SELECT * FROM departinfo RIGHT JOIN empinfo ON departinfo.deptId=empinfo.deptId;