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

mysql学习笔记(1)

一、 mysql安装与登录

mysql安装:

  • 重点要选择语言 utf-8

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

  • 数据库登录

//-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)

  1. 使用bjpowernode数据

use bjpowernode; (no sql)

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

show tables; (no sql)

  1. 初始化数据

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)简单的查询语句
select 字段名,字段名,…… from 表名;
  • 任何一条sql语句以; 结尾
  • sql语句不区分大小写
  • 字段可以运算
  • 字段修改名字
//别名如果是中文,用单引号,mysql支持双引号,但是别的不支持,所以建议用单引号
select 字段名,字段名 as 别名,…… from 表名;

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

1. 条件查询

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

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

条件查询
=, <, >, >=, <=,
between … and …(>=and<=), is null(is not null)
and, or, in(包含,相当于多个or),not(非), like(模糊查询,支持%或是下划线匹配)

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

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

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. 排序(升序,降序)

升序:语法

//薪资排序,默认升序
    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;
//执行顺序
select - (3) from - (1) where - (2) order by - (4)

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

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

  • 所有的分组函数都是对 某一组 数据进行操作的
  • 分组函数自动忽略null
  • sql语句中分组函数不可以直接使用在where当中
  • count(*)和count(具体字段)区别,*是总记录个数,具体字段统计不为空的个数
//找出工资总和
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处理

select ename,ifnull(sal, 0) as comm from emp; df
(3)分组查询
group by 和 having
  • group by 按照摸个字段或某些字段进行分组
  • having:having是对分组之后的数据进行再次过滤

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

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

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

  • 先分组后查询
select * (5) from * (1) where * (2) group by * (3) having * (4) order by * (6)
  • 当sql语句有group by时,select中只能有跟分组函数和参与分组的字段
//error
select ename,max(sal),job from emp group by job;//mysql中会执行,不会报错,但是ename字段查到的数据没有任何意义。

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

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

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

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)查询结果集的去重
select distinct job from emp
  • distinct只能放在所有字段的最前面
  • 后面有两个字段的时候,表示联合去重
(5)链接查询
1. 什么是链接查询
  • 在实际开发找那个,大部分情况下都是从单张表中查询数据,一般都是多张表联合查询去除最终的结果。
  • 在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,两张表
2. 连接查询的分类
  • 内连接:

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

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

  • 全连接(用的少)

3. 笛卡尔积现象
  • 当两张表进行链接查询的时候,没有任何条件限制,最终的查询结果条数为两个表记录条数的乘积
  • 表的别名:执行效率高 可读性高
(6)内连接
1. 等值连接,条件是等量关系

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

··· 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工资等级表

select e.name, e.sal, f.grade from emp join salgrade on e.sal between s.losal and s.hisal; 
3. 自链接
  • 一张表看作两张表,自己连自己
  • 案例,找出每个员工的上级领导,要求显示员工名和对应的领导名,//员工的领导编号=领导的员工编号
//数据库中的表名为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.左连接有右链接的写法,右链接也会有对应的左连接的写法

语法:

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)的位置
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值