建表语句
emp表:
CREATE TABLE `emp`(
`empNo` INT(10) NOT NULL,
`ename` VARCHAR(10) DEFAULT NULL,
`job` VARCHAR(10) DEFAULT NULL,
`mgr` INT(4) DEFAULT NULL,
`hiredate` DATE DEFAULT NULL,
`sal` DOUBLE(7,2) DEFAULT NULL,
`comm` DOUBLE(7,2) DEFAULT NULL,
`dadtno` INT(10) DEFAULT NULL,
PRIMARY KEY(`empNo`) )
insert into `emp`(`empNo`,`ename`,`job`,`mgr`,`hiredate`,`sal`,`comm`,`dadtno`)
values
(1234,'SAASAb','A',NULL,'2018-01-20',800.00,300.00,10),
(1235,'SAWECE','A',NULL,'2018-01-21',1600.00,100.00,10),
(1236,'DFDGSAD','A',NULL,'2018-02-20',2000.00,NULL,30),
(1237,'DFDSFEW','C',NULL,'2018-03-20',2500.00,500.00,30),
(1238,'DFSDF','C',NULL,'2018-03-20',1500.00,200.00,20),
(1239,'GHSDGSD','C',NULL,'2018-01-11',3000.00,1000.00,20),
(1240,'GHGFHTR','B',NULL,'2018-01-30',5000.00,NULL,40),
(1241,'NRTEEG','B',NULL,'2018-02-10',7000.00,NULL,10),
(1242,'THT%RE','B',NULL,'2018-01-12',1000.00,100.00,20),
(1243,'FSDF_WE','B',NULL,'2018-01-12',1000.00,100.00,30);
dept表
CREATE TABLE dept(
dadtno INT(10),
dname VARCHAR(10),
loc VARCHAR(10),
PRIMARY KEY (`dadtno`)
)
insert into `dept`(`dadtno`,`dname`,`loc`) values
(10,'ACOUNTING','NEW YORK'),(20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON');
salgrade表
CREATE TABLE salgrade(
grade INT(10),
losal INT(10),
hisal INT(10)
)
insert into `salgrade`(`grade`,`losal`,`hisal`) values
(1,100,1200),(2,1021,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999);
-- 【1】简单查询
-- 1,查询要展示的字段
SELECT empNo,ename,job,mgr,hiredate,sal,comm,dadtno
FROM emp;
-- 2,起别名时,可以使用AS、""、'',也可以不使用AS和引号
SELECT ename AS 名字,hiredate "日期",sal '月薪',dadtno 部门编号
FROM emp;
-- 【2】条件查询(使用WHERE)
-- 1,表达式
/*
SELECT 查询列表
FROM 表名
[WHERE 查询条件]
*/
-- 2,oracle在任何平台都是严格区分大小写 mysql在Linux和Unix平台区分大小写,windows不区分
-- 3,用BINARY 关键字可以严格区分大小写(只会查到对应的大小写字母)
SELECT *
FROM emp
WHERE BINARY ename ='SAASAb';
-- 【3】使用BETWEEN AND 作为查询条件
-- 作用于数值型数据和日期型得数据,包含两个边界值
-- 1,查询雇佣日期 2018-01-01 到 2018-01-20
SELECT *
FROM emp
WHERE hiredate BETWEEN '2018-01-01' AND '2018-01-20';
-- 2,查询名字"A"到"F"的员工
SELECT *
FROM emp
WHERE ename BETWEEN 'A' AND 'Z';
-- 【4】使用AND作为查询条件(可以用&&代替)
-- 1,查询工资大于1200,并且部门编号是20
SELECT *
FROM emp
WHERE (sal>1200) AND (dadtno=20);
-- 【5】使用OR作为查询条件(等同于||)
-- 可以使用OR链接两个查询条件,只需要满足其中任何一个条件即可
-- 1,查询工资大于1200或部门编号是20的员工
SELECT *
FROM emp
WHERE (sal>1200) OR (dadtno=20);
-- 【6】AND和OR的优先级;首先执行AND,后执行OR
-- 注:搞不清楚的时候,可以使用()改变运算的顺序
-- 1,查询薪水大于1800,并且部门编号为20或30的员工
SELECT *
FROM emp
WHERE (sal>1800) AND (dadtno=20 OR dadtno=30);
-- 【7】使用IN作为查询条件,IN表示包含的意思
-- 1,查询职位是"A"或"C"的员工信息
SELECT *
FROM emp
WHERE job IN ("A","C");
-- 2,用OR完成
SELECT *
FROM emp
WHERE (job="A") OR (job="C");
-- 3,查询不是"A"或 "C"的员工
SELECT *
FROM emp
WHERE job NOT IN ("A","C");
-- 【8】使用NOT作为查询条件;NOT是取反的意思;等同于Java的!;
-- 查询薪水不是1600和薪水不是3000的员工
-- 方式1,
SELECT *
FROM emp
WHERE sal NOT IN(1600,3000);
-- 方式2
SELECT *
FROM emp
WHERE (sal !=1600) AND (sal!=3000);
-- 方式3
SELECT *
FROM emp
WHERE NOT(sal=1600 OR sal=3000);
-- 2,查询津贴不是NULL的员工
SELECT *
FROM emp
WHERE comm IS NOT NULL;
-- 【9】使用LIKE执行模糊查询
-- %表示0个或多个任意字符;_表示一个字符
-- 1,查询名字中有"A"的员工
SELECT *
FROM emp
WHERE ename LIKE "%A%";
-- 2,查询名字"S"开头的员工
SELECT *
FROM emp
WHERE ename LIKE "S%";
-- 3,查询名字第二个字符是"A"的员工
SELECT *
FROM emp
WHERE ename LIKE "_A%";
-- 4,查询名字倒数第三个字符"S"的员工
SELECT *
FROM emp
WHERE ename LIKE "%S__";
-- 5,查询名字含有%(_)的员工,查询数据%(_)与通配符冲突,必须要使用转移符\;也就是要查询\后面的字符
-- 5.1查询%
SELECT *
FROM emp
WHERE ename LIKE "%\%%";
-- 5.2查询_
SELECT *
FROM emp
WHERE ename LIKE "%\_%";
-- 【10】使用ORDER BY子句给查询结果排序(默认升序排序)
-- 排序的时候可以按照单个字段,也可以多个字段
-- 表达式
/*
SELECT 查询列表
FROM 表名
[WHERE 查询条件]
[ORDER BY 排序字段1,排序字段2...]
*/
-- 1,按照部门编号排序 (ASC 升序 , DESC 降序)
-- 1.1 ASC排序
SELECT *
FROM emp
ORDER BY dadtno ASC;
-- 2.2 DESC排序
SELECT *
FROM emp
ORDER BY dadtno DESC;
-- 2,查询工资大于1200的员工和编号,并且部门编号升序排序,工资降序排序
SELECT *
FROM emp
WHERE sal >1200
ORDER BY dadtno ASC,sal DESC;
-- 3,查询员工的年薪并且起别名,然后按照年薪的别名进行排序
SELECT ename,job,sal,sal*12 AS "年薪"
FROM emp
ORDER BY 年薪;