-- sql结构化查询语言
-- DQL:数据查询语言:select .. from
-- DML:数据操作语言:insert update delete
-- DCL:数据控制语言:grant ..
-- DDL:数据定义语言: create drop alter
-- TPL:事务管理语言:rollback commit (mysql中默认提交事务)
/**
多行注释
*/
/**
-- DQL:数据查询语言:select .. from..
select 表示所需检索的数据列。
*:表示通配 查询所有列
from 表示查询的数据来至于哪些表
sql语句:一条完整的sql命令
子句:组成sql语句的一部门 例如:select 子句 select *; from 子句 from table
数据库的规则:
①关键字忽略大小写
②列名可以忽略大小写
③关键字不能作为自定义的对象(表、索引、约束、视图...)名
*/
select *from emp;
emp表:
empno:员工编号
ename:员工名称
job:工作
mgr:经理编号
hireate:入职日期
sal:工资
comm:奖金
deptno:部门编号
select *from dept;
dept表:
deptno:部门编号
dname:部门名称
loc:工作地点
select * from salgrade;
grade:等级
losal:工资下限
hisal:工资上限
-- 指定列查询
-- 查询员工的所有信息
select * from emp;-- 执行速度慢
select empno,ename,job,Mgr,HireDate,sal,comm,deptno from emp;-- 执行速度快
-- sql执行的过程:检查->编译-->判断执行--执行
-- 执行的结果放入结果集中--显示结果集中的数据
-- 算术运算符 + - * /
1、查询员工涨了50块钱工资之后的工资、姓名、入职日期
select sal+50,ename,hiredate,comm
from emp;
-- 算术运算符优先级 * / 大于加于 + - 括号的优先级最大
2、查询员工涨了50块钱工资之后的工资、和年薪、姓名、入职日期
select sal+50,(sal+50)*12,ename,hiredate from emp;
3、员工转正后,月薪上调20%,请查询出所有员工转正后的月薪。
select sal*1.2 from emp;
4、员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(不考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)
select sal*6+sal*1.2*6,ename
from emp;
--空值 null
--①null不是零也不是" "
--②null表示就是空,无效的、未赋值、未知的或不可用的值
--③注意:任何与null做计算的返回都为null,一般使用函数来处理IFNULL(a,b) 如果a为null返回b
select * from emp;
5、员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)
select sal*6+sal*1.2*6+IFNULL(comm,0),ename
from emp;
-- 列别名 给列名取个小名
-- 可以是中文可以是英文
方式1:列名 列别名
方式2:列名 AS 列别名
-- 以下三种情况列别名两侧需要添加双引号
-- 列别名中包含有空格
-- 列别名中要求区分大小写(ORACLE中)
-- 列别名中包含有特殊字符
select sal*6+sal*1.2*6+IFNULL(comm,0) 年薪,ename
from emp;
select ename 姓名,empno 编号 from emp;
select ename as 姓名,empno as 编号 from emp;
select ename "EN ame",empno 编号 from emp;
select ename EName,empno 编号 ,sal from emp;
select ename "EN*ame",empno 编号 ,sal from emp;
-- 消除重复行 distinct
6、查询有员工的部门
select deptno from emp;
select * from dept;
select distinct deptno from emp;
-- 查看表结构
desc emp;
-- 选择限定数据行
/**
where 子句:用来限定所选择的数据行
where子句一定写在from子句之后
where 列名 判断表达式 值
注意:
①日期和字符串要用单引号引起来 mysql中字符串的比较不区分大小写 oracle中严格区分字符串大小写
*/
7、查询20号部门的所有员工信息
select * from emp;
select * from emp where deptno=20;
-- 比较操作符 > >= <= < <> !=
8、查询工资大于900的员工信息
select *from emp where 900<sal
9、查询入职日期在1982-12-01之后的员工信息
select *from emp where '1982-12-01'<hiredate
10、查询工作是CLERK的员工信息
select * from emp where job='CLERK';
select * from emp where job='Clerk';
查询职位为SALESMAN的员工编号、职位、入职日期。
查询1985年12月31日之前入职的员工姓名及入职日期。
11、查询部门编号不在10部门的员工姓名、部门编号。
select ename,deptno from emp where deptno<>10;
select ename,deptno from emp where deptno!=10;
-- 特殊比较运算符
-- BETWEEN 下限 AND 上限 可以用于日期和数值类型 包含上限和下限
12、查询工资在800~3000之间的员工信息
select * from emp where sal between 800 and 3000
13、查询入职日期在1982-12-10~1987-12-11之间的员工信息
select * from emp where hiredate between '1982-12-10' and '1987-12-11';
-- IN( 集合列表)判断要比较的值是否和集合列表中的任何一个值相等。
14、查询工作在20、30号部门的员工信息
select *from emp where deptno in(20,30);
-- LIKE 模糊查询 判断要比较的值是否满足部分匹配。
-- %表示零个或者多个字符
-- _表示一个字符
15、查询名字中有s的员工信息
select ename ,empno,hiredate from emp where ename like '%s%';
16、查询名字第二字母为M的员工信息
select ename,empno from emp where ename like '_m%';
16、查询名字中包含%M的员工信息
select ename,empno from emp where ename like '%%M%';-- not ok
-- 转义 ESCAPE
select ename,empno from emp where ename like '%/%M%' escape '/';
select ename,empno from emp where ename like '%@%M%' escape '@';
-- IS NULL 运算符判断是否为null
17、查询奖金为null的员工信息
select * from emp where comm is null;
查询员工姓名倒数第2个字符为T的员工姓名。
select ename from emp where ename like '%t_';
-- 逻辑运算符 and or not
-- A and B A和B为true整个表达式才为true 否则为false;
18、查询工作在20、10号部门并且工资大于2000的员工信息
select *
from emp
where deptno in(10,20) and 2000<sal
-- or A or B A和B都为false整个表达式才为false 否则为false;只要一个为true就为true
18、查询工作在20、10号部门并且工资大于2000的员工信息
select *
from emp
where (deptno =10 or deptno =20) and 2000<sal
-- not 非 一般与is null 、like 、in结合使用
19、查询不工作在10、20号部门的员工信息
select * from emp where deptno not in(10,20);
20、查询姓名中不包含S的员工信息
select *from emp where ename not like '%S%';
21、查询奖金不为null的员工信息
select * from emp where comm is not null;
-- 运算符的优先级
-- 括号’()’优先于其他操作符
select * from emp where 2000+50<sal and '1980-12-10'<hiredate;
查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
select ename,job,sal from emp where 2000<sal and (job ='MANAGER' or job='SALESMAN');
查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
select ename,deptno,sal from emp where (deptno =10 or deptno=20) and (sal between 3000 and 5000);
查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
select ename,hiredate,job
from emp
where (hiredate between '1981-1-1' and '1981-12-31') and job not like 'SALES%';
查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。
select ename,job,deptno from emp
where job in('SALESMAN','MANAGER') and deptno in(10,20) and ename like '%A%';
-- ORDER BY子句:对结果集中的数据进行排序
-- ①ORDER BY 子句必须写在SELECT语句的最后
-- ②默认升序排序
-- ③desc 降序 asc 升序
-- ④order by 可以根据列名、列序号、表达式、列别名进行排序
-- ⑤按照日期排序:升序-日期越大越往后
-- ⑥按照字符排序:A~Z从小到大
-- ⑦from--where--select-- order by
-- ⑧空值在升序排列中排在最前面,在降序排列中排在最后。
-- ⑨ORDER BY子句中可以写没在SELECT列表中出现的列
22、查询员工姓名,职位,入职日期,工资 按照工资升序排序
select ename,job,hiredate,sal from emp order by sal
select ename,job,hiredate,sal from emp order by sal asc
22、查询员工姓名,职位,入职日期,工资 按照工资降序排序
select ename,job,hiredate,sal from emp order by sal desc
select ename,job,hiredate,sal s from emp order by sal desc
select ename,job,hiredate,sal s from emp order by s desc
select ename,job,hiredate,sal s from emp order by 3 desc
22、查询员工姓名,职位,入职日期,工资 按照姓名降序排序
select ename,job,hiredate,sal s from emp order by ename desc
select ename,job,hiredate,sal s from emp order by ename
select ename,job,hiredate,sal s from emp where s<2000 order by sal-- not ok
select ename,job,hiredate,sal s,comm from emp order by comm
-- 多列参与排序
23、查询员工姓名,职位,入职日期,工资 先按照工资降序排序,在按照名字进行升序排序
select ename,job,hiredate,sal from emp order by sal desc,ename;
-- 限制行记录 limit --使用select语句时,经常要返回前几条或者中间某几行记录,可以使用关键字limit。语法格式如下
-- limit 写在order by 之后
-- SELECT 字段列表
-- FROM 数据源
-- LIMIT [start,]length;
-- start:开始索引 行索引从0开始 0就是第一行数据,包含开始索引
-- length 行数
24、查询前五个员工信息
select * from emp limit 0,5;
select * from emp limit 10;-- 默认start为0
25、查询前5-10行的员工信息
select *from emp limit 4,6;
26、查询工资最高的前三名员工信息
select * from emp order by sal desc limit 0,3;
27、查询工资是第二,第三名的员工信息
select * from emp order by sal desc limit 1,2;
简单的查询
最新推荐文章于 2024-08-22 20:42:12 发布