目录
引言
MySQL语言大致有以下几种:
DDL(Data definition language)数据定义语言,主要的操作对象是数据库和表的create、drop、alter。
DML(Data manipulation language) 数据操纵语言,主要的是对表进行insert、delete、update。
DQL(Data query language)数据查询语言,主要是对表数据进行各维度的select查询。
DCL(Data control language)数据控制语言, 用来设置或更改数据库用户或角色权限的语句,在默认情况下只有系统管理员有权利执行DCL。
TCL(transaction control language)事务控制语言, 主要有save、commit、roll、back等命令。
今天先给大家跳个舞......哦不,给大家讲讲DQL数据查询语言吧。
一、MySQL概念、常见指令函数
在给大家介绍DQL之前,我们先来了解一下MySQL与一些常见函数,方便我们在进行语言操作中的代码大家能够知道这个关键字、函数是什么意思。
1. MySQL
1.1.MySQL概念
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
是基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)其中之一,是数据库管理系统分类之一。而既然是管理系统,那么必然有它自己的一套生态语言。
而我们进行MySQL操作,使用的语言呢?就是SQL。
SQL:指的是结构化查询语言,用于和数据库通信的语言。其中分类之一,就有我们今天的重点——DQL数据查询语言。
1.2.MySQL的优点
1、成本低:开放源代码,一般可以免费试用
2、性能高:执行很快
3、简单:很容易安装和使用
1.3.MySQL服务的启动和停止
方式一:计算机——右击管理——服务——MySQL
方式二:通过管理员身份运行cmd命令提示行
net start mysql(启动服务)
net stop mysql(停止服务)
1.4.MySQL服务的登录和退出
方式一:通过MySQL自带的客户端(只限于root用户)
方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd。
登录:mysql 【-h主机名 -P端口号 】-u用户名 -p密码
例如:【mysql -h localhost -P 3306 -u root -p】,回车,最后输入密码
或者:【mysql -h localhost -P 3306 -u root -p密码】,直接回车
如果本机,则可以简写为:【mysql -u root -p密码】
退出:exit或ctrl+C
1.5.MySqL的常见命令
1、查看当前所有的数据库
show databases;
2、打开指定的库
use 库名
3、查看当前库的所有表
show tables;
4、查看其他库的所有表
show tables from 库名;
5、创建表
create table 表名( 列名 列类型, 列名 列类型,...... );
6、查看表结构
desc 表名;
7、查看服务器的版本
方式一:登录到mysql服务端 select version();
方式二:没有登录到mysql服务端 mysql --version 或者 mysql --V
2. 常见函数:
而常见指令函数,是我们进行操作时,需要或肯定会用上的方法!没错,就是java中的方法,拿来用就行的方法。(重要的东西说三遍!)
2.1.函数概念
类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。
好处:
1、隐藏了实现细节
2、提高了代码的重用性
调用:
select 函数名(实参列表) 【from 表】;
特点
1、叫什么(函数名)
2、干什么(函数功能)
函数分类
单行函数
比如:concat 、length、ifnull等
分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数
2.2.常见函数分类(单行函数)
字符函数:
concat: 拼接
substr: 截取子串
索引从1开始
带长度截取,substring\substr(截取处索引,字符长度)
upper: 转换成大写
lower: 转换成小写
trim: 去前后指定的空格和字符
去字符时,需要在括号里面加一个单引号引出字符 from 字符对象。例如:select trim (‘a' from ’aaaaaaa张嘴山aaa‘)as 别名;
ltrim: 去左边空格
rtrim: 去右边空格
replace: 替换
lpad: 左填充
用指定的字符实现左填充指定长度,例如:select lpad(’尹舒舒‘,10,’*‘)as out_put;输出结果:*******尹舒舒 (10 是字符长度,并不是字节长度)
rpad: 右填充
instr: 返回子串第一次出现的索引
length: 获取字节个数
数学函数:
round: 四舍五入
rand: 随机数
返回0-1之间的小数,无限接近1
floor: 向下取整
返回<=该参数的最大整数
ceil: 向上取整
返回>=该参数的最小整数
mod: 取余
取余运算mod(a,b),可以理解为:a-a/b*b
truncate: 截断
日期函数:
now: 当前系统日期+时间
curdate: 当前系统日期
curtime: 当前系统时间
str_to_date: 将字符转换成日期
date_format: 将日期转换成字符
datediff:
返回两个日期相差的天数
year、month、day、hour、minute、second
返回年月日时分秒
monthname:
以英文形式返回月
流程控制函数:
if 处理双分支
语句结构:
if(条件表达式,表达式1,表达式2);
如果条件表达式成立,返回表达式1,否则返回表达式2
例如:select last_name,commission_pct,if(commission_pct is null, '没奖金’,‘有奖金’ ) as 备注;
case语句 处理多分支
情况1:处理等值判断
语句结构1:
case 要判断的字段或表达式when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
......
else 要显示的值n或语句n;
end
情况2:处理条件判断
语句结构2:
casewhen 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
......
else 要显示的值n或语句n
end
其他函数:
version: 版本
当前数据库服务器的版本
database: 当前库
当前打开的数据库
user: 当前连接用户
password(‘字符’)
返回该字符的密码形式(自动加密)
md5(‘字符’)
返回该字符的md5加密形式
2.3.常见函数分类(分组函数)
count:计算个数
* 一般选择非空的列:主键
* count(*)
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值
* 特点:
1、以上五个分组函数都忽略null值,除了 count(*)
2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
3、都可以搭配distinct使用,用于统计去重后的结果
4、count的参数可以支持:
* 字段、*、常量值,一般放1
注意:聚合函数的计算,排除null值。
解决方案:
* 选择不包含非空的列进行计算
* IFNULL函数
和分组函数一同查询的字段要求是group by后的字段
*datediff(1,2);日期函数只见可以相减得出天数
三、基础查询
1.语法
格式:
select 查询列表 from 表名;
上述格式类似于:java中的打印语句System.out.println(打印东西);
特点:
1、查询列表可以是:表中的字段(文件名)、常量值(数值、字符(无字符串说法,都是单引号))、表达式(加减乘除取余等)、函数(java的方法)
2、查询的结果是一个虚拟的表格
查询表中所有记录:
* select * from 表名;
2.简单查询
查询前,需要先打开库
use 库名;
查询表中的单个字段
select 字段名 from 表名;
多个字段的查询
select 字段名1,字段名2... from 表名;
* 注意:
如果查询所有字段,则可以使用*来替代字段列表。(但顺序是表中一致)
或者,单击表中的字段数据名,会自动写入其名字,可以自己排序。
f12——自动格式化。
3.起别名
起别名:
* as(取别名,as可以省略)
好处:
便于理解
如果要查询的字段有重名的情况,使用别名可以区分开来。
例如:SELECT 100%98 AS 结果;(as可以省略)
输出的就是:结果 2;
清晰明了
注意:
取别名,有特殊字符(比如空格,比如#等等),要将别名用双引号引起来(单引也可,建议双引)
4.计算列
计算列
* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
+号
只为运算符
两个操作数都为数值型,则做加法运算
其中一方为字符型,则mysql试图将字符型数据转换成数值型
如果转换成功,则继续做加法运算
如果转换失败,则将字符型数据转换成0
只要其中一方为null,则结果肯定为null
* ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
* 表达式1:哪个字段需要判断是否为null
* 如果该字段为null后的替换值。
5.补充知识
补充知识
显示表的结构
desc 表名;
字段拼接
concat
例如:select concat(‘a’,‘b’,‘c’);
输出:abc
条件判断函数
ifnull(判断值,返回值)
例如:ifnull(”字段为“null,“返回”0);
去除重复:
* distinct
在查询列表前插入即可
例如:select distinct 字段名 from 表名;
四、条件查询
1.概念
语法格式
select 查询列表 from 表名 where 筛选条件;
执行顺序
先表名,再条件,最后查询列表
2.分类
分类
一、按条件表达式筛选
简单条件运算符:> < = != <>(不等于) >= <=
二、按逻辑表达式筛选
逻辑运算符:&& || ! and or not
三、模糊查询
like、between and、in、is null、is not null
like特点
一般和通配符搭配使用
通配符:
% (百分号)任意多个字符,包含0个字符
_ (下划线)任意单个字符
案例:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select last_name,salary from employees where last_name like‘___e_a%’;
通配符中,三个下划线加e加一个下划线加a加%
注意:如果想要查询字段中,包含下划线的目标时,因为通配符中有下划线,所以我们需要进行转译操作。在查询字段位置处,加一个\,或者用其他字符,然后在引号后面加escape ‘我们使用的字符’;(推荐escape转译)
例如:where last_name like ‘_\_%’;或者where last_name like '_$_% ' escape '$';
between and特点
1、使用between and可以提高语句的简洁度
2、包含临界值
3、两个临界值不要调换顺序
in特点
1、使用 in 可以提高语句简洁度
2、in 列表的值类型必须一致或兼容
3、in 列表中不支持通配符的使用
is null特点
=或者<>(不等于)不能用于判断null值
is null 或is not null可以判断null值
补充:安全等于:<=>
<=>
既可以判断null值,也可以判断普通类型的数值
缺点:可读性不高,容易等于与不等于弄混
建议用is null
3.特殊查询案例
查询员工号为176的员工的姓名和部门号和年薪?代码如下:
select last_name,department_id,salary*12*(1+if(commission_pct,0)) as 年薪
from employees
where department_id=176;
五、排序查询
1.概念
语法:
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc|desc】
执行顺序:先表,再条件,再查询东西,再排序
排序方式:
* ASC:升序,默认的
* DESC:降序
排序特点:
1、asc是升序,desc是降序,如果不写默认升序
2、order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
3、order by 子句一般是放在查询语句的最后面,limit 子句除外。
2.排序分类
1.按单个字段进行排序
2.按多个字段排序
3.按表达式排序
4.按别名排序
5.按函数排序
代码实例(图)
六、分组查询
1.语法概念
语法
select 分组函数,列(要求出现在group by的后面)from 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
注意:查询列表必须特殊,要求是分组函数和group by 后出现的字段
案例:查询每个工种的最高工资
select MAX (salary) , job_id from employees group by job_id;
having后可以支持别名
可以放在group by后,对count等进行查询。
where 后不可以跟聚合函数,having可以进行聚合函数的判断
2.特点
特点
1、分组查询中的筛选条件分为两类
分组前筛选
数据源:原始表
位置:group by 子句的前面
关键字:where
分组后筛选
数据源:分组后的结果集
位置:group by 子句的后面
关键字:having
分组函数做条件肯定是放在having子句中
能用分组前筛选的,就优先考虑使用分组前筛选
2、group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用得较少)
3、也可以添加排序(排序放在整个分组查询的最后)order by
七、连接查询(重点)
1.背景概念
含义:
又称多表查询,当查询的字段来自多于多个表时,就会用到连接查询
背景:笛卡尔乘积现象
表1中有m行,表2有n行,结果等于n*m行
发生原因:
没有有效的连接条件
如何避免:
添加有效的连接条件
2.分类
2.1.按年代分类
sql92标准
仅仅支持:内连接
sql92标准等值连接
1、多表等值连接的结果为多表的交集部分
2、n表连接,至少需要n-1个连接条件
3、多表的顺序没有要求
4、一般需要为表起别名
5、可以搭配前面介绍的所有子句使用,比如排序、分组、筛选等
sql99标准(推荐)
①、支持:内连接+外连接(左外、右外)+交叉连接
语法:
Select 查询列表
From 表1 别名 【连接类型】
Join 表2 别名
On 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
②、分类:(写在连接类型处)
内连接: inner
语法:
Select 查询列表
From 表1 别名
Inner join 表2 别名
On 连接条件;
特点:
①添加排序、分组、筛选都可以
②inner可以省略
③筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join 连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
外连接:
应用场景:
用于查询一个表中有,另一个表没有的记录
特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join 左边的是主表; 右外连接,right join 右边的是主表;
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
分类:
左外:left 【outer】
右外:right【outer】
全外:full【outer】
交叉连接:cross
就是一个两表笛卡尔乘积
推荐sql99标准的理由:
功能:sql99支持的比较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高
2.2.按功能分类
按功能分类
1.内连接
等值连接
非等值连接
自连接
2.外连接
左外连接
右外连接
全外连接
3.交叉连接
3.补充
为表起别名
好处
提高语句的简洁度
区分多个重名的字段
注意
如果为表起了别名,则查询的字段就不能使用原来的表名去限定
加筛选条件
在where语句后面加and子句;
八、子查询
1.概念
出现在其他语句内部的select语句,称为子查询或者内查询(外部的查询语句,称为主查询或外查询)
内部嵌套其他select语句的查询,称为外查询或者主查询
示例代码
2.分类
2.1.按子查询出现的位置
select后面:
仅支持标量子查询
案例
from后面:
支持表之查询
特点:将子查询结果充当一张表,要求必须起别名
案例:查询每个部门的平均工资的工资等级
where或having后面:
标量子查询(单行子查询)
案例:
列子查询(多行子查询)
行子查询(结果集一行多列或多列多行)
exists后面(相关子查询):
表子查询
语法
exists是完整的语句,结果返回0/1
2.2.按结果集的行列数不同
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列或多行多列)
表子查询(结果集一般为多行多列)
3.子查询的特点
1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符(> < >= <= <> )使用
4、列子查询,一般搭配着多行操作符(in、any/some、all)使用
5、子查询的执行优先于主查询执行, 主查询的条件用到了子查询的结果
九、分页查询(limit)
1.应用场景
当要显示的数据,一页显示不全,需要分页提交sql请求。
2.语法
语法
Select 查询列表
From 表
【join type join 表2
On 连接条件
Where 筛选条件
Group by 分组字段
Having 分组后的筛选
Order by 排序后的字段】
Limit 【offset,】size;
Offset要显示条目的起始索引(起始索引从0开始)
Size要显示的条目个数
案例
查询前五条员工信息
方法1:select * from employees limit 0,5;
方法2:select 8 from employees limit 5;
3.分页查询的特点
特点
①limit语句放在查询语句的最后
②公式
要显示的页数 page,每页的条目数size(如下:)Select 查询列表
From 表
Limit (page-1)*size,size;
十、联合查询(union)
union 联合 合并(概念):
将多条查询语句的结果合并成一个结果。
语法:
查询语句1union
查询语句2
union
............
应用场景:
要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时。
特点:
1、要求多条查询语句的查询列数是一致的!
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all可以包含重复项
十一:推书
《中国哲学简史》
《蛤蟆先生》
《我想要两颗西柚》
《断舍离》
《解忧杂货店》
《人性的弱点》
......
如果你学不进编程的知识,去看看冯友兰先生的《中国哲学简史》升华自己吧。
如果你觉得生活如一滩死水,失了意义,去看看《蛤蟆先生》的心理历程吧。
如果你对于爱情失了信心,不愿意走出自己的世界,去看看《我想要两颗西柚》的爱情观吧。
如果你总是觉得整个世界都在羁绊着你,让你叫苦不堪,去看看《断舍离》的利落吧。
如果你被忧愁打击,忘了快乐的味道,别怕,去看看东野圭吾《解忧杂货店》的那处港湾吧。
如果你想更了解自己,也让自己能有能力去了解别人,去看看卡耐基先生的《人性的弱点》吧。
“如果你想看小说,诶!我写了本!要不要看看?点链接直通哦!
昆仑山上人(老爱喝酒的鬼)最新章节免费在线阅读_昆仑山上人小说全文在线阅读-起点中文网
喂喂喂!!
别走啊,点个赞啊...投个推荐票也行啊??
呜呜呜~~
举步维艰啊,生活不易啊,我想恰饭啊,好饿啊!!!”