SQL Foundation(18-23)
5562 ワード
1:サブクエリ
単一の行の検索用=
複数行のサブクエリ用in(サブクエリの結果に相当するセット)
サブクエリでは、サブクエリがnullである場合、返ってきた結果は、no rows selectが選択されていない行になります。
ex:
最初のクエリが選択された行である理由は、サブクエリで得られた結果がnullであるため、
に相当する プロジェクト ラスター.name,department_id from employees where department_id=null
だから、空のために、次のsqlの実行はこの道理を検証しました。
1:any
< any セットの最大値より小さい
> any セットの最小値より大きい
= any に相当する in
2:all
< all. セットの最小値より小さい
> all. セットの最大値より大きい
ex:
1:union操作子は、2つの結果の異なる行を返します。 並べ替え(標準は第一列のASC順)
2:union操作子は、2つの結果のすべての行(同じ行を含む)に戻ります。結果は並べ替えられません。
3:インターレース オペレータは、結果の同じ行を返します。共通点 結果のソート (デフォルトは第一列のASC順)
4:minuxオペレータは、第一のクエリにのみ表示され、第二のクエリには存在しないデータを返します。
ex:
列の数は同じです。同じ列のデータの種類があります。
関数と結果列数を一致させることができます。
ノート:
複合クエリでは、order byは一回だけ現れ、最後にしか現れません。oder byは1行目の列しか認識していません。2行目の列は分かりません。
ex:
第一列の行は、第二列の行が分かりません。 locationでいいです
4:データを操作する
テーブルをコピー:
create table copy_departments as select*from departments;
一括挿入(values不要に注意)
ex:
truncateはDDL言語です。 rollbackはロールバックできません。これをコピーしてみます。
deleteはDML言語です ロックバックはロールバックできます。 直接に本当に削除します。
deleteは本当にundoテーブル空間に削除されていません。
クエリーができます。
5:データベースの事務
通常はこのように開けません。
データは提出またはロールバック前の状態です。
データの整合性を維持するために:
データを挿入または削除する場合、複数のユーザが同時に操作します。
複数のセッションに相当します。データが提出されていない場合、
現在のユーザ操作のデータは他のユーザーには見えません。
現在のユーザがデータを提出した場合、他のユーザは修正データを見ることができます。
oracleには前の文の中に一つの暗黙的なsavepointがあります。もし失敗したらひっくり返します。
複数のステートメントの実行に失敗した場合は、このステートメントだけです。
ロールバックします。他のステートメントは正常に実行されます。
読む時は書くのを待つ必要はありません。
書くのも待つ必要はありません。
二つとも書いたら、最初の書くときはロックをかけて、提出してから、他のものが書けます。
FOR UPSDATEは探したデータをずっとロックします。当
comitやrollbackを実行した時にロックを開けます。
oracleがなぜロールバックして提出したのかについて、データを修正する時、先に修正する必要があるテーブルのバックアップを以下にして、そのまま既存の表で操作します。もしロールバックしたら、古い表を新しい表に差し替えます。commtなら、バックアップの表は削除できます。先ほど修正したデータが有効になりました。
単一の行の検索用=
複数行のサブクエリ用in(サブクエリの結果に相当するセット)
サブクエリでは、サブクエリがnullである場合、返ってきた結果は、no rows selectが選択されていない行になります。
ex:
最初のクエリが選択された行である理由は、サブクエリで得られた結果がnullであるため、
に相当する プロジェクト ラスター.name,department_id from employees where department_id=null
だから、空のために、次のsqlの実行はこの道理を検証しました。
SQL> select last_name,department_id from employees
2 where department_id = (select department_id from employees where last_name
='Haas');
SQL> select department_id from employees where last_name='Haas';
SQL> select last_name,department_id from employees where department_id = null;
SQL> select last_name,department_id from employees where department_id is null;
LAST_NAME DEPARTMENT_ID
------------------------- -------------
Grant
2:anyとallの使い方1:any
< any セットの最大値より小さい
> any セットの最小値より大きい
= any に相当する in
2:all
< all. セットの最小値より小さい
> all. セットの最大値より大きい
ex:
SQL> select employee_id ,last_name ,job_id,salary from employees where salary <
any (select salary from employees where job_id ='IT_PROG');
SQL> select job_id , salary from employees where job_id ='IT_PROG';
JOB_ID SALARY
---------- ----------
IT_PROG 9000
IT_PROG 6000
IT_PROG 4800
IT_PROG 4800
IT_PROG 4200
だから最初のsqlは SQL> select employee_id ,last_name,job_id ,salary from employees where salary
<9000;
select emp.last_name from employees emp
where emp.employee_id not in (select mgr.manager_id from employees mgr)
not in != all 。
select emp.last_name from employees emp
where emp.employee_id in (select mgr.manager_id from employees mgr)
in = any
3:unionとunion all、 インターレース1:union操作子は、2つの結果の異なる行を返します。 並べ替え(標準は第一列のASC順)
2:union操作子は、2つの結果のすべての行(同じ行を含む)に戻ります。結果は並べ替えられません。
3:インターレース オペレータは、結果の同じ行を返します。共通点 結果のソート (デフォルトは第一列のASC順)
4:minuxオペレータは、第一のクエリにのみ表示され、第二のクエリには存在しないデータを返します。
ex:
列の数は同じです。同じ列のデータの種類があります。
関数と結果列数を一致させることができます。
SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse" FROM departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name
FROM warehouses;
LOCATION_ID Department Warehouse
----------- --------------------- --------------------------
1400 IT
1400 Southlake, Texas
1500 Shipping
1500 San Francisco
1600 New Jersey
1700 Accounting
1700 Administration
1700 Benefits
1700 Construction
...
union all以外は自動的に並べ替えられ、1列目のデータの昇順で並べ替えられます。ノート:
複合クエリでは、order byは一回だけ現れ、最後にしか現れません。oder byは1行目の列しか認識していません。2行目の列は分かりません。
ex:
SQL> select location_id ,department_name "DEP" , to_char(null) location
2 from departments union
3 select location_id, to_char(null) "DEP", state_province "Location"
4 from location order by state_province ;
from location order by state_province
*
4 :
ORA-00904: "STATE_PROVINCE":
以上のような書き方は間違いです。order byです。 知っているだけです第一列の行は、第二列の行が分かりません。 locationでいいです
4:データを操作する
テーブルをコピー:
create table copy_departments as select*from departments;
一括挿入(values不要に注意)
ex:
insert into sales_reps(id,name,salary,commission_pct)
select employee_id,last_name,salary,commission_pct
from employees where job_id like '%REP%';
truncateとdeleteの違い:truncateはDDL言語です。 rollbackはロールバックできません。これをコピーしてみます。
deleteはDML言語です ロックバックはロールバックできます。 直接に本当に削除します。
deleteは本当にundoテーブル空間に削除されていません。
クエリーができます。
5:データベースの事務
:
1:commit , rollback ,
2 :A DDL DCL , , DDL DCL , 。
3: SQLPLUS exit quit , sqlplus , , , 。
4: 。
事務のロールバックと保存点について:SQL> delete from copy_departments where department_id=270;
0 。
SQL> savepoint a;
。
SQL> insert into copy_departments values(280,'BBBBBB',NULL,NULL);
1 。
SQL>
SQL> savepoint b;
。
SQL>
SQL> update copy_departments set department_name ='BBCCDD' where department_i
d =280;
2 。
SQL>
SQL> rollback to b;
。
SQL> commit;
。
SQL> select * from copy_departments;
暗黙的に提出したいなら、直接提出してください。set atonが必要です。通常はこのように開けません。
データは提出またはロールバック前の状態です。
データの整合性を維持するために:
データを挿入または削除する場合、複数のユーザが同時に操作します。
複数のセッションに相当します。データが提出されていない場合、
現在のユーザ操作のデータは他のユーザーには見えません。
現在のユーザがデータを提出した場合、他のユーザは修正データを見ることができます。
oracleには前の文の中に一つの暗黙的なsavepointがあります。もし失敗したらひっくり返します。
複数のステートメントの実行に失敗した場合は、このステートメントだけです。
ロールバックします。他のステートメントは正常に実行されます。
読む時は書くのを待つ必要はありません。
書くのも待つ必要はありません。
二つとも書いたら、最初の書くときはロックをかけて、提出してから、他のものが書けます。
FOR UPSDATEは探したデータをずっとロックします。当
comitやrollbackを実行した時にロックを開けます。
oracleがなぜロールバックして提出したのかについて、データを修正する時、先に修正する必要があるテーブルのバックアップを以下にして、そのまま既存の表で操作します。もしロールバックしたら、古い表を新しい表に差し替えます。commtなら、バックアップの表は削除できます。先ほど修正したデータが有効になりました。