DQL:Data Query Language,用来查询数据库中的数据。
单表查询 简单查询
1 2 3 4 5 6 7 8 9 10 # 查询表中的所有数据 SELECT * FROM student;Select id,name,age,sex,address from student; # 列出所有字段# 指定列查询 Select id,name from student; # 列出需要查询的字段# 别名查询(在查询时,给查询的列或表起一个其他的(一般是稍短的名字,或为了防止重复)名字就叫做别名。使用别名的好处是方便查看和处理查询到的数据。) SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;SELECT NAME AS '姓名' , age AS '年龄' FROM student; # 设定别名并查询
💡 别名查询注意事项
查询时给表取别名目前还看不到效果,需要到多表查询的时候才能体现出其好处。
AS关键字可以省略。
1 2 3 # 查询并去除重复记录 SELECT DISTINCT 字段名 FROM 表名SELECT DISTINCT name,age,address FROM student # 去除选择字段均相同的重复记录
💡 查询去重:
查询去重并不会改变原表的数据,仅仅会提取原表中选择字段的非重复数据
1 2 3 4 # 查询结果参与运算(+ - * / ) # 在查询语句中,查询的列的可以和其他值做数学运算(加、减、乘、除等)。运算结果只会影响展示,不会影响表中的数据。 SELECT 列名1 + 固定值 FROM 表名SELECT 列名1 + 列名2 FROM 表名
条件查询 运算符
在查询条件中,可以使用多种比较运算符来表示查询条件。 = 等于,> 大于,<小于,<=小于等于,>=大于等于, <>或!=不等于
逻辑运算符
and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足
1 2 # 查询age大于35 或性别为男的学生(两个条件其中一个满足) SELECT * FROM student WHERE age> 35 OR sex= '男' ;
指定范围内查询 in
1 2 3 SELECT 字段名 FROM 表名 WHERE 字段 in (数据1 , 数据2. ..); # in 里面的每个数据都会作为一次条件,只要满足条件的就会显示。SELECT * FROM student WHERE id IN (1 ,3 ,5 ); # 这里的IN 相当于将OR 条件的连接 SELECT * FROM student WHERE id= 1 OR id= 3 OR id= 5 ;
模糊查询
MySQL通配符有两个:
%: 表示0个或多个字符(任意个字符)
_: 表示一个字符
1 2 3 4 5 6 7 # 模糊查询姓马的学生 SELECT * FROM student WHERE NAME LIKE '马%' ;# 查询姓马,且姓名有三个字的学生 SELECT * FROM student3 WHERE NAME LIKE '马__' ;# 查询姓名中包含'德' 字的学生 SELECT * FROM student3 WHERE NAME LIKE '%德%' ;
空值查询
查询某个字段为空(null)的数据,不是使用=null(null和任何值都不相等),而是使用is null来进行判断。
1 2 # 查询english成绩为null 的学生信息 SELECT * FROM student WHERE english IS NULL
排序 通过ORDER BY子句,可以将查询出的结果进行排序,排序只影响显示结果,不会影响数据库中数据的顺序。
单列排序
1 2 3 4 5 6 7 8 # 查询所有数据,使用年龄降序排序: SELECT * FROM student3 ORDER BY age DESC ;
组合排序
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
1 2 3 4 SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名1 [ASC | DESC ],字段名2 [ASC | DESC ];# 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序: SELECT * FROM student3 ORDER BY age DESC , math DESC ;
函数 单行函数 :是指对于每一行数据进行计算后得到一行输出结果。SQL单行函数根据数据类型分为字符函数、数字函数、日期函数、转换函数等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 SELECT ABS (-1 ) SELECT CEIL (1.5 ) SELECT FLOOR (1.5 ) SELECT RAND() SELECT ROUND(1.23456 ) SELECT CONCAT("SQL ", "Runoob ", "Google ", "Facebook") AS ConcatenatedString; SELECT LOCATE('st' ,'myteststring' ); SELECT LOWER ('RUNOOB' ) SELECT UPPER ("runoob"); SELECT REPLACE('abc' ,'a' ,'x' ) SELECT SUBSTRING ("RUNOOB", 2 , 3 ) AS ExtractString; SELECT TRIM (' RUNOOB ' ) AS TrimmedString; SELECT reverse('dog' ); SELECT now(); SELECT sysdate(); SELECT curdate(); SELECT curtime(); SELECT MONTH ('2020-11-12' ); SELECT WEEK('2020-11-12' ); SELECT DAY ('2020-11-12' ); SELECT DATE_ADD('2020-11-12 12:11:22' ,interval 3 MONTH ) # date_add(date ,INTERVAL expr type)date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
流程控制函数