1. 关联查询(重点)
    1.1 子查询
    概述:一个查询的结果作为另一个查询的条件
    语法:SELECT 列名 FROM 表名 Where 条件(子查询结果)
    案例: 查询工资大于Bruce 的员工信息
    1.先查询到 Bruce 的工资(一行一列)
select salary from t_employees where first_name='Bruce';

2.查询工资大于 Bruce 的员工信息

SELECT * FROM t_employees where salary>6000;

3.组合 (子查询)

SELECT * FROM t_employees where salary>(select salary from t_employees where first_name='Bruce');

子查询-----------多行单列的情况
SELECT 列名 FROM 表名 Where 列名 in (子查询结果);
案例1:查询与名为’King’同一部门的员工信息

  1. 先查询 ‘King’ 所在的部门编号(多行单列)
select department_id from t_employees where last_name='King';
  1. 再查询80、90号部门的员工信息
select * from t_employees where department_id in (80,90);
  1. 组合
select * from t_employees where department_id in (select department_id from t_employees where last_name='King');

案例2:工资高于60部门所有人的信息
1.查询 60 部门所有人的工资(多行单列)

select salary from t_employees where department_id=60;

2.查询高于 60 部门所有人的工资的员工信息(高于所有)

select * from t_employees where salary > all(select salary from t_employees where department_id=60);

查询高于 60 部门的工资的员工信息(高于部分)

select * from t_employees where salary > any(select salary from t_employees where department_id=60);

[注意:当子查询结果集形式为多行单列时可以使用 ANY 或 ALL 关键字]

子查询----------作为一张表
语法:SELECT 列名 FROM(子查询的结果集) WHERE 条件;

案例:查询员工表中工资排名前 5 名的员工信息

  1. 先对所有员工的薪资进行排序(排序后的临时表)
select * from t_employees ORDER BY salary DESC;
  1. 再查询临时表中前5行员工信息
select * from t_employees LIMIT 0,5;

组合:

select * from (select * from t_employees ORDER BY salary DESC) as emp LIMIT 0,5;

注意:需要给结果集的虚拟表取个别名

直接两个条件的拼接:

select * from t_employees ORDER BY salary DESC LIMIT 0,5;

1.2 合并查询–两张表合在一起(了解)
SELECT * FROM 表名1 UNION SELECT * FROM 表名2 ----去除重复
SELECT * FROM 表名1 UNION ALL SELECT * FROM 表名2 ----没有去除重复

select * from t1 UNION SELECT * from t2;
select * from t1 UNION ALL select * from t2;

应用场景:用得较少,一般只用在特定场景,例如:合并两张班级表;(字段一致)

1.3 连接查询
内连接----两张表中匹配上的记录则查询出来(重点)
SELECT 列名 FROM 表1 连接方式 表2 ON 连接条件

案例: 查询老师表和班级表中匹配的记录
sql标准的方式: inner join on

select t.id,t.name,c.name as classname from teacher t inner JOIN classes c on t.id=c.t_id;

mysql的方式

select * from teacher t,classes c where t.id=c.t_id;

外连接----左外和右外 LEFT JOIN RIGHT JOIN
左外:以左边的表为准,都要显示出来,右边没有匹配,则显示null
右外:以右边的表为准,都要显示出来,左边没有匹配,则显示null

SELECT * FROM teacher t LEFT JOIN classes c ON t.id=c.t_id;SELECT * FROM teacher t RIGHT JOIN classes c ON t.id=c.t_id;
  1. DML操作(增删改)(重点)
    添加: INSERT INTO 表名(列 1,列 2,列 3…) VALUES(值 1,值 2,值 3…);

添加一条工作岗位信息

select * from t_jobs;
insert into t_jobs(job_id,job_title,min_salary,max_salary) values('QF_GP','QF_1',16000,26000);

修改:UPDATE 表名 SET 列 1=新值 1 ,列 2 = 新值 2,…WHERE 条件;
案例1:修改编号为100的员工的工资为 25000

update t_employees set salary=25000 WHERE employee_id=100;

注意:如果不加where,则会将表中的所有记录都修改了

案例2:修改编号为135的员工信息岗位编号为 ST_MAN,工资为3500

update t_employees SET job_id='ST_MAN',salary=3500 where employee_id=135;

删除: DELETE FROM 表名 WHERE 条件;
注意:删除也往往加where条件,否则删除所有记录
删除编号为135的员工

delete from t_employees WHERE employee_id=135;

删除姓Peter,并且名为 Hall 的员工

delete FROM t_employees where first_name='Peter' and last_name='Hall';

清空整表数据(TRUNCATE)
TRUNCATE TABLE 表名; —此删除更彻底,会将表全删除,然后再创建空表

TRUNCATE table t1;
  1. 数据类型
    用于约束存储值的类型
    重点记住的类型: int double(5,2) date datetime char VARCHAR

3.1 创建表

create table student(id    int(4),name  VARCHAR(20)
);

3.2 数据表的修改
ALTER TABLE 表名 操作;

向现有表中添加列

alter table student add age int;

修改表中的列信息

alter table student MODIFY name VARCHAR(30);

删除表中的列

alter table student drop age;

修改列名

alter table student CHANGE name st_name VARCHAR(20);

修改表名
alter table student rename t_student;

删除数据表

drop table student;
  1. 约束
    问题:创建一张表,能否插入两条完全相同的数据,如果可以,有什么弊端
    弊端:不能确定唯一的记录

实体完整性约束==
4.1 主键约束
一条记录的唯一标识,往往设置到id中,不能为null

create table student(id    int(4) primary KEY,name  VARCHAR(20)
);
INSERT INTO student(id,name) values(1,'张三');
INSERT INTO student(id,name) values(2,'张三');

4.2 唯一约束
确保该字段唯一的,可以为null,往往设置在非id字段中

create table student(id    int(4) primary KEY,name  VARCHAR(20) UNIQUE,age   int UNIQUE
);INSERT INTO student(id,name,age) values(1,'张三',22);
INSERT INTO student(id,name,age) values(2,'张小三',25);

4.3 主键自增长列

(常用:primary KEY auto_increment)
create table student(id    int(4) primary KEY auto_increment,name  VARCHAR(20) UNIQUE,age   int
);
INSERT INTO student(name,age) values('康洋',22);
INSERT INTO student(name,age) values('康小洋',25);
INSERT INTO student(name,age) values('康大洋',28);
INSERT INTO student(id,name,age) values(8,'康中洋',28);
INSERT INTO student(age) values(28);

说明:主键自增长,从1开始,每次自增1

域完整性约束
限制列的单元格的数据正确性。

4.4 非空约束

create table student(id    int(4) primary KEY auto_increment,name  VARCHAR(20) UNIQUE NOT NULL,age   int
);

4.5 默认值约束

create table student(id    int(4) primary KEY auto_increment,name  VARCHAR(20) UNIQUE NOT NULL,age   int default 30
);
INSERT INTO student(name,age) values('康洋',22);
INSERT INTO student(name) values('康小洋');

4.6 引用完整性约束(外键约束)
两张表中的约束关系
主表中的主键,在从表中可以设置成外键;外键的值必须设置为主键的值
从表中设置约束,参考主表的主键
注意:当两张表存在引用关系,要执行删除操作,一定要先删除从表(引用表),再删除主表(被引用表)

  1. 事务(重点)
    概述:事务往往是多个sql捆绑,要么都成功,则进行提交;有一个失败,则回滚

5.1. 模拟转账功能

create table account(id int PRIMARY key auto_increment,name VARCHAR(20) UNIQUE NOT NULL,money double(8,2)
);select * from account;insert into account(name,money) values('黄雨鹏',200000);
insert into account(name,money) values('陈道',100000);start TRANSACTION;   开启事务update account set money=money-20000 where id=1;//中间可能出现了异常update account set money=money+20000 where id=2;commit;   都成功则提交ROLLBACK;  如果出现异常则回滚

5.2 事务的原理
开启事务后,sql语句都放在了缓冲区(回滚段);只有所有SQL正常执行,执行到commit,才写入到数据库中
否则,如果出现异常则会执行到rollback,删除回滚段

5.3 事务的特性(ACID)
原子性:不可分割的整体,要么事务都成功,要么都失败
一致性:不管事务是否成功,总体数据是不会改变的
隔离性:处在事务中的线程,和其他操作的线程是隔离的,互不影响的
持久性:一旦进行了提交,则永久性的写到了数据库中

应用场景:
一般用在安全性较高的项目,例如金融项目,商城项目等

  1. 权限管理(了解)
    场景:一般在公司给你分配一个非管理员的账户,可能只负责查询或添加

创建一个zs的用户

create user 'zs' IDENTIFIED by '123';

用户授权

GRANT ALL ON mydb1.account TO 'zs';

撤销用户权限

REVOKE ALL on mydb1.account from 'zs';

删除用户

drop user 'zs';

也可以进行图形化用户管理操作

Mysql入门学习(二)之子查询+关联相关推荐

  1. MySql入门笔记二~悲催的用户

    这些是当年小弟的MySql学习笔记,木有多么复杂的结构操作,木有多炫丽的语句开发,木有...总之就是木有什么技术含量... 日复一日,彪悍的人生伴随着彪悍的健忘,运维操作为王,好记性不如烂笔头,山水有 ...

  2. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  3. MySQL入门 (四) : JOIN 与UNION 查询

    1 使用多个表格 在「world」资料库的「country」表格中,储存世界上所有的国家资料,其中有一个栏位「Capital」用来储存首都资料,不过它只是储存一个编号:另外在「city」表格中,储存世 ...

  4. php入门教程ppt,PHP与MySQL入门学习指南.ppt

    <PHP与MySQL入门学习指南.ppt>由会员分享,可在线阅读,更多相关<PHP与MySQL入门学习指南.ppt(18页珍藏版)>请在人人文库网上搜索. 1.PHP5與MyS ...

  5. mysql upload_关于mysql数据库里的 upload子查询问题

    报错原因:mysql规定了:upload子查询问题,不能像我这样写,这是mysql目前的版本缺陷 我是这样写道:UPDATE vote_items set times=((SELECT times f ...

  6. JBox2d入门学习二 -----我的小鸟

    入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧.   贴代码,注解写的比较详细了, ...

  7. OpenGL入门学习[二] 绘制简单的几何图形

    OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...

  8. MySQL入门学习的第一节(SQL语句)

    MySQL入门学习的第一节(SQL语句) SQL语句

  9. MySQL入门学习:组合查询

    一.组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...

最新文章

  1. Thrift RPC 系列教程(4)——源码目录结构组织
  2. 从SEO效果看谷歌百度360搜狗有道bing技术现状
  3. MVC开发中的常见错误-06-无法在发送 HTTP 标头之后进行重定向。
  4. SCSF 系列:Smart Client Software Factory 中的 MVP 模式概述
  5. 3 Sum Closest
  6. java怎么申请变量_java怎么声明变量
  7. 第四章(数组) 编程题 1
  8. 树莓派镜像备份 linux系统,使用dump和restore来制作树莓派的img镜像
  9. python 实现手机自动拨打电话(循环通话测试)
  10. 学习笔记 Logistic阻滞人口预测模型
  11. 人工势场法--路径规划--原理--matlab代码
  12. matlab中sr锁存器,大家一致避免使用的锁存器为什么依然存在于FPGA中?我们对锁存器有什么误解?...
  13. youtube打开显示服务器更新,youtube-dl更新出错解决办法
  14. VUE下载excel文件
  15. 【7gyy】笔者支招:巧设安全模式防攻击
  16. 短视频剪辑的三大要点教程,适合刚入门的小白
  17. 集成七牛云储存-上传图片Demo
  18. MT6755 datasheet资料,MT6755芯片处理器参数
  19. Mac 系统下查看隐藏文件夹的方法
  20. 2022,又一批AI大牛从大厂出走了

热门文章

  1. 局域网控制多台电脑,被控制方、控制方都可以操作,相互不影响
  2. iphone软件启动画面
  3. 基于OpenCV4.x + Python3.7的文件扫描件切边实践
  4. 布阵四纵三横,智行者打造类iPhone的低速自动驾驶盈利模式
  5. 集群对讲 文字 文件_英国小学生是如何学习中国高考词汇的?第一讲(文末留言送礼)...
  6. 深度学习机器臂控制_人工智能深度学习算法在工业机械臂上的应用
  7. 关键工具:如何知道自己擅长什么?
  8. 实现Springboot下载Excel
  9. 临时表的特点及使用(SQL Server)
  10. linux系统清除redis信息