Sql语句 | 含义 | 备注 | ||
DESC EMP; | 查询表结构 | EMP为表名 | ||
SELECT table_name FROM user_tables; | 查看当前用户下的所有表的名字 | |||
select*from emp; | 查询emp表中的所有记录 | |||
DELETE FROM 表名称 WHERE 列名称 = 值 | DELETE 语句用于删除表中的行。 | DELETE FROM Person WHERE LastName = 'Wilson' | ||
DELETE FROM table_name where id=1 | 删除id为1 的记录 | |||
DELETE FROM table_name | 所有表记录删除 | |||
drop table subject; | 删除表subject | |||
select Ename,job from emp; | 查询ename和job这两个字段的值(列) | |||
SELECT DISTINCT 列名称 FROM 表名称 | 去除查询出来的重复值 | DISTINCT只能在select后边,去重的时候,要在一整行记录都重复的情况下才会去重,否则打破数据对应关系 | ||
select id*2 as id2 from emp | 查询id*2的值显示为id2 | as也可以用空格代替,给表取别名的时候只能用空格 eg:--查询编号 姓名 年薪 月薪 日薪 select EMPNO AS 编号, ENAME AS 姓名,SAL*12 AS 年薪,SAL as 月薪,SAL/30 AS 日薪 from EMP; | ||
|| | 拼接字符串 | select '编号:'|| empno ||'姓名:'|| ename ||'月薪'||sal 描述 from emp ; | ||
ORDER BY | 用于对结果集进行排序。 | select * from emp order by id DESC 按照ID降序排序 ASC是升序(默认) DESC是降序, 当定义两个字段排序时,会优先拍好第一个字段,然后第一个字段相同时,才会把第二个字段按照第二个条件来排序 | ||
is noll、is not null | 判断null | |||
= null | 判断值是否为null | |||
a>200 and c <300 或者 between 200 and 300 | 范围查询【闭区间】 | |||
IN(10,20,30) | 取10,20或者30 | |||
NOT IN(10,20) | 不取10或20 | |||
like | 模糊查询 % 表示任意个任意字符 _ (下划线)表示一个任意字符 | select * from emp where job like '%S%'; 包含S的 select * from emp where job like '_S%'; 第二个字符为S的 select * from emp where job like 'S%'; 以S开头的 select * from emp where job like '%S'; 以S结尾的 | ||
SELECT table_name FROM user_tables; | 查看当前用户下的所有表的名字 | |||
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 | Update 语句用于修改表中的数据。 | update emp SET sal=400 where empno=7369; | ||
NVL(列,数值) NVL(列,'文本') ------------------------
| 如果这个之值为空,则替换为数值 如果这个之值为空,则替换为文本 -------------------------------------------
| select sal+nvl(comm,0) as 工资 from emp; --------------------------------------------------------------------------------------- | ||
多表关联查询 (原则:外键=主键)[查出所有的满足条件的字段] 先做笛卡尔积,再笛卡尔积的结果中进行删选 | ||||
单行函数 | ||||
字符函数 | upper(str) | 把str变为大写 | ||
lower(str) | 把str变为小写 | |||
initcap(str) | 把str首字母变大写 | |||
replace(str,f,s) | 把f换为s | |||
length(str) | 长度 | |||
substr(str,index1,index2) | 截取 左闭右开区间 | |||
substr(str,3) | 截取3到结尾 | |||
substr(str,-3) | 截取后三位 | |||
ASCII('a') | 获取字符ASCII码 | |||
CHAR(100) | 把ASCII码转化为字符 | |||
Ltrim(str) | 去除str左边空白 | |||
trim(str) | 去除str两边空白字符 | |||
Rtrim(str) | 去除str右边空白 | |||
LPAD | 填充 select LPAD('cc',10,'*') 用*代替cc左边不足10位的字符 | |||
RPAD | 填充 select RPAD('cc',10,'*') 用*代替cc右边边不足10位的字符 | |||
instr(‘hello’,‘ll’) | 返回ll在hello中的索引 | |||
concat 和 || | 拼接 | |||
数值型函数 | round(1.234) | 四舍五入保留整数 | ||
round(1.234,2) | 四舍五入保留2位小数 | |||
trunc(1.23) | 直接舍弃小数 | |||
trunc(1.23,2) | 保留两位小数截取 | |||
MOD(10,3) | 10/3的余数(取模运算) | |||
Ceil(45.67) | 向上取整 | |||
Floor(45.56) | 向下取整 | |||
日期函数 | systimestamp | 获取当前时间 | ||
add_months(sysdate,3) | 在sysdate日期之后3个月的日期 | |||
add_months(sysdate,-3) | 在sysdate日期之前3个月的日期 | |||
next_day(sysdate,'Sunday') | 下一个星期天的日期 | |||
last_day(sysdate) | 返回本月最后一天 | |||
Months_between(sysdate,hiredate) | 返回两个日期的月差 | |||
extract(year from sysdate) | 从sysdate中获取年份 | |||
extract(month from sysdate) | 从sysdate中获取月份 | |||
extract(day from sysdate) | 从sysdate中获取天 | |||
extract(hour from systimestamp) | 从sysdate中获取时 | |||
extract(minute from systimestamp) | 从sysdate中获取分 | |||
extract(second from systimestamp) | 从sysdate中获取秒 | |||
SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual; | 查询当前系统时间,要求显示年月日时分秒 | |||
SELECT to_date('1997-01-01','yyyy-mm-dd') FROM dual; | 将字符串转为日期 | |||
to_timestamp(‘2018-12-12 12:3:4’,‘yyyy-mm-dd hh24:mi:ss’) | 格式化时间格式(字符串转日期) | |||
SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual; | 查询当前系统时间,要求显示年月日时分秒 | |||
SELECT to_date('1997-01-01','yyyy-mm-dd') FROM dual; | '1997-01-01':是一个字符串,能否转换成时间? | |||
转换函数 | SELECT to_char(123456.789,'99999999.9999') FROM dual; SELECT to_char(123456.789,'00000000.0000') FROM dual; SELECT to_char(123456.789,'99,999,999.9999') FROM dual; SELECT to_char(123456.789,'$99,999,999.9999') FROM dual; SELECT to_char(123456.789,'L99,999,999.9999') FROM dual; | 转化为相应的格式,9会在位数不够填充0,0会 | ||
to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) | 将日期格式转化为字符串 | |||
to_char(1234567,'999,999,999,999') | 将格式转化为货币格式,如果为9则不会补0,0则会 | |||
to_number('8') | 将字符8转换为数字 | |||
通用函数 | NVL2(comm,comm,0) | 如果comm不为null,则取第二个,如果为null,取第三个 | ||
NVL(comm,0) | 将comm为null的值替换为0 | |||
NULLIF(1,1) | 判断两个值是否相等,相等返回null,不相等返回表达式1 | |||
decode(表达式1,参数值1,结果1,参数2,结果2); | 当表达式1的值与参数值相等的时候,返回参数后对应的结果 | |||
coalesce(表达式1,表达式2,表达式3) | 如果表达式1为null,则取表达式2,如果表达式2也是null,则取表达式3,……,如果都为null,则最终结果null | |||
分组函数
| ||||
count(*) | 求出全部记录数目(统计某个字段的数目,把*换为字段名) | |||
sum(字段) | 把摸个字段的所有值相加 | |||
avg(字段) | 平均值 | |||
MAX(字段) | 最大值 | |||
Min(字段) | 最小值 | |||
where是在分组前对行进行筛选,后边不能跟分组函数 |
集合函数(聚合函数) | ||
UNION:并集, | 包含两个结果集全部的结果,重复的只保留一份, 会按照结果集第一列排序升序排序 | SELECT first_name,id FROM s_emp WHERE id<15 UNION SELECT first_name,id FROM s_emp WHERE id>5; |
UNION ALL | 把两个结果集的结果加起来,不会排序,不会去重 | SELECT first_name,id FROM s_emp WHERE id<15 UNION ALL SELECT first_name,id FROM s_emp WHERE id>5 |
INTERSECT:交集 | 取两个结果集中都有的结果,会排序,去重 | SELECT first_name,id FROM s_emp WHERE id<15 INTERSECT SELECT first_name,id FROM s_emp WHERE id>5; |
MINUS: | 减,第一个结果集减去(第一个和第二个同时都有的),会去重,排序 | SELECT first_name,id FROM s_emp WHERE id<15 MINUS SELECT first_name,id FROM s_emp WHERE id>5; |
rownum | 列号,代表结果集中的行号 是一个伪列 可以用来实现分页 注意:结果集中的行号永远从1开始 rownum条件只要不是从1开始,就是没有结果的 |
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
表结构操作 | 表记录操作 | |||||||||||||||
————------------— ——————— 表结构———————————————— desc student;//查询student表的结构 修改表的名字:RENAME student TO newstudent; 新增列:ALTER TABLE student ADD (phone varchar2(20)); 删除列:ALTER TABLE student DROP(phone); 修改列:ALTER TABLE student MODIFY(age number(4)DEFAULT 0); DEFAULT 用于设置默认值 ★添加约束: ALTER table student ADD constraint user_email_uk UNIQUE(email); ★删除约束: alter table 约束基于的表名 drop constraint 约束名 ★更改表名: ALTER TABLE 表名 MODIFY(字段名 更改的内容) 【字段名和要改的内容,不改的字段不用写】 EG:alter table student MODIFY(name varchar2(20) not null); | -----------------------表记录———————————————————————————————————————————————————————— 修改表数据:update student set sex='女' where id=2; 删除某条记录:delete from student where id=2; 清空记录:delete from student; 新增记录:insert into student(id,NAME,age,sex) VALUES(2,'文丑',34,'男'); |