一、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/n/301305.html
微信扫一扫
支付宝扫一扫