SQL(DDL、DML)


1.Oracleデータ型
1.1 number
numberは、数字のタイプを表すnumber(p,s)の形式としてよく定義され、pは数字の総桁数sが小数点以下の桁数を表す
Eg:表empにおけるsal列の定義は以下の通りである:sal number (6,2)はsal列におけるデータを表し、整数ビットは最大4ビット、小数ビットの最大ビット数は2ビット、すなわち最大取値は99999.99である
1.2 char
固定長を表す文字はchar(n)形式で定義されることが多く,nは占有バイト数の最大長が2000バイトであることを示す
Eg:テーブルempにおけるename列の定義は以下の通りである:ename char(20)はename列に最大20バイトまで格納可能な文字列を示し、占有スペースは固定20バイトである
1.3 varchar2
長くなる文字タイプ定義フォーマットはvarchar 2(n)であり、nは最大使用可能なバイト数の最大長が4000バイトであることを示す
Eg:テーブルempのjob列の定義は次のとおりです.job varchar2(100)は、job列に格納可能な最大長さが100バイトの文字列を表し、格納されているデータの長さに応じて、占有空間が変化し、最大占有空間が100バイトであることを示します.
1.4 date
日付時間を定義するデータ長が7バイトのデフォルト形式は、DD-MON-RR:です.
Eg:11-ARP-71表empのhiredate列の定義は、hiredate列に格納されている日付データを示すhiredate date;です.
2.テーブルの作成
2.1 create文
構文:
  create table [schema.] table_name(column_name datatype[default expr][...]);  

上記作成テーブルの構文表示:1)「create table」は固定書き方である.2)「[]」で囲まれた部分は省略でき、[schema.]このテーブルが属するユーザーを表し、デフォルトは現在のoracleのユーザーです.3)table_nameはテーブル名を表し、実際の状況に応じてその名前を置き換える.4)column_nameはカラム名を表し、実際の状況に応じてその名前を置き換えます.5)datatypeは対応する列のデータ型を表す.6)[default expr]はこの列のデフォルト値を表し、省略することができる.7)[,...]は、複数の列の間に「,」のカンマで区切られ、最後の列にカンマは使用されません.
Eg:
//   emp  
        create table emp(  
            id number(4),
            name varchar2(20),
            gender  char(1),
            birth date,
            salary number(6,2),
            job varchar2(30),
            deptno number(2)
        );

2.2 desc文
表の構造の表示:desc表名;
2.3 default文
default句を使用してカラムにデフォルト値を指定し、genderカラムにデフォルト値'M'を割り当てることができます.性別を指定していない従業員の場合、デフォルトは男性です.
//  emp   ,    emp
    drop table emp{
    create table employee{
        id NUMBER(4),
        name varchar(20),
        gender char(1) default'M',
        birth date,
        salary number(6,2),
        job varchar2(30),
        deptno number(2)
    };

2.4 not null
非空(not null)は、フィールド値が空でないことを確認するための制約です.デフォルトでは、どのカラムでも空の値が許可されます.フィールドに空でない制約が設定されている場合、このフィールドに有効な値が存在する必要があります.データを挿入する操作を実行する場合は、この列のデータを提供する必要があります.更新操作を実行する場合、このカラムの値をnullに設定することはできません.
3.表の変更
3.1表名の変更
テーブルの作成後にテーブル名を変更する場合は、rename文を使用して構文を実装します.テーブル名old_が変更されます.nameはnew_name:
rename old_name to new_name;

Eg:
//    emp myemp
    rename emp to myemp;

3.2列の追加
テーブルに列を追加するにはalter tableのadd句を使用して構文を実装します.
    alter table table_name add(column datatype[default expr][column datatype...])

列は最後にのみ追加でき、既存の列に挿入できません.
    //      hiredate,           
    alter tables myemp add(hiredate date default sysdate);

3.3列の削除
alter tableのdrop句を使用して不要な列を削除する構文は、次のalter table table_name drop(column);セグメントは、各ローからフィールドが占有する長さとデータを削除し、データブロックに占有される空間を解放する必要があります.テーブルレコードが大きい場合、フィールドを削除するには長い時間がかかる場合があります.
//    myemp  hiredate
    alter table myemp drop(hiredate);

3.4列の変更
表を作成した後、表の列のデータ型、長さ、デフォルト値を変更できます.変更は、後で挿入したデータに対してのみ有効です.長さを大きく変更すると、構文が成功しない可能性があります.
alter table table_name modify(column datatype[default expr],column datatype...])

Eg:テーブルmyempの列jobを変更し、デフォルト値の設定を追加
alter table myemp
modify(job varchar2(40) default'clerk');

4.DML文
4.1 insert文
データテーブルにレコード構文を追加するには、次のようにします.
insert into table_name[(column[,column...])]values(value[,value...]);

DML操作を実行した後、commit文を実行してから、この操作を本当に確認する必要があります.
//      
    insert into myemp(id,name,job,salary)values(1001,'rose','programmer',5500);

挿入された列に日付フィールドがある場合は、日付のフォーマットのデフォルトの日付フォーマット「DD-MON-RR」を考慮し、日付フォーマットをカスタマイズできることに注意し、to_date関数を日付型に変換するデータ
    //              
    insert into myemp(id,name,job,birth)values(1002'martha','analyst','01-SEP-03');

注意:上記の文にエラーが発生した場合:無効な月.クライアントシステムが中国語環境にインストールされている可能性があるため、システムのデフォルトの日付フォーマットを表示するには:select sysdate from dualを使用します.その後、SQL文の一致を変更します.システムのデフォルトの日付フォーマットを変更するには、次のようにします.
レジストリにアクセスexe–HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0/NLS_LANGUAGEデフォルトインストールoracleならNLS_LANGUAGEの値はSIMPLAIIED CHINESE_CHINA.ZHS 16 GBK(中国語環境に属する)ダブルクリックでその値を修正:AMERICAN_AMERICA.ZHS 16 GBK(英語環境)は、データベースの問題解決を再開します.
Eg:
    //               
    insert into myemp(id,name,job,birth)values(1003,'donna','manager',to_date('2009-09-01','YYYY-MM-DD'));

4.2 update文
表のレコード構文を更新するには、次のようにします.
update table_name
set cloumn = value[,column = values]...
[where condition]; 

where句がない場合、テーブル全体のデータが更新されます.Egに注意してください.
//    ROSE   
    update myemp set salary = 9999;
    where name = 'rose';

4.3 delete文
削除テーブルのレコード構文は次のとおりです.
delete[from] table_name[where condition];

where句がない場合、テーブル全体のデータが削除されます.
//職階が空の従業員レコードdelete from myemp where job is nullを削除します.
DDL文のtruncate文も、テーブルデータを削除する役割を果たします.delete文との違い:1)deleteは条件付きで削除できます.truncateはテーブルデータをすべて削除します.2)deleteはDML文です.ロールバックできます.truncateはDDL文です.すぐに有効になります.ロールバックできません.3)すべてのテーブルレコードを削除し、データ量が大きい場合は、delete文の効率はtruncate文より低いです.
    //      
    delete from myemp;
    //  
    truncate table myemp;