0
点赞
收藏
分享

微信扫一扫

MySQL 学习 基础(一)

小典典Rikako 2022-04-17 阅读 33
mysql

一、MySQL登录

Win+r 输入cmd 回车 输mysql -u用户名 -p密码

Exit 退出mysql

忘记mysql密码

二、MySQL、DB、DBMS,以及sql语句分类

DB:

DataBase (数据库,数据库实际上在硬盘上以文件的形式存在)

DBMS:

DataBase Management system(数据库管理系统,常见的有: Mysgroracle DB2 sybase sqIserver...)

MySQL:

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

Sql属于高级语言,也会在执行时先进行编译在执行sql

DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。

   了解表(table)

结构:行:被称为数据/记录(data)

           列:别称为字段(column)

           Int 数字整数   bigint 长类型整数    Varchar 字符串

   sql语句分类

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

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

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

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

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

  导入数据(sql脚本文件百度网盘链接:https://pan.baidu.com/s/131CXLMVH2oFBSYH2OEUY-A
提取码:1234

  1. 登录mysql 密码123456 账户root
  2. 查看有哪些数据库  show  databases;
  3. 创建数据库 create database 数据库名;
  4. 使用数据库 use 数据库名
  5. 查看表 show tables; show tables from 数据库名 查看其他数据库的表
  6. 初始化文件数据 mysql>source 加脚本路径   #执行脚本
  7. 删除数据库 drop database 数据名;

三、表(table)

查看表结构(desc + 表名)

1.desc dept;

 2.desc emp;

 

 3.desc salgrade;

 

 查看表数据(select * from 表名;)---查看全部数据

1.Select * from dept;

2.Select * from emp;

3.select * from salgrade;

 

一些常用的命令

查看数据库版本 select version();

查看使用的数据库 select database();

结束语句 \c

退出mysql exit

查看创建表的语句: show create table 表名;

四、查询语句(DQL)----查询中字符串要用单引号括住

1.简单查询

语法:

select 字段(你要查询的内容)1,字段2.... from 表名;

注意:

  1. 任何一条的sql语句以';'结尾
  2. Sql语句不区分大小

练习:

查询员工的年薪

Select  ename,sal * 12 from emp;(可以进行数学运算)

给查询的列重新命名

Select  ename,sal  *  12 as  yearsal  from emp;(as 关键字可以省略)

 

2.条件查询

语法:

Select 字段1,字段2  from 表名 where 条件;

<  <=  >  >=          <>  !=  这两个都是不等于

练习:

 查询工资等于五千的员工姓名

 查询SMITH的工资

查出工资高于三千的员工

 

找出工资在1000-3000的员工

利用大于小于和and查询

 

 利用between and 查询  包括边界值,必须左边为小数值 右边为大数值

Between and 也可以用在字符中如Between ‘A’ and ‘C’ 左边能取 右边不能取

找出那些人津贴为null(在数据库中null不是一个值 不能用等号判断 判断是必须使用is null 或者is not null)数值0不等于null

Select  ename,sal,comm  from  emp  where comm is null;

找出那些人没有津贴

Select  ename,sal,comm  from  emp  where comm is null or comm=0;

找出工作是MANAGER和SALESMAN的员工

Select ename,job from emp where job=’MANAGER’ or  job=’SALESMAN’;

优先级不确定时 建议加小括号

找出薪资大于1000且部门编号为20或者30的员工

in 等同于 or:

找出工作为MANAGER和SALESAMAN的员工

Select ename,job from emp where job in(‘MANAGER’,’SALESAMAN’);

Select ename,job from emp where job=‘MANAGER’ or job=’SALESAMAN’;

//in后面的值不是区间是等于的值

模糊查询(转义字符\) ‘\_’代表一个普通的下划线 不具有特殊含义

Like  在模糊查询中%代表多个字符  _代表一个字符

语法

Select 字段1,字段2 from 表名 where like ‘%’/‘_’

练习

查询姓名中含有O的员工

Select ename from emp where ename like ‘%o%’;

找出第二个字母是A的员工

Select ename from emp where ename ename like ‘_A%’;

 

排序(升序asc、降序desc)

按照工资排序

Select ename ,sal  from emp order by sal;  默认升序

Select ename ,sal  from emp order by sal  asc;

Select ename ,sal  from emp order by sal  desc;

按照工资的降序排列,当工资一样时按照名字升序排列

Select ename,sal from emp order by sal desc ,  ename asc;

 Order by后面的排序依据第一个的管理力度最大(主导作用),后面的在第一个相等时启用

Select ename,sal from emp order by 2;       2是指按照第二列排序,默认升序

找出工作岗位是SALESMAN,并按照工资的降序排列。

Select ename,sal from emp where job=’SALESMAN’ order by sal desc;

 分组函数

Count 计数  sum 求和  avg平均数 max 最大数  min 最小数

Select sum(sal) from emp; 工资求和

Select avg(sal) from emp;  求工资平均数

Select max(sal) from emp;  求工资最大数

Select min(sal)from emp;  求工资最小数

Select count(sal)from emp; 求一共有多少个数字

注意

分组函数自动忽略null

当语句null进行了运算 结果一定为null

Ifnull(字段,数据)  是指在字段中的null全部被替换为 指定的数据

Select ename,ifnull(comm,0) as comm from emp;

计算员工的年薪

Select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;

分组查询(group by和having)select后面只能跟参加分组的字段和分组函数

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

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

Select 条件 from  emp  group  by 字段;

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

Select max(sal) from  emp  group  by job;

命令的执行顺序

Select      6

  ....

From        1

.....

Where      2

.....

Group by    3

....

Having     4

......

Order by   5

.....

找出工资高于平均工资的员工

Select avg(sal) from emp; 第一步找出平均工资

Select ename,sal from emp where sal>2073.214286(平均工资); 第二步找出高于平均工资的员工

利用子查询可以一步到位  并且按照升序排列

Select ename,sal from emp where sal>(select avg(sal) from emp) order by sal;

 查看工作的类型已经每个工作的人数以及每个工作的最高工资

 多字段联合分组

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

Select max(sal) from emp group by job,deptno;

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

Select deptno,max(sal) from emp group by deptno having max(sal)>2900;

Select deptno,max(Sal) from emp where sal>2900 group by deptno;

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

Select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

 去除重复记录(distinct)只能出现在字段的前方

去除编号和工作都相同的员工,编号和工作联合去重

统计岗位的数量

Select count(distinct job)from emp;

连接查询(多表联合查询)

 Select ename,dname from emp,dept ;(两个字段进行笛卡尔积,数据条数等于两表数据乘机)

 

找出每一个员工部门的名称,要求显示员工名和部门名

Select ename,dname from emp,dept  where  emp.deptno=dept.deptno;(sql92 语法比较老)

表的别名 select e.ename,d.dname from emp e,dept d; (将emp别名设置为e,dept为d)

E.ename表示在emp中的字段ename 避免不同表中字段名相同的情况

1.内连接(假如AB两表,连接时所有匹配数据都可以查询出来,无主副之分,AB不匹配的数据将不会显示)

    1.1等值连接

特点:条件是等量关系

语法 select 字段1,字段2 from 表1 join 表2 on 条件

Select ename,dname from emp e inner join dept d on e.deptno=d.deptno; (sql99语法 常用)

将表连接单独出来 可以在join on 后面添加 where,join前inner可以省略

   1.2非等值连接

找出每个员工的工资等级,要求显示员工名、工资、工资等级。

Select e.ename,e.sal,s.grade from emp e join salgrade s on between s.losal and s.hisal;

 

1.3自连接

特点 :一张表看作两张表,自己连接自己

找出每个员工的上级领导,要求显示员工名和对应的领导名

Select a.ename,b.ename,empno from emp a join emp b on a.mgr=b.empno;

2.外链接(AB两表,一主一副,主要查询主表数据、顺带查询副表,当副表中的数据没有和主表中的数据匹配上,副本自动模拟出null进行匹配,主表数据无条件显示全部) 两种连接可以相互转换

2.1左外连接(左边是主表)left join -----join 前 outer 可省略

找出每个员工的上级领导(所有员工必须查询出来)

Select a.ename,b.ename,a.empno from emp a left join emp b on a.mgr=b.empno;

 2.2右外连接(右边是主表)right join-----join 前 outer 可省略

Select a.ename,b.ename,a.empno from emp b right join emp a on a.mgr=b.empno;

找出哪个部门没有员工

3.全连接略)很少用----即AB两表都是主表,全部数据都显示出。

子查询(select中嵌套select

1.select 可以在哪里位置

Select

  …...(select)

From

  …...(select)

Where

…...(select)

2.练习

找出高于平均薪资的员工信息(where 之后嵌套select)

Select ename,sal from emp where sal>(select avg(sal) from emp);

找出每个部门的平均薪资的薪资的等级(from 之后嵌套 select)

Select deptno,avg(sal) from emp group by deptno;//找出每个部门的平均薪资 作为一张表

Select deptno,sal,grade from (Select deptno,avg(sal) from emp group by deptno) join salgrade s on sal between s.losal and s.hisal;//用上述表与salgrade连接找出薪资等级。

找出每个部门平均的薪水的等级

Select deptno,avg(grade) from emp join salgrade s on sal between s.losal and s.hisal  group by deptno;

找出每个员工所在的部门名称,要求员工和部门名显示(select 后面嵌套select)

Select e.eame,(select d.dname from dept d where e.deptno=d.depton) as dname from emp e;

union(可以将查询结果集相加)-----可以将两个不相干(相干)的表数据拼接在一起显示

可以找出工作岗位是SALESMAN和MANAGER的员工

法一:

Select ename.job from emp where job=’SALESMAN’ or job=’ MANAGER’;

法二:

Select ename.job from emp where job in(’SALESMAN’ ,’ MANAGER’);

法三:

Select ename,job from emp where job=’ MANAGER’ union select ename,job from emp where job=’SALESMAN’;

limit(重点)--mysql 特有的,分页查询------在sql中最后执行(位于order by 后)

limit 起始位置,长度 ----起始位置从0开始(与java数组下标相同)

取出工资钱五位的员工(思路:降序取前五)

Select ename,sal from emp order by sal desc limit 0,5;

通用的标准分页sql

每页size记录

第pageno页  size*(pageno-1),size

举报

相关推荐

0 条评论