mysql基础笔记--day03

/*
回顾:
a,什么是数据库
b,数据库的作用
c,常用的数据库 Oracle  MySql  
1.关系型数据库   表的形式来进行存储的
2.非关系型数据库  
MyBatis Hibernate   封装对象   DAO
d,SQL
通用性的操作数据库的一种语言,所有的
数据库都是根据这个SQL标准来进行实现。
但是不同的实现软件(DBMS)会在原有的
基础上添加了一些新的功能,这些新的
功能是不通用的,只专属于某一个数据库管理
软件,这也造成了SQL的兼容性问题。
e,SQL的分类
DDL
创建删除修改 库表
create drop alter
DML
添加删除修改 表中的数据
insert delete update
DCL
对用户权限的管理  DBA
授权  和  收回 权限
DQL   *****
select 查询
1.基本查询 
select 列名1,列名2,,
from 表名
2.条件查询
过滤  分组前过滤
where 
3.模糊查询
like  _ %
4.分组查询
group by
分组后 select 查询的列
只能是 分组的列和组函数
不能出现其他列。

select job,count(*)
from emp
group by job;
5.分组后过滤
having
6.排序 
order by
asc 默认的 升序
desc 降序
7.分页
limit 起始条,每页的条数
起始条=每页的条数*(当前页-1)
TCL   JDBC 再进行学习
事务
提交   回滚
f,约束
1.主键约束  
单独的列(常用)  还可以是几个列联合(了解)
primary key
2.非空约束
not null
该列不能为空
3.唯一约束
unique 
4.检查约束
MySql不支持
5.外键约束
开发的时候不添加外键 开发完毕
再添加.

如果2张表之间有外键约束,添加数据
不是很方便。

笔记:
1.表与表之间的关系
a,一对一
b,一对多  多对一    常用
c,多对多 常用
b,c如何进行表的设计
b,一对多
如果存在一对多的关系就存在谁是主表
谁有从表。一般情况下数据量越小就会
把他设计成主表。
    多对多
    2.DCL  权限的控制   了解
a,创建用户
* CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
> 用户只能在指定的IP地址上登录
 * CREATE USER 用户名@'%' IDENTIFIED BY '密码';
> 用户可以在任意IP地址上登录
b,给用户授权
* GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP地址
> 权限、用户、数据库
> 给用户分派在指定的数据库上的指定的权限
> 例如;GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
 * 给user1用户分派在mydb1数据库上的create、alter、drop、insert、update、delete、select权限
 * GRANT ALL ON 数据库.* TO 用户名@IP地址;
> 给用户分派指定数据库上的所有权限

c.撤销授权
* REVOKE 权限1, … , 权限n ON 数据库.* FROM 用户名@IP地址;
> 撤消指定用户在指定数据库上的指定权限
> 例如;REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
 * 撤消user1用户在mydb1数据库上的create、alter、drop权限
d,查看权限
* SHOW GRANTS FOR 用户名@IP地址
> 查看指定用户的权限
e,删除用户
* DROP USER 用户名@IP地址
*/


-- 创建在指定IP地址登录的用户
CREATE USER tj01@192.168.3.33 IDENTIFIED BY '123';
CREATE USER tj02@localhost IDENTIFIED BY '123';
-- 创建在任意IP地址都可以登录的用户
CREATE USER tj03@'%' IDENTIFIED BY '123';
-- 默认初创的用户是没用任何权限的
-- 我们需要对用户进行授权操作


-- 给用户进行授权操作
GRANT SELECT,INSERT ON java1711.* TO tj03@'%';
SELECT * FROM dept;
-- 撤销用户的权限
REVOKE INSERT ON java1711.* FROM tj03@'%';
COMMIT;
-- 查看用户的权限
SHOW GRANTS FOR tj03@'%';
-- 删除用户
DROP USER tj01@192.168.3.33;
-- https://www.cnblogs.com/pengyin/p/6413936.html


/*
数据库的备份和还原
a,什么是数据库的备份
数据转换为 .sql文件的过程
mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql
mysqldump -u root -p123 java1711 person > D:\backup.sql
mysqldump -u用户名 -p密码 数据库>保存SQL的路径
b,什么是数据库的还原
.sql文件转换为数据的过程
mysql -u用户名 -p密码 数据库<保存的SQL的路径
数据库的备份和还原不是针对数据库而是
针对数据库里面的数据。
https://www.cnblogs.com/kissdodog/p/4174421.html
*/




/*
多表查询
a,合并结果集
作用是将2次查询的结果进行合并
合并结果集有2种方式,一种是合并
之后去除重复的数据,还有一种是
保留所有的数据,合并结果集的要求
是合并的列个数必须一样。
UNION 合并去除重复的数据
UNION ALL 保留所有的数据
b,多表查询
在 from 后面跟上多个表名以,号隔开
查询的结果是2张表记录的乘积,这个乘积
被一个叫笛卡尔的人发现了,所以了又称之为
笛卡尔积。
*/
-- 合并结果集
DROP TABLE  t_stu1;
CREATE TABLE t_stu1(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30)
);
INSERT INTO t_stu1(NAME) VALUES('张三');
INSERT INTO t_stu1(NAME) VALUES('李四');
INSERT INTO t_stu1(NAME) VALUES('王五');
DROP TABLE t_stu2;
CREATE TABLE t_stu2(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
address VARCHAR(40)
);
INSERT INTO t_stu2(NAME,address) VALUES('王五','合肥');
INSERT INTO t_stu2(NAME,address) VALUES('赵六','安庆');
INSERT INTO t_stu2(NAME,address) VALUES('钱七','芜湖');
INSERT INTO t_stu2(NAME,address) VALUES('孙八','马鞍山');




SELECT * FROM t_stu1
UNION ALL
SELECT NAME,address FROM t_stu2;




/*
多表查询
内连接
标准    
非标准  ,隔开
外连接
左外连接
左边的数据一个都不能少
右外连接
右边的数据一个都不能少
全外连接
两边的数据一个都不能少
MySql不支持



*/
-- 非标准 内连接   简单
SELECT *
FROM emp,dept
WHERE emp.deptno=dept.deptno;  -- 内连接  
-- 标准的
SELECT *
FROM emp INNER JOIN dept
ON emp.deptno=dept.deptno; 


-- 查询出所有员工的  姓名 职位  部门名称
SELECT ename,job,dname
FROM emp e,dept d
WHERE e.deptno=d.deptno;
/*
内连接去笛卡尔积的特点是只可以显示
满足条件的数据,不满足条件不会显示。
*/
-- 左外连接  左边的表 数据一个都不会少
SELECT ename,job,IFNULL(dname,'无部门') '部门'
FROM emp e LEFT JOIN dept d
ON e.deptno=d.deptno
UNION
SELECT ename,job,IFNULL(dname,'无部门') '部门'
FROM emp e RIGHT JOIN dept d
ON e.deptno=d.deptno; 


-- 查询出工资比狮子狗高的员工的姓名和薪资
SELECT * 
FROM emp
WHERE sal>(SELECT sal
  FROM emp
  WHERE ename='狮子狗');


SELECT AVG(sal)
FROM emp;


/*
子查询可以写在2个地方
一个在 where 后面作为条件
一个在 from 后缀 作为表
*/








SELECT ee.部门
FROM    (SELECT ename,job,IFNULL(dname,'无部门') '部门'
FROM emp e LEFT JOIN dept d
ON e.deptno=d.deptno
UNION
SELECT ename,job,IFNULL(dname,'无部门') '部门'
FROM emp e RIGHT JOIN dept d
ON e.deptno=d.deptno) ee
WHERE ee.ename='菊花信'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值