mysql-day01笔记
Posted kitty_Happy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-day01笔记相关的知识,希望对你有一定的参考价值。
文章目录
1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
数据库:
英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。
顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了
具有特定格式的数据。
数据库管理系统:
DataBaseManagement,简称DBMS。
数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以
对数据库当中的数据进行增删改查。
常见的数据库管理系统:
mysql、Oracle、MS SqlServer、DB2、sybase等…
SQL:结构化查询语言
程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL
语句,最终来完成数据库中数据的增删改查操作。
SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,
同时在Oracle中也可以使用,在DB2中也可以使用。
2、怎么在cmd里面使用命令启动和关闭服务?
语法:
net stop 服务名称;
net start 服务名称;
3、使用bin目录下的mysql.exe 命令来连接mysql数据库服务器
本地登录命令(显示编写密码的形式):
mysql -u用户名(root) -p密码
本地登录(隐藏密码的形式):
mysql -u用户名(root) -p(回车)
Enter password:(密码)
4、mysql常用命令:
退出mysql
exit
查看mysql中有哪些数据库
show databases;
选择使用某个数据库
use (数据库名称)
创建数据库
create database (数据库名称);
查看mysql数据库的版本号:
select version();
查看当前使用的数据库
select database();
导入数据
source (完整路径名称)
查看表结构
desc (表名);
注意:mysql命令是不见 “;” 不执行,";"表示结束
"\\c"用来终止一条命令的输入。
5、数据库当中最基本的单元是表:table
什么是表table?
姓名 性别 年龄(列:字段) --------------------------- 张三 男 20 ------->行(记录) 李四 女 21 ------->行(记录) 王五 男 22 ------->行(记录)
数据库当中是以表格的形式表示数据的,因为表比较直观。
任何一张表都有行和列:
行(row):被称为数据/记录。
列(column):被称为字段。
6、关于SQL语句的分类?
分为:
DQL:
数据查询语言(凡是带有select关键字的都是查询语句)
select...
DML:
数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert delete update
insert 增
delete 删
update 改
这个主要是操作表中的数据data。
DDL:
数据定义语言
凡是带有create、drop、alter的都是DDL。
DDL主要操作的是表的结构。不是表中的数据。
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。
TCL:
不是王牌电视。
是事务控制语言
包括:
事务提交:commit;
事务回滚:rollback;
DCL:
是数据控制语言。
例如:授权grant、撤销权限revoke....
7、简单查询
7.1、查询一个字段
select (字段名) from (表名);
注意:
select 和 from 都是关键字
强调:
对于SQL语句来说,是通用的,
所有的SQL语句以“;”结尾。
另外SQL语句不区分大小写,都行。
7.2、查询多个字段
使用逗号隔开 “,”
select (字段名1),(字段名2) from (表名);
7.3、查询所有字段
第一种方式:
select (字段名1),(字段名2),(字段名3)…… from (表名);
第二种方式:
select * from (表名);
7.4、给查询的列起别名
使用as关键字起别名
select (字段名) as (别名) from (表名);
注意:
起别名只是将显示的查询结果列明显示为 别名 ,原列名不会发生改变
记住:
select 语句是永远都不会进行修改操作的。(因为只负责查询)
as 关键字可以省略
select (字段名) (别名) from (表名);
如果起别名的时候,别名里面有空格需要加 单引号 或者 双引号
select (字段名) '别 名' from (表名);
select (字段名) "别 名" from (表名);
注意:
注意:在所有的数据库当中,字符串统一使用单引号括起来,
单引号是标准,双引号在oracle数据库中用不了。但是在mysql
中可以使用。
强调:
数据库中的字符串采用单引号括起来是标准的。双引号不标准
7.5、使用数学表达式
字段可以使用数学表达式,如:
select (年薪)* 12 from (表名)
8、条件查询
8.1、什么是条件查询:
不是将表中所有数据都查出来。是查询出来符合条件的。
语法格式:
select (字段名1),(字段名2),(字段名3)……
from (表名)
where (条件)
8.2、都有哪些条件符
基本的:
1、= 等于
2、<> 或 != 不等于
3、< 小于
4、<= 小于等于
5、> 大于
6、>= 大于等于
特殊的:
1、between … and … (两个值,等同于 >= and <=)
2、in null 为 null (is not null 不为空)
注意:
在数据库当中null不能使用等号进行衡量。需要使用is null
因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
等号衡量。
3、and 并且
4、or 或者
注意:
and和or同时出现的话,会有优先级的问题
and优先级比or高。
以上语句会先执行and,然后执行or。
使用 小括号 避免优先级问题
5、in 包含,相当于多个 or (not in 不在这个范围中)
使用 or
select (字段名1),(字段名2),(字段名3)……
from 表名
where (字段名1) = 'zhangsan' or (字段名1) = 'lisi';
使用 in
select (字段名1),(字段名2),(字段名3)……
from 表名
where (字段名1) in('zhangsan','lisi');
注意:
in不是一个区间。in后面跟的是具体的值。
6、not 取非,主要用在 is 或 in 中
is null
is not null
in
not in
7、like
称为模糊查询,支持%或下划线匹配
%匹配任意多个字符
下划线:任意一个字符。
(%是一个特殊的符号,_ 也是一个特殊符号)
如:
找出名字以T结尾的?
select ename from emp where ename like '%T';
找出名字以K开始的?
select ename from emp where ename like 'K%';
找出第二个字每是A的?
select ename from emp where ename like '_A%';
找出第三个字母是R的?
select ename from emp where ename like '__R%';
注意:如果名字中有"_"
找出名字中有“_”的?
select name from t_student where name like '%_%'; //这样不行。
mysql> select name from t_student where name like '%\\_%'; // \\转义字符。
9、排序
9.1、升序或降序
使用 order by 进行排序,默认是升序 如:
select
(字段名1),(字段名2)
from
(表名)
order by
(用户工资); // 默认是升序!!!
使用 desc 指定降序,如:
select
(字段名1),(字段名2)
from
(表名)
order by
(用户工资) desc; // 降序
使用 asc 指定升序,如:
select
(字段名1),(字段名2)
from
(表名)
order by
(用户工资) asc; // 升序
9.2、多个字段排序
多个字段排序使用逗号隔开,如:
select
(字段名1),(字段名2)
from
(表名)
order by
(用户工资) asc,(用户姓名) asc; // (用户工资)在前,起主导,只有(用户工 资)相等的时候,才会考虑启用(用户姓名)排序。
9.3、根据字段的位置排序
用数字表示需要排序的列,如:
select (字段名1),(字段名2)
from (表名)
order by 2; // 2表示第二列。
9.4、关键字的执行顺序
关键字顺序不能变:
select
…
from
…
where
…
order by
…
以上语句的执行顺序必须掌握:
第一步:from
第二步:where
第三步:select
第四步:order by(排序总是在最后执行!)
10、数据处理函数
10.1、单行处理函数
单行处理函数的特点:一个输入对应一个输出。
和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
10.2、常见的单行处理函数
1、lower 转换小写
select lower((字段名)) from (表名);
2、upper 转换大写
select upper((字段名)) from (表名);
3、substr 取子串 (substr(别截取的字符串,起始下标,截取的长度))
select substr((字段名),(起始下标),(截取的长度)) from (表名);
4、concat 函数进行字符串的拼接
select concat((字段1),(字段2)) from (表名);
字段1 与 字段2 进行字符串拼接
5、length 取长度
select length((字段名)) from (表名);
6、trim 去空格
select * from (表名) where (姓名) = trim(' 姓名');
使用 trim 去掉前后的空格
7、str_to_date 将字符串转换成日期
8、date_format 格式化日期
9、format 设置千分位
10、case…when…then…when…then…else…end
select (员工姓名),(员工岗位),(员工工资),
(case (员工岗位) when 'MANAGER' then (员工工资)*1.1 when 'SALESMAN' then (员工工资)*1.5 else (员工工资) end) as '员工工资'
from (表名);
当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。
(注意:不修改数据库,只是将查询结果显示为工资上调)
11、round 四舍五入
select round(1236.567, 0) as result from (表名);//保留整数位。
select round(1236.567, 1) as result from (表名); //保留1个小数
select round(1236.567, 2) as result from (表名); //保留2个小数
select round(1236.567, -1) as result from (表名); // 保留到十位。
12、rand() 生成随机数
select round(rand()*100,0) from (表名);// 100以内的随机数
13、ifnull 可以将 null 转换成一个具体值
ifnull是空处理函数。专门处理空的。
在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
select (工资) + (奖金) from (表名);
当奖金存在 null 的情况下与 工资相加 结果会为 null
注意:
NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。
ifnull函数用法:ifnull(数据, 被当做哪个值)
select (姓名), ((工资) + ifnull((奖金), 0)) * 12 as (年薪)
from (表名);
奖金为NULL的时候,将奖金当做0
11、分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行。
5个:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分组函数在使用的时候必须先进行分组,然后才能用。
如果你没有对数据进行分组,整张表默认为一组。
分组函数的用法:
//找出最高工资?
mysql> select max((工资)) from (表名);
//找出最低工资?
mysql> select min((工资)) from (表名);
//计算工资和:
mysql> select sum((工资)) from (表名);
//计算平均工资:
mysql> select avg((工资)) from (表名);
//计算员工数量?
mysql> select count((工资)) from (表名);
11.1、分组函数在使用的时候需要注意
1、分组函数自动忽略NULL,你不需要提前对NULL进行处理。
2、分组函数中count(*)和count(具体字段)有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count(*):统计表当中的总行数。(只要有一行数据count则++)
因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
3、分组函数不能够直接使用在where子句中。
因为分组函数在使用的时候必须先分组之后才能使用。
where执行的时候,还没有分组。所以where后面不能出现分组函数。
select sum((工资)) from 表名;
这个没有分组,为啥sum()函数可以用呢?
因为 select 在 group by 之后执行。
4、所有的分组函数可以组合起来一起用。
select sum((工资)),min((工资)),max((工资)),avg((工资)),count(*)
from (表名);
12、分组查询
12.1、什么是分组查询?
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。
这个时候我们需要使用分组查询,怎么进行分组查询呢?
(假如计算每个部门的工资和,就要对部门进行分组)
select
...
from
...
group by
...
分组查询使用 group by 子句
12.2、关键字的执行顺序
select
...
from
...
where
...
group by
...
order by
...
以上关键字的执行顺序:
- from
- where
- group by
- select
- order by
结论:
在一条select语句当中,如果有group by语句的话,
select后面只能跟:参加分组的字段,以及分组函数。
其它的一律不能跟。
两个字段联合分组使用逗号隔开
12.3、使用having可以对分完组之后的数据进一步过滤。
having 不能单独使用,having 不能代替 where,having 必须
和 group by联合使用。
13、大总结(单表查询学完了)
select
...
from
...
where
...
group by
...
having
...
order by
...
以上关键字只能按照这个顺序来,不能颠倒。
执行顺序?
```执行顺序 1. from 2. where 3. group by 4. having 5. select 6. order by ```
从某张表中查询数据, 先经过where条件筛选出有价值的数据。 对这些有价值的数据进行分组。 分组之后可以使用having继续筛选。 select查询出来。 最后排序输出!
select后面只能跟:参加分组的字段,以及分组函数。
其它的一律不能跟。
两个字段联合分组使用逗号隔开
如有错误还请大佬指出
以上是关于mysql-day01笔记的主要内容,如果未能解决你的问题,请参考以下文章