
SQL
Hello SQL
卜塔
但行好事,莫问前程
展开
-
【SQL】SQL语句执行顺序
用一个例子说明SQL语句在逻辑执行计划时候的执行顺序,实际物理计划可能由于不同数据库优化策略的不同而略有差异。今天写一个相当基础的知识点,主要是之前对这块比较模糊,也没有细究,这次一并记录一下。原创 2024-04-25 21:05:24 · 668 阅读 · 2 评论 -
【SQL】利用HAVING取众数和中位数
本篇文章介绍如何使用HAVING取数据集合的众数和中位数参考《SQL进阶教程》1. 创建测试表及测试数据CREATE TABLE graduates ( name varchar(255), income number(10) );INSERT INTO graduates VALUES ('桑普森', '400000');INSERT INTO graduates VA...原创 2020-03-29 10:25:19 · 7266 阅读 · 5 评论 -
【SQL】BETWEEN
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。注意:在Oracle中,BETWEEN ... AND 包含边界。语法:select column_name(s) from table_namewhere column_nam原创 2017-02-28 22:51:43 · 690 阅读 · 0 评论 -
【SQL】分析函数功能-排序
1:排名,不考虑并列问题 row_number()2:排名,有并列,并列后的排名不连续 rank()3:排名,有并列,并列后的排名连续 dense_rank()测试:SQL> create table test1 2 (id number, 3 name varchar2(10), 4 salary number);Table created -原创 2016-12-16 17:22:23 · 1066 阅读 · 0 评论 -
【SQL】去除表中的重复行
去除emp表中相同的行:SCOTT@LGR> delete from emp a where rowid =(select max(rowid) from emp b where a.empno=b.empno);原创 2016-12-15 20:09:22 · 836 阅读 · 0 评论 -
【SQL】SELECT 语句
1.1 SELECT基本语法:Select * |{[distinct]colum|expression [alias],…} from table;1.2 查询当前用户所有在用的表及视图:HR@ORA11GR2>select * from tab;TNAME TABTYPE CLUSTERID------------------------原创 2016-12-10 01:50:34 · 713 阅读 · 0 评论 -
【SQL】CONNECT BY 层次化查询
层次化查询,顾名思义就是把查询结果有层次的呈现出来。层次化查询结果类似于树状结构,最顶端的是“根节点”,下面是“父节点”,没有子节点的是“叶节点”。一个公司的组织结构图就是很好的例子。为了让一个或多个表具有层次关系,必须使用相关的字段将表关联起来。比如HR用户下的employees表中的employee_id和manager_id列。基本语法为:[START WITH conditio原创 2017-03-30 21:22:12 · 2138 阅读 · 0 评论 -
【SQL】update中使用case when
1.创建测试表及数据CREATE TABLE graduates ( name varchar(255) , income int4(255) ); INSERT INTO graduates VALUES ('桑普森', '400000'); INSERT INTO graduates VALUES ('迈克', '30000'); INSERT INTO...原创 2018-05-25 16:46:37 · 60613 阅读 · 7 评论 -
【SQL】正则表达式-校验数字,字符,特殊需求等
一、校验数字的表达式1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正...原创 2018-05-31 10:41:40 · 20603 阅读 · 1 评论 -
【SQL练习题】排序
原表如下:建表脚本:CREATE TABLE districtproducts ( district varchar(255), name varchar(255), price int(255));INSERT INTO districtproducts VALUES ('东北', '橘子', 100);INSERT INTO districtproducts VALUES ...原创 2018-06-21 18:28:10 · 539 阅读 · 0 评论 -
【SQL练习题】1. 多列数据求最大值
一列多行,很容易得出最大值,但多列多行如何取最大值呢?从下表中取得每行的最大值:最终实现如下效果:建表语句:CREATE TABLE greatests ( key varchar(255), x int(5), y int(5), z int(5));INSERT INTO greatests VALUES ('A', 1, 2, 3);INSERT INTO great...原创 2018-06-15 18:32:55 · 5316 阅读 · 0 评论 -
【SQL练习题】case when实现按要求排序
表中key列,数据如下:如何实现如下输出效果:建表语句:CREATE TABLE order1 ( key varchar(255)); INSERT INTO order1 VALUES ('A'); INSERT INTO order1 VALUES ('B'); INSERT INTO order1 VALUES ('C'); INSERT INTO orde...原创 2018-06-19 15:48:29 · 1752 阅读 · 0 评论 -
【SQL】SQL的执行顺序
FROM <left_table>ON <join_condition><join_type> JOIN <right_table>WHERE <where_condition>GROUP BY <group_by_list>HAVING <having_condition>SELECTDISTIN原创 2018-11-06 10:12:33 · 256 阅读 · 0 评论 -
【SQL】字符型函数
1、 ASCIIASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。1) 返回与指定字符对应的ASCII码SQL> select ascii('A') A,ascii('a') "a",ascii('0') zero,ascii(' ') space from du原创 2017-03-01 12:09:27 · 961 阅读 · 0 评论 -
【SQL】数值型函数
1、 CEIL语法:CEIL(n)作用:取大于等于数值n的最小整数SQL> select ceil(9.1),ceil(9.9),ceil(9) from dual; CEIL(9.1) CEIL(9.9) CEIL(9)---------- ---------- ---------- 10 10 9原创 2017-03-03 19:22:44 · 2175 阅读 · 0 评论 -
【SQL】通过rowid查找及删除重复记录
新建T表如下:SQL> select * from t; X Y---------- -- 1 a 1 a 1 a 2 b 2 b 3 a 3 a1.查询表中重复的记录(在子查询中运用了自连接查出相同记录的max(rowid原创 2017-04-30 21:40:17 · 2408 阅读 · 0 评论 -
【SQL】联合语句
一、UNION操作符UNION 操作符用于合并两个结果集,在合并的同时去掉重复行,并按合并后结果的第一列升序排列。合并后结果集的列名由第一个结果集的列名确定。UINON连接的两个结果集必须具有相同的列数,并且各列具有相同的数据类型。注意这里说的是相同的数据类型,而不是相同的列名!示例:两个表的列名不同,但具有相同的数据类型,同样可以进行UNION合并,并进行去重、排序处理。(1)表原创 2017-04-28 11:13:32 · 468 阅读 · 0 评论 -
【SQL】IN、EXISTS和表连接三者的效率比较
一、 IN和EXISTS比较在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行查询。此时就会用到IN和EXISTS。例如:查询departments表中存在的部门的人数。1、 使用INSQL> set timing onSQL> select employees.department_id,count(*) 2 from employees 3原创 2017-04-27 14:00:55 · 11974 阅读 · 0 评论 -
【SQL】MERGE
MERGE可以合并多个表中的数据,也可实现多表中数据的同步。使用MERGE语句对表中数据进行有条件的更新和插入。当查找的行存在时,UPDATE更新行中的数据;当查找的行不存在时,INSERT插入数据。语法如下:MERGE INTO table_name table_aliasUSING (table|view|sub_query) aliasON (join condition)原创 2017-03-30 21:20:37 · 736 阅读 · 0 评论 -
【SQL】多表查询
多表查询,即查询可以从两个或多个表中获取数据。在Oracle中,有两种类型的连接格式:ANSI SQL连接格式和Oracle特有的连接格式。Oracle建议采用符合ANSI标准的连接格式。1、内连接(1)Oracle中特有的连接语法为:SELECT table1.column,table2.columnFROM table1,table2WHERE table1.column1原创 2017-03-22 20:42:31 · 602 阅读 · 0 评论 -
【SQL】DUAL
DUAL表是Oracle系统中对所有用户可用的一个实际存在的1行1列的表,这个表不能用来存储信息,在实际应用中仅用来执行SELECT语句。可以使用DUAL表来查询系统的信息。--dual是1行1列的表SQL> select * from dual; D-X--查询dual返回系统时间SQL> select sysdate from dual; SYSDATE原创 2017-03-22 20:39:59 · 2899 阅读 · 0 评论 -
【SQL】ROWNUM和ROWID
一、ROWNUMROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的。SQL> select rownum ,deptno,dname,loc from dept; ROWNUM DEPTNO DNAME LOC---------- ---------原创 2017-03-22 20:38:04 · 1198 阅读 · 0 评论 -
【SQL】含有NULL值的排序
查询结果中有NULL值,当进行升序排序时,NULL值默认为“最大值”,排在最后面。要想改变NULL值的显示顺序,只需要在SQL语句后面加上NULLS FIRST(排在前面),NULLS LAST(排在后面)。例如:1)升序排列,NUll值排在前面SQL> SELECT DISTINCT department_id FROM employees ORDER BY 1 NULLS FI原创 2017-03-14 18:44:45 · 7439 阅读 · 0 评论 -
【SQL】结构化查询语言
一:数据查询语言(DQL:Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。二:数据操作语言(DML:Data Manipu原创 2017-03-14 10:13:27 · 1101 阅读 · 0 评论 -
【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH: 作为年和月的时间间隔存储INTERVAL DAY TO SECOND: 作为天、小时、分和秒的时间间隔存储(DAY,HOUR,MINUTE,SECOND)1) 创建以上两种数据类型的表SQL> create table t1(id number(2),x interval year to month,y interval day to s原创 2017-03-08 17:13:12 · 3194 阅读 · 0 评论 -
【SQL】约束
1. 添加约束 1)使用ALTER TABLE语句•添加或删除约束,不会修改其结构•启用和禁用约束•通过使用MODIFY子句添加NOTNULL约束ALTER TABLE ADD [CONSTRAINT ]type (); 例如: alter table emp modify empno primary key; alter table empadd const原创 2017-03-08 15:25:53 · 483 阅读 · 0 评论 -
【SQL】视图
视图:基于 SQL 语句的结果集的可视化的表,包含行和列,就像一个真实的表,其中的字段就是来自一个或多个真实表中的字段。视图分类:简单视图、复杂视图特性简单视图复杂视图表的数目一个一个或多个包含函数无有包含数据分组无有通过视图进行DML操作原创 2017-03-08 12:38:51 · 537 阅读 · 0 评论 -
【Oracle】三种表连接方式
表连接的方式有三种分别是:排序合并连接(Sort Merge Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)。1、 排序合并连接(Sort Merge Join)排序合并连接的执行过程如下所示:* 将每个行源的行按连接谓词列排序* 然后合并两个已排序的行源,并返回生成的行源例如:select * from employee原创 2017-03-06 19:11:19 · 2501 阅读 · 0 评论 -
【SQL】日期型函数
1、 SYSTATE用来返回系统当前时间SQL> select sysdate from dual;SYSDATE-------------------2017-03-03 09:49:252、 ADD_MONTHS语法: ADD_MONTHS(date,integer)用于从一个日期值增加或减少一些月份1) 返回系统时间一个月后的日期SQL>原创 2017-03-03 19:25:16 · 666 阅读 · 0 评论 -
【SQL】CASE与DECODE
1. case..when case..when语句用于按照条件返回查询结果,如当我们想把emp表的工资按照多少分成几个不同的级别,并分别统计各个级别的员工数。SQL语句如下:select (case when sal '1' when sal > 1000 and sal '2' wh原创 2017-05-09 16:02:02 · 719 阅读 · 0 评论