use mydb;
select * from EMP;
select * from DEPT;
select DISTINCT JOB from EMP; -- distinct 去除重复项
select MGR from EMP;
select MGR as 主管编号 from EMP; -- 辅助查询,每列信息 起别名 as
select EMPNO as 员工编号,JOB as 职位,DEPNO as 部门编号 from EMP;
select EMPNO 员工编号,JOB 职位,DEPNO 部门编号 from EMP; -- 也可以省略as 用空格替换as
select ename,'2019-08-28' as today from EMP; -- 构建一个新的列
-- 条件查询 where
select * from EMP;
-- 关系 > < >= <= !=(<>) = between...and
select * from EMP where DEPNO=20;
select * from EMP where DEPNO<>20;
-- 查询薪资大于1000的员工信息
select * from EMP where sal>2000
-- or and not
select * from EMP where sal>3000 and sal<=5000
update EMP set sal=3500 where EMPNO=7566
select * from EMP where sal between 3000 and 5000 -- sal>=3000 and sal<=5000
-- 查询薪资大于等于3500或者职位是MANAGER
select * from EMP where sal>=3500 or job='MANAGER'
-- 查询部门是30并且薪资在2000~3500之间的员工
select * from EMP where DEPNO=30 and sal between 2000 and 3500
-- 查询30号部门的所有职位有哪些
select distinct job from EMP where depno =30
-- 查询入职时间是1981-09-30之后的所有员工
select *from EMP where HIREDATE>'1981-09-30'
-- 查询没有津贴并且基本工资超出3000元的员工姓名和职位
select ename,job from EMP where comm is NULL and sal>3000
-- 查询7698管理的所有员工,,,,
select * from EMP where MGR=7698
-- in , not in ,
select * from EMP where ename not in ('FORD','KING','WARD');
-- is null , is not null
-- 模糊查询 字符 like % 任意长度的字符 _ 任意一个字符
select * from EMP where ename like 'J%' or ename like 'A%'
select * from EMP where ename like '王_'
-- 查询名字中出现'明'同学
select * from EMP where ename like '%明'
-- insert into EMP values(7981,'王小明','CLERK',7698,'1982-02-08',1890,100,30)
-- 排序 order by 字段名 [desc降序 | asc默认升序]
-- 查询部门编号是30号部门员工信息并按照薪资sal降序
select * from EMP where DEPNO=30 order by sal desc
-- 查询入职时间是1982之前所有员工,并按照入职日期排序
select * from EMP where hiredate < '1982-01-01' order by hiredate
-- 限制 limit offset n
-- 100 1-10 11-20 21-30 ...
-- page ---> 1 ....&page=3
-- count 每页5条 ---》offset = count * (page-1)
select * from EMP;
select * from EMP limit 0,10;
select * from EMP limit 10,10;
select * from EMP limit 20,10;
select * from EMP limit 30,10;
-- 查询薪资超出3000并且是30号部门的员工 按照入职日期降序
select * from EMP where SAL>3000 and DEPNO=30 ORDER BY HIREDATE DESC;
-- 查询入职日期在1981年以后的所有员工,每12条一页,获取第2页的数据
select * from EMP where HIREDATE>'1981-01-01' LIMIT 13,12
-- 查询职位是ANALYST或者CLERK的所有数据,如果数据比较多则分页,每5条一页数据
select * from EMP where job='analyst' or job='clerk' LIMIT 5
-- 查询没有津贴的员工并按照sal升序排列
select * from EMP WHERE comm is null ORDER BY sal
-- 查询姓王或者姓张的名字中有‘红’字的同学
select * from EMP where ename like '%红'or ename like '张%'or ename like ('王%');
-- 聚合函数: sum min max avg count 计数
-- 查询员工人数
select count(EMPNO) from emp;
select count(empno) from emp where depno=30
select count(empno) as 人数 from emp where ename like '张%'
-- 查询入职日期是8月入职
select count(empno) 人数 from emp where MONTH(hiredate)=8
select MONTH(hiredate) from emp;
-- 查询薪资总和 sum(字段)
select sum(sal) from emp;
select sum(sal) 总和 from emp where depno in (10,40);
-- 最高工资
select max(sal) from emp;
-- 最低工资
select min(sal) from emp;
-- 平均工资
select avg(sal) from emp;
-- 分组查询: select 字段,聚合函数 from 表 [where 条件] group by 字段 having 条件
-- 先从表中选出第一个字节 再让后边的通过group by排序 生成第二个字节 having 可以限制第二个字节
-- 统计班级男女生的人数
-- 统计各个部门的员工人数
select depno 部门号,count(*) 人数 from emp group by depno;
-- select job,depno,count(*) 人数 from emp group by depno;
-- 统计各个职位的人数
select job 职位,count(*) 人数 from emp group by job;
-- 求各个部门的每个职位的人数
select depno 部门号,job 职位, count(*) 人数 from emp group by depno,job;
-- 统计各个部门的最高薪资
select depno 部门号,max(sal) 最高薪资 from emp group by depno;
-- 查询入职日期在2000年之前的各个部门的人数
select depno,count(*) from emp where hiredate<'1982-01-01' group by depno
-- 查询薪资超出5000元的各个部门的人数
select depno,count(*) from emp where sal>5000 group by depno;
-- 查询部门是20号,各个职位的平均薪资
select job,avg(sal) from emp where depno=20 group by job;
-- 查询姓秦的员工在各个职位中的最低工资
select job,min(sal) from emp where ename like '秦%' group by job;
-- 查询管理者(职位是manager的)在各个部门的人数
select depno,count(*) from emp where job ='MANAGER' group by depno;
-- 查询管理者(职位是manager的)在各个部门的人数 按照人数排序
select depno,count(*) from emp where job ='MANAGER' group by depno order by count(*)
-- 查询管理者(职位是manager的)人数在各个部门的超出15人
select depno,count(*) from emp where job ='MANAGER' group by depno having count(*)>=13
-- where 先筛选后分组
-- having 先分组后筛选 having永远跟group by结合使用的
-- 子查询: 嵌套查询
-- 查询10号部门比平均薪资低员工信息
-- 10号部门
-- 平均薪资
select * from emp where depno =10 and sal<(select avg(sal) from emp);
-- 查询工作所在地在纽约的所有员工信息
-- select deptno from dept where loc='NEW YORK'
select * from emp where depno in (select deptno from dept where loc='NEW YORK')
-- 查询职位是salesman的工作所在地和部门名称
-- select distinct depno from emp where job = 'SALESMAN'
select dname,loc from dept where deptno in (select distinct depno from emp where job = 'SALESMAN')
-- 查询没有拿到津贴的员工所在的部门名称
select dname from dept where deptno in (select distinct depno from emp where comm is null or comm=0)
-- 查询职位是CLERK并且工作所在地在BOSTON和DALLAS的员工信息
select * from emp where job ='CLERK' and depno in (select deptno from dept where loc in ('BOSTON','DALLAS'))
-- 查询比销售部门SALES的最低工资低的其他部门员工信息
select * from emp where depno<>(select deptno from dept where dname='SALES') and sal < (select min(sal) from emp where depno =(select deptno from dept where dname='SALES'))
-- 查询比7900员工入职晚的员工
select * from emp where hiredate> (select hiredate from emp where empno=7900)
-- 显示工资比’ALLEN’高的所有员工的姓名和工作
select ename,job from emp where sal>(select sal from emp where ename='allen')
-- 显示与scott从事相同工作的员工的信息
select * from emp where job=(select job from emp where name='scott')
-- 连接查询
-- 查询工作所在地在纽约的所有员工信息,显示员工姓名,职位,工作所在地
select * from emp,dept; -- emp 914 dept:5 ---> 4570
-- 等值连接查询
select * from emp,dept where emp.depno = dept.deptno;
-- 查询工作所在地在纽约的所有员工信息,显示员工姓名,职位,工作所在地
select ename,job,loc from emp,dept where loc='NEW YORK' and emp.depno = dept.deptno;
-- 查询工作是CLERK 并且所在地在NEW YORK的员工姓名
select ename from emp e,dept d where e.job='CLERK' and d.loc='NEW YORK' and e.depno = d.deptno;
-- 内连接 表1 inner join 表2 on 连接条件
select e.ename from emp e inner join dept d on e.depno = d.deptno where e.job='CLERK' and d.loc='NEW YORK'
-- 查询薪资低于4500的员工信息显示姓名,工作,部门名称
select e.ename,e.job,d.dname from emp e join dept d on e.depno = d.deptno where e.sal<4500 -- 内连接
-- 显示工资比’ALLEN’高的所有员工的姓名和工作
select e.ename,e.job from emp e where sal > (select sal from emp where ename='ALLEN')
-- 显示与scott从事相同工作的员工的信息
select * from emp where job = (select job from emp where ename='SCOTT')
-- 外连接: 使用外连接筛选一些不能构成等值记录
-- 左外连接 left join ...on 左侧表的记录全部出现,右侧表中的记录是能匹配的全部显示,不能匹配则全部显示null
-- 右外连接 right join ...on
select * from emp left join dept on emp.depno=dept.deptno where emp.empno<7939 and dept.deptno is null;
-- emp right join dept dept 主表 emp 从表 主表信息要全部显示
select * from emp right join dept on emp.depno=dept.deptno where emp.empno<7939 and dept.deptno is null;
-- emp left join dept emp 主表 dept 从表
select * from emp left join dept on emp.depno=dept.deptno
select * from dept right join emp on emp.depno=dept.deptno
-- 自连接
-- 查询所有员工和员工职位和管理者名字
select ename,job,mgr from emp;
select * from emp a join emp b on a.empno = b.mgr
select a.ename 主管姓名, b.ename 员工姓名 from emp a join emp b on a.empno = b.mgr
-- 系统函数:
select length('张三')
select CHAR_LENGTH('张三')
select upper(dname) from dept
select lpad('hello',8,'A')
select repeat('good',3)
create table aa(id int primary key,name varchar(16),birthday date)
insert into aa(id,name,birthday) values(1,'小明',curdate())
select curdate()
select curtime()
select * from aa;
select week(birthday) from aa;
update aa set birthday = DATE_ADD(birthday,INTERVAL -1 YEAR)
select DATEDIFF(birthday,curdate()) from aa;
-- select TIMEDIFF(expr1,expr2)
表格插入的部分数据:
create table EMP create database mydb charset=utf8; |
笔记内容:mysql:
DDL:create drop alter
create database 数据库名 [charset=utf8];
create table 表(字段field 数据类型 ,….字段 decimal(7,2),...)
数据类型: int bigint smallint tinyint
float double decimal
char(9) varchar(9)
A__________
AB
date datetime time year约束:
主键 primary key pk
外键 foreign key fk
唯一 unique
默认 default
非空 not nullalter table 表 add 字段 数据类型 约束alter table 表 drop 字段 alter table 表 modify 字段 数据类型 约束alter table 表 change old字段 new 字段 数据类型 约束删除:
drop database 数据库
drop database 表名DML: insert update deleteinsert into student(字段名,….) values(值,。。。)insert into student values()insert into student(字段名,….) values(…..),(…...),(……)update 表名 set 字段 salary = salary+1000 [where 条件]delete from 表名 [where 条件]DQL:query 数据查询语言 select基础查询:
select 字段名,字段名,.. from 表名 [where 条件]select * from 表名; * 所有字段select 字段 from 表名[where 条件][group by ][having][order by ][limit] - 字符串函数| 函数 | 功能 || ------------------------ | ------------------------------------------------------------ || char_length(*str*) | 获取字符串的字符个数 || length(str) | 获取字符串的字节数 || concat(s1, s2, ... , sn) | 连接s1, s2, ..., sn 为一个字符串 || lower(str) | 将字符串str中所有的字符转换为小写 || upper(str) | 将字符串str中所有的字符转换为大写 || left(str, x) | 返回字符串str最左边的x个字符 || right(str, y) | 返回字符串str最右边的y个字符 || lpad(str, n, pad) | 用字符串pad对str最左边进行填充, 直到长度为n个字符长度 || rpad(str, n, pad) | 用字符串pad对str最右边进行填充, 直到长度为n个字符长度 || ltrim(str) | 去掉str中最左边的空格 || rtrim(str) | 去掉str中最右边的空格 || trim(str) | 去掉字符串str两边的空格 || repeat(str, x) | 返回str中重复出现x次的结果 || replace(str, a, b) | 将字符串str中的a更换为b || insert(str, x, y, instr) | 将字符串str从第x位置开始, y个字符长度的子字符串替换为字符串instr || strcmp(s1, s2) | 比较字符串s1, s2 || substring(str, x, y) | 返回字符串str x位置开始y个字符长度的字符串 |- 日期函数| 函数名 | 功能 || --------------------- | --------------------------------- || curdate() | 得到当前日期 || curtime() | 得到当前时间 || now() | 得到当前日期和时间 || year(date) | 得到date的年份 || month(date) | 得到date的月份 || day(date) | 得到date的天 || hour(time) | 得到time的小时 || minute(time) | 得到time 的分钟 || second(time) | 得到time的秒 || week(date) | 得到date是一年中的第几周 || date_format(date,fmt) | 按格式化串fmt返回date的日期字符串 |DATE_ADD(date, INTERVAL number unit)date_sub()
datediff(date1,date2)select DATE_FORMAT(now(),'%Y- %m-%d %H:%i:%s'); - 数学函数| 函数名 | 功能 || ---------- | --------------------------- || abs(x) | 求x的绝对值 || ceil(x) | 向上取整 || floor(x) | 向下取整 || round(x,d) | 四舍五入,d为保留小数的位数 || pow(x,y) | x的y次幂 || rand() | 0~1之间的随机小数 || mod(x,y) | 等同于x % y,求x对y的模 |