菜鸡学习day28

菜鸡学习day28

/*
多表查询
查询语法:
 select
  列名列表
 from
  表名列表
笛卡尔积:有两个集合AB,取他们的所有组合情况
   要完成多表查询,需要消除无用数据
分类:
1.内连接查询
	 1.隐式内连接 (用where消除无用数据)
	   SELECT 字段列表 FROM 表名 WHERE 条件
	 2.显式内连接
	   SELECT 字段列表 FROM 表名1 【INNER】 JOIN 表名2 ON 条件;
	  注:表?条件?查询字段?
2.外连接查询(一般用左)
	 1.左外连接
	    显示左表所有数据及其交集部分
	    SELECT 查询字段 FROM 表1 LEFT OUTER JOIN 表2 ON 条件;
	 2.右外连接
	    显示右表所有数据及其交集部分
	     right
3.子查询
  查询中嵌套查询
  查询 = (子查询);
  *子查询的不同情况:
	 1.单行单列:子查询可以作为条件,使用单值运算符判断
	 2.多行单列:使用运算符in判断 where id in(xxx);
	 3.多行多列:子查询作为虚拟表
*/
-- 隐式内连接
SELECT 
 t1.`fenlei_name`,
 t2.`name`
FROM 
 fenlei t1,
 yuangong t2
WHERE
 t1.`fenlei_id` = t2.`id`;
-- 显式内连接 
SELECT * FROM fenlei t1 INNER JOIN yuangong t2 ON t1.`fenlei_id` = t2.`id`;
-- 左外连接
SELECT * FROM fenlei t1 LEFT OUTER JOIN yuangong t2 ON t1.`fenlei_id` = t2.`id`;
-- 右外连接
SELECT * FROM fenlei t1 RIGHT OUTER JOIN yuangong t2 ON t1.`fenlei_id` = t2.`id`;
-- 子查询
SELECT * FROM yuangong WHERE yuangong.`id` = (SELECT MAX(yuangong.`id`) FROM yuangong); 
-- 多行多列,子查询作为虚拟表
SELECT * FROM xianlu t1,(SELECT  * FROM guke WHERE guke.`guke_birthday` > "2020-05-17") t2 WHERE t1.`xianlu_id` = t2.guke_id;

-- 练习
-- 1.查询线路名称价格日期(xianlu),分类(fenlei)
SELECT 
 t1.`xianlu_id`,
 t1.`xianlu_name`,
 t1.`xianlu_price`,
 t1.`xianlu_date`,
 t2.`fenlei_name` 
 FROM 
 xianlu t1 
INNER JOIN 
 fenlei t2 
ON 
 t1.`xianlu_wid` = t2.`fenlei_id`;
 
-- 2.查询顾客姓名性别电话,线路名称(中间表)
SELECT 
 t1.`guke_id`,
 t1.`guke_name`,
 t1.`guke_gender`,
  t1.`guke_tel`,
 t2.`xianlu_name`
FROM
 guke t1,
 xianlu t2,
 zhongjianbiao t
WHERE
 t1.`guke_id` = t.`zjb_gid` AND t2.`xianlu_id` = t.`zjb_xid`;
 
-- 3. 查询顾客姓名电话工资,最高能承担的线路名称价格 
ALTER TABLE guke ADD gongzi INT;
SELECT
 t1.`guke_id`,
 t1.`guke_name`,
  t1.`gongzi`,
 t2.`xianlu_name`,
 t2.`xianlu_price`
FROM
 guke t1,
 xianlu t2
 WHERE
 t1.`gongzi` >= t2.`xianlu_price`;
 
-- 4.查询分类名称,每类线路数目   group by分组字段
SELECT
 t1.`fenlei_id`,
 t1.`fenlei_name`,
 COUNT(t2.`xianlu_wid`)
FROM
 fenlei t1,
 xianlu t2
 WHERE
 t1.`fenlei_id` = t2.`xianlu_wid`
GROUP BY
 t1.`fenlei_id`


-- 事务
/*
1.基本介绍
 如果一个包含多个步骤的业务操作,被事务管理,则这些步骤同时成功/失败
 操作:
  1.开启事务 start transaction
  2.回滚 rollback
  3.提交 commit
 start transaction;
 事务xxxx;
 …………
 commit;
 rollback;
注:mysql中事务默认自动提交
    一条DML(增删改)语句会自动提交一次事务
    手动提交:需先开启事务,再提交,如果没提交则自动回滚
    修改事务的默认提交方式:(查看)select @@autocommit; 1自动 0手动
              (修改)set @@autocommit = 0/1;
2.四大特征*********
	 1.原子性:是不可分割的最小操作单位(同时)
	 2.持久性:事务提交/回滚后,数据库会持久化地保存数据
	 3.隔离性:多个事务之间相互独立
	 4.一致性:操作前后数据总量不变
	
隔离级别(了)
多个事务之间相互独立
但如果多个事务之间操作同一批数据,则会引发问题,需要设置不同隔离级别
存在问题:
 1.脏读:一个事物读取到另一个事务中没有提交的数据
 2.不可重复读(虚读):同一事物中,两次读取到的数据不一样
 3.幻读:一个事务操作数据表中的所有记录,另一个事务添加了一条数据,第一个事物查询不到修改
隔离级别:
 1.read uncommitted 读未提交:123
 2.read committed 读已提交:23
 3.repeatable read 可重复度::3
 4.serializable 串行化:无
注:隔离级别从小到大安全性提高,效率降低
设置隔离级别:
 1.(查看)select @@tx_isolation;
 2.(修改)set global transaction isolation level 级别字符串;
 
*/ 
-- DCL管理用户,授权(了)
/*
管理:
 1.添加
 2.删除
 3.修改密码
 4.查询
	  1.(切换数据库)use 库名称;
	  2.(查询表) select * from user;
	   通配符%表示可以在任意主机使用用户登录数据库
	  3.(创建用户)create user‘用户名’ @‘主机名’ identified by‘密码’; 
	  4.(删除用户)drop user‘用户名’ @‘主机名’;
	  5.(修改密码)update user set password = password(‘新密码’)where user = ‘用户名’;
	         set password for‘用户名’ @‘主机名’ = password(‘新密码’);
	授权:
	 1.(查询)show grants for ‘用户名’@‘主机名’;
	 2.(授权)grant 权限列表 on 库名.表名 to ‘用户名’@‘主机名’;
	   所有权限的通配符:all
	   所有库的通配符:*.*
	 3.(撤销)revoke 权限列表 on 库名.表名 from ‘用户名’@‘主机名’;
	*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值