MySQL基礎表操作與表聯結

MySQL基礎知識

基礎表操作

MySQL基本數據類型

類型 大小(字節) 說明
TINYINT 1 小整數值
SMALLINT 2 大整數值
MEDIUMINT 3 大整數值
INT 4 大整數值
BIGINT 8 極大整數值
FLOAT 4 單精度浮點數值
DOUBLE 8 雙精度浮點數值
CHAR 0-255 定長字符串
VARCHAR 0-65535 變長字符串
TINYBLOB 0-255 二進制形式的短文本數據
BLOB 0-65535 二進制形式的長文本數據
MEDIUMBLOB 0-16777215 二進制形式的中等長度文本數據
LONGBLOB 0-4294967295 二進制形式的極大文本數據
TINYTEXT 0-255 短文本數據
TEXT 0-65535 長文本數據
MEDIUMTEXT 0-16777215 中等長度文本數據
LONGTEXT 0-4294967295 極大文本數據
DATE 3 日期值(YYYY-MM-DD)
TIME 3 時間值或持續時間(HH:MM:SS)
YEAR 1 年份值(YYYY)
DATETIME 8 日期加時間值(YYYY-MM-DDhh:mm;ss)
TIMESTAMP 8 時間戳(YYYYMMDDhhmmss)

創建和操縱表

每個DBMS(數據庫管理系統)的操作語句有所不同,不過差得不多。以下是標準SQL語句,某些語句若無法在你的DBMS運行,請參閱相應DBMS文檔。

  • 創建表CREATE TABLE
CREATE TABLE 新表名
(
	列名	列的定義
);

CREATE TABLE products
(
	prod_id CHAR(10) NOT NULL,
	prod_name CHAR(254) NOT NULL
);
  • 更新表ALTER TABLE
#增加列
ALTER TABLE 表名
ADD 列名 數據類型;

ALTER TABLE products
ADD vend_id CHAR(10);

#刪除列
ALTER TABLE 表名
DROP COLUMN 列名;

ALTER TABLE products
DROP COLUMN prod_name;

#刪除表
DROP TABLE 表名;

DROP TABLE products;

插入數據

  • 插入完整的行
INSERT INTO 表名
VALUES(依序符合規範的各列數據,用逗號隔開);

INSERT INTO customers
VALUES('10001',
	'Tom',
	'New York',
	'USA',
	NULL);

  • 插入部分行
INSERT INTO 表名(希望插入數據的列名,用逗號隔開)
VALUES(對應列的規範數據,用逗號隔開);

INSERT INTO customers(
	cust_id,
	cust_country
	)
VALUES(
	'10001',
	'UAS'
	);
  • 插入檢索出的數據
INSERT INTO 表名1(檢索出的數據存放的列名,用逗號隔開)
SELECT 檢索的列名
FROM 表名2;

INSERT INTO customers(
	cust_id,
	cust_name)
SELECT new_cust_id,
	new_cust_name
FROM newcust;
  • 從一個表複製到另一個表SELECT INTO
SELECT 列名
INTO 表名1
FROM 表名2;

SELECT *
INTO cust_copy
FROM customers;

更新和刪除數據

  • 更新數據UPDATE
UPDATE 表名
SET 列名=新值
WHERE 過濾條件;

UPDATE customers
SET  cust_email = '[email protected]'
	cust_contact = 'roberts'
WHERE cust_id = '10001';

#刪除某個值,可以設置它爲NULL
UPDATE customers
SET cust_email = NULL
WHERE cust_id = '10002';
  • 刪除數據DELETE
#刪除某一行數據
DELETE FROM 表名
WHERE 過濾條件;

DELETE FROM customers
WHERE cust_id ='10004';

DELETE刪除整行而不是刪除列,如果想要刪除列使用UPDATE語句,如果刪除整個表使用TRUNCATE TABLE

表聯結

如果數據存儲在多個表中,怎樣用一條 SELECT語句就檢索出數據呢?答案是使用聯結。 簡單說, 聯結是一種機制,用來在一條 SELECT語句中關聯表,因此稱爲聯結。使用特殊的語法,可以聯結多個表返回一組輸出, 聯結在運行時關聯表中正確的行。

創建聯結

SELECT 需要顯示的列名,可以來自不同表
FROM 表名
WHERE 不同表的關聯方式;

SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id = products.vend_id;

叉聯結(cross join)

返回笛卡兒積的聯結,也稱叉聯結( cross join)。

內聯結(inner join)/等值聯結(equijoin)

等值聯結( equijoin),它基於兩個表之間的相等測試。 這種聯結也稱爲內聯結( inner join)。

SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;

自聯結(self-join)

自聯結通常作爲外部語句,用來替代從相同表中檢索數據的使用子查詢語句。
在這裏插入圖片描述

自然聯結(natural join)

標準的聯結(內聯結)返回所有數據,相同的列甚至多次出現。自然聯結排除多次出現,使每一列只返回一次。
自然聯結要求你只能選擇那些唯一的列,一般通過對一個表使用通配符( SELECT*),而對其他表的列使用明確的子集來完成。
在這裏插入圖片描述

外聯結(outer join)

聯結包含了那些在相關表中沒有關聯行的行。 這種聯結稱爲外聯結。
在使用 OUTERJOIN語法時,必須使用 RIGHT或 LEFT關鍵字指定包括其所有行的表( RIGHT指出的是OUTERJOIN右邊的表,而LEFT指出的是OUTERJOIN左邊的表)。
在這裏插入圖片描述

不同聯結之間的關係可參閱這篇文章:一文搞懂SQL中的各種聯結——內聯結、自然聯結、自聯結、交叉聯結
以上內容參考於《SQL必知必會》提取碼: xymn,如需更深入瞭解可以查看書籍,這本書簡短明瞭,你可以在十分鐘以內看完你希望瞭解的某一章節。

實踐項目(我使用的是navicat for mysql)

基礎表操作

練習一:創建一個courses表,查詢出所有超過或等於5名學生的課。

  • 創建表
    創建表
  • 輸入數據
    在這裏插入圖片描述
  • 查詢操作及結果
    在這裏插入圖片描述

練習二:創建一個 salary表,如下所示,有m=男性 和 f=女性的值 。

id name sex salary
1 A m 2500
2 B f 1500
3 C m 5500
4 D f 500

交換所有的 f 和 m 值(例如,將所有 f 值更改爲 m,反之亦然)。要求使用一個更新查詢,並且沒有中間臨時表。**

  • 創建表
    在這裏插入圖片描述
  • 輸入數據
    在這裏插入圖片描述
  • 交換操作
    在這裏插入圖片描述

表聯結

練習三:組合兩張表

  • 創建兩張表Person\Address
    在這裏插入圖片描述
  • 分別在兩張表中插入數據
    在這裏插入圖片描述
  • 聯結表並輸出查詢信息
    在這裏插入圖片描述

練習四:刪除如下email 表中所有重複的電子郵箱,重複的郵箱裏只保留 Id 最小的那個

Id Email
1 [email protected]
2 [email protected]
3 [email protected]
  • 創建表
    在這裏插入圖片描述

  • 輸入數據
    在這裏插入圖片描述

  • 刪除重複郵箱(自聯結方法)
    在這裏插入圖片描述

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