DQL语句select查询
查询不会对数据库中的数据进行修改.只是一种显示数据的方式
Data Query Language DQL 数据查询语句,用于查询
简单查询
查询表所有行和列的数据
使用*表示所有列 SELECT * FROM 表名; 具体操作: SELECT * FROM student; 写出查询每列的名称 SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名; 具体操作: SELECT id, NAME ,age, sex, address FROM student;
查询指定列
查询指定列的数据,多个列之间以逗号分隔 SELECT 字段名 1, 字段名 2... FROM 表名; 查询 student 表中的 name 和 age 列 SELECT NAME, age FROM student;
别名查询
-- 使用关键字 -- 查询时给列、表指定别名需要使用 AS 关键字 使用别名的好处:是方便观看和处理查询到的数据 语法: SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名; SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名; 具体操作: 查询 sudent 表中 name 和 age 列,name 列的别名为”姓名”,age 列的别名为”年龄” SELECT NAME AS 姓名, age AS 年龄 FROM student; 查询 sudent 表中 name 和 age 列,student 表别名为 s SELECT NAME, age FROM student AS s;
清除重复值
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
具体操作:
查询 name,age 列并且结果不出现重复 name
SELECT DISTINCT NAME, age FROM student;
查询结果参与运算
某列数据和固定值运算 SELECT 列名 1 + 固定值 FROM 表名; 某列数据和其他列数据参与运算 SELECT 列名 1 + 列名 2 FROM 表名; -- 注意: 参与运算的必须是数值类型
-- 需求: -- 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩 -- 查询的时候将数学和英语的成绩相加 -- 实现: -- 修改 student 表结构,添加数学和英语成绩列 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩 ALTER TABLE student ADD math INT; ALTER TABLE student ADD english INT; 给每条记录添加对应的数学和英语成绩 查询 math + english 的和 SELECT math + english FROM student; 结果确实将每条记录的 math 和 english 相加,但是效果不好看 查询 math + english 的和使用别名”总成绩” SELECT math + english 总成绩 FROM student; 查询所有列与 math + english 的和并使用别名”总成绩” SELECT *, math + english 总成绩 FROM student; 查询姓名、年龄,将每个人的年龄增加 10 岁 SELECT name, age + 10 FROM student;
条件查询
前面我们的查询都是将所有数据都查询出来,但是有时候我们只想获取到满足条件的数据
语法格式:SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
准备数据 CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(100), math int, english int ); INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87), (3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99), (7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
比较运算符
-- 大于 <小于 <=小于等于 >=大于等于 =等于 <>、!=不等于 具体操作: 查询 math 分数大于 80 分的学生 SELECT * FROM student3 WHERE math>80; 查询 english 分数小于或等于 80 分的学生 SELECT * FROM student3 WHERE english<=80; 查询 age 等于 20 岁的学生 SELECT * FROM student3 WHERE age=20; 查询 age 不等于 20 岁的学生 -- SELECT * FROM student3 WHERE age!=20;不推荐 SELECT * FROM student3 WHERE age<>20;
逻辑运算符
-- and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足 具体操作: 查询 age 大于 35 且性别为男的学生(两个条件同时满足) SELECT * FROM student3 WHERE age>35 AND sex='男'; 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足) SELECT * FROM student333 WHERE age>35 OR sex='男'; 查询 id 是 1 或 3 或 5 的学生 SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;
in 关键字
语法格式:SELECT 字段名 FROM 表名 WHERE 字段 IN (数据 1, 数据 2...); IN 里面的每个数据都会作为一次条件,只要满足条件的就会显示 具体操作: • 查询 id 是 1 或 3 或 5 的学生 SELECT * FROM student3 WHERE id IN (1,3,5); • 查询 id 不是 1 或 3 或 5 的学生 SELECT * FROM student3 WHERE id NOT IN (1,3,5);
范围查询
BETWEEN 值 1 AND 值 2 表示从值 1 到值 2 范围,包头又包尾 比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100 具体操作: 查询 english 成绩大于等于 75,且小于等于 90 的学生 SELECT * FROM student3 WHERE english>=75 AND english<=90; SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;
like 关键字
-- LIKE 表示模糊查询 SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'; 满足通配符字符串规则的数据就会显示出来 所谓的通配符字符串就是含有通配符的字符串 MySQL 通配符有两个: -- %:表示 0 个或多个字符(任意个字符) -- _: 表示一个字符 具体操作: • 查询姓马的学生 SELECT * FROM student3 WHERE NAME LIKE '马%'; • 查询姓名中包含'德'字的学生 SELECT * FROM student3 WHERE NAME LIKE '%德%'; • 查询姓马,且姓名有三个字的学生 SELECT * FROM student3 WHERE NAME LIKE '马__';