这篇博客介绍下MariaDB的安装及其使用!
MariaDB 数据库
- 有人可能会问,MariaDB和mysql有什么关系?
- 回答:Mysql数据库是瑞典 mysql ab公司开发的,免费开源的数据库;后来被 Oracle甲骨文公司收购,然后就想把 mysql 搞成和 Oracle 数据库一样的闭源收费的,但原来搞 mysql 数据库的这一帮程序员大佬就不愿意啊,于是集体辞职,另外搞了一个数据库:MariaDB;所以MariaDB还是沿用了mysql许多的东西!
下载链接:https://pan.baidu.com/s/1-VyX3PgOvGXwwr_jyyVUYA
提取码:1826
安装过程:
- 1、下载后双击运行安装
- 2.安装过程中设置密码为root, 设置默认字符集UTF-8
- 3、后续安装步骤是一直下一步直至完成。
测试MySQL是否安装成功
- 1、从开始菜单中找到MariaDB里面的MySQL Client 运行,输入密码root后回车 提示以下信息说明连接成功!
- 2、再次执行测试的SQL 命令 select ‘HelloWorld’;
- 3、显示以上内容说明安装成功!
数据库Database
- 学习如何对数据进行增删改查操作
- 学习数据库主要学习的就是SQL语言,该语言是用于程序员和数据库软件进行交流的语言
1.DBMS
DataBaseManagementSystem(数据库软件)
-
常见的DBMS:
- MySQL:Oracle公司产品,开源产品, MariaDB, 市占率第一
- Oracle:Oracle公司产品,闭源 价格最贵性能最强,老板拉里埃里森, 市占率第二
- SQLServer: 微软公司产品,闭源,市占率第三
- DB2: IBM公司产品,闭源
- SQLite: 轻量级数据库
-
开源和闭源
- 开源: 开放源代码 ,产品免费 ,盈利方式:靠卖服务 ,有技术大拿无偿维护升级
- 闭源: 不公开源代码, 产品收费, 盈利方式: 卖产品+卖服务 , 有可能有黑客攻击,但是产品公司会样一群人维护升级
2.SQL语言
- Structured Query Language结构化查询语言
- 执行SQL语句需要先连接数据库软件
- window: 开始菜单-> 找到MariaDB/Mysql->MysqlClient 打开后输入密码回车
- window: 开始菜单-> 找到MariaDB/Mysql->MysqlClient 打开后输入密码回车
- Linux/Mac OS: 桌面空白区域右键打开终端 输入mysql -uroot -p 回车 输入密码 回车
3.SQL语句分类
-
DDL: 数据定义语言, 包括数据库和表相关的SQL
在MySQL数据库软件中保存数据需要, 先建库再建表,最后才能操作数据
-
DML: 数据操作语言, 包括数据增删改查相关的SQL
-
DQL: 数据查询语言, 只包括查询相关SQL
-
TCL: 事务控制语言,包括和事务相关的SQL
-
DCL: 数据控制语言, 包括权限分配相关SQL
4.数据库相关SQL
-
查询所有数据库
格式: show databases;
-
创建数据库
格式: create database 数据库名;
指定字符集创建格式: create database 数据库名 character set utf8/gbk;
举例:
create database db1;
create database db2 character set utf8;
create database db3 character set gbk;
-
查看数据库详情
格式: show create database 数据库名;
举例:
show create database db1;
-
删除数据库
格式: drop database 数据库名;
举例:
drop database db1;
-
使用数据库
-
执行表和数据相关的SQL语句必须提前使用了某个数据库
-
格式: use 数据库名;
use db2;
-
练习题
-
创建mydb1和mydb2数据库 字符集第一个utf8和第二个gbk
create database mydb1 character set utf8;
create database mydb2 character set gbk;
-
查询所有数据库检查是否创建成功
show databases;
-
分别查询两个数据库的字符集是否正确
show create database mydb1;
show create database mydb2;
-
先使用mydb1再使用mydb2
use mydb1;
use mydb2;
-
删除两个数据库
drop database mydb1;
drop database mydb2;
5.表相关SQL
-
操作表相关SQL 必须使用了某个数据库否则会报错
No database selected
-
创建表
格式: create table 表名(字段1名 类型,字段2名 类型);
指定字符集格式: create table (字段1名 类型,字段2名 类型) charset=utf8/gbk;
举例:
create table person(name varchar(20),age int);
create table student(name varchar(20),score int)charset=utf8;
create table car(name varchar(20),money int)charset=gbk;
-
查询所有表
格式: show tables;
-
查询表详情
格式: show create table 表名;
举例:
show create table person;
show create table student;
show create table car;
-
查询表字段 description描述
格式: desc 表名;
举例:
desc person;
-
删除表
格式: drop table 表名;
举例:
drop table student;
-
修改表名
格式: rename table 原名 to 新名
举例:
rename table car to t_car;
练习题
-
创建数据库mydb3 字符集gbk并使用
create database mydb3 character set gbk;
use mydb3;
-
创建t_hero 英雄表, 有名字和年龄字段 字符集默认
create table t_hero(name varchar(20),age int);
-
修改表名为hero rename table t_hero to hero;
-
查询表字段 desc hero;
- 删除表 drop table hero;
-
删除数据库 drop database mydb3;
6.表相关SQL续
use db2;
create table emp(name varchar(20));
-
添加表字段
最后面格式: alter table 表名 add 字段名 类型;
最前面格式: alter table 表名 add 字段名 类型 first;
某字段后面格式: alter table 表名 add 字段名 类型 after xxx;
举例:
alter table emp add age int;
alter table emp add id int first;
alter table emp add salary int after name;
desc emp;
-
删除表字段
格式: alter table 表名 drop 字段名;
alter table emp drop salary;
desc emp;
-
修改表字段
格式: alter table 表名 change 原名 新名 新类型;
alter table emp change age gender varchar(1);
desc emp;
-
表相关SQL回顾
- 创建表 create table t1(name varchar(20), age int) charset=utf8/gbk;
- 查询所有 show tables;
- 查询详情 show create table t1;
- 查询表字段 desc t1;
- 删除表 drop table t1;
- 修改表名 rename table t1 to t2;
- 添加表字段 alter table t1 add age int first/after xxx;
- 删除表字段 alter table t1 drop age;
- 修改表字段 alter table t1 change 原名 新名 新类型;
练习题
-
创建数据库mydb4 字符集utf8并使用
create database mydb4 character set utf8;
use mydb4;
-
创建teacher表 字段:名字 字符集utf8
create table teacher(name varchar(20)) charset=utf8;
-
添加表字段: 最后添加age ,最前面添加id , age前面添加工资salary
alter table teacher add age int;
alter table teacher add id int first;
alter table teacher add salary int after name;
-
删除age字段 alter table teacher drop age;
-
修改表名为t rename table teacher to t;
-
删除表 drop table t;
-
删除数据库 drop database mydb4;
7.DML数据操作语言(和数据相关的SQL)
create database db4 character set utf8;
use db4;
create table person(name varchar(20),age int) charset=utf8;
- 插入数据
- 全表插入格式: insert into 表名 values(值1,值2);
insert into person values(“Tom”,18);
- 指定字段插入格式: insert into person(字段1名,字段2名)values(值1,值2);
insert into person(name) values(“Jerry”);
- 批量插入格式: insert into 表名 values(值1,值2),(值1,值2),(值1,值2);
insert into person values(‘aaa’,10),(‘bbb’,11),(‘ccc’,12);
-
插入数据中文问题:
insert into person values(“刘德华”,20);
如果只选上面SQL语句报错 ,执行 set names gbk; 则可以解决
-
查询数据
格式: select 字段信息 from 表名 where 条件;
举例:
select name from person;
select * from person;
select * from person where age>15;
select age from person where name=‘刘德华’;
-
修改数据
格式: update 表名 set 字段名=值,字段名=值 where 条件;
举例:
update person set age=88 where name=‘Tom’;
update person set name=‘张学友’,age=50 where name=‘刘德华’;
-
删除数据
格式: delete from 表名 where 条件;
举例:
delete from person where age=10;
delete from person where name=‘张学友’;
delete from person where age>15;
delete from person where age=null;
delete from person;
增删改查回顾:
- 增(插入数据) insert into 表名(字段1名,子段2名) values(值1,值2),(值1,值2),(值1,值2);
- 删(删除数据) delete from 表名 where 条件;
- 改(修改数据) update 表名 set xxx=xxx,xxx=xxx where 条件;
- 查(查询数据) select 字段信息 from 表名 where 条件;
综合练习题
1. 创建数据库mydb5 字符集utf8并使用
create database mydb5 character set utf8;
use mydb5;
2. 创建hero表 字段: id,name,type varchar(10)
create table hero(id int,name varchar(20),type varchar(10));
3. 插入以下数据:
insert into hero values(1,'李白','刺客'), (2,'诸葛亮','法师'), (3,'刘备','战士'), (4,'孙尚香','射手'),
(5,'关羽','战士'), (6,'刘禅','辅助');
4. 修改李白为诗人
update hero set type='诗人' where name='李白';
5. 给表添加价格money字段 alter table hero add money int;
6. 修改id小于5的价格为6888
update hero set money=6888 where id<5;
7. 修改诗人为打野
update hero set type='打野' where type='诗人';
8. 修改刘禅为阿斗
update hero set name='阿斗' where name='刘禅';
9. 删除id为5的 delete from hero where id=5;
10. 修改所有英雄的价格为13888
update hero set money=13888;
11. 修改表名为 heros
rename table hero to heros;
12. 删除money字段
alter table heros drop money;
13. 删除所有数据
delete from heros;
14.删除表
drop table heros;
15.删除数据库
drop database mydb5;
8.数据类型
-
整数: int(m)和bigint(m), bigint等效java语言中的long, m代表显示长度(用来补零 m=5 , 00018),如果需要补零需要结合zerofill关键字使用
create table t1(name varchar(20),age int(10) zerofill);
insert into t1 values(‘aaa’,18);
select * from t1;
-
浮点数: double(m,d) m代表总长度, d代表小数长度 m=5 d=3 23.456
decimal(m,d) 超高精度浮点数, 只有涉及到超高精度运算时使用
-
字符串
- char(m),m代表字符长度, 固定长度, m=10存"abc" 占10个字符长度的空间, 好处:执行效率略高, 最大长度255
- varchar(m): 可变长度,m=10存"abc" 占3个长度看空间,好处:节省空间,最大长度65535 但是建议保存255以内的 超过255建议使用text
- text(m):可变长度 最大长度65535,建议保存长度大于255的内容
-
日期
- date:保存年月日
- time:保存时分秒
- datetime:保存年月日时分秒, 默认值为null, 最大值为9999-12-31
- timestamp(时间戳:距离1970年1月1日的毫秒数):保存年月日时分秒,默认值为当前系统时间,最大值2038-1-19
create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t_date values(“2021-1-4”,null,null,null);
insert into t_date values(null,‘20:27:33’,‘2020-10-10 11:20:30’,null);
select * from t_date;
9.主键约束 primary key
-
什么是约束: 约束就是创建表时给表字段添加的限制条件
-
什么是主键: 表示数据唯一性的字段称为主键
-
主键约束: 限制主键字段的值 唯一且非空.
-
举例:
create table t2(id int primary key,name varchar(10));
insert into t2 values(1,‘aaa’);
insert into t2 values(1,‘bbb’); //报错 主键值重复
insert into t2 values(null,‘ccc’); //报错 主键值不能为null
主键约束+自增 auto_increment
自增规律:从历史最大值+1
create table t3(id int primary key auto_increment,name varchar(10));
insert into t3 values(null,‘aaa’); 1 //自增情况下 null代表触发自增
insert into t3 values(null,‘bbb’); 2
insert into t3 values(3,‘ccc’); 3
insert into t3 values(10,‘ccc’); 10
insert into t3 values(null,‘ddd’); 11
delete from t3 where id>=10;
insert into t3 values(null,‘eee’); 12
10导入*.sql批处理文件
链接:https://pan.baidu.com/s/1PLt4fZvVgkmnKNqUVC3ScA
提取码:1826
-
把sql文件保存在某个盘的根目录 ,如果是其它系统保存在桌面
-
在终端中执行以下代码 提示Query OK! 成功!
source e:/emp.sql;
-
查询emp表数据如果出现乱码 执行 set names gbk; 再次查询
select * from emp;
- 导入的两个表:员工表 emp、部门表 dept 下面会经常使用
11.is null和 is not null
如果查询的是某个字段值为null的 使用 is null 查询不是null 的 写 is not null;
-
查询没有上级领导的员工信息
select * from emp where mgr is null;
-
查询有上级领导的员工姓名 和领导编号
select ename,mgr from emp where mgr is not null;
去重distinct
-
查询员工表中出现了哪几种工作
select distinct job from emp;
-
查询员工表中出现的部门编号 去掉重复
select distinct deptno from emp;
比较运算符 > < >= <= = !=和<>
-
查询工资小于等于3000 的员工姓名和工资
select ename,sal from emp where sal<=3000;
-
查询1号部门的员工姓名和工作
select ename,job from emp where deptno=1;
-
查询不是程序员的员工姓名 工资和工作(两种写法)
select ename,sal,job from emp where job !=“程序员”;
select ename,sal,job from emp where job <> “程序员”;
-
查询有奖金的员工姓名和奖金
select ename,comm from emp where comm>0;
and和or
- and 类似java中的&& ,多个条件同时满足时使用and
- or 类似价格中的|| , 多个条件满足一个时使用or
-
查询1号部门工资高于2000的员工信息
select * from emp where deptno=1 and sal>2000;
-
查询是程序员或者工资等于5000的员工信息
select * from emp where job=‘程序员’ or sal=5000;
in关键字
-
查询工资是3000,1500和5000的员工信息
select * from emp where sal=3000 or sal=1500 or sal=5000;
select * from emp where sal in(3000,1500,5000);
-
查询工作是销售,人事和程序员的员工信息
select * from emp where job in(“销售”,“人事”,“程序员”);
-
查询1号和2号部门中工资大于2000的员工信息
select * from emp where deptno in(1,2) and sal>2000;
between x and y 两者之间 包含x和y
-
查询工资在2000至3000之间的员工信息
select * from emp where sal between 2000 and 3000;
综合练习题
-
查询3号部门中有上级领导的员工信息
select * from emp where deptno=3 and mgr is not null;
-
查询2号部门工资在2000-3000之间的员工姓名,工资和部门编号
select ename,sal,deptno from emp
where deptno=2 and sal between 2000 and 3000;
-
查询1号部门工资为800和1600的员工信息
select * from emp where deptno=1 and sal in(800,1600);
-
查询1号部门中出现了哪几种不同的工作
select distinct job from emp where deptno=1;
12.模糊查询like
-
_ : 代表1个未知字符
-
%:代表0或多个未知字符
-
举例:
- 以x开头 x%
- 以x结尾 %x
- 包含x %x%
- 以x开头y结尾 x%y
- 第二个字符是x _x%
- 第三个字符是x 倒数第二个是y _ _ x%y_
-
查询姓孙的员工姓名
select ename from emp where ename like “孙%”;
-
查询工作中第二个字是售的员工信息
select * from emp where job like ‘_售%’;
-
查询名字中以精结尾的员工姓名
select ename from emp where ename like ‘%精’;
-
查询名字中包含僧的员工并且工资高于2000的员工信息
select * from emp where ename like ‘%僧%’ and sal>2000;
排序 order by
- 格式: order by 字段名 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; 降序
-
查询3号部门的员工信息 按照工资降序排序排序
select * from emp where deptno=3 order by sal desc;
-
查询每个员工的姓名,工资和部门编号 按照部门编号升序,如果部门编号一样的情况下 按照工资降序排序
select ename,sal,deptno from emp order by deptno,sal desc;
分页查询 limit
- 格式: limit 跳过的条数(跳过的条数=(请求页数-1)*请求条数), 请求的条数
- 请求第5页的10条数据 limit (5-1)*10,10
- 请求第3页的5条数据 limit (3-1)*5 ,5
- 请求第8页的8条数据 limit (8-1)*8,8
-
查询员工表中工资升序排序第一页的5条数据
select * from emp order by sal limit 0,5;
-
查询员工表中工资降序第二页的3条数据
select * from emp order by sal desc limit 3,3;
-
查询工资高于1000的员工信息, 工资升序 查询前三条数据
select * from emp where sal>1000 order by sal limit 0,3;
数值计算+ - * / %
- 对查询数据中某一个字段的值进行运算
-
查询每个员工的姓名,工资和年终奖 (年终奖=工资*5)
select ename,sal,sal*5 from emp;
-
给1号部门的员工每人涨薪5块钱 (修改)
update emp set sal=sal+5 where deptno=1;
别名
select ename from emp;
select ename as ‘姓名’ from emp;
select ename ‘姓名’ from emp;
select ename 姓名 from emp;
综合练习题
1. 查询有领导并且工资在1000到3000之间的员工信息
select * from emp
where mgr is not null and sal between 1000 and 3000;
2. 查询1号部门有几种不同的工作
select distinct job from emp where deptno=1;
3. 查询名字中包含精或者工作中包含序的员工姓名和工作
select ename,job from emp
where ename like '%精%' or job like '%序%';
4. 查询3号部门工资最高的员工姓名和工资
select ename,sal from emp
where deptno=3 order by sal desc limit 0,1;
5. 查询上级领导编号是8工资最高的3个人的信息
select * from emp where mgr=8 order by sal desc limit 0,3;
6. 查询1号部门和2号部门的员工信息工资升序,查询第3页的2条数据
select * from emp
where deptno in(1,2) order by sal limit 4,2;
13.聚合函数
使用聚合函数可以对查询的多条数据进行统计查询
统计方式:
-
平均值avg(字段名)
-
查询员工表的平均工资
select avg(sal) from emp;
-
查询1号部门的平均工资
select avg(sal) from emp where deptno=1;
-
-
最大值max(字段名)
-
查询2号部门中的最高工资
select max(sal) from emp where deptno=2;
-
-
最小值min(字段名)
-
查询1号部门的最低工资
select min(sal) from emp where deptno=1;
-
-
求和sum(字段名)
-
查询3号部门的工资总和
select sum(sal) from emp where deptno=3;
-
-
计数count(*) 如果计数字段中有null值 则会不被统计在内
-
查询员工表中的人数
select count(*) from emp;
-
-
查询1号部门的平均工资,最高工资,最低工资,工资总和,人数 并且起别名
select avg(sal) 平均工资,max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总和, count(*) 人数 from emp where deptno=1;
综合练习题
1. 查询员工表中工资高于2000的员工姓名和工资,按照工资升序排序,查询第2页的两条数据
select ename,sal from emp where sal>2000 order by sal limit 2,2;
2. 查询和销售相关工作的工资总和
select sum(sal) from emp where job like '%销售%';
3. 查询1号部门工资高于2000的员工人数
select count(*) from emp where deptno=1 and sal>2000;
4. 查询3号部门的人数和工资总和并起别名
select count(*) 人数,sum(sal) 工资总和 from emp where deptno=3;
5. 查询1号部门中名字包含僧的员工的人数和平均工资 起别名
select count(*) 人数,avg(sal) 平均工资 from emp where deptno=1 and ename like '%僧%';
14.分组查询group by
- 格式 group by 字段名;
- 分组查询可以将某个字段相同的值划分成一组, 以组为单位进行统计查询
-
查询每个部门的平均工资
select deptno,avg(sal) from emp group by deptno;
-
查询每一个部门的最高工资
select deptno,max(sal) from emp group by deptno;
-
查询每种工作的工资总和
select job,sum(sal) from emp group by job;
-
查询每个部门中工资高于2000的员工人数
select deptno,count(*) from emp where sal>2000 group by deptno;
-
查询最高人数的工作名称及人数
select job,count(*) from emp
group by job order by count(*) desc limit 0,1;
select job,count(*) c from emp
group by job order by c desc limit 0,1;
6.查询平均工资最高的部门编号和平均工资
select deptno,avg(sal) a from emp
group by deptno order by a desc limit 0,1;
综合练习题
-
查询员工表中名字中包含骨字的员工信息
select * from emp where ename like ‘%骨%’;
-
查询1号部门工资收入排名前三的员工信息
select * from emp where deptno=1 order by sal desc limit 0,3;
-
查询2号和3号部门有几种不同的工作
select distinct job from emp where deptno in(2,3);
-
查询3号部门的最高工资
select max(sal) from emp where deptno=3;
-
查询每个部门的最低工资
select deptno,min(sal) from emp group by deptno;
-
查询平均工资最高的部门编号和平均工资
select deptno,avg(sal) a from emp
group by deptno order by a desc limit 0,1 ;
15.having关键字
- where后面只能写普通字段的条件,不能写 聚合函数条件,having的作用就是专门用来写聚合函数条件的关键字
- having需要结合分组查询一起使用,不要单独使用.
- 查询每个部门的平均工资,只查询出平均工资高于2000的信息
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
- 查询每种工作的人数,只查询人数大于1的
select job,count(*) c from emp group by job having c>1;
-
查询每个部门的工资总和,只查询有领导的员工,并且要求工资总和高于5400
select deptno,sum(sal) s from emp where mgr is not null group by deptno having s>5400;
-
查询每个部门的平均工资,只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的部门信息
select deptno,avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000;
-
询每种工作的人数要求人数大于1个,并且只查询1号部门和2号部门的员工, 按照人数降序排序
select job,count(*) c from emp where deptno in(1,2) group by job having c>1 order by c desc;
-
查询平均工资最高的部门编号,只查询有领导的员工
select deptno from emp
where mgr is not null group by deptno
order by avg(sal) desc limit 0,1;
16.子查询(嵌套查询)
- 查询工资高于1号部门平均工资的员工信息
select avg(sal) from emp where deptno=1;
- 将一条SQL语句的查询结果作为另外一条SQL语句条件的值
select * from emp where sal>(select avg(sal) from emp where deptno=1);
-
查询工资最高的员工信息
select max(sal) from emp;
select * from emp where sal=(select max(sal) from emp);
-
查询工资高于2号部门最低工资的员工信息
select min(sal) from emp where deptno=2;
select * from emp where sal>(select min(sal) from emp where deptno=2);
-
查询和孙悟空相同工作的其它员工信息
select job from emp where ename=‘孙悟空’;
select * from emp where job=(select job from emp where ename=‘孙悟空’) and ename!=‘孙悟空’;
-
查询拿最低工资员工的同事们的信息(同事指相同部门)
select min(sal) from emp;//得到最低工资
//通过最低工资得到 这个员工的部门编号
select deptno from emp where sal=(select min(sal) from emp);
//通过部门编号得到该部门的所有员工(去掉最低工资的员工)
select * from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);
-
查询白骨精的部门信息(需要用到部门表dept)
select deptno from emp where ename=‘白骨精’;
select * from dept where deptno=(select deptno from emp where ename=‘白骨精’);
-
查询人数最多的部门信息
select deptno from emp group by deptno order by count(*) desc limit 0,1;
select * from dept where deptno=(select deptno from emp group by deptno order by count(*) desc limit 0,1);
-
有的工作只有一个人, 那么查询有哪些人从事了这种只有一个人的工作
select job from emp group by job having count(*)=1;
select * from emp where job in (select job from emp group by job having count(*)=1);
select * from emp group by job having count(*)=1;
16.关联关系
- 创建表时,表和表之间存在的业务关系
- 有哪几种关系:
- 一对一: 有AB两张表,A表中的一条数据对应B表的一条数据,同时B表的一条数据也对应A表的一条数据
- 一对多:有AB两张表,A表中的一条数据对应B表的多条数据,同时B表的一条数据对应A表的一条数据
- 多对多:有AB两张表,A表中的一条数据对应B表的多条数据,同时B表的一条数据也对应A表的多条数据
关联查询
- 同时查询多张表数据的查询方式称为关联查询.
- 有几种关联查询的方式:
- 等值连接
- 内连接
- 外连接
关联查询之等值连接
- 格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;
-
查询每个员工的姓名和对应的部门名
select ename,dname
from emp e,dept d
where e.deptno=d.deptno;
关联查询之内连接
- 等值连接和内连接查询到的数据一样,都是两个表的交集数据
- 格式: select * from A join B on A.x=B.x where A.age>30;
-
查询每个员工的姓名和对应的部门名
select ename,dname
from emp e join dept d
on e.deptno=d.deptno;
-
查询1号部门工资高于2000块钱的员工姓名和对应的部门名,部门地址
select ename,dname,loc,sal
from emp e join dept d
on e.deptno=d.deptno
where e.deptno=1 and sal>2000;
关联查询之外连接
- 外连接查询到的是一个表的全部和另外一张表的交集数据
- 格式: select * from A left/right join B on A.x=B.x where A.age>30;
先往员工表中插入一条数据 做测试
insert into emp (empno,ename) values(100,‘灭霸’);
-
查询所有员工姓名 和对应的部门名
select ename,dname
from emp e left join dept d
on e.deptno = d.deptno;
-
查询所有部门名和对应的员工姓名
select ename,dname
from emp e right join dept d
on e.deptno = d.deptno;
-
关联查询总结:
如果需要同时查询多张表的数据,则使用关联查询,
查询的是两个表的交集数据使用等值连接或内连接(推荐)
查询的是一张表的全部和另外一张表的交集则使用外连接