关于SQL语法学习,这里有一份图文并茂的教程,点击此处
笔者简化了文字内容, 通过注释的方式,解释SQL语句的含义
本文的重点在于Oralce中写法,当然了,大部分写法都是通用的,查询手册,没有配图,各位看官见谅
创建临时表,用于测试,练习基本语句的写法,没有什么特殊的写法,下文用到的语句都是基本用法
平时用的比较的写法:
regexp_like 正则表达式过滤数据
between 不包含边界数据--Test Table
CREATE TABLE person
(
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
-----------------------------------------------------
--基础写法
-----------------------------------------------------
--基本查询
select * from person;
--别名查询
select a.firstname, a.lastname from person a;
--组合查询
select a.address, a.* from person a;
--重命名列名
select a.lastname as name from person a;
--查询唯一值
select distinct a.lastname from person a;
--插入数据
insert into person (id, lastname) values (1, 'Tom');
--改写数据
update person a set a.firstname = 'Jack' where a.lastname = 'Tom';
--删除数据
delete person a where a.firstname = 'Jack1';
-----------------------------------------------------
--高级查询
-----------------------------------------------------
--利用虚列的概念,过滤一定数量的数据
select * from person a where Rownum <=1;
--模糊查询,% 匹配任意字符串
select * from person a where a.lastname like '%T%';
--模糊查询,_ 匹配任意单个字符
select * from person a where a.lastname like 'T_m';
--查询 lastname 字母 T 开头,引号中编写正则表达式
select * from person a where regexp_like(upper(a.lastname), '^[T]');
--查询某个集合中的数据
select * from person a where a.lastname in ('Jack', 'Tom')
--查询某个范围之间的数据,Oracle 中,不包含边界数据,使用 not,能查询出我们唯一的测试数据
select * from person a where a.lastname not between 'Tom' and 'Jack';
--关联表进行查询
select a.*, b.orderno from person a, orders b where b.personid = a.id;
--使用 join 改写上述语句
select a.*, b.orderno from person a join orders b on b.personid = a.id;
--添加修饰符,按语义建立表的优先级,优先级高的返回全部数据
-- join 至少匹配一行
-- left join 返回左表全部数据
-- right join 返回右表全部数据
-- full join 左右表的全部数据
-- union 连接结果集,过滤重复数据
-- union all 连接结果集,不过滤重复数据