MySQL学习(第2天课程)

MySQL学习(第1天课程)


MySQL学习(第3天课程)

1. 查询(第1天课程也有)

语法格式(执行顺序):limit是sql语句最后执行的一个环节:
select 5

from 1

where 2

group by 3

having 4

order by 6

limit 7
…;

分组查询、连接查询、子查询
注:查询结果的去重:

  • mysql> select distinct job from emp; // distinct关键字去除重复记录。
  • mysql> select distinct deptno,job from emp; 记住:distinct只能出现在所有字段的最前面。

1.1 连接查询(内连接、外连接)

内连接:等值连接、非等值连接、自连接
语法:(where、inner可以省略)

A
inner join
B
on
连接条件
where


迪尔卡积现象:select ename,dname from emp,dept;
(1)等值连接:条件是等量关系
案例:查询每个员工的部门名称,要求显示员工名和部门名。
select e.ename,d.dname from emp e
join dept d
on e.deptno = d.deptno;


(2)非等值连接:连接条件中的关系是非等量关系
案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级。
select
e.ename,e.sal,s.grade
from
emp e
inner join
salgrade s
on
e.sal between s.losal and s.hisal;


(3)自连接:一张表看做两张表。自己连接自己
案例:找出每个员工的上级领导,要求显示员工名和对应的领导名。
select
a.ename as ‘员工名’,b.ename as ‘领导名’
from
emp a

join
emp b

on
a.mgr = b.empno;


外连接:主表的数据无条件的全部查询出来
左外连接(左连接left):表示左边的这张表是主表。
右外连接(右连接right):表示右边的这张表是主表。

案例:找出每个员工的上级领导?(所有员工必须全部查询出来。)
主表位置,左右连接输出结果一样,顺序更换一下


select
a.ename ‘员工’, b.ename ‘领导’
from
emp a //a是主表
left outer join //out可以省略
emp b
on
a.mgr = b.empno;


select
a.ename ‘员工’, b.ename ‘领导’
from
emp b
right join
emp a //a是主表
on
a.mgr = b.empno;

案例:找出哪个部门没有员工(加了where)
select
d.

from
emp e
right join
dept d
on
e.deptno = d.deptno
where
e.empno is null;

(多张表连接查询)案例:找出每一个员工的部门名称、工资等级、以及上级领导。
e先和d连接,之后e继续和s连接,最后e作主表,e1作副表。

select
e.ename ‘员工’,d.dname,s.grade,e1.ename ‘领导’
from
emp e
join
dept d
on
e.deptno = d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal
left join
emp e1
on
e.mgr = e1.empno;


1.2 子查询

select
…(select).
from
…(select).
where
…(select).

(1)where子句中使用子查询
案例:找出高于平均薪资的员工信息。
select * from emp where sal > (select avg(sal) from emp);


(2)from后面嵌套子查询
案例:找出每个部门平均薪水的等级。
select
t.*,s.grade
from //from后面的表命名为t
(select deptno,avg(sal) as avgsal from emp group by deptno) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;

案例:找出每个部门平均的薪水等级。
select
e.deptno,avg(s.grade)
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal
group by
e.deptno;


(3)在select后面嵌套子查询。
案例:找出每个员工所在的部门名称,要求显示员工名和部门名。
elect
e.ename,d.dname
from
emp e
join
dept d
on
e.deptno = d.deptno;

第二种方法:
select
e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
from
emp e;


2. union、limit

(1)union:可以将查询结果集相加,行列数要求相同

案例:找出工作岗位是SALESMAN和MANAGER的员工。
第一种:select ename,job from emp where job = ‘MANAGER’ or job = ‘SALESMAN’;
第二种:
select ename,job from emp where job = ‘MANAGER’
union
select ename,job from emp where job = ‘SALESMAN’;


(2)limit:取结果集中的部分数据

limit startIndex, length
startIndex表示起始位置,从0开始,0表示第一条数据。
length表示取几个

案例:取出工资前5名的员工(思路:降序取前5个)
select ename,sal from emp order by sal desc limit 0, 5;//0能默认不写

总结:
每页显示pageSize条记录:
第pageNo页:(pageNo - 1) * pageSize, pageSize

java代码{
int pageNo = 2; // 页码是2
int pageSize = 10; // 每页显示10条
limit (pageNo - 1) * pageSize, pageSize
}


3. 表

(DML表数据方面:insert、delete、update、select 增删改查)

3.1 创建表(create table)

(DDL表结构方面:create ,drop,alter)

建表语句的语法格式:
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,

);

MySQL当中字段的数据类型?以下只说常见的
int 整数型(java中的int)
bigint 长整型(java中的long)
float 浮点型(java中的float double)
char 定长字符串(String)
varchar 可变长字符串(StringBuffer/StringBuilder)
date 日期类型 (对应Java中的java.sql.Date类型)
BLOB 二进制大对象(存储图片、视频等流媒体信息) Binary Large OBject (对应java中的Object)
CLOB 字符大对象(存储较大文本,比如,可以存储4G的字符串。) Character Large OBject(对应java中的Object)

案例:创建学生表
create table t_student(
no bigint,
name varchar(255),
sex char(1),
classno varchar(255),
birth char(10)
);

表的复制
语法:
create table 表名 as select语句;
将查询结果当做表创建出来。
mysql> create table emp1 as select * from emp; // 把emp复制给emp1;


3.2 insert语句插入数据

语法格式:
insert into 表名(字段名1,字段名2,字段名3,…) values(值1,值2,值3,…)

	要求:
	字段的数量和值的数量相同,并且数据类型要对应相同;
	字段可以省略不写,但后面的value对数量和顺序都有要求;
	字段和数值可以写几对,不需要写全,没写的对默认为null.
  • insert into t_student(no,name,sex,classno,birth) values(1,‘zhangsan’,‘1’,‘gaosan1ban’,‘1950-10-12’);
  • insert into t_student values(1,‘jack’,‘0’,‘gaosan2ban’,‘1986-10-23’);
  • insert into t_student(name) values(‘wangwu’); // 除name字段之外,剩下的所有字段自动插入NULL。

将查询结果插入到一张表中
mysql> insert into dept1 select * from dept;


3.3 delete删除数据

语法格式:
delete from 表名 where 条件;
注意:没有条件全部删除。

  • delete from dept1 where deptno = 10; //删除10部门数据
  • delete from dept1; //删除所有记录,表存在
  • truncate table 表名 //删除大表中的数据,永久丢失
  • drop table 表名; //删除表

3.4 update修改数据

语法格式:
update 表名 set 字段名1=值1,字段名2=值2… where 条件;
注意:没有条件整张表数据全部更新
案例:将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU

  • update dept1 set loc = ‘SHANGHAI’, dname = ‘RENSHIBU’ where deptno = 10;

  • update dept1 set loc = ‘x’, dname = ‘y’; //更新所有记录


发布了42 篇原创文章 · 获赞 8 · 访问量 2452

猜你喜欢

转载自blog.csdn.net/JH39456194/article/details/103123554
今日推荐