Day41-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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章