1.シーケンス
シーケンスとは:連続する整数の文字列
デフォルトでは、Oracleには主キーの自動インクリメントはありません。この問題を解決するには、シーケンスを使用してください。
シーケンスの役割:Oracleでは、主に主キーの自己成長機能として使用されます。
シーケンスを作成するための構文:
シーケンスシーケンス名の作成
[開始//初期値の
増分//ステップ
minvalue | maxvalue | nomaxvalue //最小、最大、無制限のサイズ
サイクル| nocycle //
キャッシュを循環的に使用するかどうか| nocache] //キャッシュを使用するかどうか
-- 创建一个序列名为seq_one,起始值为1,步长为2,最大值9,循环使用,不指定缓存
create sequence seq_one
start with 1
increment by 2
maxvalue 9
cycle
nocache;
シーケンスの操作プロパティ:
次の2つの操作が順番に提供されます。
シーケンス属性 | 特徴 |
---|---|
nextval | シーケンスの次の値を取得します |
currval | シーケンスの現在の値を取得します |
-- 查询当前的序列号
select seq_one.nextval 是否正确?
必须加上from关键字
疑问:dual是什么?
虚拟表,用来让select的语法完整
-- mysql查询现在的时间
select now();
-- 在oracle中使用sysdate
-- 注:oracle中只要使用select语句,语法必须包含from
-- 在oracle中有一个虚拟表名:dual,为了让select 语法完整
select sysdate from dual;
-- 查询序列
select seq_one.nextval from dual;
select seq_one.currval from dual;
注:新しく作成されたテーブルの場合、seq_one.currvalを使用して現在のシーケンスを取得するとエラーが報告されます。これは、新しく作成されたテーブルには現在のシーケンスがなく、次のシーケンスを最初に取得する必要があるためです:seq_one.nextval、それ以外の場合はエラー報告されます。
2. Oracleページングクエリ:疑似列ROWNUM
疑似列ROWNUM:
ROWNUMは、Oracleデータベースがデータファイルからデータを読み取る順序です。最初のレコードを取得し、ROWNUM値は1、2番目は2というように続きます。>、> =、=、between ...とこれらの条件を使用すると、テーブルから取得された最初のレコードのROWNUMが1であり、ROWNUM> 5の条件が満たされないため、フィルタリングされます。次に、バーを削除します。そのROWNUMはまだ1であり、フィルター処理されているなど、データはありません。
解決策:サブクエリを使用してrownumを仮想テーブルの形式で保存してから、2番目のクエリを実行する必要があります。
コード:
-- 分页查询
-- 每页显示5条
select * from emp;
-- 伪列rownum
select rownum, e.* from emp e;
-- 查询第1页
select rownum, e.* from emp e where rownum > 0 and rownum<=5;
-- 查询第2页
select rownum, e.* from emp e where rownum > 5;
-- rownum是对结果集进行编号
-- 将rownum做成一张虚拟表,再次查询
select t.* from (select rownum rn, e.* from emp e) t where rn>0 and rn<=5;
select t.* from (select rownum rn, e.* from emp e) t where rn>5 and rn<=10;
select t.* from (select rownum rn, e.* from emp e) t where rn>10 and rn<=15;