MySQL常见查询、表达式、排序、分组查询等相关知识点

本文详细介绍了MySQL的DQL,包括查询特定列、别名、去重、过滤排序、模糊查询(LIKE、BETWEEN…AND…、IN、IS NULL)以及ORDER BY和GROUP BY子句的使用,特别强调了+号在MySQL中的运算符功能和不同筛选条件的表达方式。
摘要由CSDN通过智能技术生成

前言

之前已经说过MySQL的一些知识点,今天再来说说MySQL的DQL数据查询语言,也就是我们常说的SQL语句啦其实!

指路:
MySQL安装卸载以及使用
MySQL之账号管理,四大引擎以及DDL(数据定义语言)
MySQL知识点(三)

DQL(数据查询语言)

注意事项

在MySQL中,关键字如果和字段名撞了,必须以`(这个点是键盘tab键上面的那个键在输入法为英文时打出来的点)包裹着字段名

1、查询所有列

//以*代表所有的列
select * from 表名;
//将所有列名写出来 假如我要写一个book表的查询所有,它拥有字段bid,bname,price
select bid,bname,price from book;

2、查询特定的列

//查询单个列
select 列名 from 表名;
//查询多个列
select 列名,列名 from 表名;

3、列的别名

可以理解为给列取一个名字显示或者将列重命名显示,是为了让我们更方便理解,如果要查询的字段有重名的情况,使用别名可以区分开来

//1、用as
select 列名 as 新名字,列名 as 新名字 from 表名;
//2、用空格隔开
select 列名 新名字,列名 新名字 from 表名;

4、查询常量值

常常配合函数一起使用

select 100;#显示结果100
select 'huli';#显示结果huli

5、查询表达式

select 100%98;

6、去重

关键字:distinct

select distinct 列名 from 表名;

7、+号的作用

首先让我们回忆一下Java中的+号有些什么作用吧!

第一:运算符,两个操作数必须都为数值型;
第二:连接符,有一个操作数为字符串的时候;

而我们MySQL中的+号:
仅仅只是有一个功能:那就是运算符

我们一般会出现以下四种情况

1、select 100+90; //两个操作数都为数值型,则做加法运算。

2、select '123'+90;//只要其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算。

3、select 'john'+90;//如果转换失败,则将字符型数值转换成0。

4、select null+10; //只要其中一方为null,则结果肯定为null。

8、过滤和排序数据

过滤其实算是抽象的说法,说明白点,就是使用where将不满足条件的数据过滤掉显示最后数据,where一定是会在from后面使用的,因为我们得使用from先查询到表中的数据再去使用条件过滤哦!

语法:
	select 查询列表 from 表名 where 筛选条件;

筛选条件其实分为两种:
第一种按条件表达式筛选:

简单条件运算符:> < = != <> >= <=

第二种按逻辑表达式筛选:

逻辑运算符:&& || ! and or not
作用:用于连接条件表达式

&&和and都是:两个条件都为true,结果为true,反之为false

||或or都是: 只要有一个条件为true,结果为true,反之为false

!或not都是: 如果连接的条件本身为false,结果为true,反之为false

一、按条件表达式筛选

		1、查询工资>12000的员工信息:
 		SELECT * FROM t_mysql_employees WHERE salary>12000;
 		2、查询部门编号不等于90号的员工名和部门编号
 		SELECT last_name, department_id FROM t_mysql_employees WHERE department_id<>90;

二、按逻辑表达式筛选

		1、查询工资z在1000020000之间的员工名、工资以及奖金
		SELECT last_name, salary, commission_pct FROM t_mysql_employees 
		WHERE salary>=10000 AND salary<=20000;
		2、查询部门编号不是在90110之间,或者工资高于15000的员工信息
		SELECT * FROM t_mysql_employees
		WHERE NOT(department_id>=90
		AND department_id<=110) OR salary>15000;

9、模糊查询

关键字:
	like
	between and
	in
	is null   is not null

9.1.like

特点:一般和通配符搭配使用

通配符:
	% 任意多个字符,包含0个字符
	_ 任意单个字符

1、查询员工名中包含字符a的员工信息

select * from employees where last_name like '%a%';

2、查询员工名中第三个字符为e,第五个字符为a的员工名和工资

select last_name, salary FROM t_mysql_employees
WHERE last_name LIKE '__n_l%';

3、查询员工名中第二个字符为_的员工名
_这个符号在SQL语句中是一个特殊字符,因为是上面提及的通配符效果,就需要一个关键字ESCAPE来取消它的特殊字符的效果

SELECT last_name FROM t_mysql_employees
WHERE last_name LIKE '_$_%' ESCAPE '$';

9.2.between … and …

含义:在…和…之间

特点:
使用between and 可以提高语句的简洁度
包含临界值
两个临界值不要调换顺序

1、查询员工编号在100到120之间的员工信息

//使用between … and …
SELECT * FROM t_mysql_employees
WHERE employee_id BETWEEN 100 AND 120;

这里还有第二种方法条件表达式来 <= =>
SELECT * FROM t_mysql_employees
WHERE employee_id <= 120 AND employee_id>=100;

9.3 in …

含义:判断某字段的值是否属于…中的某一项

特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符

查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号

//使用in
SELECT last_name, job_id FROM t_mysql_employees
WHERE job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
//使用=
SELECT last_name, job_id FROM t_mysql_employees
WHERE job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';

9.4 is null 和is not null

含义:由于条件表达式不能判断null值 is null 和is not null是用来判断null值的

1、查询没有奖金的员工名和奖金率

SELECT last_name, commission_pct FROM t_mysql_employees
WHERE commission_pct IS NULL;

2、查询有奖金的员工名和奖金率

SELECT last_name, commission_pct FROM t_mysql_employees
WHERE commission_pct IS NOT NULL;

9.5 is null 与 安全等于 <=>

1、查询没有奖金的员工名和奖金率

SELECT last_name, commission_pct FROM t_mysql_employees
WHERE commission_pct <=>NULL;

2、查询工资为12000的员工信息

SELECT last_name, salary FROM t_mysql_employees
WHERE salary <=> 12000;

IS NULL仅仅可以判断NULL值,可读性较高,建议使用;<=>既可以判断NULL值,又可以判断普通的数值,可读性较低

10、order by 子句

排序查询

语法:
select 查询列表 from 表名 【where 筛选条件】
order by 排序的字段或表达式;

特点:
1、asc代表的是升序,可以省略,desc代表的是降序

2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段

3、order by子句在查询语句的最后面,除了limit子句

1、按单个字段排序
SELECT * FROM t_mysql_employees ORDER BY salary DESC;

2、添加筛选条件再排序
	查询部门编号>=90的员工信息,并按员工编号降序
	SELECT * FROM t_mysql_employees
	WHERE department_id>=90 
	ORDER BY employee_id DESC;
	
3、按表达式排序
	查询员工信息 按年薪降序
	SELECT *,salary*12*(1+IFNULL(commission_pct,0))
	FROM t_mysql_employees
	ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
	
4、按别名排序
	查询员工信息 按年薪升序
	SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
	FROM t_mysql_employees
	ORDER BY 年薪 ASC;
	
5、按函数排序 
	查询员工名,并且按名字的长度降序 LENGTH 计算长度的函数
	SELECT LENGTH(last_name),last_name 
	FROM t_mysql_employees
	ORDER BY LENGTH(last_name) DESC;

6、按多个字段排序
	查询员工信息,要求先按工资降序,再按employee_id升序
	SELECT * FROM t_mysql_employees
	ORDER BY salary DESC,employee_id ASC;

11 分组查询之组函数

概念及功能:分组函数作用于一组数据,并对一组数据返回一个值。(大概意思就是把一个函数用于一组(列)数据,返回一个这个函数返回的值),一般用作统计使用,又称为聚合函数或统计函数或组函数 。

分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数

特点:
1、sum、avg一般用于处理数值型,max、min、count可以处理任何类型;

2、以上分组函数都忽略null值;

3、可以和distinct搭配实现去重的运算;

4、count函数的单独介绍,一般使用count(*)用作统计行数;

5、和分组函数一同查询的字段要求是group by后的字段;

group by语句用于结合组函数,根据一个或多个列对结果集进行分组

1、简单 的使用
//使用sum累加员工薪资
SELECT SUM(salary) FROM t_mysql_employees;
//使用avg计算员工薪资的平均值
SELECT AVG(salary) FROM t_mysql_employees;
//使用min计算员工薪资的最小值
SELECT MIN(salary) FROM t_mysql_employees;
//使用max计算员工薪资的最大值
SELECT MAX(salary) FROM t_mysql_employees;
//使用count计算员工薪资的总个数
SELECT COUNT(salary) FROM t_mysql_employees;

关于count使用的小差异效率:
MYISAM存储引擎下 ,COUNT(* )的效率高
INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)要高一些

总结

希望我的博客能够帮助到你们哦摆摆!有问题欢迎评论区指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值