一、navicat 是连接工具(可视化工具)
navicat 介绍 :Navicat是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL,创建、管理和维护数据库
1、下载安装包rar
2、解压navicat压缩包
3、进入navicat for mysql文件夹
一般注册密钥会在文件夹里
4、点击exe安装
5、输入密钥:
NAVH-WK6A-DMVK-DKW3
6、跳转到主界面
7、创建快捷方式
右击exe发送到桌面快捷方式
8、连接:pi地址:192.168.10.128
IP在服务器输入ifconfig查询
1.点击连接:填写连接参数
连接名自定义,建议写IP好找。端口号3306,。数据库账号密码。
2.点击连接:出现报错原因:
1、防火墙是否关闭:service iptables stop
2、数据库是否开启:service mysqld start
3、数据库的ip地址、账号、密码检查是否正确
4、检查是否授权成功
授权:grant all privileges on *.* to root@'%' identified by'123456';
刷新权限:flush privileges ;
设置中文:右击属性: default charset=utf8;(字符集:utf8--UTF-8 unicode 排序规则:utf8_general_ci)
二、建表语句
CREATE table dept(dept1 VARCHAR(6),dept_name VARCHAR(20)) default charset=utf8;
INSERT into dept VALUES ('101','财务');
INSERT into dept VALUES ('102','销售');
INSERT into dept VALUES ('103','IT技术');
INSERT into dept VALUES ('104','行政');
CREATE table emp (sid VARCHAR(6),name VARCHAR(20),age TINYINT(2),woektime_start VARCHAR(10),incoming SMALLINT(10),dept2 VARCHAR(6))default charset=utf8;
insert into emp VALUES ('1789','张三',35,'1980/1/1',4000,'101');
insert into emp VALUES ('1674','李四',32,'1983/4/1',3500,'101');
insert into emp VALUES ('1776','王五',24,'1990/7/1',2000,'101');
insert into emp VALUES ('1568','赵六',57,'1970/10/11',7500,'102');
insert into emp VALUES ('1564','荣七',64,'1963/10/11',8500,'102');
insert into emp VALUES ('1879','牛八',55,'1971/10/20',7300,'103');
insert into emp VALUES ('1880','老九',55,'1971/10/20',8000,'105');
drop table dept ;
drop table emp ;
select * from dept;
select * from emp ;
dept表:部门表
emp表:员工表
部门表:部门编号 ,部门名称
员工表:员工编号,姓名,年龄、工作时间、工资、部门编号
多表
左连接、右连接、内连接、左独有数据、右独有数据
一、分析表
emp表:员工表
员工编号、姓名、年龄、入职时间、工资、部门编号
独有的数据103
dept表:部门表
部门编号、部门名名称
通过相同的列名连接
多表查询:
内连接、左连接、右连接、左独有数据、右独有数据、全外连接
二、多表详解
1、内连接(普通内连接、隐藏内连接)
定义:左边有的数据,右边也有数据,关联起来只显示两个表共有的数据
案例:左表:123 右表124 内连接:显示:左边12,右边12 ,其中3,4不显示
普通内连接:
格式:inner join
select * from 表1 INNER JOIN 2 on 表1.关联字段=表2.关联字段 ;
select * from dept INNER JOIN emp on dept.dept1=emp.dept2 ;
隐藏内连接:
格式:
select * from 表1,表2 where 表1.关联字段=表2.关联字段;
方法:
select * from dept,emp where dept.dept1=emp.dept2;
左连接:left join
以做左表为主(左表全部显示),右表右关联的关联,没有关联就不显示
案例: 左表:123 右表124 内连接:显示:左边123,右边12 ,其中4不显示
格式:
select * from 表1 left JOIN 表2 on 表1.关联字段=表2.关联字段 ;
方法:select * from dept left JOIN emp on dept.dept1=emp.dept2 ;
右连接:right join
以做右表为主(右表全部显示),左表有关联的关联,没有关联就不显示
案例: 左表:123 右表124 内连接:显示:左边12,右边124 ,其中3不显示
格式:
select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字段 ;
方法:select * from dept right JOIN emp on dept.dept1=emp.dept2 ;
左独有数据:
左表中独有的数据
是在左连接后接条件(接右表的字段为null就可以)
格式:
select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字段 where 右表字段 is null;
方法:
select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null;
右独有数据:
右表中独有的数据
是在右连接后接条件(接左表的字段为null就可以)
格式:
select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字段 where 左表字段 is null;
方法:
select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept1 is null;
全外连接:(union)
(1)左独有+内连接+右独有
方法:
select * from dept INNER JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null
UNION
select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept1 is null;
(2)左连接+右独有数据
方法:
select * from dept left JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept1 is null;
(3)右连接+左独有数据
方法:
select * from dept right JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null;
=========================
练习:
(1)列出每个部门的平均收入及部门名称;
结果:avg(incoming)emp表,dept_name dept表
条件: group by dept_name
语句:
select avg(incoming),dept_name from dept a left JOIN
emp b on a.dept1=b.dept2 group by dept_name
2.财务部门的收入总和;
结果:sum(incoming)
条件:dept_name="财务"
方法1:
select sum(incoming) from dept a INNER JOIN emp b on a.dept1=b.dept2 where dept_name="财务"
方法2:
select sum(incoming) from emp where dept2=(select dept1 from dept where dept_name="财务")
3.It技术部入职员工的员工号
结果:sid
条件:dept_name="IT技术"
select sid from dept a INNER JOIN emp b on a.dept1=b.dept2
where dept_name="IT技术"
子查询:
(一)
定义:一个查询嵌套另一查询
(二)分类
1、标量子查询(一行一列)
2、列子查询(一列值)
3、行子查询(一行值)
4、表子查询(一个表)
(三)实操
1、标量子查询(一行一列)
案例:财务部门的收入总和;
步骤:
a、将财务部门的编号求出在dept中,
b、根据编号在到emp找通过收入总和
方法:
select sum(incoming) from emp where dept2=(select dept1 from dept where dept_name="财务")
2、列子查询(一列值)
求出销售和财务的收入总和?
方法
select sum(incoming) from emp where dept2 in(select dept1 from dept where dept_name="财务" or dept_name="销售" )
条件是一列值
3、行子查询(一行值)
条件是一行值:(一行多列)
语句:
select age,incoming,dept2 from emp where name="张三";
select * from emp where (age,incoming,dept2)in (select age,incoming,dept2 from emp where name="张三")
以上三种都是接在where 后面
4、表子查询(一个表)
一般接from后面
求出来的条件是一个表
案例:
select SUM(s.incoming) from (select * from dept INNER JOIN emp on dept.dept1=emp.dept2 where dept_name="财务") as s
求出每个部门最大年龄的姓名和部门编号?
select name,dept_name from dept INNER JOIN emp on dept.dept1=emp.dept2 where (age,dept_name) in(select max(age),dept_name from dept INNER JOIN emp on dept.dept1=emp.dept2 group by dept_name)
1、求财务部门最低工资的员工姓名;
方法:
select min(incoming) from emp where dept2=(select dept1 from dept where dept_name="财务");
2、找出销售部门中年纪最大的员工的姓名
select name from dept INNER JOIN emp on dept.dept1=
emp.dept2 where age=(select max(age) from emp where dept2=(select dept1 from dept where dept_name="销售"))and dept_name="销售";
3.查找张三所在的部门名称;
结果:dept_name
条件:name=张三
Select dept_name from dept where dept1=(select dept2 from emp where name="张三")
问题:
-
讲下左连接和右连接的区别?
-
子查询
-
什么叫子查询
-
排序
-
分组
-
表3-5行 limit 2,3
-
找出姓张的同学 like“张%”
-
修改男生=60 改成80分
-
建一个学生表 id ,name
-
插入数据
-
添加表字段 sex
-
创建一个库dcs
-
sql脚本,还原
-
常用的sql函数
-
数据定义?
-
什么是数据库? 是存放数据的电子仓库。以某种方式存储百万条,上亿条数据,供多个用户访问共享。
-
函数去重
Select DISTINCT(dept_name),dept1 from dept inner join emp on dept.dept1=emp.dept2 where incoming<4000;
常见的关系型数据库软件:
1.db2 IBM公司
2.oracle 甲骨文公司
3.mysql oracle 公司
4、sql server
常见的非关系型数据库软件:
1.hbase(列模型)
2.redis(键值对模型) #电商类的系统用的特别多 ,缓存方式
3.mongodb(文档类模型)