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 (表名);

注意:

selectfrom 都是关键字

强调:

对于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
	...

以上关键字的执行顺序:

  1. from
  2. where
  3. group by
  4. select
  5. 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笔记的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

MySQL-DAY02

MySQL-DAY03

mysql-day1

Mysql-day1数据库的安装与介绍

ReactJs学习笔记01