--简单查询
语法:SELECT 要查的属性。。。。
FROM 数据来源(从哪个表来查)
--查询emp中的员工编号
SELECT EMPNO FROM EMP;
--查询多个列 多个列之间用逗号隔开
SELECT EMPNO,ENAME,SAL FROM EMP;
注释:单行注释 --注释内容
多行注释 /* 注释内容 */
注释内容
/*--SDKFSFNSFSDFSDFS/ DFSDFSDFSDF
SHFGSDJFGHSFGSD
DFGKSFJKSDF
*/
--表示所有的列
SELECT * FROM EMP;
--数据类型
数值型:number 直接写
字符类型 : char/varchar2 '字符内容'
日期型: date date'年-月-日'
SELECT 123,234,'中国河南郑州',DATE'2022-7-18'
FROM DUAL; --万能表
--别名
表别名 语法: 表 表别名
列别名 语法: 列 列别名
列 as "列别名"
列别名的标准写法: 列 as "列别名" --用的比较少
SELECT EMPNO 员工编号,ENAME 姓名,SAL as "工资" FROM EMP;
--查询emp的每个列 每个列起一个别名
SELECT EMPNO 员工编号,ENAME 姓名,SAL 工资,JOB AS "职位", MGR AS "经理",HIREDATE AS "入职日期"
FROM EMP;
SELECT ENAME AAAA,ENAME ABC123,ENAME AS "123ABC",ENAME AS "@#$",ENAME AS "AbC" FROM EMP;
别名的注意事项:
as 只能使用在列别名上 表别名不能使用
别名以数字开头 包含特殊符号 区分大小写时 需要使用标准语法
别名的构成可以使用汉字 英文字母 英文字母+汉字
--查询emp中的姓名 经理 提成 显示列的中文含义
SELECT ENAME 姓名,MGR 经理,COMM 提成 FROM EMP;
--查询dept表的所有的内容
SELECT * FROM DEPT;
--查询dept表的内容 并给每个列加上对应的中文含义
SELECT DEPTNO 部门编号,DNAME 部门名称,LOC 部门所在地 FROM DEPT;
--查询工资登记表的所有内容
SELECT * FROM SALGRADE;
--查询工资登登记表的列及对应的中文含义
SELECT GRADE 等级,LOSAL 最低工资,HISAL 最高工资 FROM SALGRADE;
SELECT * FROM EMP WHERE DEPTNO=10;
SELECT * FROM EMP WHERE SAL>3000;
与 && AND
或 || OR
非 ! NOT 取反值
AND:当前后都为true的时候执行
当前面的条件为true,判断后面的表达式
当前面的条件为false,则跳过
OR:前后要有一个为 true
当第一为false 就判断后面的条件
当第一为true 后面的则不要判断
SELECT * FROM EMP WHERE DEPTNO=20 AND SAL>2000;
SELECT * FROM EMP WHERE DEPTNO=20 OR SAL>2000;
SELECT * FROM EMPWHERE NOT(SAL>2000)
SELECT *FROM EMPWHERE SAL BETWEEN 2450 AND 3000;
4,in(值1,值2,值3......)
等价于 =值1 or =值2 or =值3...
SELECT * FROM EMP WHERE EMPNO=7788 OR EMPNO=7369 OR EMPNO=7654;
SELECT * FROM EMP WHERE EMPNO IN(7788,7369,7654);
SELECT * FROM EMP
WHERE NOT (JOB IN('MANAGER','ANALYST','SALESMAN'));
WHERE JOB NOT IN('MANAGER','ANALYST','SALESMAN');
SELECT * FROM EMP;
SELECT JOB FROM EMP;
5,算术运算符+-*/
--查询工资+500后大于2000的员工
SELECT * FROM EMP WHERE SAL+500>2000; SAL>2000-500;--推荐使用
6、空 is null/is not null
--查询没有经理的员工信息
SELECT * FROM EMP WHERE MGR IS NULL;
--查询没有提成的员工信息
SELECT * FROM EMP WHERE COMM IS NULL;
7,连接符||(--把多个字段连接成一个字段,新生成的字段是字符类型)
SELECT EMPNO,ENAME,SAL,EMPNO||'~'||ENAME||'~'||SAL FROM EMP;
--查询20部门 工作是职员的员工信息
--查询10部门提成为空的员工信息
SELECT * FROM EMP WHERE DEPTNO||JOB='20CLERK';
SELECT E.*,DEPTNO||JOB FROM EMP E WHERE DEPTNO||JOB='20CLERK';
SELECT * FROM EMP WHERE DEPTNO||COMM=10;======>deptno||comm'10'
--隐式转换(纯数字字符可以看成数字来使用,数字也可以看成字符串使用)
--案例:
SELECT 123+456,123+'456','123'+'456','123+456' FROM DUAL;
SELECT * FROM EMP WHERE DEPTNO=10 AND COMM IS NULL;
--模糊查询like、%、_
语法:
SELECT 要查询的内容 3
from 数据来源 1
where 列 like'匹配内容' 2
通配符:
% 0个或多个字符
_ 任意单个字符
--查询emp中名字以A开头的
SELECT * FROM EMP WHERE ENAME LIKE'A%';
--查询emp中名字中以A结尾的
SELECT * FROM EMP WHERE ENAME LIKE'%A';
--查询emp名字包含A
SELECT * FROM EMP WHERE ENAME LIKE'%A%';
--查询名字第二个字母是L的员工信息
--查询名字的长度是4的员工信息
--查询名字以J开头长度为5的员工信息
--查询名字以J开头S结尾的员工信息
--查询名字既不包含s也不包含A的员工信息
SELECT * FROM EMP WHERE ENAME LIKE'_L%';
SELECT * FROM EMP WHERE ENAME LIKE'____';
SELECT * FROM EMP WHERE ENAME LIKE'J____';
SELECT * FROM EMP WHERE ENAME LIKE'J%S';
SELECT * FROM EMP WHERE ENAME NOT LIKE'%S%' AND ENAME NOT LIKE'%A%';
--优先级(*/的优先级高于+-,连接符的优先级和+-一样,
当优先级一样的时候,从做往右依次计算)
SELECT 2+3||4,2||3+11 FROM DUAL;
优先级排序:
1、() 2、乘除 3、+-|| 4、比较符 5、is Null、in、like
6、between and 7、not 8、and 9、or
注:可以使用括号改变优先级,不清楚优先级情况下+括号
--转义(对单引号的转义)
1、双写
SELECsql语言:(STRUCTURED QUERY LANGUAGE)
找东西:去哪找? 找啥?
数据 数据库 存在数据库中的内容(表中的内容)
用户:scott hr
scott用户下面的表
emp 员工信息表
dept 部门信息表
salgrade 工资登记表
SELECT * FROM EMP;
EMPNO 员工编号 ENAME 姓名 JOB 职位 MGR 经理编号 HIREDATE 入职日期
SAL 工资 COMM 提成 DEPTNO 部门编号
--简单查询
语法:SELECT 要查的属性。。。。
FROM 数据来源(从哪个表来查)
--查询emp中的员工编号
SELECT EMPNO FROM EMP;
--查询多个列 多个列之间用逗号隔开
SELECT EMPNO,ENAME,SAL FROM EMP;
注释:单行注释 --注释内容
多行注释 /* 注释内容 */
注释内容
/*--SDKFSFNSFSDFSDFS/ DFSDFSDFSDF
SHFGSDJFGHSFGSD
DFGKSFJKSDF
*/
--表示所有的列
SELECT * FROM EMP;
--数据类型
数值型:number 直接写
字符类型 : char/varchar2 '字符内容'
日期型: date date'年-月-日'
SELECT 123,234,'中国河南郑州',DATE'2022-7-18'
FROM DUAL; --万能表
--别名
表别名 语法: 表 表别名
列别名 语法: 列 列别名
列 as "列别名"
列别名的标准写法: 列 as "列别名" --用的比较少
SELECT EMPNO 员工编号,ENAME 姓名,SAL as "工资" FROM EMP;
--查询emp的每个列 每个列起一个别名
SELECT EMPNO 员工编号,ENAME 姓名,SAL 工资,JOB AS "职位", MGR AS "经理",HIREDATE AS "入职日期"
FROM EMP;
SELECT ENAME AAAA,ENAME ABC123,ENAME AS "123ABC",ENAME AS "@#$",ENAME AS "AbC" FROM EMP;
别名的注意事项:
as 只能使用在列别名上 表别名不能使用
别名以数字开头 包含特殊符号 区分大小写时 需要使用标准语法
别名的构成可以使用汉字 英文字母 英文字母+汉字
--查询emp中的姓名 经理 提成 显示列的中文含义
SELECT ENAME 姓名,MGR 经理,COMM 提成 FROM EMP;
--查询dept表的所有的内容
SELECT * FROM DEPT;
--查询dept表的内容 并给每个列加上对应的中文含义
SELECT DEPTNO 部门编号,DNAME 部门名称,LOC 部门所在地 FROM DEPT;
--查询工资登记表的所有内容
SELECT * FROM SALGRADE;
--查询工资登登记表的列及对应的中文含义
SELECT GRADE 等级,LOSAL 最低工资,HISAL 最高工资 FROM SALGRADE;
SELECT * FROM EMP WHERE DEPTNO=10;
SELECT * FROM EMP WHERE SAL>3000;
与 && AND
或 || OR
非 ! NOT 取反值
AND:当前后都为true的时候执行
当前面的条件为true,判断后面的表达式
当前面的条件为false,则跳过
OR:前后要有一个为 true
当第一为false 就判断后面的条件
当第一为true 后面的则不要判断
SELECT * FROM EMP WHERE DEPTNO=20 AND SAL>2000;
SELECT * FROM EMP WHERE DEPTNO=20 OR SAL>2000;
SELECT * FROM EMPWHERE NOT(SAL>2000)
SELECT *FROM EMPWHERE SAL BETWEEN 2450 AND 3000;
4,in(值1,值2,值3......)
等价于 =值1 or =值2 or =值3...
SELECT * FROM EMP WHERE EMPNO=7788 OR EMPNO=7369 OR EMPNO=7654;
SELECT * FROM EMP WHERE EMPNO IN(7788,7369,7654);
SELECT * FROM EMP
WHERE NOT (JOB IN('MANAGER','ANALYST','SALESMAN'));
WHERE JOB NOT IN('MANAGER','ANALYST','SALESMAN');
SELECT * FROM EMP;
SELECT JOB FROM EMP;
5,算术运算符+-*/
--查询工资+500后大于2000的员工
SELECT * FROM EMP WHERE SAL+500>2000; SAL>2000-500;--推荐使用
6、空 is null/is not null
--查询没有经理的员工信息
SELECT * FROM EMP WHERE MGR IS NULL;
--查询没有提成的员工信息
SELECT * FROM EMP WHERE COMM IS NULL;
7,连接符||(--把多个字段连接成一个字段,新生成的字段是字符类型)
SELECT EMPNO,ENAME,SAL,EMPNO||'~'||ENAME||'~'||SAL FROM EMP;
--查询20部门 工作是职员的员工信息
--查询10部门提成为空的员工信息
SELECT * FROM EMP WHERE DEPTNO||JOB='20CLERK';
SELECT E.*,DEPTNO||JOB FROM EMP E WHERE DEPTNO||JOB='20CLERK';
SELECT * FROM EMP WHERE DEPTNO||COMM=10;======>deptno||comm'10'
--隐式转换(纯数字字符可以看成数字来使用,数字也可以看成字符串使用)
--案例:
SELECT 123+456,123+'456','123'+'456','123+456' FROM DUAL;
SELECT * FROM EMP WHERE DEPTNO=10 AND COMM IS NULL;
--模糊查询like、%、_
语法:
SELECT 要查询的内容 3
from 数据来源 1
where 列 like'匹配内容' 2
通配符:
% 0个或多个字符
_ 任意单个字符
--查询emp中名字以A开头的
SELECT * FROM EMP WHERE ENAME LIKE'A%';
--查询emp中名字中以A结尾的
SELECT * FROM EMP WHERE ENAME LIKE'%A';
--查询emp名字包含A
SELECT * FROM EMP WHERE ENAME LIKE'%A%';
--查询名字第二个字母是L的员工信息
--查询名字的长度是4的员工信息
--查询名字以J开头长度为5的员工信息
--查询名字以J开头S结尾的员工信息
--查询名字既不包含s也不包含A的员工信息
SELECT * FROM EMP WHERE ENAME LIKE'_L%';
SELECT * FROM EMP WHERE ENAME LIKE'____';
SELECT * FROM EMP WHERE ENAME LIKE'J____';
SELECT * FROM EMP WHERE ENAME LIKE'J%S';
SELECT * FROM EMP WHERE ENAME NOT LIKE'%S%' AND ENAME NOT LIKE'%A%';
--优先级(*/的优先级高于+-,连接符的优先级和+-一样,
当优先级一样的时候,从做往右依次计算)
SELECT 2+3||4,2||3+11 FROM DUAL;
优先级排序:
1、() 2、乘除 3、+-|| 4、比较符 5、is Null、in、like
6、between and 7、not 8、and 9、or
注:可以使用括号改变优先级,不清楚优先级情况下+括号
--转义(对单引号的转义)
1、双写
SELECT '''',' '' '' ',' " ' FROM DUAL;
2、q'{转义的内容}'
SELECT Q'{'}',Q'{"}' FROM DUAL;
--显示 A said:"B said 'let's go!'"
SELECT 'A said:"B said ''let''s go!''"' FROM DUAL;
SELECT Q'{A said:"B said 'let's go!'"}' FROM DUAL;
--转义(模糊查询的转义,对%和_的转义)
语法:列LIKE'匹配内容' escape'转义符'
注:一个转义符只能转义一个字符
SELECT * FROM A
--查询name中包含_的行
SELECT * FROM A WHERE NAME LIKE'%/_%'ESCAPE'/'; --转义符号习惯用/或\
--查询名字中包含%
SELECT * FROM A WHERE NAME LIKE'%/%%'ESCAPE'/';
--查询名字中倒数第二个是%的
SELECT * FROM A WHERE NAME LIKE'%/%_'ESCAPE'/';
--查询name以_开头,且长度为5 的
SELECT * FROM A WHERE NAME LIKE'/_____'ESCAPE'/';
--查询名字中以_%开头的行
SELECT * FROM A WHERE NAME LIKE'/_/%%'ESCAPE'/';
T '''',' '' '' ',' " ' FROM DUAL;
2、q'{转义的内容}'
SELECT Q'{'}',Q'{"}' FROM DUAL;
--显示 A said:"B said 'let's go!'"
SELECT 'A said:"B said ''let''s go!''"' FROM DUAL;
SELECT Q'{A said:"B said 'let's go!'"}' FROM DUAL;
--转义(模糊查询的转义,对%和_的转义)
语法:列LIKE'匹配内容' escape'转义符'
注:一个转义符只能转义一个字符
SELECT * FROM A
--查询name中包含_的行
SELECT * FROM A WHERE NAME LIKE'%/_%'ESCAPE'/'; --转义符号习惯用/或\
--查询名字中包含%
SELECT * FROM A WHERE NAME LIKE'%/%%'ESCAPE'/';
--查询名字中倒数第二个是%的
SELECT * FROM A WHERE NAME LIKE'%/%_'ESCAPE'/';
--查询name以_开头,且长度为5 的
SELECT * FROM A WHERE NAME LIKE'/_____'ESCAPE'/';
--查询名字中以_%开头的行
SELECT * FROM A WHERE NAME LIKE'/_/%%'ESCAPE'/';