MySql

    科技2025-10-27  6

    1.子查询

    子查询就是嵌套的select语句,可以理解为子查询是一张表。

    1.1.where语句中的子查询
    1.查询员工信息,查询哪些人是管理者,要求显示出其员工编号和员工姓名 1.首先取得管理者的编号,去除重复的 select distinct mgr from emp where mgr is not null;

    2.查询员工编号在”管理者编号“内的员工,即可 select empno,ename,job from emp where empno in (select distinct mgr from emp where mgr is not null);

    2.查询哪些人的薪水高于员工的平均薪水,需要显示员工编号,员工姓名,薪水 1.先取得平均薪水 select avg(sal) from emp;

    3.再选择薪水大于平均薪水的员工 select empno,ename,sal from emp where sal> (select avg(sal) from emp);

    1.2.from的子查询

    在from语句中使用子查询,可以将该子查询看做一张表

    1.查询员工信息,查询哪些人是管理者,要求显示出其员工编号和员工姓名 1.先筛选出管理者的编号 select distinct mgr from emp where mgr is not null;

    2.把步骤1得出的表看为t,与表emp 进行连接,即可 select a.empno,a.ename from emp a join (select distinct mgr from emp where mgr is not null) t on a.empno=t.mgr;

    2.查询各个部门的平均薪水所属等级,需要显示部门编号,平均薪水,等级编号 1.先计算每个部门的平均薪水 select a.deptno,avg(sal) from emp a group by a.deptno;

    2.把步骤1得出的表看作表e,与salgrade的表进行连接,即可 select e.deptno,e.avgsal,s.grade from (select a.deptno,avg(sal) as avgsal from emp a group by a.deptno) e join salgrade s on e.avgsal between s.losal and hisal;

    1.3.在select语句中使用子查询
    1.查询员工信息,并显示出员工所属的部门名称 第一种做法(2个表连接): select e.ename, d.dname from emp e join dept d on e.deptno=d.deptno;

    第二种做法,在select语句中再次嵌套select语句完成部分名称的查询 select e.ename,(select d.dname from dept d where e.deptno=d.deptno) as dname from emp e ;

    2.union——查询结果相加

    案例:找出工作岗位是SALESMAN和MANAGER的员工? 第1种方法:select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; 第2种方法:select ename,job from emp where job in('MANAGER','SALESMAN'); 第3种方法:select ename,job from emp where job = 'MANAGER' union select ename,job from emp where job = 'SALESMAN';

    2张不相关的表拼在一起显示? select ename from emp union select dname from dept;

    3.limit的使用

    3.1.用法:
    select * from table limit m,n

    其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条。

    select * from tablename limit 2,4

    即取出第3条至第6条,4条记录

    3.2. limit是sql语句最后执行的一个环节
    select 5 ... from 1 ... where 2 ... group by 3 ... having 4 ... order by 6 ... limit 7 ...;
    3.3.显示分页记录语法
    3.3.1每页显示pageSize条记录: 第pageNo页:(pageNo - 1) * pageSize, pageSize

    3.3.2.pageSize是什么?是每页显示多少条记录

    3.3.3.pageNo是什么?显示第几页

    显示第2页的10条记录

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

    从emp表中取出前5条数据

    select * from emp limit 0,5;(0可以省略,因为默认从第0个开始)

    从emp表中取得工资最高的前3位 select * from emp order by sal desc limit 5;

    4.表

    4.1.表的创建

    基本语法:

    create table 表名( 字段名 数据类型(字段长度) 字段约束, 字段名 数据类型(字段长度), …… )
    4.2.MySql常用数据类型:
    类型描述Char(长度)定长字符串,存储空间大小固定,适合作为主键、外键Varchar(长度)可变长字符串,存储空间等于实际数据空间double(有效数字位数,小数位)数值型float数值型int(长度)整型bigint(长度)长整型Date日期型 年月日DateTime日期型 年月日 时分秒 毫秒time日期型 时分秒BLOBBinary Large OBject(二进制大对象),存储图片、视频等流媒体信息CLOBCharacter Large OBject(字符大对象),存储较大文本,比如存储4GB的字符串
    4.3.char和varchar怎么选择?

    字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。 字段的数据长度不确定,例如:简介、姓名等都是采用varchar。

    4.4.表名在数据库当中一般建议以:t_或者tbl_开始。

    4.4.1.创建学生表:

    学生信息包括: 学号、姓名、性别、班级编号、生日 学号:bigint 姓名:varchar 性别:char 班级编号:int 生日:char create table t_student( no bigint, name varchar(255), sex char(1), classno varchar(255), birth char(10) );

    4.5.CRUD操作(create\retrieve\update\delete)

    4.5.1.insert——插入 insert into 表名 (字段名1,字段名2,……) values(字段名1的值,字段名2的值,……);

    插入数据:学号2020,姓名zs,性别f,班级编号001,生日2000-1-1 insert into t_student(no,name,sex,classno,birth) values (2020,'zs','f',001,'2000-1-1');

    插入数据:学号2021,姓名ww,性别m,班级编号002,生日1999-12-31 insert into t_student( ) values (2021,'ww','w',002,'1999-12-31');

    插入数据:学号2019,姓名zl,性别f,班级编号003,生日1998-11-11 insert into t_student( ) values (2019,'zl','f',003,'1998-11-11');

    4.5.2.表复制

    create table 复制后的表 as select 字段1,字段2,… from 待复制的表; 把表t_student 复制到 t_student_copy 将查询的数据直接放到已存在的表中 insert into 已存在待插入的表 select * from 待复制的表; insert into t_student_copy select * from t_student;

    4.5.3.update——可以修改数据,可以根据条件修改数据

    update 表名 set 字段名称1=需要修改的值1, 字段名称2=需要修改的值2 where …….

    如果不加where条件,那所有的都会被修改

    把每个人的学号统一改成2030 update t_student set no=2030;

    所有男生的班级编号改为11 update t_student set classno='11' where sex = 'f';

    4.5.4.delete——可以删除数据,可以根据条件删除数据

    语法格式:delete from 表名 where …条件…;删除表t_student_copy中所有男生的数据 delete from t_student_copy where sex='f';

    删除表t_student_copy中所有数据 delete from t_student_copy;

    Processed: 0.012, SQL: 9