MYSQL_DQL语言的学习(1)
MYSQL数据库的介绍
一、数据库的常见概念
1、DB:数据库,存储数据的容器
2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
**
二、数据库存储数据的特点
1、数据存放到表中,然后表再放到库中
2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
3、表中有一个或多个列,列又称为“字段”,相当于java中“属性”
4、表中的每一行数据,相当于java中“对象”
**
三、mysql的优点
1、开源、免费、成本低
2、性能高、移植性也好
3、体积小,便于安装
四、MySQL服务的启动和停止
方式一:通过命令行
net start 服务名
net stop 服务名
方式二:计算机——右击——管理——服务
五、MySQL服务的登录和退出
登录:mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码
退出:exit或ctrl+C
DQL(数据查询)语言的学习(1)
**
注意:以上为employees表、departments表、locations表、job_grades表、jobs表
目录:
- 基础查询
- 条件查询
- 排序查询
- 常见函数
1、基础查询**
**
语法:
select 查询列表 from 表名;
(1)查询列表可以是:表中的字段、常量值、表达式、函数
(2)查询的结果是一个虚拟的表格
1.1、查询表中的单个字段
select last_name from employess;
1.2、查询表中的多个字段
select last_name,salary,email from employess;
1.3、查询表中的所有字段
select * from employees;
1.4、查询常量值
select 100;
select ‘jonn’;
1.5、查询表达式
select 100%98;
1.6、查询函数
select version();
1.7、起别名
方式一:
select 100%98 as ‘结果’;
select last_name as ‘姓’,first_name as ‘名’ from employees;
方式二:
select last_name ‘姓’,first_name ‘名’ from employees;
1.8去重(distinct)
案例:查询员工表中涉及到的所有部门编号
select distinct department_id from employees;
1.9、+号的作用
Java中的+号:
运算符,两个操作数都为数值型
连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
select 100+90;两个操作数都为数值型,则做加法运算
select ‘100’+90;其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
如果装换失败,则将字符型数值转换成0
select null+10;只要字段其中一方为null,则结果肯定为null
案例:查询员工名和姓连成一个字符,并显示为姓名
select concat(last_name,first_name) as ‘姓名’ from employees;
注意:如果某个字段为0,可以用IFNULL来判断是否为空,如果为空显示为0
案例:显示出employees的全部列,各个列之间用,隔开,输出为out_from
select concat(last_name,’,’,first_name,',',IFNULL(money,0)) as out_put from employees;
**
2、条件查询
**
语法:
select 查询列表 from 表名 where筛选条件;
分类:
一、 按条件表达式筛选
条件运算符:> < = != <> <= >=
二、 按逻辑表达式筛选
作用:用于连接条件表达式
逻辑运算符: && || ! and or not
&&和and:两个条件都为true,结果为true,反之为false
||和or:只要有一个条件为true,结果为true,反之为false
!或not:如果连接的条件本身为false,结果为true,反之为false
三、按模糊查询
模糊查询:like ,between and,in,is null
like特点:一般和通配符搭配使用
通配符:% 任意多个字符,包含0个字符;_任意单个字符
between and特点:
1、使用between and 可以提高语句的简洁度;
2、包含临界值
3、两个临界值不要调换顺序
in特点:
1、判断某字段的值是否属于in列表中的某一项;
2、使用in比or更加简洁;
3、in里面不支持使用通配符%。
2.1、按条件表达式筛选
案例:查询工资>12000的员工信息
select * from employees where salary>12000;
2.2、按逻辑表达式筛选
案例1:查询工资z在10000到20000之间的员工名,工资以及奖金
select last_name,salasy commission_pct from employees where salary>=10000 and salary <=20000;
案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select * from employees where not(department_id>=90 and department_id<=110) or salar>15000;
2.3、按模糊查询
# like
案例1:查询员工名中包含字符a的员工信息
select * from employees where last_name like ‘%a%’;
案例2:查询员工中第三个字符为e,第5个字符为a的员工名和工资
select last_name,salary from employees where last_name like ‘__e_a%’;
案例3:查询员工中第二个字符为_的员工名
select last_name from employees where last_name like ‘_/_%’
(其中/为转义字符)
或者
(其中$为转义字符可以任意替代,用escape说明转义符合)
select last_name from employees where last_name like ‘_$_%’ ESCAPE ‘$’;
# between and
案例:查询员工编号在100到120之间的员工信息
方法一:
select * from employees where employee_id >=100 and employee_id<=120;
方法二:
select * from employees where employee_id betweem 100 and 120;
# in
案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
方法一:
select last_name,job_id from employees where job_id=’IT_PROG’or job_id=’ AD_VP’or job_id=’ AD_PERS’;
方法二:
select last_name,job_id from employees where job_id in(‘IT_PROG’, ‘AD_VP’, ‘AD_PERS’);
# is null特点:=或<>不能用于判断null值,is null 或is not null可以判断null值
案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null;
案例2:查询有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is not null;
# 安全等于 <=>
案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct <=> null;
案例2:查询工资为12000的员工信息
select last_name,salary from employees where salary<=>12000;
# is null pk <=>
is null:仅仅可以判断null值,可读性较高,建议使用
< =>:既可以判断null值,又可以判断普通的数值,可读性较低
**
3、排序查询
**
语法:
select 查询列表 from 表 where 筛选条件 order by 排序列表(asc|desc);
特点:
1、 asc代表的是升序,desc代表的是降序
2、 如果不写,默认是升序asc
3、 order by子句中可以支持单个字段,多个字段,表达式,函数,别名
4、 order by字句一般是放在查询语句的最后面,limit子句除外
案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc
案例2:查询员工信息,要求工资从低到高排序
select * from employees order by salary asc(或者不加asc)
案例3:查询部门编号>=90的员工信息,按入职时间的先后进行排序
select * from employees where department_id>=90 order by hiredate asc;
案例4:(按表达式排序)按年薪的高低显示员工的信息和年薪
select *,salary*12*(1+ifnull(commission_pct,0)) as 年薪 order by 年薪 decs;
案例5:按姓名的长度显示员工的姓名和工资(按函数排序)
select length(last_name) 字节长度,last_name,salary from employees order by length(last_name)desc;
案例6:查询员工信息,要求先按工资排序,再按员工编号排序(按多个字段排序)
select * from employees order by salary acs,employee_id desc;
案例7:查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
select last_name,department_id,salary*12*(1+ifnull(commission,0)) as 年薪 from employees order by 年薪desc,last_name asc;
案例8:选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary from employees where not between 8000 and 17000,order by salary desc;
案例9:查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select * ,length(email) 字节数 from employees where email like '%e%',order by 字节数 desc,deparment_id asc;
**
4、常见函数
**
概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。
好处:1、隐藏了实现细节,2、提高代码的重用性
语法:
select 函数名(实参列表)from 表
特点:
1、叫什么(函数名)
2、干什么(函数功能)
分类:
1、单行函数
如 concat、length,ifnull等
2、分组函数
功能:做统计使用,又称为统计函数,聚合函数,组函数
常见函数:
1、字符函数:
length: 获取参数值的字节个数
concat: 拼接字符串
substr: 截取字段
instr: 返回子串第一次出现的索引,如果找不到返回0
trim: 消除前后空格,前后指定删除的字符
upper: 将所选字符全部变为大写
lower: 将所选字符全部变为小写
lpad:用指定的字符实现左填充指定长度
rpad:用指定的字符实现右填充指定长度
replace:替换字符串
2、 数学函数:
round: 四舍五入
ceil: 向上取整,返回>=该参数的最小整数
floor: 向下取整,返回<=该参数的最大整数
truncate:截断
mod:取余
3、日期函数:
now: 返回当前系统日期+时间
curdate: 返回当前系统日期
curtime: 返回当前系统时间
year:年
month:月
monthname:英语月
day:日
hour:小时
minute:分钟
second:秒
str_to_date: 将日期格式的字符转换成指定格式的日期。
date_format: 将日期转换成字符
4、其他函数:
version:查看当前版本号
database:查看当前数据库
user:查看当前用户
5、控制函数:
if:
case when then end
一、字符函数
# length 获取参数值的字节个数
select length(‘john’); 4
select length(‘张三丰hahaha’) 15,中文代表3个字符
# concat 拼接字符串
select concat(last_name,’_’,first_name) 姓名 from employees;
# upper,lower
select upper('john'); 将所选字符全部变为大写
select lower('jhon');将所选字符全部变为小写
案例:将姓变大写,名变小写,然后拼接
select concat(upper(last_name),lower(first_name)) from employees;
# substr、substring截取字段
注意:索引从1开始
#截取从指定索引处后面所有字符**
select substr('你好小明啊',3) out_put; 显示:小明啊
# 截取从指定索引处指定字符长度的字符
select substr('你好小明啊',3,2) out_put; 显示:小明
案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
select concat(upper(substr(last_name,1,1)), ’_’,lower(substr(last_name,2)) ,lower(first_name))) out_put from employees;
# instr 返回子串第一次出现的索引,如果找不到返回0
select instr('杨不悔爱上了殷六侠','殷六侠') as out_put; 显示:7
# trim 消除前后空格,前后指定删除的字符
select length(trim(' 小明 '))as out_put; 显示:小明
select trim('a' from 'aaa小a明aaa')as out_put; 显示:小a明
# lpad 用指定的字符实现左填充指定长度
select lpad('王小二',5,'*')as out_put; 显示:**王小二
select lpad('王小二',2,'*')as out_put; 显示:王小
# rpad 用指定的字符实现右填充指定长度
select rpad('王小二',5,'*')as out_put; 显示:王小二**
select lpad('王小二',2,'*')as out_put; 显示:小二
# replace 替换
select replace('小明喜欢小红小红','小红','晓敏'); 显示:小明喜欢小敏小敏
二、数学函数
# round 四舍五入
select round(1.53); 显示:2
select round(-1.53); 显示:-2
# ceil 向上取整,返回>=该参数的最小整数
select ceil(1.02);显示:2
select ceil(-1.02);显示:-1
# floor 向下取整,返回<=该参数的最大整数
select floor(9.5);显示:9
select floor(-9.5);显示:-10
# truncate 截断
select truncate(1.65,1);显示:1.6
# mod取余
select mod(10,3);显示:1
select mod(10,-3);显示:1
select mod(-10,-3);显示:-1
select 10%3;显示:1
三、日期函数
# now 返回当前系统日期+时间
select now(); 显示:2019-09-11 15:13:12
# curdate 返回当前系统日期,不包含时间
select curdate();显示:2019-09-11
# curtime返回当前系统时间
select curtime(); 显示:15:13:12
# 可以获取指定的部分,年、月、日、小时、分钟、秒
select year(now()) 年; 显示:2019select month(now())月; 显示:9select day(now()) 日; 显示:11select hour(now())小时;显示 15select minute(now()) 分钟;显示:13select second(now())秒;显示 12
# str_to_date 将日期格式的字符转换成指定格式的日期
str_to_date(‘9-13-1999’,’%m-%d-%Y’) 1999-09-13
案例:查询入职日期为1992-4-3的员工信息
select * from employees where hirdate=str_to_date('4-3-1992','%c-%d-%Y');
# date_format:将日期转换成字符
date_format(‘2018/6/6’,’%Y年%m月%d日’); 2018年06月06日
案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name,date_format('hiredate','%m月/%d日 %y年') from employees where commission is not null;
# date_format:将日期转换成字符
date_format(‘2018/6/6’,’%Y年%m月%d日’); 2018年06月06日
案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name,date_format('hiredate','%m月/%d日 %y年') from employees where commission is not null;
# 总结
1. 格式符:%Y 四位的年份 1998
2. 格式符:%y 两位的年份 98
3. 格式符:%m 两位的月份 01 格式符:%c 一位的月份 1
4. 格式符:%d 两位的日 01 格式符:%H 小时(24小时制) 18
5. 格式符:%h 小时(12小时制)
6. 格式符:%i 两位的分钟 18
7. 格式符:%s 两位的秒 08
四、其他函数
select version();查看当前系统版本号
select database();查看当前数据库
select user();查看当前用户
五、流程控制函数
# if函数:if else 的效果
select if(10<5,'大','小'); 显示小
案例:判断员工是否有奖金,有奖金为有,无奖金为无的姓名
select last_name,commission_pct,if(commission_pct is null,'无','有') as '备注'from employees;
# case 函数的使用一:switch case的结果
Java中:
switch(变量或表达式){
case 常量1:语句1;break;
…
default:语句n;break;
}
Mysql中:
case 要判断的字段或表达式
when 常量1 then 要表示的值1或语句1;
when 常量2 then 要表示的值2或语句2;
end
案例:查询员工的工资,要求
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门号,显示的工资为原工资
select salary,department_id,case department_id
when 30 then salary*1.1
when 40 then salary*1.2
when 50 then salary*1.3
else salary end as 新工资
from employees;
# case函数的使用二:类似于多重if
Java中:
If(条件1){
语句1:
}else if(条件2){
语句;
}
…
else{
语句n;
}
Mysql中:
case when 条件1 then 要显示的值1或语句1;
case when 条件2 then 要显示的值1或语句2;
else 要显示的值n或语句n
end
案例:查询员工的工资的情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别
select salary,last_name
case when salary>20000 then 'A级别'
when salary>15000 then 'B级别'
when salary>10000 then 'C级别'
else ‘D级别’ end as '级别'
from employees;
# 练习
案例:显示系统时间(注:日期加时间)
select now();
案例1:查询员工号,姓名,工资,以及工资提高百分之20后的结果(new salary)
select employee_id,last_name,salary,salary*(1+20%) as 'new salary' from employees;
案例2:将员工的姓名按首字母排序,并写出姓名的长度(length)
select last_name,length(last_name) as length from employees order by substr(last_name,1,1) asc;
**
MYSQL_DQL语言的学习(1)相关推荐
- c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
[摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...
- R语言可视化学习笔记之相关矩阵可视化包ggcorrplot
本文转载自"R语言中文社区",己获授权. 作者简介Introduction taoyan:伪码农,R语言爱好者,爱开源. 个人博客: https://ytlogos.github. ...
- c语言struct_学习了C语言之后还是感觉不会编程,应该怎么办?其实你想错了!...
其实对于程序而言,C语言抑或着C++.Java等其他程序语言只是用于表达你的想法的一个工具.就像让我们以建筑为例,画图是一个基本功,但是画什么才是核心所在.那么,今天我们以一个设计一个RPG(角色扮演 ...
- 不会c语言能学习python_为什么很多人学不会C语言?学霸说:你要是像我一样学肯定能行!...
为什么很多人学不会C语言?C语言作为一门入门级语言,是大多数编程者的学习首选,它不是应该是一门容易上手的编程语言吗?而且大学都会有老师教的,为什么很多人学不好C语言呢?其实笔者认为学不好C语言的主要原 ...
- 计算机二级c在哪里学习,2017年计算机二级C语言考点学习
2017年计算机二级C语言考点学习 学习是把知识能力思维方法等转化为你的私有产权的重要手段,是"公有转私"的重要途径.以下是百分网小编整理的2017年计算机二级C语言考点学习,欢迎 ...
- Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码
Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码 目录 文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码
- Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...
- C语言数据结构学习用单元测试
药物名称: C语言数据结构学习用单元测试 主治: 本品是基于CUnit编写的.全部的.纯C的数据结构(ADT)各种实现的单元测试.主治基础不牢,水品增长缓慢.建议配合严蔚敏<数据结构>(C ...
- C语言再学习--关键字
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/53021879 C语言一共有32个关键字,如下表所示: 关键字 说明 auto ...
- C语言再学习 -- 创建excel文件
参看:C语言操作Excel表格 上一篇文章讲了一下 cJSON,可以生成json文件了.这篇文章讲一下怎么生成excel表xsl格式文件. 注意点: 1.文件类型为 xls 或者 xlsx 2.使用f ...
最新文章
- Uber做出艰难决定:关掉AI实验室,彭博社:Uber没有梦想
- 快评 美国软件开发杂志的最新jolt大奖!
- 每日一练:Python代码绘制航海王草帽路飞,打饭阿姨也能跟着学会的Turtle海龟绘图系列
- boost::hana::detail::type_foldr1用法的测试程序
- 删除重复数据sql语句
- html+字体图标找不到字体,bootstrap中不显示字体图标问题怎么解决?
- UML-基于GRASP对象设计步骤
- 单片机原理及应用pdf_单片机原理及应用课程设计
- lte和4g有什么区别
- 2022年计算机专业程序员笔记本电脑推荐
- 创建一个滚动的文本字幕。
- bim webgl 模型 轻量化_葛兰岱尔WebGL轻量化GIS+BIM融合引擎 大体量BIM模型LOD技术说明...
- NEFU 大一寒假训练六(二分查找)2020.01.05
- Quartus II 13.1与Modelsim SE的安装
- 网联兴,银联苦:一文看清支付清算市场新局面的矛盾和疑惑
- 2020年日历电子版(打印版)_2020年日历表(带农历)下载-2020年日历全年表Excel打印版下载 - 欧普软件园...
- js判断上传文件为图片格式、excel格式
- RFID工作频率的分类
- Python修改图片分辨率(附代码) | Python工具
- 将系统临时文件夹恢复到原来默认的目录
热门文章
- strtolower()和strtoupper()中文乱码问题
- 计算机机械硬盘寿命,有问有答:电脑的机械硬盘和固态硬盘哪个寿命更长?
- 对小学语文教学的几点心得体会
- 云有约 | 首攻RSA,天空卫士“秀肌肉”怎么样了?
- JAVA看云判断天气_如何看云识天气?
- apn(Access Point Name, 接入点名称)简介
- Linux用户与内核空间交互—procfs
- 服务器使用CDN加速的优劣势分析
- 如何逃出【 AI 换脸的世界】
- idea启动报错‘否则 JavaFX 应用程序类必须扩展javafx.application.Application’