本章关键字:
SELECT 查询字段信息
SELECT DEPTNO 查询显示所有行,包括重复行
DISTINCT 可以从查询结果中清除重复行
where 字句限定返回的记录
BETWEEN 运算符显示某一值域范围的记录,包含最小值和最大值
IN 运算符获得匹配列表值的记录(包含里面的字段)
NOT IN NOT IN(不包含在形参里面的字段)
LIKE 运算符执行模糊查询
查询条件可包含文字字符或数字
(%) 可以表示零或多个字符
( _ ) 可表示一个字符 */
AND 需要所有条件都是满足,
OR 只要两个条件满足一个就可以了
NOT 是取反的意思
order by 排序 按照sal从低到高排序 注意:默认为ASC,加不加ASC效果一样。
从高到低排序 (DESC)
#先创建表
CREATE TABLE tb_EMP
(EMPNO INT PRIMARY KEY, #员工编号
ENAME VARCHAR(10), #员工姓名
JOB VARCHAR(9), #工作岗位
MGR INT, #部门经理
HIREDATE DATE, #入职日期
SAL INT, #薪水
COMM INT, #奖金
DEPTNO INT #部门编号
);
CREATE TABLE tb_DEPT
(
DEPTNO INT PRIMARY KEY, #部门编号
DNAME VARCHAR(14), #部门名称
LOC VARCHAR(13) #地址
);
#插入表数据
INSERT INTO tb_DEPT
(DEPTNO,DNAME,LOC)
VALUES
(10, '财务部', '北京');
INSERT INTO tb_DEPT
(DEPTNO,DNAME,LOC)
VALUES
(20, '研发部', '广州');
INSERT INTO tb_DEPT
(DEPTNO,DNAME,LOC)
VALUES
(30, '市场部', '上海');
INSERT INTO tb_DEPT
(DEPTNO,DNAME,LOC)
VALUES
(40, '运维部', '成都');
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7369, '史密斯', '文员', 7902, '1980-12-17',800,20);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
(7499, '艾伦', '市场营销', 7698, '1981-02-20',1600,300,30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
(7521, '跃德', '市场销售', 7698, '1981-02-22',1250,500,30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7566, '琼斯', '经理', 7839, '1981-02-04',2975,20);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
(7654, '马丁', '市场销售', 7698, '1981-09-28',1250,1400,30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7698, '布莱克', '经理', 7839, '1981-01-05',2850,30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7782, '克拉克', '经理', 7839, '1981-06-09',2450,10);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7788, '斯科特', '分析师', 7566, '1987-04-19',3000,20);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, HIREDATE, SAL, DEPTNO)
VALUES
(7839, 'KING', '董事长','1981-11-17',5000,10);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
(7844, '特纳', '市场销售', 7698, '1981-09-08',1500, 0, 30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7900, '詹姆斯', '文员', 7698, '1981-12-03',950,30);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7902, '佛尔德', '分析师', 7566, '1981-12-03',3000,20);
INSERT INTO tb_EMP
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
(7934, '邦德', '市场销售', 7782, '1982-01-23',1300,10);
# SELECT(*, column [alias],...) FROM table;
#中文翻译: 查找(SELECT) 字段,字段 从(FROM) 表(tb_dept)
SELECT deptno,dname,loc FROM tb_dept
SELECT * FROM tb_dept #*表示所有的列
SELECT DNAME FROM tb_dept #查询单个字段信息
#算数表达式
SELECT ename, sal, sal*12 #查询工资(sal)*12 相当于查询年薪
FROM tb_emp;
/*乘法和除法的优先级高于加法和减法
同级运算的顺序是从左到右
表达式中使用括号可强行改变优先级的运算顺序*/
SELECT ename, sal, sal*12+100
FROM tb_emp;
SELECT ename, sal, sal*(12+100)
FROM tb_emp;
#NULL和0还有空字符串不是一个概念
SELECT * FROM tb_emp;
SELECT * FROM tb_emp WHERE comm = 0;
SELECT * FROM tb_emp WHERE comm IS NULL;
/*
改变列的标题头
用于表示计算结果的含义
作为列的别名
如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都可以通过为别名添加加双引号实现。
*/
SELECT ENAME '姓名', SAL '薪水' #将ENAME和SAL转换成别名:姓名和薪水
FROM tb_emp;
SELECT ename, sal*12 AS '年薪' #AS代表标准,不加效果也是一样
FROM tb_emp;
#缺省情况下查询显示所有行,包括重复行
SELECT DEPTNO
FROM tb_emp;
#使用DISTINCT关键字可以从查询结果中清除重复行
SELECT DISTINCT DEPTNO
FROM tb_emp
#DISTINCT的作用范围是后面所有字段的组合
SELECT DISTINCT DEPTNO, job #查询job,从tb_emp表中,而且DEPTNO=20
FROM tb_emp WHERE DEPTNO=20;
#使用where字句限定返回的记录
SELECT *
FROM tb_emp
WHERE DEPTNO=10;
#比较运算符 注意:< > 相当于"不等于"
SELECT ENAME, SAL, COMM, JOB
FROM tb_emp
WHERE SAL<=1500 AND SAL<=3000;
#使用BETWEEN运算符显示某一值域范围的记录,包含最小值和最大值
SELECT ENAME, SAL
FROM tb_emp
WHERE sal BETWEEN 1500 AND 3000; #此处比较包含1500和3000
#使用IN运算符获得匹配列表值的记录
SELECT EMPNO, ENAME, SAL, MGR
FROM tb_emp
WHERE MGR IN (7902, 7566, 7788) #IN(包含形参里面的)
SELECT EMPNO, ENAME, SAL, MGR
FROM tb_emp
WHERE MGR NOT IN (7902, 7566, 7788) #NOT IN(不包含在形参里面)
/*使用LIKE运算符执行模糊查询
查询条件可包含文字字符或数字
(%) 可以表示零或多个字符
( _ ) 可表示一个字符 */
SELECT ENAME
FROM tb_emp
WHERE ENAME LIKE '_密%'; #_表示一个字符,中间有'密'的模糊搜索,%表示多个字符
SELECT ENAME
FROM tb_emp
WHERE ENAME LIKE '__克%'; #__表示二个字符,中间有'克'的模糊搜索,%表示多个字符
SELECT ENAME
FROM tb_emp
WHERE ENAME LIKE '%克%'; #%多个字符,中间有'克'的模糊搜索,%表示多个字符
#查询包含空值的记录
SELECT ename, mgr
FROM tb_emp
WHERE mgr IS NULL; #IS NOT NULL(不包含空)
#AND需要所有条件都是满足, OR只要两个条件满足一个就可以了
SELECT empno, ename, job, sal
FROM tb_emp
WHERE sal>=1100
AND job='文员'; #可将AND job='文员'; 改为OR job='文员';
#NOT是取反的意思
SELECT ename, job
FROM tb_emp
WHERE job NOT IN ('文员','经理','分析师'); #把所有值都显示出来,除了形参里面的值
/*
优先级别 job='市场销售'全部查询出来,或者job='董事长'AND sal>1500;
*/
SELECT ename, job, sal
FROM tb_emp
WHERE job='市场销售'
OR job='董事长'
AND sal>1500;
#通过括号限制优先级别
SELECT ename, job, sal
FROM tb_emp
WHERE (job='市场销售'
OR job='董事长')
AND sal>1500;
#order by 排序 按照sal从高到低排序 (DESC)
SELECT *
FROM tb_emp
ORDER BY sal DESC;
#order by 排序 按照sal从低到高排序 注意:默认为ASC,加不加ASC效果一样。
SELECT *
FROM tb_emp
ORDER BY sal ASC;