做網(wǎng)站 技術(shù)seo職位
文章目錄
- 文章簡介
- 演示庫表
- 創(chuàng)建數(shù)據(jù)庫表
- 選擇數(shù)據(jù)庫
- 刪除數(shù)據(jù)庫
- 創(chuàng)建表
- 刪除表
- 向表中插入數(shù)據(jù)
- 更新數(shù)據(jù)
- 刪除數(shù)據(jù)
- 查詢數(shù)據(jù)
- WHERE 操作符
- 聚合函數(shù)
- LIKE 子句
- 分組 GROUP BY + HAVING
- ORDER BY(排序) 語句
- LIMIT 操作符 分頁查詢
- 多表查詢-聯(lián)合查詢 UNION 操作符
- 多表查詢-連接的使用-JOIN
- 語句編寫和底層執(zhí)行順序
文章簡介
本文主要介紹了MySQL核心命令的介紹和使用方法。
演示庫表
mmall_learning庫表結(jié)構(gòu)。
部分命令中涉及的其他庫表,均為簡單說明,可不必在意具體表結(jié)構(gòu)。
創(chuàng)建數(shù)據(jù)庫表
CREATE DATABASE 數(shù)據(jù)庫名;
CREATE DATABASE mmall_learning;
列出 MySQL 數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫列表。
SHOW DATABASES;
結(jié)果如下:
選擇數(shù)據(jù)庫
USE 數(shù)據(jù)庫名;
USE mmall_learning;
顯示指定數(shù)據(jù)庫的所有表,使用該命令前需要使用 use 命令來選擇要操作的數(shù)據(jù)庫。
SHOW TABLES:
顯示數(shù)據(jù)表的屬性,屬性類型,主鍵信息 ,是否為 NULL,默認(rèn)值等其他信息。
SHOW COLUMNS FROM 數(shù)據(jù)表;
例如:展示購物車的數(shù)據(jù)表結(jié)構(gòu)
SHOW COLUMNS FROM mmall_cart;
結(jié)果如下:
刪除數(shù)據(jù)庫
1.直接刪除數(shù)據(jù)庫,不檢查是否存在
DROP DATABASE 數(shù)據(jù)庫;
2.刪除數(shù)據(jù)庫,如果存在的話
DROP DATABASE IF EXISTS 數(shù)據(jù)庫;
創(chuàng)建表
CREATE TABLE table_name (column1 datatype,column2 datatype,...
);
示例:
CREATE TABLE `mmall_cart` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`product_id` int(11) DEFAULT NULL COMMENT '商品id',`quantity` int(11) DEFAULT NULL COMMENT '數(shù)量',`checked` int(11) DEFAULT NULL COMMENT '是否選擇,1=已勾選,0=未勾選',`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',PRIMARY KEY (`id`),KEY `user_id_index` (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=146 DEFAULT CHARSET=utf8;
解釋:
~如果你不想字段為空可以設(shè)置字段的屬性為 NOT NULL,如上實例中的 id 與 user_id 字段,在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為空,就會報錯。
~AUTO_INCREMENT 定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加 1。
~PRIMARY KEY 關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號 , 分隔。
~ENGINE 設(shè)置存儲引擎,CHARSET 設(shè)置編碼。
~UNIQUE KEY 唯一約束,是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為 user_id 字段加上唯一性約束后,每條記錄的 user_id 值都是唯一的,不能出現(xiàn)重復(fù)的情況。
刪除表
1.刪除表,如果存在的話
DROP TABLE IF EXISTS 數(shù)據(jù)表;
2.直接刪除表,不檢查是否存在
DROP TABLE 數(shù)據(jù)表;
向表中插入數(shù)據(jù)
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
table_name 是你要插入數(shù)據(jù)的表的名稱。
column1, column2, column3, … 是表中的列名。
value1, value2, value3, … 是要插入的具體數(shù)值。
示例:
向以下表mmall_cart
中再插入一行數(shù)據(jù)
INSERT INTO `mmall_cart` VALUES ('126', '21', '26', '1', '1', '2017-04-13 21:27:06', '2017-04-13 21:27:06');
更新數(shù)據(jù)
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例:
將上表中的user_id/product_id均改為20
UPDATE mmall_cart SET user_id = '20', product_id = '20' WHERE id = 126;
結(jié)果如下:
刪除數(shù)據(jù)
DELETE FROM table_name
WHERE condition;
刪除id為127的數(shù)據(jù)
DELETE FROM mmall_cart WHERE id = 127;
結(jié)果為:
查詢數(shù)據(jù)
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
簡單示例:
-- 選擇所有列的所有行
SELECT * FROM users;-- 選擇特定列的所有行
SELECT username, email FROM users;-- 添加 WHERE 子句,選擇滿足條件的行
SELECT * FROM users WHERE is_active = TRUE;-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC;-- 添加 LIMIT 子句,限制返回的行數(shù)
SELECT * FROM users LIMIT 10;-- 使用 AND 運(yùn)算符和通配符
SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE;-- 使用 OR 運(yùn)算符
SELECT * FROM users WHERE is_active = TRUE OR birthdate < '1990-01-01';-- 使用 IN 子句
SELECT * FROM users WHERE birthdate IN ('1990-01-01', '1992-03-15', '1993-05-03');
WHERE 操作符
有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句中。WHERE 子句用于在 MySQL 中過濾查詢結(jié)果,只返回滿足特定條件的行。
示例:
SELECT * FROM users WHERE username = 'test';
常搭配的邏輯符號有
說明 | 符號 |
---|---|
不等于 | <>, != |
等于 | = |
大于 | > |
小于 | < |
大于等于 | >= |
小于等于 | <= |
聚合函數(shù)
語法:
SELECT 聚合函數(shù)(字段列表) FROM 表名;
示例表:
COUNT計數(shù),結(jié)果為4
SELECT COUNT(quantity) FROM mmall_cart;
MAX求最大值,結(jié)果為9
SELECT MAX(quantity) FROM mmall_cart;
MIN求最小值,結(jié)果為1
SELECT MIN(quantity) FROM mmall_cart;
AVG求平均值,結(jié)果為4.25
SELECT AVG(quantity) FROM mmall_cart;
SUM求和,結(jié)果為17
SELECT SUM(quantity) FROM mmall_cart;
LIKE 子句
LIKE 子句是在 MySQL 中用于在 WHERE 子句中進(jìn)行模糊匹配的關(guān)鍵字。
示例:
SELECT * FROM customers WHERE last_name LIKE 'S%';
以上 SQL 語句將選擇所有姓氏以 ‘S’ 開頭的客戶。
分組 GROUP BY + HAVING
GROUP BY 語句根據(jù)一個或多個列對結(jié)果集進(jìn)行分組。一般配合聚合函數(shù)和HAVING使用。
WHERE和HAVING的區(qū)別是HAVING可以對分組后的數(shù)據(jù)進(jìn)行過濾。
語法:
SELECT 字段列表 FROM 表名 [WHERE 條件] GROUP BY 分組字段名 [HAVING 分組后過濾條件];
示例:
查詢年齡小于45的員工,并根據(jù)工作地址分組,獲取同一地址員工數(shù)量大于等于3的工作地址
SELECT workaddress, COUNT(*) FROM emp WHERE age < 45 GROUP BY workaddress HAVING COUNT(*) >= 3;
ORDER BY(排序) 語句
ORDER BY(排序) 語句可以按照一個或多個列的值進(jìn)行升序(ASC)或降序(DESC)排序。
語法:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
示例:
SELECT * FROM mmall_cart ORDER BY user_id;
數(shù)據(jù)就會按給定字段排序,結(jié)果如下:
LIMIT 操作符 分頁查詢
語法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數(shù)
示例:
查詢第一頁員工數(shù)據(jù),每頁展示十條記錄
SELECT * FROM emp LIMIT 10;
多表查詢-聯(lián)合查詢 UNION 操作符
UNION:連接數(shù)據(jù)集關(guān)鍵字,可以將兩個查詢結(jié)果集拼接為一個,會過濾掉相同的記錄
UNION ALL:連接數(shù)據(jù)集關(guān)鍵字,可以將兩個查詢結(jié)果集拼接為一個,不會過濾掉相同的記錄
注意:對于聯(lián)合查詢的多張表列數(shù)必須保持一致,字段類型也需要保持一致。
作用簡單描述就是:表A有a/b兩列20條數(shù)據(jù),表B有a/b兩列30條數(shù)據(jù),通過UNION ALL以后可以得到a/b兩列50條數(shù)據(jù)。使用UNION后,會獲得不重復(fù)的a/b兩列數(shù)據(jù)
語法:
SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;
示例,查詢 product_id>15,quantity<5的數(shù)據(jù)
SELECT * FROM mmall_cart WHERE product_id > 18
UNION
SELECT * FROM mmall_cart WHERE quantity > 6;
查詢結(jié)果為
說明,第一條SELECT可以查詢出后兩條數(shù)據(jù),第二條SELECT語句可以查詢出第二條數(shù)據(jù),拼一起后即為原表后三條數(shù)據(jù)。
多表查詢-連接的使用-JOIN
JOIN用于聯(lián)合多表查詢,其中:
INNER JOIN(內(nèi)連接,或等值連接):獲取兩個表中字段匹配關(guān)系的記錄。
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應(yīng)匹配的記錄。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄。
以下 以員工表emp,部門表dept為例來簡單說明。每個部門有對應(yīng)的多個員工,屬于1對N。
內(nèi)連接
語法:
SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
內(nèi)連接分為隱式和顯示連接。對于顯示內(nèi)連接,inner可以省略。
左連接和右連接
語法:
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
自連接
自連接是表與自身表相連接
語句編寫和底層執(zhí)行順序
語句編寫順序
示例:
SELECT DISTINCT column1, column2
FROM table1
JOIN table2 ON table1.id = table2.foreign_id
WHERE column1 > 100
GROUP BY column1
HAVING COUNT(*) > 1
ORDER BY column1 DESC
LIMIT 10;
MySQL語句底層的執(zhí)行順序如下:
1. FROM子句:選擇數(shù)據(jù)來源的表或視圖。
2. ON子句:連接條件(如果有的話,例如在JOIN操作中)。
3. JOIN子句:如果有的話,執(zhí)行連接操作。
4. WHERE子句:過濾條件,只返回符合條件的記錄。
5. GROUP BY子句:分組統(tǒng)計的字段。
6. HAVING子句:分組后的過濾條件。
7. SELECT子句:選取特定的列。
8. DISTINCT子句:去除重復(fù)數(shù)據(jù)。
9. ORDER BY子句:結(jié)果集的排序順序。
10. LIMIT子句:限制結(jié)果集的數(shù)量。