MySQL相关知识点DQL(数据查询语言)
前言
之前已经说过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在10000到20000之间的员工名、工资以及奖金
SELECT last_name, salary, commission_pct FROM t_mysql_employees
WHERE salary>=10000 AND salary<=20000;
2、查询部门编号不是在90到110之间,或者工资高于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(字段)要高一些
总结
希望我的博客能够帮助到你们哦摆摆!有问题欢迎评论区指教!