老杜mysql01-mysql服务启停、常用命令、数据处理函数、SQL语句、简单查询、分组查询、条件查询、排序


查看mysql服务

image.png
image.png
image.png
image.png

  • 双击可以更改属性,或者右击选择属性。

image.png

  • mysql默认是启动的状态。

mysql服务用命令启停

  • net start 服务名称
  • net stop 服务名称
  • 以管理员身份打开

image.png

mysql登录

两种登录方法,两种方法得在bin目录下才行。

  1. 方法一、使用命令mysql -uroot -p,不会暴露密码。

image.png

  1. 方法二:mysql -uroot -p密码(p与密码之间不要 空格),会暴露密码。

image.png

退出mysql

  1. exit
  2. quit

mysql常用命令与数据库表

注意:mysql是不见分号不执行。分号表示结束,以分号结尾,分号是英文的分号。
image.png

  1. 查看mysql中有哪些数据库 : show databases;

image.png
mysql默认自带了4个数据库。

  1. 选择使用某个数据库:use sys;

image.png
表示正在使用一个名字叫做sys的数据库。

  1. 创建数据库:create database jiangchen;

image.png
show databases;
image.png

  1. 查看某个数据库下有哪些表:show tables;

image.png

  1. 查看mysql数据库的版本号:select version();

image.png

  1. 查看当前使用的是哪个数据库:select database();

image.png

  1. 导入sql文件:source D:\course\03-MySQL\document\bjpowernode.sql

后文的例子都使用此表,此表名为dept。
image.png

  1. 查看表的结构:desc dept;

describe缩写为:desc

数据库表

  • 数据库当中最基本的单元是表:table
  • 数据库当中是以表格的形式表示数据的。因为表比较直观。
  • 任何一张表都有行和列:
    • 行(row) :被称为数据/记录。
    • 列(column) :被称为字段。

姓名 性别 年龄(列:字段)


张三 男 20 ------->行(数据/记录)
李四 女 21 ------->行(数据/记录)
王五 男 22 ------->行(数据/记录)

此表中有:姓名字段、性别字段、年龄字段。

每一个字段都有:字段名、数据类型、约束等属性。字段名可以理解,是一个普通的名字,见名知意即可。
数据类型:字符串,数字,日期等
约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。

SQL语句的分类

  1. DQL:数据查询语言:凡是带有select关键字的都是查询语句
  • select. . .
  1. DML:数据操作语言:凡是对表当中的数据进行增删改的都是DML,主要操作表中的数据data。
  • insert delete update
  • insert增
  • delete删
  • update改
  1. DDL:数据定义语言:DDL主要操作的是表的结构。而不是表中的数据。

凡是带有create、drop、 alter的都是DDL

  • create:新建,等同于增
  • drop:删除
  • alter:修改
  1. TCL:事务控制语言
  • commit:事务提交
  • rollback:事务回滚
  1. DCL:是数据控制语言。
  • 例如:授权grant、 撤销权限revoke…

查询

简单查询

  1. 查询一个字段:select 字段名 from 表名;
  • select和from都是关键字。
  • 字段名和表名都是标识符。
  • SQL语句不区分大小写。
  1. 查询两个字段或者多个字段,字段名之间使用逗号“,”隔开。
  • 查询部门编号和部门名:
    select deptno,dname from dept;
  1. 查询所有字段
  • 把每个字段都写上用逗号隔开

select a,b,c,d,e,f... from tablename;

  • 使用*星号代表所有数据

select * from dept;
表示从dept表查询所有数据。

这种方式的缺点:
    1、效率低
    2、可读性差。
在实际开发中不建议,在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。

as起别名
  • 给查询的列起别名:使用as关键字起别名。
  • mysql> select deptno,dname as deptname from dept;
  • 只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname
  • select语句是永远都不会进行修改操作的。(因为只负责查询)
  • as关键字可以省略:mysql> select deptno,dname deptname from dept;
  • 别名里面有空格,用引号,单,双引号都行。
    • select deptno,dname 'dept name' from dept; //加单引号
    • select deptno,dname "dept name" from dept; //加双引号

在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。

条件查询

查询出来符合条件的数据,不是将表中所有数据都查出来。

  1. 查询语法格式:

select
字段1,字段2,字段3…
from
表名
where
条件;

  1. 查询的条件
  • =等于

    • 查询薪资等于800的员工姓名和编号
      • select empno,ename from emp where sal = 800;
    • 查询SMITH的编号和薪资?
      • select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号
  • <> 或!= 不等于

    • 查询薪资不等于800的员工姓名和编号
      • select empno,ename from emp where sal != 800;
      • select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号
  • <小于

    • 查询薪资小于2000的员工姓名和编号
      select empno,ename,sal from emp where sal < 2000;
  • <= 小于等于

    • 查询薪资小于等于3000的员工姓名和编号
      select empno,ename,sal from emp where sal <= 3000;
  • ‘>’ 大于

    • 查询薪资大于3000的员工姓名和编号
      select empno,ename,sal from emp where sal > 3000;
  • ‘>=’ 大于等于

    • 查询薪资大于等于3000的员工姓名和编号
      select empno,ename,sal from emp where sal >= 3000;
  • between … and …. 两个值之间, 等同于 >= and <=

    • 查询薪资在2450和3000之间的员工信息?包括2450和3000

      = and <= (and是并且的意思。)

      select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;

      • between … and …
        select empno,ename,sal from emp where sal between 2450 and 3000;
  使用between and的时候,必须遵循左小右大。
  between and是闭区间,包括两端的值。
  • is null 为 null(is not null 不为空)

在数据库当中null不能使用等号"="进行衡量。需要使用is null,因为数据库中的null代表什么也没有,
它不是一个值,所以不能使用等号衡量。

  • and 并且 与or 或者

and和or同时出现的话,有优先级问题吗?
and和or同时出现,and优先级较高。
如果想让or先执行,需要加“小括号“。如果不确定优先级,就加小括号就行了。

  • in 包含,相当于多个 or 。
  • not in则表示不在给定的范围内。
    • 查询薪资是800和5000的员工信息?
      select ename,sal from emp where sal = 800 or sal = 5000 ;
      select ename,sal from emp where sal in (800,500);

in不是一个区间。in后面跟的是具体的值。
not 可以取非,主要用在 is 或 in 中

  • like :模糊查询,支持%或下划线匹配,%与_是两个特殊符号。
    • %:匹配任意多个字符
      • 找出名字中含有o的:
        select ename from emp where ename like ‘%o%’;
      • 找出名字以K开始的:
        select ename from emp where ename like ‘K%’;
      • 找出名字以T结尾的:
        select ename from emp where ename like ‘%T’;
    • 下划线_:匹配任意一个字符
      • 找出第二个字母是A的:
        select ename from emp where ename like ‘_A%’;
      • 找出第三个字母是R的:
        select ename from emp where ename like ‘__R%’;
      • 找出名字中含有下划线的:
        select ename from emp where ename like ‘%_%,’ 即用反斜杠对下划线进行转义。

分组查询

  1. 语法格式

select

from

group by
字段

不写group by相当于整张表分成一组

select ename,job,sum(sal) from emp group by job;

以上语句在mysql中可以执行,在oracle中执行报错。因为在select后面添加ename字段没有意义。
oracle的语法比mysql的语法严格。

重点结论:在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段(group by后面的字段),以及分组函数。其它的一律不能跟。

找出“每个部门,不同工作岗位”的最高薪资?

select
deptno, job, max(sal)
from
emp
group by
deptno, job;
技巧:两个字段联合成1个字段看。(两个字段联合分组)。

找出每个部门最高薪资,要求显示最高薪资大于3000的?

使用having可以对分完组之后的数据进一步条件筛选。
having不能单独使用,having不能代替where,having必须和group by联合使用。

image.png
image.png
image.png

where和having,优先选择where,where实在完成不了了,再选择having。

列与数学运算

根据一个员工的月薪求年薪。
image.png
起别名
image.png
image.png

排序

语法格式:

select
ename,sal
from
emp
order by
sal; // 默认是升序!!

  • 指定降序: desc
  • 指定升序: asc

以两个字段排序吗?或者说按照多个字段排序?

查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。

select
ename,sal
from
emp
order by
sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

关键字顺序不能变:

select
from
where
order by

以上语句的执行顺序必须掌握:

数据处理函数

单行处理函数

单行处理函数的特点:一个输入对应一个输出,一行求完了再去求下一行。

常见的单行处理函数

  • lower 转换小写

      `mysql> select lower(ename) as ename from emp;`
    
  • upper 转换大写

    mysql> select upper(name) as name from t_student;

  • substr 取子串(substr(被截取的字符串, 起始下标,截取的长度))

    mysql> select substr(ename, 1, 1) as ename from emp;

  • concat函数进行字符串的拼接

    mysql> select concat(empno,ename) from emp;

  • length 取长度

    mysql> select length(ename) enamelength from emp;

  • trim 去空格

    mysql> select * from emp where ename = trim(' KING');

  • str_to_date 将字符串转换成日期

  • date_format 格式化日期

  • format 设置千分位

  • case…when…then…when…then…else…end

当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。注意:不修改数据库,只是将查询结果显示为工资上调)

select
ename,job, sal as oldsal,
(case job when ‘MANAGER’ then sal1.1 when ‘SALESMAN’ then sal1.5 else sal end) as newsal
from
emp;

  • round 四舍五入

mysql> select round(1236.567, 0) as result from emp; //保留整数位。
mysql> select round(1236.567, 1) as result from emp; //保留1个小数
mysql> select round(1236.567, 2) as result from emp; //保留2个小数
mysql> select round(1236.567, -1) as result from emp; // 保留到十位。

  • rand() 生成随机数

mysql> select round(rand()*100,0) from emp; // 100以内的随机数

  • ifnull 可以将 null 转换成一个具体值
    • ifnull(数据, 被当做哪个值)。如果“数据”为NULL的时候,把这个数据当做哪个值。

ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数学运算(加减法也是NULL),最终结果就是NULL。
注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。

分组函数

分组函数即多行处理函数。

将之前的关键字全部组合在一起。

select
from
where
group by
order by

以上关键字的执行顺序如下。

  1. from
  2. where
  3. group by
  4. select
  5. order by

(1)分组函数的使用注意事项

  1. 分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
  2. 分组函数自动忽略NULL,你不需要提前对NULL进行处理,因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
  3. 分组函数中count(*)和count(具体字段)的区别
  • count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
  • count(*):统计表当中的总行数。(只要有一行数据count则++)
  1. 分组函数不能够直接使用在where子句中,因为分组函数必须先分组之后才能使用,where执行的时候,还没有分组。
  • select ename,sal from emp where sal > min (sal) ;//报错。.
  • 以下例子没有分组,却可以使用,因为select在group by之后执行
  • select sum(sal) from emp ;
  1. 所有的分组函数可以组合起来一起用。

(2)常见的分组函数

  • count:计数
  • sum: 求和
  • avg : 平均值
  • max: 最大值
  • min : 最小值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值