mysql学习笔记(1)-根据动力节点杜老师的课程记录笔记

# mysql学习笔记(1)

## 一、 mysql安装与登录

mysql安装:

* 重点要选择语言 utf-8

* 设置一下密码 不能太简单

* 数据库登录

``` mysql

//-u 后面接用户名,-p 后面接密码

mysql -uroot -p****

```

## 二、mysql卸载

1. 双击mysql安装包,点击remove卸载即可

2. 删除残留

ProgramData(c盘下的隐藏文件)下面的mysql删掉

Program Files 下面的mysql强行删掉

## 三、DB DBMS SQL

* 之间关系:

    DB:database

    DBMS :database management system(数据库管理系统:mysql oracle DB2 sybase sqlserver)

    SQl:结构话查询语言,是一门标准通用的语言,标准的sql适用于所有的数据库产品

* SQl属于高级语言,写出来的sql语句,可以读懂啥意思

* SQL语句执行的时候,实际上内部也会进行编译,然后执行sql(sql语句的编译由DBMS完成)

* DBMS执行SQL操作DB

## 四、表的理解

 1. 什么是表?

 table是数据库的基本组成单元,所以数据都以表的形式组织,目的是可读性强

 * 表分为行和列,行:数据/记录(data),列:字段(column)

 * 字段属性:字段名,数据类型,相关的约束

## 五、sql语句

 DQL(数据查询语句):查询语句,凡是select语句都是DQL

 DML(数据操作语句):inset delete update,对表中的数据进行增删改。

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

 TCL(事务控制语言):commit提交事务,rollback回滚事务

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

## 六、导入初始化数据

1. 登录

2. 产看那些数据:show databases; (不是SQL)

3. 创建属于我们自己的数据库

 create database bjpowernode; (no sql)

4. 使用bjpowernode数据

 use bjpowernode; (no sql)

5. 查看当前使用的数据中有哪些表?

 show tables; (no sql)

6. 初始化数据

 musql>source 路径……

## 七、对sql脚本的理解

bjpowernode.sql, 这是个“sql脚本”,直接使用source命令可以执行sql脚本

sql脚本中的数据量大,使用source命令完成初始化。

* 删掉数据库:drop database bjpowernode

## 八、mysql的常用命令

#### (1)简单的操作

1. 查看当前使用数据库

    select database()

2. 常看当前的版本

    select version()

3. 终止语句:\c

4. 退出musql:\q、QUIT、EXIT

5. 查看创建表的语句

    show create table emp

#### (2)简单的查询语句

``` SQL

select 字段名,字段名,…… from 表名;

```

* 任何一条sql语句以; 结尾 

* sql语句不区分大小写 

* 字段可以运算 

* 字段修改名字

``` SQL

//别名如果是中文,用单引号,mysql支持双引号,但是别的不支持,所以建议用单引号

select 字段名,字段名 as 别名,…… from 表名;

```

查询所有字段 字段名用*,尽量少用,效率太低

##### 1. 条件查询

语法:执行顺序是from=>where=>select

``` sql

select string ,string,……from 表名 where 条件;

```

条件查询

=, <, >, >=, <=, 

between … and …(>=and<=), is null(is not null)

and, or, in(包含,相当于多个or),not(非), like(模糊查询,支持%或是下划线匹配)

``` sql

    job='a' or job='b'; 等同于 job in ('a', 'b');

```

%代表任意多个字符,_代表任意1个字符

``` sql

select name from emp where name like 's%'//首字母是s的

select name from emp where name like '%s%'//含有s的

select name from emp where name like '%\_%'//含有_的

select name from emp where name like '_s%'//第二个字母是s的

select name from emp where name like '__s%'//第三个字母是s的

```

##### 2. 排序(升序,降序)

升序:语法

``` sql

//薪资排序,默认升序

    select sal from emp order by sal;

//asc表示升序,desc表示降序

    select sal from emp order by sal asc;

    select sal from emp order by sal desc;

//按照薪资的降序排,相同按照名字的降序排(by后面靠前的优先级高)

    select enamel,sal from emp order by sal desc,ename asc;

//按照第几列排序,1是第一列,2是第二列

    select enamel,sal from emp order by 1;

```

``` sql

//执行顺序

select - (3) from - (1) where - (2) order by - (4)

```

##### 3. 分组函数(多行处理函数)

 count计算、sum求和、avg平均值、max最大值、min最小值

* 所有的分组函数都是对 `某一组` 数据进行操作的

* 分组函数自动忽略null

* sql语句中分组函数不可以直接使用在where当中

* count(*)和count(具体字段)区别,*是总记录个数,具体字段统计不为空的个数

``` sql

//找出工资总和

select sum(sal) from emp

//找出最高工资

select max(sal) from emp

//找出最低工资

select min(sal) from emp

//找出平均工资

select avg(sal) from emp

//找出总人数

select count(*) from emp

//找出高于平均工资

select avg(sal) from emp where sal > avg(sal);//ERROR 1111 无效的使用了分组函数

```

##### 4. 单行处理函数

* 输入单行,输出单行

* 计算的时候存在NULL的时候,输出的为NULL

ifnull()控制处理函数:可能为null的数据,被当作XXX处理

``` sql

select ename,ifnull(sal, 0) as comm from emp; df

```

#### (3)分组查询

##### group by 和 having

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

* having:having是对分组之后的数据进行再次过滤

案例:找出每个岗位最高薪资

``` sql

select max(sal) from emp group by job;

```

* 注意:分组函数一般和group by联合使用。并且任何一个分组函数都是在group by语句执行结束后才会执行,当以条sql语句没有group by的话,整张表的数据会自成一组。

分组函数不能用在where中,因为他是在where之后执行。

* 先分组后查询

``` sql

select * (5) from * (1) where * (2) group by * (3) having * (4) order by * (6)

```

* 当sql语句有group by时,select中只能有跟分组函数和参与分组的字段

``` sql

//error

select ename,max(sal),job from emp group by job;//mysql中会执行,不会报错,但是ename字段查到的数据没有任何意义。

```

找出每个部门中的不同岗位的不同薪资

``` sql

select deptno, job, max(sal) from emp group by deptno, job

```

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

``` sql

select max(sal),deptno from emp group by deptno having max(sal)>2500;//效率太低,因为找出了每个分组的最高薪资,但是低于2500的不显示,浪费了资源

select max(sal), deptno from emp where sal>2500 group by deptno;//先过滤掉小于2500的,然后在分组查询

```

* 注:先用where,搞不定再用having过滤。如果案例中把大于2500改为大于平均值的数据,就应该用having,应为where后面无法用分组函数avg()

#### (4)查询结果集的去重

``` sql

select distinct job from emp

```

* distinct只能放在所有字段的最前面

* 后面有两个字段的时候,表示联合去重

#### (5)链接查询

##### 1. 什么是链接查询

* 在实际开发找那个,大部分情况下都是从单张表中查询数据,一般都是多张表联合查询去除最终的结果。

* 在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,两张表

##### 2. 连接查询的分类

* 内连接:

    等值连接 非等值连接 自链接

* 外连接: 左外连接(左连接) 右外连接(右链接)

* 全连接(用的少)

##### 3. 笛卡尔积现象

* 当两张表进行链接查询的时候,没有任何条件限制,最终的查询结果条数为两个表记录条数的乘积

* 表的别名:执行效率高 可读性高

#### (6)内连接

##### 1. 等值连接,条件是等量关系

*案例,查询每个员工的部门名称,要求显示员工名和部门名

``` sql

··· a inner join b on 链接条件 //inner可以省略

//SQL92

select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

//SQL99

select e.ename,d.dname from emp e join emp d on e.deptno=d.deptno;

```

sql99语法结构更清晰,表的连接条件和后来的where条件分离

##### 2. 非等值连接

*案例,找出每个员工的工资等级,要求显示员工名、工资、工资等级 分emp员工表和salgrade工资等级表

``` sql

select e.name, e.sal, f.grade from emp join salgrade on e.sal between s.losal and s.hisal; 

```

##### 3. 自链接

* 一张表看作两张表,自己连自己

* 案例,找出每个员工的上级领导,要求显示员工名和对应的领导名,//员工的领导编号=领导的员工编号

``` sql

//数据库中的表名为emp

//a表为员工表,b表为领导表 (其实a表和b表是一张表emp)

select a.ename as 'table1',b.ename as 'table2' from emp a join emp b on a.mgr=b.empno

```

#### (7) 外连接

*内连接:假设a和b表进行链接,使用内连接的话,凡是a表和b表能够匹配上的记录查出来,叫内连接,ab俩个表没有主副之分

*外连接:假设a表和b表进行链接,使用外连接的话,ab两张表中有一张是主表,一张是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表数据匹配上,副表自动模拟出NULL与之匹配。

*外连接的分类:

    1.左外连接(左连接)左表是主表,

    2.右外连接(右链接)右表是主表

    3.左连接有右链接的写法,右链接也会有对应的左连接的写法

语法:

``` sql

select a.ename as 'table1' ,b.ename as 'table2' from emp a left outer join emp b on ···

//left(right)代表左边的表是主表,主表的数据无条件的全部查除,副表如果无数据,用NULL补全。

//同理 outer可以省略

```

#### (8)三个表链接

* a连b,然后a再连c。写两个join on

* 如果是外连接,注意些好left(right)的位置

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343