0
点赞
收藏
分享

微信扫一扫

MySQL查询select实例 【笔记】


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
(
EMPNO int PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR int,
HIREDATE DATE,
SAL DECIMAL(7,2),
COMM decimal(7,2),
DEPNO int
);
 
CREATE TABLE DEPT(
DEPTNO int,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
 
 
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
 
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,null,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

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 null


alter table 表 add 字段 数据类型 约束

alter table 表 drop 字段

alter table 表 modify 字段 数据类型 约束

alter table 表 change old字段 new 字段 数据类型 约束


删除:
drop database 数据库
drop database 表名


DML: insert update delete

insert 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的模 |

 

举报

相关推荐

0 条评论