一、MySQL DISTINCT 多列
在 MySQL 中,DISTINCT 關鍵字用於去除 SELECT 語句返回結果中重複的行。當我們想要查詢一張表中某些列同時去重時,可以使用 MySQL DISTICNT 多列。
SELECT DISTINCT column1, column2 FROM table_name;
其中,column1 和 column2 分別代表表格中需要去重的列名,table_name 代表需要查詢的表格名稱。
舉個例子:
CREATE TABLE emp(
emp_id INT PRIMARY KEY NOT NULL,
emp_name VARCHAR(20) NOT NULL,
emp_salary INT NOT NULL,
emp_dept VARCHAR(20) NOT NULL
);
INSERT INTO emp (emp_id, emp_name, emp_salary, emp_dept)
VALUES (1, '張三', 5000, '技術部'),
(2, '李四', 6000, '財務部'),
(3, '王五', 5000, '業務部'),
(4, '趙六', 7500, '技術部'),
(5, '張三', 5000, '技術部');
運行以上語句創建和插入數據後,我們想在 emp 表格中選取薪水和部門兩列並去重,可以如下寫出 SELECT 語句:
SELECT DISTINCT emp_salary, emp_dept FROM emp;
運行以上語句後,返回結果如下:
+------------+----------+ | emp_salary | emp_dept | +------------+----------+ | 5000 | 技術部 | | 6000 | 財務部 | | 7500 | 技術部 | | 5000 | 業務部 | +------------+----------+
二、MySQL的DISTINCT用法
MySQL DISTINCT 關鍵字並不僅僅只能用於 SELECT 語句,還可以用於 DELETE 和 UPDATE 語句。
在DELETE語句中,我們可以使用DISTINCT關鍵字來刪除重複行。
DELETE DISTINCT FROM table_name WHERE condition;
其中,table_name 代表需要刪除的表格名稱,condition 表示篩選出來需要刪除的重複行的條件語句。
在UPDATE語句中,我們可以使用DISTINCT關鍵字來更新重複行。
UPDATE DISTINCT table_name SET column1 = value1, column2 = value2 WHERE condition;
其中,table_name 代表需要更新的表格名稱,column1 和 column2 表示需要更新的列名,value1 和 value2 表示需要更新的值,condition 表示需要更新的行的條件語句。
三、MySQL DISTINCT 多個欄位
在SELECT語句中,DISTINCT 關鍵字不僅能用於單個列,也能用於多個列。
SELECT DISTINCT column1, column2, column3 FROM table_name;
其中,column1, column2, column3 分別代表表格中需要去重的列名,table_name 代表需要查詢的表格名稱。
舉個例子:
CREATE TABLE student(
student_id INT PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL,
sex CHAR(2) NOT NULL,
age INT NOT NULL,
class_id INT NOT NULL
);
INSERT INTO student (student_id, name, sex, age, class_id)
VALUES (1, '張三', '男', 20, 1),
(2, '李四', '男', 21, 2),
(3, '王五', '女', 20, 1),
(4, '趙六', '女', 21, 2),
(5, '張三', '男', 20, 1);
運行以上語句創建和插入數據後,我們想在 student 表格中選取 name, sex 和 age 三列並去重,可以如下寫出 SELECT 語句:
SELECT DISTINCT name, sex, age FROM student;
運行以上語句後,返回結果如下:
+------+-----+-----+ | name | sex | age | +------+-----+-----+ | 張三 | 男 | 20 | | 李四 | 男 | 21 | | 王五 | 女 | 20 | | 趙六 | 女 | 21 | +------+-----+-----+
四、MySQL EXISTS用法
MySQL EXISTS 語句用於在一個表格中查找指定的值。如果指定的值存在,則返回 true,否則返回false。
同樣地,我們也可以使用 EXISTS 關鍵字來達到 DISTINCT 的效果。
SELECT column1, column2 FROM table_name1 WHERE EXISTS (SELECT column FROM table_name2 WHERE condition);
其中,column1 和 column2 分別代表表格中需要選取的列名,table_name1 代表需要查詢的表格名稱,column 和 table_name2分別代表用於查詢的列名和表格名稱,condition 表示用於查詢的條件語句。
舉個例子:
CREATE TABLE course(
course_id INT PRIMARY KEY NOT NULL,
course_name VARCHAR(20) NOT NULL,
teacher VARCHAR(20) NOT NULL
);
CREATE TABLE student_course(
course_id INT NOT NULL,
student_id INT NOT NULL,
FOREIGN KEY(course_id) REFERENCES course(course_id),
FOREIGN KEY(student_id) REFERENCES student(student_id)
);
INSERT INTO course (course_id, course_name, teacher)
VALUES (1, '數據結構', '張三'),
(2, '計算機網路', '李四'),
(3, '操作系統', '張三'),
(4, '資料庫原理', '王五');
INSERT INTO student_course (course_id, student_id)
VALUES (1, 1),
(2, 1),
(3, 2),
(4, 2),
(1, 5);
運行以上語句創建和插入數據後,我們想要查找選了計算機網路的學生名單,可以如下寫出 SELECT 語句:
SELECT name FROM student WHERE EXISTS (SELECT course_id FROM course WHERE course_name = '計算機網路' AND course.course_id = student_course.course_id AND student.student_id = student_course.student_id);
運行以上語句後,返回結果如下:
+------+ | name | +------+ | 張三 | +------+
五、完整代碼示例:
-- 創建員工表
CREATE TABLE emp(
emp_id INT PRIMARY KEY NOT NULL,
emp_name VARCHAR(20) NOT NULL,
emp_salary INT NOT NULL,
emp_dept VARCHAR(20) NOT NULL
);
-- 插入數據
INSERT INTO emp (emp_id, emp_name, emp_salary, emp_dept)
VALUES (1, '張三', 5000, '技術部'),
(2, '李四', 6000, '財務部'),
(3, '王五', 5000, '業務部'),
(4, '趙六', 7500, '技術部'),
(5, '張三', 5000, '技術部');
-- 查詢薪水和部門兩列並去重
SELECT DISTINCT emp_salary, emp_dept FROM emp;
-- 創建學生表
CREATE TABLE student(
student_id INT PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL,
sex CHAR(2) NOT NULL,
age INT NOT NULL,
class_id INT NOT NULL
);
-- 插入數據
INSERT INTO student (student_id, name, sex, age, class_id)
VALUES (1, '張三', '男', 20, 1),
(2, '李四', '男', 21, 2),
(3, '王五', '女', 20, 1),
(4, '趙六', '女', 21, 2),
(5, '張三', '男', 20, 1);
-- 查詢 name, sex 和 age 三列並去重
SELECT DISTINCT name, sex, age FROM student;
-- 創建課程表
CREATE TABLE course(
course_id INT PRIMARY KEY NOT NULL,
course_name VARCHAR(20) NOT NULL,
teacher VARCHAR(20) NOT NULL
);
-- 創建選課表
CREATE TABLE student_course(
course_id INT NOT NULL,
student_id INT NOT NULL,
FOREIGN KEY(course_id) REFERENCES course(course_id),
FOREIGN KEY(student_id) REFERENCES student(student_id)
);
-- 插入數據
INSERT INTO course (course_id, course_name, teacher)
VALUES (1, '數據結構', '張三'),
(2, '計算機網路', '李四'),
(3, '操作系統', '張三'),
(4, '資料庫原理', '王五');
INSERT INTO student_course (course_id, student_id)
VALUES (1, 1),
(2, 1),
(3, 2),
(4, 2),
(1, 5);
-- 查詢選了計算機網路的學生名單
SELECT name FROM student WHERE EXISTS (SELECT course_id FROM course WHERE course_name = '計算機網路' AND course.course_id = student_course.course_id AND student.student_id = student_course.student_id);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301305.html
微信掃一掃
支付寶掃一掃