mysql中断安装_mysql安装中的坑及学习笔记

安装

f91f535fe5a3b5e8235bfa167ffdf8a3.png

打开mysql的安装目录,在安装目录的bin文件中,有一个mysqld的空文件,删除即可

基础

sql语句以";"结尾

sql不区分大小写

使用as设置小名,但是也可以省略。eg:my_table.name1 as '员工' 等于 my_table.name1 '员工'

字符串使用单引号''标注

1. 每一个字段包含的属性:字段名,数据类型,相关的约束

2. SQL语句的分类:

DQL(数据查询语言): 查询语句,包含select的

DML(数据操作语言): insert, delete, update, 对表中数据的增,删,改

DDL(数据定义语言): create, drop, alter, 对表结构的增, 删,改

TCL(事务控制语言): commit提交事务,rollback回滚事务。(TCL中的T是transaction)

DCL(数据控制语言): grant授权,revoke撤销权限等。

3. 基础操作:

mysql -umy_username -pmy_password

show databases: 查看所有数据库(不是sql语句,只是mysql的命令)

create database my_database: 创建数据库(不是sql语句,只是mysql的命令)

use my_database: 使用某个数据库(不是sql语句,只是mysql的命令)

select database(): 查看当前使用的数据库名(不是sql语句,只是mysql的命令)

select version(): 查看mysql的版本号(不是sql语句,只是mysql的命令)

show tables: 查看当前数据库中的所有表(不是sql语句,只是mysql的命令)

source 我的数据文件.sql:初始化数据,表的结构存储在sql文件中

drop database my_database: 删除数据库

desc my_table: 查看表的结构

\c: 终止一条语句

exit: 推出mysql

show create table my_table: 查看创建表时执行的sql语句

4. sql脚本:

以sql为文件扩展名,在文件中编写sql语句,使用source命令执行sql文件(如上),来批量执行sql语句

5. 查询语句:

select 字段1 as 字段A,字段2 as 字段B ... from 表名 where 条件

字段中可以进行数值计算

条件中的运算符包括:

=

<>或!=

<

<=

>

>=

between ... and ...

is null

and

or

in: 后面的范围使用()标注而不是[]

not

like:迷糊查询,使用"%"匹配零或任意多的字符,使用"_"匹配任意一个字符

: 转义符

数据库中NULL 不是一个值,为空,不能说空值,不能使用=号来衡量。必须使用is null 或者is not null

使用"()"来控制优先级

select distinct name1 from my_table //distinct关键字删除结果集中重复的记录

distinct只能放在所有字段的最前端,后面所有字段联合起来去重

//统计岗位数量

select count(distinct job) from emp

6. 排序

order by

select * from my_table order by name1 desc, name2 asc #先按照name1降序排序,name1相同时,按照name2升序排序

order by 后面可以使用前面用as定义的别名

7. 分组函数,多行处理函数(输入多行,输出1行)

通常和group by一起使用,在group by执行后再执行。

分组函数不可以直接出现在where子句当中。

例如:找出工资高于平均工资的员工名子

错误:selct name from my_table where sal > avg(sal); #此时会报错,因此分组函数在group by之后执行,而group by在where后执行,还没有分组就不能使用分组函数

正确:```sql

select name from my_table where sal > (select avg(sal) from my_table);

自动忽略NULL,只要NULL参与运算,结果就是NULL。可以使用ifnull来处理

* ifnull(name1, 0): 空处理函数,如果name1为null,则按0计算

* count: 计数

* sum: 求和

* avg:求平均值

* max: 最大值

* min: 最小值

count(*)和count(具体某个字段)的区别:

* count(*): 统计总记录条数(和字段无关)

* count(name1): 统计name1字段中不为NULL的数据总数

### 8. group by和having

* group by: 按照某个字段或者某些字段进行分组

没有group by时,整张表的数据自成一组

* having: 对分组后的数据进行再次过滤,相当于低优先级的where,不同优先级有其不可替代的功能

####案例:

找出每个工作岗位的最高薪资

```select max(sal), job from emp group by job;```

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

select dep, job, max(sal) from emp group by dep, job;

在sql语句中,有group by时,select的字段只能是分组函数和分组字段

```sql

//找出每个部门的最高薪资,要求显示薪资大于2000的数据

select dep, max(sal) from emp group by dep having max(sal) > 2900; //这种方式效率低

select dep, max(sal) from emp where sal > 2000 group by dep; //由于参加分组的数据变少,效率变高

#找出每个部门的平均薪资,要求显示薪资大于2000的数据

select dep, avg(sal) from emp group by dep having avg(sal) > 2900; //只能使用having方式不能使用where

总结完整的DQL语句的写法

//按优先级

select // 6

...

form // 1

...

where // 2

...

group by // 3

...

having // 4

...

order by // 5

...

连接查询

笛卡尔积现象:两张表的连接查询如果没有条件限制的话,结果集的数量是两张表的数量的乘积

1. 分类:

内连接:

等值连接

非等值连接:between ... and ...

自连接

外连接:

左外连接(左连接)

右外连接(右连接)

全连接(几乎不用)

2. 内连接

2.1 等值连接

select

e.ename, d.dname

from

emp e

join //join 相当于inner join,inner可以省略

dep d

on

e.depid = d.depid

where

...

join on用来关联两张表之间的关系的

2.2 非等值连接

连接条件中的关系是非等量关系

//显示每个员工的薪资等级

select

e.ename, e.sal, s.grade

from

emp e

join

salgrade s

on

e.sal between s.losal and s.hisal;

2.3 自连接

一张表看作是两张表,自己连接自己

//找出每个员工的上级领导,要求显示员工名和对应的领导名。所有人均在emp表中,且mgr字段指向上级领导的编号,empno字段指向所有人的编号

select

a.ename as '员工名', b.ename as '领导名'

from

emp a

join

emp b

on a.mgr = b.empno;

3. 外连接

内外连接的区别:表A和表B进行连接

内连接:A和B没有主次之分,反是A表和B表能够匹配上的记录都查询出来

外连接:A和B一张是主表,一张是副表,主要查询主表中的内容,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配

分为两类:

左外连接(左连接):左边的表是主表

右外连接(右连接):右边的表是主表

//查询每个员工的上级领导,显示员工名和领导名,有员工表和领导表(可能有的员工没有上级领导,但是也要显示员工)

select

a.ename '员工',b.ename '领导'

from

emp a

left join //如果a中的记录在b中匹配不到,则使用null来代替,而不是过滤掉这个记录,left outer join 相当于left join

emp b

on

a.mgr = b.empno;

//查询没有员工的部门

select

d.*

from

emp e

right join

dep d

on

e.depid = d.depid

where

e.empid id null

4. 全连接

类似左右连接,但是左右都是主表,A表中没有的记录不能影响B表的查询,B表中没有的记录不能影响A表的查询

5. 多张表的连接

//找出每一个员工的部门名称,工资等级,以及上级领导(有的员工没有上级领导,所以此处应该用外连接)

select

e. ename '员工', d.dname, s.grade, e1.ename '领导'

from

emp e

join

dep d

on

e.depid = d.depid

join

salgrade s

on

e.sal between s.losal and s.hisal

left join

emp e1

on

e.mgr = e1.empid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值