返回顶部
首页 > 资讯 > 数据库 >第二天MySQL
  • 793
分享到

第二天MySQL

第二天MySQL 2021-02-10 15:02:13 793人浏览 才女
摘要

sql条件查询、排序查询、一些常见函数 2020/5/5 一、 DQL条件查询 语法:(执行顺序已标出) SELECT      查询列表                      3 FORM

第二天MySQL

sql条件查询、排序查询、一些常见函数

2020/5/5

一、 DQL条件查询

语法:(执行顺序已标出)

SELECT

     查询列表                      3

FORM

     表名                             1

WHERE

                 筛选条件;         2

分类:

按条件表达式筛选

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

#查找员工月薪>12000的员工信息

SELECT

               *

FROM

               employees

WHERE

               salary>12000;

按逻辑表达式筛选

逻辑运算符:and  or  not

#查找员工编号在90至120的员工名、薪水以及员工编号

SELECT

       last_name,

       salary,

       employee_id

FROM

       employees

WHERE

               employee_id >= 90 AND employee_id <= 120;

 

模糊查询

关键字:

1   like

特点:一般和通配符搭配使用,可以判断字符型或数值型。

通配符

%  可带表任意多个字符(包括空字符)

_  只能代表任意一个字符

案例一:查找员工名中含有字符a的员工名和部门编号

 

 

 

 运行结果:

 

 

案例二:查找员工名中第二个字符为"a",第五个字符为"o"的员工名、部门编号和薪水

 

 

 

运行结果;

 

注意:若想查找的字符本身就为特殊的字符如_或%,则需要通过对该字符转义来实现。共有俩种方式

方式一:使用’’来转义

方式二: 使用ESCAPE关键字配合

如:#查找员工名第二个字符为"_"的员工名、月薪以及奖金率

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       last_name LIKE "_\_%";

-----------------------------------------------------

SELECT

       last_name,salary,

       commission_pct

FROM

       employees

WHERE

        last_name

 LIKE

  "_$_%" ESCAPE  "$";  (相当于把‘$‘附上转义的功能)

 

2   between and

优点:

能够提高语句的简洁度

包含临界值

两个临界值不要调换顺序

案例: 查找员工部门编号在90到120之间的员工名、部门编号、工作编号

     

运行结果:

 

以上两种方法返回的查询结果一样,两种方式的表达意义完全等价!

 

3   in

特点:

  1. 可以提高语句简洁度
  2. in 列表的值类型必须一致或兼容(可以隐式的转换)
  3. 不支持使用通配符表示的的模糊字符

#查找员工部门编号是"AD_VP"、"FI_MGR"、"FI_ACCOUNT"的员工名、薪水、部门编号以及部门编号

SELECT

       last_name,

       salary,

       job_id,

       department_id

FROM

       employees

WHERE

       job_id = "AD_VP" OR job_id = "FI_MGR" OR job_id = "FI_ACCOUNT";

---------------------------------------------------------------------

SELECT

       last_name,

       salary,

       job_id,

       department_id

FROM

       employees

WHERE

       job_id IN ("AD_VP","FI_MGR","FI_ACCOUNT");

 

上面这两种方式完全等价

 

4   is null 、is not null

特点:=或<>不能用于判断null值,而is null 或is not null可以判断null值(is只能用于判断null,与null搭配,不可以判断数值如12000)

注意:安全等于<=>即可以判断NULL值,也可以判断其他普通的数值,可读性较差。

#查找奖金率为null的员工名、月薪以及奖金率

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       commission_pct IS NULL;(可读性很好!)

--------------------------------------------------------

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       commission_pct <=> NULL;(可读性较差)

以上两种方式等价,返回查询结果一致!!!

#查找奖金率不为null的员工名、月薪、奖金率以及年薪

SELECT

       last_name,

       salary,

       commission_pct,

       salary * (1 + IFNULL(commission_pct, 0)) * 12 AS 年薪

FROM

       employees

WHERE

       commission_pct IS NOT NULL;

注意,有个IFNULL()函数,原型为IFNULL(expression, alt_value),如果第一个参数的值expression为null,则替换它并返回第二个参数alt_value。

二、 DOL排序查询

特点:

ASC代表升序,DESC代表降序(若不写,则默认为升序)

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

order by 字句一般放在查询语句的最后面,LIMIT子句除外

语法:(执行顺序已标出)

SELECT

              查询列表             3

FROM

              表名                 1

[WHERE

              筛选条件]         2

ORDER BY

              排序列表 ASC|DESC;     4

案例一: #查询员工信息,要求工资从高到低排序

SELECT * FROM employees ORDER BY salary DESC;

 

案例二:#查询部门编号>=90的员工信息,按入职时间的先后顺序排序

SELECT

       *

FROM

       employees

WHERE

       department_id >= 90

ORDER BY

       hiredate DESC;

 

案例三:#按年薪的高低显示员工的信息和年薪【按表达式排序】

SELECT

       *,salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪

FROM

       employees

ORDER BY

              salary * 12 * (1 + IFNULL(commission_pct, 0))  DESC;

 

案例四:#按年薪的高低显示员工的信息和年薪【按别名排序】

SELECT

       *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪

FROM

       employees

ORDER BY

              年薪 DESC;

 

案例五:#按姓名的长度显示员工的姓名和工资【按函数排序】

SELECT

       last_name,

       salary,

       LENGTH(last_name) 姓名长度

FROM

       employees

ORDER BY

              LENGTH(last_name) ASC;  (LENGTH(str)函数->返回str的字节长度)

 

案例六:#查询员工信息,要求先按工资排序,再按员工编号排序【按多个字段排序】

SELECT

       *

FROM

       employees

ORDER BY

       salary DESC, employee_id DESC;

 

三、 常见函数介绍

调用方法:SELECT 函数名(实参列表)[from 表名];

分类:

单行函数

如:concat、length、ifnull、isnull等

分组函数

功能:做统计使用,又称为统计函数、聚合函数、组函数

       单行函数分类:

1.  字符函数

# length函数->返回当前参数的字节数(若字符集使用的是gbk则一个汉字占2个字节,若是utf8则为3个字节)

SELECT LENGTH(‘jane’); ->4

SELECT LENGTH(last_name) AS 姓名长度 FROM employees;

 

#concat函数->拼接字符

SELECT  CONCAT(last_name,’_’,first_name)  AS 姓名 FROM employees;

 

#upper、lower函数(类似于python中的str.lower()与str.upper()函数,UPPER(str)->将str转换为大写字母返回,LOWER(str)-> 将str转换为小写字母返回)

SELECT UPPER(last_name) FROM employees;

SELECT CONCAT(UPPER(last_name),’_’,LOWER(first_name)) AS 姓名 FROM employees;

 

#substr,substring(截断字符串)

截取从指定索引处后面的所有字符

SELECT SUBSTR("abcefghijk",2) AS output;

截取从指定索引处指定”字符“长度的字符

SELECT SUBSTR("abcdefghijk",2,3) AS output;

SELECT SUBSTR("呀呀呀",2,1) AS output;

 

#instr(返回子串第一次出现的索引,如果找不到则返回0)

SELECT INSTR(‘我去上学啦’,’上学啦’);->3

 

#trim(去”前后”的制定字符,若不指定则默认为去掉空格。注意,字符串中间的内容不会去除)

SELECT TRIM(‘      lalalla      ’)  AS output;  ->’lalalla’

SELECT TRIM( ‘a’ FROM ‘aaaaaaaabbbbbabbbaaabbbbaaaaa’);-> bbbbbabbbaaabbbb

 

#lpad(在左边用指定字符进行填充并且返回对应长度的字符结果)

SELECT LPAD(‘aaabbb’,10,’c’);->’ccccaaabbb’

SELECT LPAD(‘aaabbb’,4,’c’);->’aaab’

 

#rpad(在右边用指定字符进行填充并且返回对应长度的字符结果)

SELECT RPAD(‘aaabbb’,10,’c’);->’aaabbbcccc’

SELECT RPAD(‘aaabbb’,4,’c’);->’aaab’

 

#replace(用指定字符值替换指定字符值)

REPLACE(str,from_str,to_str)(str->作用的字符串,from_str->要被替换的字符串,to_str->用来替换的字符串)

SELECT REPLACE(’哈哈哈,我不知道’,’我不知道’,’我知道’);->’哈哈哈,我知道’

 

2.  数字函数

#round(对传入的参数四舍五入并返回)

SELECT ROUND(8.9);->9

SELECT ROUND(-8.9);->-9

SELECT ROUND(1.567,2);->1.57(2代表保留小数点后2位)

 

#ceil(向上取整,返回>=该参数的最小整数)

SELECT CEIL(1.002);->2

SELECT CEIL(1.00);->1

SELECT CEIL(-1.002);->-1

 

#floor(向下取整,返回<=该参数的最小整数)

SELECT CEIL(1.002);->1

SELECT CEIL(1.00);->1

SELECT CEIL(-1.002);->-2

 

#truncate 截断

TRUNCATE(X,D)->(X->要被处理的参数,D->截断后的小树点位数)

SELECT TRUNCATE(1.69999,1);->1.6

 

#mod(取余)

MOD(a,b): a-a/b*b(返回的取余结果的正负值取决于参数a)

SELECT MOD(10,3);->1

SELECT MOD(10,-3);->1

SELECT MOD(-10,-3);->-1

SELECT MOD(-10,3);->-1

 

3.  日期函数

#now (返回当前系统日期+时间)

SELECT NOW();->2020-05-05 20:20:15

 

#curdate(返回当前系统日期,不包含时间)

SELECT CURDATE();->2020-05-05

 

#curtime(返回当前系统时间,不包含日期)

SELECT CURTIME();->20:21:53

 

#year、month、day、hour、minute、second(用于获取指定的部分,年、月、日、时、分、秒)

SELECT YEAR(NOW());->2020

SELECT MONTH(NOW());->5

SELECT DAY(NOW());->5

SELECT HOUR(NOW());->20

SELECT MINUTE(NOW());->25

SELECT SECOND(NOW());->4

 

#str_to_date(将日期格式的字符转换成指定格式的日期)

相对应的格式符如下:

 

 

SELECT STR_TO_DATE(‘9-13 1999’,’%c-%d %Y’);-> 1999-09-13

#date_format(将日期转换成字符)

SELECT DATE_FORMAT(‘2018/6/6’,’%Y年%m月%d日’);-> 2018年06月06日

 

4.  其他函数

#version(返回当前Mysql的版本)

SELECT VERSION();->5.7.25-log

 

#database(返回当前打开的数据库

SELECT DATABASE();->myemployees

 

#user(返回当前的用户)

SELECT USER();->root@localhost

 

5.  流程控制函数

#if函数

IF(expr1,expr2,expr3)->(expr1:条件或逻辑表达式,若真则返回expr2,假则返回expr3)

SELECT IF(5>2,’大’,’小’);->’大’

 

#case函数

使用一:(switch case的效果)

case 要判断的字段或表达式

when 常量1 then 要显示的值1或语句1;

when 常量2 then 要显示的值2或语句2;

else常量n then 要显示的值n或语句n;

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;

 

 

  使用二:(类似于多重if)

case

when 条件1 then 要显示的值1语句1;

when 条件2 then 要显示的值2或语句2;

else条件n then 要显示的值n或语句n;

end

案例:查询员工的工资,要求:

如果工资>20000,显示级别A

如果工资>15000,显示级别B

如果工资>10000,显示级别C

否则,显示级别D

SELECT

   salary 原始工资,

   CASE

WHEN salary > 20000 THEN

   "A"

WHEN salary > 15000 THEN

   "B"

WHEN salary > 10000 THEN

   "C"

ELSE

   "D"

END AS 奖金级别

FROM

   employees;

 

 

您可能感兴趣的文档:

--结束END--

本文标题: 第二天MySQL

本文链接: https://lsjlt.com/news/5894.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 第二天MySQL
    SQL条件查询、排序查询、一些常见函数 2020/5/5 一、 DQL条件查询 语法:(执行顺序已标出) SELECT      查询列表                      3 FORM...
    99+
    2021-02-10
    第二天MySQL
  • Python第二天
    bytes和str之间的转化编码与解码del根据索引删奇数位所对应的元素find通过元素找索引fromkeys多个key的值是一个index通过元素找索引找不到会报错sort从大到小排序按最小元素删除并按最小元素依次添加遍历所有key从前往...
    99+
    2023-01-31
    第二天 Python
  • MySQL Online DDL(二)(r11笔记第88天)
    对于Online DDL,之前简单分析了一些场景MySQL中的Online DDL(第一篇)(r11笔记第3天),其实有一个很关键的点没提到,那就是online DDL的算法,目前有三个操作选项,def...
    99+
    2024-04-02
  • Python爬虫第二天
    Python爬虫第二天   超时设置         有时候访问网页时长时间未响应,系统就会判断网页超时,无法打开网页。如果需要自己设置超时时间则:             通过urlopen()打开网页时使用timeout字段设置 i...
    99+
    2023-01-30
    爬虫 第二天 Python
  • 学习python第二天
    一、python的版本选择与安装后的操作 python 2 vs 3 1。 默认支持中文 2. 不兼容2.x 3. 核心语法调整,更易学 4. 新特性默认只在3.x上有 系统位数 32bit =内存的最大寻址空间是2**32, ...
    99+
    2023-01-31
    第二天 python
  • 第二十五天- 包
      # 包:# 定义:# 包是⼀种通过'模块名'来组织python模块名称空间的⽅式.我们创建的每个⽂件夹都可# 称之为包.但要注意,在python2中规定.包内必须存在 __init__.py⽂件.在python3中可以# 省略,但是最...
    99+
    2023-01-30
  • python学习第二天
    目录 操作系统 操作系统干了什么 为什么要有操作系统 操作系统有什么用 应用程序的启动和操作系统的启动 ...
    99+
    2023-01-31
    第二天 python
  • python-selenum3 第二天启
    启动浏览器1.火狐2.IE3.谷歌 在第一天创建的项目上,创建文件夹和python文件在项目上右键New一个文件夹,在文件夹下new一个python File即可新建python File的时候需要输入名字 温馨提示:请避免关键字 输入引库...
    99+
    2023-01-31
    天启 python
  • 第二十九天- socketserver模
      1.socketserver模块:   socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket服务端。即,每个客服端请求连接...
    99+
    2023-01-30
    socketserver
  • python学习第二天 -----201
    第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chenjisong @file: sys.py @time: 2019/...
    99+
    2023-01-31
    第二天 python
  • 我的python学习--第十二天(二)
    Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti...
    99+
    2023-01-31
    二天 python
  • 第六天MySQL
    DDL语言库与表的管理(创建、修改、删除)、一些常见的数据类型(整形、浮点|定点、日期,字符)   2020 5/9   二十二、DDL(数据定义语言)->用于库和表的管理 一、 库的管理 a)    ...
    99+
    2021-10-26
    第六天MySQL
  • 第一天MySQL
    MySQL学习笔记   2020/5/4 一、 数据库的相关概念 数据库的好处 1   能够永久性的保存数据,实现数据持久化 2   可以实现结构化查询,方便管理   2.数据库相关概念 1数据库(DB->database):...
    99+
    2020-05-20
    第一天MySQL
  • 第三天MYSQL
    第三天MySQL学习 :分组函数、分组查询、连接查询(等值连接、非等值连接、自连接) 2020/5/6 分组函数:(分组函数用作统计使用,又称聚合函数、统计函数或组函数)  #sum(求和)、avg(平...
    99+
    2021-10-26
    第三天MYSQL
  • 第五天MYSQL
    分页查询、联合查询、DML(修改、删除、插入语句) 2020 5/9   十九、分页查询 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求 语法:(执行顺序已标出)          SE...
    99+
    2021-11-05
    第五天MYSQL
  • 第四天MySQL
    第四天MySQL 连接查询(内连接、外连接、交叉连接)(sql99版本下) 子查询: select 后面(标量子查询) from 后面(表子查询) where 或having后面(标量子查询...
    99+
    2020-08-04
    第四天MySQL
  • MySQL第三天
    MySQL第二天 关键词:分组聚合 自关联 物理上一张表,逻辑上是两张表 create table areas( id int primary key, atitle varchar(20)...
    99+
    2024-04-02
  • Java面试题冲刺第二十二天-- Nginx
    目录面试题1:谈一下你对 Nginx 的理解为啥我们总说Nginx好用?追问1:正向代理和反向代理区别在哪?正向代理面试题2:常用的 Nginx 做负载均衡的策略有哪些?1.指定权重...
    99+
    2024-04-02
  • 学习python的第二十天(dateti
    1.datetime模块(用于修改日期) import datetime print(datetime.datetime.now(),type(datetime.datetime.now())) 2019-06-10 19:37:55....
    99+
    2023-01-31
    十天 python dateti
  • Python第二天 (数据类型,变量 )
    1. 把任意数据类型赋值给变量 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如: 例子:a = 123 # a是整数            print(a) a =...
    99+
    2023-01-30
    第二天 变量 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作