文章目录
查看mysql服务
- 双击可以更改属性,或者右击选择属性。
- mysql默认是启动的状态。
mysql服务用命令启停
- net start 服务名称
- net stop 服务名称
- 以管理员身份打开
mysql登录
两种登录方法,两种方法得在bin目录下才行。
- 方法一、使用命令mysql -uroot -p,不会暴露密码。
- 方法二:mysql -uroot -p密码(p与密码之间不要 空格),会暴露密码。
退出mysql
- exit
- quit
mysql常用命令与数据库表
注意:mysql是不见分号不执行。分号表示结束,以分号结尾,分号是英文的分号。
- 查看mysql中有哪些数据库 : show databases;
mysql默认自带了4个数据库。
- 选择使用某个数据库:use sys;
表示正在使用一个名字叫做sys的数据库。
- 创建数据库:create database jiangchen;
show databases;
- 查看某个数据库下有哪些表:show tables;
- 查看mysql数据库的版本号:select version();
- 查看当前使用的是哪个数据库:select database();
- 导入sql文件:source D:\course\03-MySQL\document\bjpowernode.sql
后文的例子都使用此表,此表名为dept。
- 查看表的结构:desc dept;
describe缩写为:desc
数据库表
- 数据库当中最基本的单元是表:table
- 数据库当中是以表格的形式表示数据的。因为表比较直观。
- 任何一张表都有行和列:
- 行(row) :被称为数据/记录。
- 列(column) :被称为字段。
姓名 性别 年龄(列:字段)
张三 男 20 ------->行(数据/记录)
李四 女 21 ------->行(数据/记录)
王五 男 22 ------->行(数据/记录)
此表中有:姓名字段、性别字段、年龄字段。
每一个字段都有:字段名、数据类型、约束等属性。字段名可以理解,是一个普通的名字,见名知意即可。
数据类型:字符串,数字,日期等
约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。
SQL语句的分类
- DQL:数据查询语言:凡是带有select关键字的都是查询语句
- select. . .
- DML:数据操作语言:凡是对表当中的数据进行增删改的都是DML,主要操作表中的数据data。
- insert delete update
- insert增
- delete删
- update改
- DDL:数据定义语言:DDL主要操作的是表的结构。而不是表中的数据。
凡是带有create、drop、 alter的都是DDL
- create:新建,等同于增
- drop:删除
- alter:修改
- TCL:事务控制语言
- commit:事务提交
- rollback:事务回滚
- DCL:是数据控制语言。
- 例如:授权grant、 撤销权限revoke…
查询
简单查询
- 查询一个字段:select 字段名 from 表名;
- select和from都是关键字。
- 字段名和表名都是标识符。
- SQL语句不区分大小写。
- 查询两个字段或者多个字段,字段名之间使用逗号“,”隔开。
- 查询部门编号和部门名:
select deptno,dname from dept;
- 查询所有字段
- 把每个字段都写上用逗号隔开
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中可以使用。
条件查询
查询出来符合条件的数据,不是将表中所有数据都查出来。
- 查询语法格式:
select
字段1,字段2,字段3…
from
表名
where
条件;
- 查询的条件
-
=等于
- 查询薪资等于800的员工姓名和编号
select empno,ename from emp where sal = 800;
- 查询SMITH的编号和薪资?
select empno,sal from emp where ename = 'SMITH';
//字符串使用单引号
- 查询薪资等于800的员工姓名和编号
-
<> 或!= 不等于
- 查询薪资不等于800的员工姓名和编号
select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800;
// 小于号和大于号组成的不等号
- 查询薪资不等于800的员工姓名和编号
-
<小于
- 查询薪资小于2000的员工姓名和编号
select empno,ename,sal from emp where sal < 2000;
- 查询薪资小于2000的员工姓名和编号
-
<= 小于等于
- 查询薪资小于等于3000的员工姓名和编号
select empno,ename,sal from emp where sal <= 3000;
- 查询薪资小于等于3000的员工姓名和编号
-
‘>’ 大于
- 查询薪资大于3000的员工姓名和编号
select empno,ename,sal from emp where sal > 3000;
- 查询薪资大于3000的员工姓名和编号
-
‘>=’ 大于等于
- 查询薪资大于等于3000的员工姓名和编号
select empno,ename,sal from emp where sal >= 3000;
- 查询薪资大于等于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的时候,必须遵循左小右大。 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);
- 查询薪资是800和5000的员工信息?
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’;
- 找出名字中含有o的:
- 下划线_:匹配任意一个字符
- 找出第二个字母是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 ‘%_%,’ 即用反斜杠对下划线进行转义。
- 找出第二个字母是A的:
- %:匹配任意多个字符
分组查询
- 语法格式
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联合使用。
where和having,优先选择where,where实在完成不了了,再选择having。
列与数学运算
根据一个员工的月薪求年薪。
起别名
排序
语法格式:
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
以上关键字的执行顺序如下。
- from
- where
- group by
- select
- order by
(1)分组函数的使用注意事项
- 分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
- 分组函数自动忽略NULL,你不需要提前对NULL进行处理,因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
- 分组函数中count(*)和count(具体字段)的区别
- count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
- count(*):统计表当中的总行数。(只要有一行数据count则++)
- 分组函数不能够直接使用在where子句中,因为分组函数必须先分组之后才能使用,where执行的时候,还没有分组。
select ename,sal from emp where sal > min (sal) ;
//报错。.- 以下例子没有分组,却可以使用,因为select在group by之后执行
select sum(sal) from emp ;
- 所有的分组函数可以组合起来一起用。
(2)常见的分组函数
- count:计数
- sum: 求和
- avg : 平均值
- max: 最大值
- min : 最小值