SQL语言之DQL语句

数据库版本:MySQL8

一、DQL语句简介

DQL,Data Query Language,数据查询语言,用来查询数据记录。DQL语句并不会改变数据库,而是让数据库将查询结果发送结果集给客户端,返回的结果是一张虚拟表。

DQL语句完整语法格式

SELECT 要查询的列名
FROM 基本表名 			# 要查询的基本表名字
WHERE 限定条件			# 条件限定语句,用来筛选符合条件的记录
GROUP BY 分组列			# 按照分组列分组,比如说按照部门列分组,分组之后一个部门是一条记录
HAVING 限定条件			# 分组之后的条件,可以按照这个条件筛选分组之后的结果
ORDER BY 排序规则		# 按照排序规则对结果集进行排序
LIMIT 开始下标,结果数量;	# 显示指定条数的结果记录 

二、DQL语句

1.简单查询

1.查询指定列

	SELECT 列名1,列名2,...,列名n FROM 基本表名 [WHERE条件语句];

2.查询所有列

	SELECT * FROM 基本表名;

2.条件查询

所谓条件查询就是按照给出的条件查询,比如说查询姓名为李小明的记录。需要用到WHERE条件语句,常用到的运算符有:=、!=、<>、<、<=、>、>= 、BETWEEN…AND 、 IN(set)、 IS NULL、AND、OR、 NOT等等。
1.AND

	# 在hero表中查询occ='刺客'并且sex='男'的英雄信息;
	SELECT * FROM hero WHERE occ='刺客' AND sex = '男';

2.OR

	# 在hero表中查询occ='刺客'或sex='男'的英雄信息;
	SELECT * FROM WHERE occ='刺客' OR sex = '男';

3.IN

	# 查询ID是15,28,36的英雄信息
	SELECT * FROM hero WHERE ID IN (15,28,36);
NOT IN作用与IN相反,用法相同

4.IS NULL
IS NULL用于查询数据为NULL的记录,NOT IS NULL用法与其相同

	# 查询姓名为null的记录
	SELECT * FROM hero WHERE name IS NULL;

5.BETWEEN…AND
BETWEEN…AND用于查询在某个连续范围内的记录,包含开始值和结束值

	# 查询ID在50-80的英雄信息
	SELECT * FROM hero WHERE ID BETWEEN 50 AND 80;

6.NOT

	# 查询职业为刺客但不为男性的角色;
	1. SELECT * FROM hero WHERE occ='刺客' AND sex NOT '男';
	2. SELECT * FROM hero WHERE occ='刺客' AND sex!='男';
	3. SELECT * FROM hero WHERE occ='刺客' AND sex <>'男'; 

3.模糊查询

模糊查询,就是通过模糊的条件查询数据,比如说查询name以'A'开头的记录。
SELECT * FROM 基本表名 WHERE 列名 LIKE '表达式' # 表达式必须是字符串形式

格式中的表达式中包含两个符号:
通配符 ’ _ ’ :代表任意一个字符
通配符 ’ % ’ :代表0-n个字符
举个例子来说,假如我们需要查询查找姓李的同学信息,那么查询条件可以设置为 “name like ‘李%’”,“李”是姓氏,放在第一位,’%'代表名字。

#	1.在hero表中查询姓李的角色信息
SELECT * FROM hero WHERE name LIKE '李%';

#	2.在hero表中name包含"天"的角色信息
SELECT * FROM hero WHERE name LIKE '%天%';

4.字段控制查询

1.去除结果集中的重复记录
有的时候我们可能会查找到重复的记录,这时候我们需要使用 DISTINCT 关键字来删除结果集中的重复记录。

	SELECT DISTINCT 列名 FROM 基本表名 ; 
	# 查询emp表中sal所有不重复的记录
	SELECT DISTINCT sal FROM emp; 

2.查看两列数据之和
如果两列数据均为数值类型,那么可以查看二者的数值之和。

	# 查询emp表中的sal1与sal2之和
	SELECT sal1+sal2 FROM emp;

还有可能会遇到相加的两个数据中有一个null的情况,如果不进行相应处理的话结果也会变为null值,我们需要使用IFNULL()函数对null值处理。

	格式:IFNULL(参数1,参数2)
	作用:将出现的Null值转换为指定数值。
	参数1:可能会出现Null值的列名。
	参数2:Null转换的目标值。
	SELECT sal+IFNULL(comm,0) FROM emp;

3.给列名添加别名
有时候查询结果中的列名会显的很不美观,我们可以给其添加别名。

	SELECT 列名 [AS] 新列名 FROM 基本表名;
	# AS 可以省略
	SELECT sal salary FROM emp;

5.结果集排序

排序指的是针对结果集的排序,可以按照一个列的值排序,也可以按照多个列的值排序,使用的关键字均为 ORDER。
1.单列排序

	SELECT * FROM 基本表名 ORDER BY 排序参照列 ASC/DESC;

	示例
	SELECT * FROM hero ORDER BY id DESC;
	ASC :升序
	DESC:降序
	如果没有指定排序规则,默认为ASC。

2.多列排序

	SELECT * FROM 基本表名 ORDER BY 参照列1 ASC/DESC ,参照列2 ASC,DESC,...,参照列n ASC/DESC;

	示例:
	SELECT * FROM hero ORDER BY id DESC,name ASC;
多列排序时,首先按照参照列1的排序规则排序,如果参照列数值相同,按照参照列2的排序规则排序,以此类推。

7.聚合函数

	聚合函数用来对列数据进行运算,一共有五种。
	1. COUNT(列名):统计指定列不为NULL的记录行数;
	2. MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
	3. MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
	4. SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
	5. AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

1.COUNT

1. 查询emp表中的记录数
SELECT  COUNT(*)  FROM emp;
2. 查询emp表中有comm值的记录数
SELECT COUNT(comm) FROM  emp;

2.MAX与MIN

查询emp表中sal列的最大值与最小值
1. SELECT MAX(sal),MIN(sal) FROM emp;

3.SUM

1. 查询emp表中depno=1002的所有人的sal之和;
SELECT SUM(sal) Total FROM emp WHERE depno=1002;

4.AVG

1. 查询emp表中的sal平均值
SELECT AVG(emp) Average FROM emp ; 

7.分组查询

所谓分组查询,就是将查询结果按照某个字段的值进行分类,比如说,查询每一个部门的工资总和,其中就是按照“部门”这一字段进行分组的。
1. 单列分组
SELECT 列名 FROM 基本表名 GROUP BY 分组参照列;
2. 多列分组
SELECT 列名 FROM 基本表名 GROUP BY 分组参照列1,分组参照列2,...,分组参照列n;

示例

1. 查询emp表中deptno与按照deptno分组的的sal之和的记录。
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
2. 统计stu表中每个班级(gradename)中男女(gender)人数。
SELECT grandname,gender,COUNT(*) FROM stu;
注意,如果DQL语句中有分组操作,那SELECT后面只能跟分组参照列以及聚合函数。

HAING关键字:用于筛选分组后的数据记录,与WHERE条件子句作用一样,但HAVING子句可以使用聚合函数,WHERE子句不能。

1. 查询emp表中的部门工资总和大于50000的部门编号以及工资总和

SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>50000;

8.LIMIT结果显示

LIMIT作用为限制查询结果显示条数
语法格式
LIMIT 起始行数,显示条数;

示例
查询emp表中sal>2000的记录,结果从第1条开始,一共显示3条;
SELECT * FROM emp WHERE sal>2000 LIMIT 0,3;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值