一、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-hant/n/301305.html