20201014王杉
学习内容:
MySQL:
-
数据库:数据库是按照一定的形式来组织、存储数据,目的是为了操作数据的增删改查
-
数据库历史:网状数据库、层次型数据库、关系型数据库、非关系型数据库
-
数据库存储:内存/特定文件/第三方服务器/数据库服务器
-
关系型数据库逻辑结构:Server(数据库服务器)/Database(数据库)/Table(数据表)/Row(行)/Column(列)
-
常见的关系型数据库:①SQLit②MySQL③SQL Server④Oracle
-
计算机存储字符:
-
存储英文字符:ASCII、Latin-1
-
存储中文字符:GB2312、GBK、BIG5、Unicode
-
中文乱码:中文乱码产生的原因:mysql默认使用Latin-1编码
解决:①SQL脚本文件另存为的编码为utf8②客户端连接服务器端使用的编码(set names utf8)③服务器端创建数据库使用的编码(charset=utf8)
-
-
MySQL数据库使用:
-
服务器:mysql目录下的bin文件mysql.exe(负责存储和维护数据,启动文件确保3306端口不被占用)
-
客户端:mysql目录下的bin文件mysql.exe(负责向数据库发起增删改查)
-
客户端连接服务器端:mysql.exe -h127.0.0.1 -P3306 -uroot -p (简写:mysql -uroot -proot)
-h:host 主机(ip地址/域名)
-P:port 端口
-u:user 用户名
-p:password 密码
-
常用命令:show databases;查看数据库名 use 数据库名;进入数据库 show tables;查看数据表 desc 表名;查看表结构 quit;退出
-
-
SQL:
-
SQL是结构化查询语言,对关系型数据库进行增删改查。
-
执行方:①式交互模式(客户端输入执行,临时性操作数据)②脚本模式(脚本文件批量操作数据)
-
SQL规范:①每一条命令必须以英文分隔符结束,一条命令可以跨多行
②一条出错后,这条以及后面命令不会再执行
③不分大小写,关键字大写非关键字小写
④注释单行# 多行/**/
-
SQL命令:①DDL(定义数据):
create:创建 drop:删除 alter:修改数据库
②DML(操作数据):
insert:插入数据 update:更新数据 delete:删除数据
③DQL(查询数据):
select:查询数据
④DCL(控制用户权限):
grant:授权 revoke:收回权限
-
SQL语句使用实例:
set names utf8;设置客户端连接服务器端编码为(utf8)
frop database if exists lfsql;如果存在同名的数据库,丢弃数据库
create database lfsql charset=utf8;创建数据库,设置存储的编码
use lfsql; 进入数据库
...
-
-
列类型:数值型:整形、浮点型、布尔型
日期时间型
字符串类型
-
列约束:
- 主键约束:primary key auto_increment
- 唯一约束:unique
- 非空约束:not null
- 检查约束:check
- 默认约束:default
- 外键约束:foreign key(列)references 表(主键列)
-
查询数据:
1.简单查询:
查询特定的列 select eid,ename from lfemp;
查询所有的列 select * from lfemp;
给列起别名 select eid as ''编号'',ename ''姓名'' from lfemp;
合并相同的项 select distinct sex from lfemp;
查询时执行计算 select ename,salary*12 from lfemp;
结果集的排序 select * from lfemp order by salary asc/desc;
条件查询 select * from lfemp where salary >=5000;
模糊查询 select * from lfemp where ename like '%e_';
分页查询 select * from lfemp limit m,n;
2.复杂查询:
复杂查询
聚合查询/分组查询
聚合函数
1.获取数量select count(*) from lfemp;
2.求总和
select sum(salary) from lfemp;
3.求平均数
select avg(salary) from lfemp where sex=1;
4.求最大、最小值
select max(salary) as '最高工资',min(salary) as '最低工资' from lfemp where sex=0;
5.获取当前数据中的年份数值
select year(birthday) from emp;
6.获取当前数据中的月份数值
select month(birthday) from emp;
分组查询
group by
实例
select avg(salary),max(salary),min(salary),sex from lfemp group by sex;
注意:分组查询只能查询聚合函数和分组条件
子查询
子查询就是把一个sql语句的查询结果作为另一个sql语句的查询条件
实例
select * from lfemp where salary>(select salary from lfemp where ename='tom');
多表查询(跨表查询)
内连接
inner join...on...
实例
select ename,dname from lfemp inner join lfdept on deptId=did;
问题:无法查询出没有部门的员工,也无法查询出没有员工的部门
其他写法问题
1.select ename as '姓名',dname as '部门名称' from lfemp,lfdept;
问题:发生错误,笛卡尔积
2.select ename as '姓名',dname as '部门名称' from lfemp,lfdept where deptId=did;
问题:多表查询避免产生笛卡尔积,给查询添加条件(外键),但是无法查询出没有部门的员工,也无法查询出没有员工的部门
左外连接
left outer join .....on....
查询左侧表中的所有数据
实例
select ename,dname from lfemp left outer join lfdept on deptId=did;
右外连接
right outer join...on
查询右侧表中的所有数据
实例
select ename,dname from lfemp right outer join lfdept on deptId=did;
全连接
union 合并相同的项
(select ename,dname from lfemp left outer join lfdept on deptId=did) union (select ename,dname from lfemp right join lfdept on deptId=did);
union all 不合并相同的项
(select ename,dname from lfemp left outer join lfdept on deptId=did) union all
(select ename,dname from lfemp right join lfdept on deptId=did); 注意:mysql不支持 full join ..on..
学习心得:
今天把数据库又看了一遍,然后就是今天下午开始了网上招聘,今天下午听了许多,为以后面试做准备吧,多面试几下才能总结出经验,知道自己的不足,现在还是应该需要以学习为主,多学些以后面试才会有准备。
近期评论