MySQL
十、表連接查詢
語法: SELECT 列名 FROM 表1 連接方式 表2
內連接查詢(INNER JOIN ON)
SELECT EMPLOYEE_ID,FIRST_NAME,d.DEPARTMENT_ID,DEPARTMENT_NAME
FROM t_employees AS e
INNER JOIN t_departments AS d
ON e.`DEPARTMENT_ID` = d.`DEPARTMENT_ID`;
SELECT EMPLOYEE_ID,FIRST_NAME,DEPARTMENT_NAME,CITY,COUNTRY_NAME
FROM t_employees AS e
INNER JOIN t_departments AS d
ON e.`DEPARTMENT_ID` = d.`DEPARTMENT_ID`
INNER JOIN t_locations AS l
ON d.`LOCATION_ID` = l.`LOCATION_ID`
INNER JOIN t_countries AS c
ON l.`COUNTRY_ID` = c.`COUNTRY_ID`;
左外連接(LEFT JOIN ON)
SELECT EMPLOYEE_ID,FIRST_NAME,DEPARTMENT_NAME
FROM t_employees AS e
LEFT JOIN t_departments AS d
ON e.`DEPARTMENT_ID` = d.`DEPARTMENT_ID`;
左外連接,是以左表爲主表,依次向右表匹配。匹配到,則返回正確結果,匹配不到,則返回NULL值,填充顯示
右外連接(RIGHT JOIN ON)
右外連接,是以右表爲主表,依次向左匹配,匹配到,返回正確結果
匹配不到,則返回NULL填充
DML(Data Manipulation Language)
數據操作語言,用來定義數據庫記錄(數據)。
一、新增(INSET)
語法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…);
CREATE TABLE student
(
id INT NOT NULL, name VARCHAR(50), age INT, address VARCHAR(100)
)CHARSET=utf8;
INSERT INTO student(id,name,age,address) values (4,'曹操',27,'北京海淀'),
(5,'周瑜',28,'北京朝陽'),
(6,'趙雲',30,'北京大興');
二、修改(UPDATE)
語法:UPDATE 表名 SET 列名1=新值1,列名2 = 新值2… WHERE 條件
#修改員工編號爲208的員工名字爲TOM Jackson
UPDATE t_employees
SET FIRST_NAME='TOM', LAST_NAME = 'Jackson'
WHERE EMPLOYEE_ID = '208';
三、刪除(DELETE)
語法:DELETE FROM 表名 WHERE 條件
#刪除一條員工,編號爲207的
DELETE FROM t_employees
WHERE EMPLOYEE_ID = '207'
刪除時,如若不加WHERE條件,刪除的是整張表的數據。結構不變
DDL操作數據庫(Data Definition Language)
數據定義語言,用來定義數據庫對象:庫、表、列等。
語法:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1 字段類型(長度) 約束,
字段2 字段類型(長度) 約束,
…
字段n 字段類型(長度) 約束
) [charset=utf8];
CREATE TABLE student
(
id INT NOT NULL, name VARCHAR(50), age INT, address VARCHAR(100)
)CHARSET=utf8;
常用約束
一、實體完整性約束
主鍵約束:PRIMARY KEY
primary key (保證數據唯一性),不能重複,不能爲null
CREATE TABLE Student(
stuid INT PRIMARY KEY,#標識每一個學生的編號是唯一的,不能爲NULL
stuName VARCHAR(20),
phone VARCHAR(11)
)CHARSET=utf8;
唯一約束: UNIQUE
UNIQUE [key],不能重複,可以爲null
#表中的手機號列,添加唯一約束!不能重複,但是可以爲NULL
CREATE TABLE Student(
stuid INT PRIMARY KEY,#標識每一個學生的編號是唯一的,不能爲NULL
stuName VARCHAR(20),
phone VARCHAR(11) UNIQUE
)CHARSET=utf8;
自動增長:AUTO_INCREMENT
AUTO_INCREMENT 自動增長,給主鍵數值列添加自動增長。從1開始,每次加1。不能單獨使用,和主鍵搭配
#爲表中的主鍵列添加自動增長,避免ID重複,也容易忘記
CREATE TABLE Student(
stuid INT PRIMARY KEY AUTO_INCREMENT,#會從1開始,根據添加數據的順序依次+1
stuName VARCHAR(20),
phone VARCHAR(11) UNIQUE
)CHARSET=utf8;
二、域完整性約束
非空約束:NOT NULL
NOT NULL 非空,約束此列的每一個單元格不允許有NULL
#加了NOT NULL的約束列,必須有值
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
empName VARCHAR(20)NOT NULL,#約束名字這一列必須有值
address VARCHAR(50) NOT NULL
)CHARSET=utf8;
INSERT INTO emp(empName,address) VALUES(null,'北京市海淀區');#error,課程名稱必須有值
默認約束:DEFAULT
DEFAULT 爲列賦予默認值,當新增的數據不指定值時,可以書寫DEFAULT,以定義好的默認值進行填充
#默認值約束,如果沒有指定值,填充DEFAULT,默認值。
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
empName VARCHAR(20)NOT NULL,#約束名字這一列必須有值
address VARCHAR(50) NOT NULL,
sex CHAR(1) DEFAULT '女'
)CHARSET=utf8;
外鍵約束:foreign key
語法:CONSTRAINT 引用名 FOREIGN KEY (列名) REFERENCES 被引用表名(列名)
#專業表
CREATE TABLE Speciality(
id INT PRIMARY KEY AUTO_INCREMENT,
SpecialName VARCHAR(20) UNIQUE NOT NULL#唯一,且不能爲空
)CHARSET=utf8;
#課程表
CREATE TABLE `subject`(
subjectid INT PRIMARY KEY AUTO_INCREMENT,
subjecname VARCHAR(20) UNIQUE NOT NULL,
subjecthours INT DEFAULT 20,
specialid INT NOT NULL,
CONSTRAINT fk_subject_specialid
FOREIGN KEY(specialid)
REFERENCES Speciality(id)
)CHARSET=utf8;