專用版本目前還在完善中
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.IO;
namespace MYSQlite
{
class ComSQlite
{
#region 私有變量
private SQLiteConnection conn = null;
private SQLiteConnectionStringBuilder connstr = null;
private SQLiteCommand cmd = null;
private SQLiteDataReader reader = null;
//private SQLiteDataAdapter adapter = null;
private string datasource = null;
private int a = 0;
private int b = 0;
private int c = 0;
#endregion
#region 函數
public ComSQlite()
{
conn = new SQLiteConnection();
connstr = new SQLiteConnectionStringBuilder();
cmd = new SQLiteCommand();
}
//初始化數據庫信息
public void CreateConnect (string datafile,string password)
{
this.datasource = datafile;
connstr.DataSource = this.datasource;
connstr.Password = password;
conn.ConnectionString = connstr.ToString();
cmd.Connection = conn;
}
//創建數據庫,如果存在不操作
public void CreateSQL()
{
if(!File.Exists(datasource))
{
SQLiteConnection.CreateFile(datasource);
OpenSQL(null);
CreateSQList();
}
else
{
OpenSQL(null);
}
}
//修改數據
public void AlterUserData(string reference,string alter)
{
string sql = "UPDATE user SET password='"+alter+"'WHERE username='"+reference+"'";
Write(sql);
}
/// <summary>
/// 逐項修改數據
/// mixnumtable是數據庫table名稱
/// mixnumList是table下的列表名稱
/// mixnumCol是要修改的標誌
/// dataname是要修改的項
/// alter是dataname要修改成的數據
/// </summary>
/// <param name="mixnumtable"></param>
/// <param name="mixnumList"></param>
/// <param name="mixnumCol"></param>
/// <param name="dataname"></param>
/// <param name="alter"></param>
public void AlertMixnumData(string mixnumtable,string mixnumList,
string mixnumTheList,string dataname,string alter)
{
string sql = "UPDATE " + mixnumtable + " SET " + dataname + "='"
+ alter + "'WHERE " + mixnumList + "='" + mixnumTheList + "'";
Write(sql);
}
//打開數據庫
public void OpenSQL(string str)
{
conn.Open();
}
//創建列表
public void CreateSQList()
{
if(b==0)
{
string sql = "CREATE TABLE user(username varchar(20),password varchar(20))";
Write(sql);
b++;
return;
}
if (b==1)
{
string sql = "CREATE TABLE mixnum(code varchar(20),carmixnum varchar(20),leftone varchar(10),lefttwo varchar(10),leftthree varchar(10),leftfour varchar(10),rightone varchar(10),righttwo varchar(10),rightthree varchar(10),rightfour varchar(10))";
Write(sql);
b++;
return;
}
}
//刪除指定行
public void DeleteTheData(string str)
{
string sql = "DELETE FROM user WHERE username='"+str+"'";
Write(sql);
}
//插入信息
public void InsertData(string str)
{
string sql = string.Empty;
if (a==0)
{
sql = "INSERT INTO user VALUES('a','mypassworda')";
a++;
}
else if(a==1)
{
sql = "INSERT INTO user VALUES('b','mypasswordb')";
a++;
}
else if (a == 2)
{
sql = "INSERT INTO user VALUES('c','mypasswordc')";
a++;
}
else if (a == 3)
{
sql = "INSERT INTO user VALUES('d','mypasswordd')";
a++;
}
else if (a == 4)
{
sql = "INSERT INTO user VALUES('e','mypassworde')";
a++;
}
else if (a == 5)
{
sql = "INSERT INTO user VALUES('f','mypasswordf')";
a++;
}
else if (a == 6)
{
sql = "INSERT INTO user VALUES('g','mypasswordg')";
a=0;
}
Write(sql);
}
//插入另表信息
public void InsertData2()
{
string sql = string.Empty;
if (c == 0)
{
sql = "INSERT INTO mixnum VALUES('0','mixnum00','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 1)
{
sql = "INSERT INTO mixnum VALUES('1','mixnum01','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 2)
{
sql = "INSERT INTO mixnum VALUES('2','mixnum02','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 3)
{
sql = "INSERT INTO mixnum VALUES('3','mixnum03','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 4)
{
sql = "INSERT INTO mixnum VALUES('4','mixnum04','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 5)
{
sql = "INSERT INTO mixnum VALUES('5','mixnum05','1','2','3','4','1','2','3','4')";
c++;
}
else if (c == 6)
{
sql = "INSERT INTO mixnum VALUES('6','mixnum06','1','2','3','4','1','2','3','4')";
c = 0;
}
Write(sql);
}
//遍歷列表
public string ShowData()
{
string sql = "SELECT * FROM user";
cmd.CommandText = sql;
reader = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while(reader.Read())
{
sb.Append("username:").Append(reader.GetString(0)).Append("\n")
.Append("password:").Append(reader.GetString(1)).Append("\n");
}
reader.Close();
return sb.ToString();
}
//遍歷另一個列表
public string ShowData2()
{
string sql = "SELECT * FROM mixnum";
cmd.CommandText = sql;
reader = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (reader.Read())
{
sb.Append("code:").Append(reader.GetString(0)).Append("\n")
.Append("carmixnum:").Append(reader.GetString(1)).Append("\n")
.Append(reader.GetString(2)).Append(reader.GetString(6))
.Append(reader.GetString(3)).Append(reader.GetString(7))
.Append(reader.GetString(4)).Append(reader.GetString(8))
.Append(reader.GetString(5)).Append(reader.GetString(9)).Append("\n");
}
reader.Close();
return sb.ToString();
}
//獲取特定數據
public string GetData(string str)
{
string sql = "SELECT * FROM user WHERE username='" + str + "'";
cmd.CommandText = sql;
reader = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (reader.Read())
{
sb.Append("username:").Append(reader.GetString(0)).Append("\n")
.Append("password:").Append(reader.GetString(1)).Append("\n");
}
reader.Close();
return sb.ToString();
}
//向數據庫輸入信息
private int Write(string str)
{
cmd.CommandText = str;
return cmd.ExecuteNonQuery();
}
//清空數據庫列表信息
public void ClearData()
{
Write(" DELETE FROM user");
}
/// <summary>
/// 清空數據庫下tabel數據
/// </summary>
/// <param name="tabel"></param>
public void ClearAll(string tabel)
{
string sql = "DELETE FROM " + tabel;
Write(sql);
}
/// <summary>
/// 刪除一行
/// tabel數據庫標籤
/// mixnumList列表
/// mixnumTheList具體列表項
/// </summary>
/// <param name="tabel"></param>
/// <param name="mixnumList"></param>
/// <param name="mixnumTheList"></param>
public void DeleteData(string tabel,string mixnumList,string mixnumTheList)
{
string sql = "DELETE FROM "+tabel+" WHERE "+mixnumList+"='"+mixnumTheList+"'";
Write(sql);
}
#endregion
}
}
#region SQLite常用命令例
// 在終端下運行sqlite3 <*.db>,出現如下提示符:
// SQLite version 3.7.2
// Enter “.help” for instructions
// Enter SQL statements terminated with a “;”
// sqlite>
// <*.db> 是要打開的數據庫文件。若該文件不存在,則自動創建。
// 顯示所有命令
// sqlite> .help
// 退出sqlite3
// sqlite>.quit
// 顯示當前打開的數據庫文件
// sqlite>.database
// 顯示數據庫中所有表名
// sqlite>.tables
// 查看錶的結構
// sqlite>.schema <table_name>
// /*******************************************/
// 以下爲SQL命令,每個命令以;結束
// 創建新表
// >create table <table_name> (f1 type1, f2 type2,…);
// sqlite> create table student(no integer primary key, name text, score real);
// 刪除表
// sqlite>drop table <table_name>
// sqlite>drop table student
// 查詢表中所有記錄
// sqlite>select * from <table_name>;
// 按指定條件查詢表中記錄
// sqlite>select * from <table_name> where <expression>;
// sqlite> select * from student
// sqlite> select * from student where name=’zhao’
// sqlite> select * from student where name=’zhao’ and score >=95
// sqlite> select count(*) from student where score>90
// 向表中添加新記錄
// sqlite>insert into <table_name> values (value1, value2,…);
// sqlite> insert into student values(1, ‘zhao’, 92);
// 按指定條件刪除表中記錄
// sqlite>delete from <table_name> where <expression>
// sqlite> delete from student where score<60;
// 更新表中記錄
// sqlite>update <table_name> set <f1=value1>, <f2=value2>… where <expression>;
// sqlite> update student set score=0;
// sqlite> update student set name=’sun’ where no=3;
// 在表中添加字段
// sqlite>alter table <table> add column <field> <type>;
// sqlite> alter table student add column gender integer default 0;
// 在表中刪除字段
// Sqlite中不允許刪除字段,可以通過下面步驟達到同樣的效果
// sqlite> create table stu as select no, name, score from student
// sqlite> drop table student
// sqlite> alter table stu rename to student
// 命令
// .mode list|column|insert|line|tabs|tcl|csv 改變輸出格式,具體如下
//
//
// sqlite> .mode list
// sqlite> select * from emp;
// 7369|SMITH|CLERK|7902|17-12-1980|800||20
// 7499|ALLEN|SALESMAN|7698|20-02-1981|1600|300|30
// 如果字段值爲NULL 默認不顯示 也就是顯示空字符串
//
//
// sqlite> .mode column
// sqlite> select * from emp;
// 7369 SMITH CLERK 7902 17-12-1980 800 20
// 7499 ALLEN SALESMAN 7698 20-02-1981 1600 300 30
// 7521 WARD SALESMAN 7698 22-02-1981 1250 500 30
//
//
// sqlite> .mode insert
// sqlite> select * from dept;
// INSERT INTO table VALUES(10,'ACCOUNTING','NEW YORK');
// INSERT INTO table VALUES(20,'RESEARCH','DALLAS');
// INSERT INTO table VALUES(30,'SALES','CHICAGO');
// INSERT INTO table VALUES(40,'OPERATIONS','BOSTON');
//
//
// sqlite> .mode line
// sqlite> select * from dept;
// DEPTNO = 10
// DNAME = ACCOUNTING
// LOC = NEW YORK
//
//
// DEPTNO = 20
// DNAME = RESEARCH
// LOC = DALLAS
//
//
// DEPTNO = 30
// DNAME = SALES
// LOC = CHICAGO
//
//
// DEPTNO = 40
// DNAME = OPERATIONS
// LOC = BOSTON
//
//
// sqlite> .mode tabs
// sqlite> select * from dept;
// 10ACCOUNTINGNEW YORK
// 20RESEARCHDALLAS
// 30SALESCHICAGO
// 40OPERATIONSBOSTON
//
//
// sqlite> .mode tcl
// sqlite> select * from dept;
// "10""ACCOUNTING""NEW YORK"
// "20""RESEARCH""DALLAS"
// "30""SALES""CHICAGO"
// "40""OPERATIONS""BOSTON"
//
//
// sqlite> .mode csv
// sqlite> select * from dept;
// 10,ACCOUNTING,"NEW YORK"
// 20,RESEARCH,DALLAS
// 30,SALES,CHICAGO
// 40,OPERATIONS,BOSTON
//
//
// .separator "X" 更改分界符號爲X
// sqlite> .separator '**'
// sqlite> select * from dept;
// 10**ACCOUNTING**"NEW YORK"
// 20**RESEARCH**DALLAS
// 30**SALES**CHICAGO
// 40**OPERATIONS**BOSTON
//
//
// .dump ?TABLE? 生成形成數據庫表的SQL腳本
// .dump 生成整個數據庫的腳本在終端顯示
// .output stdout 將輸出打印到屏幕 默認
// .output filename 將輸出打印到文件(.dump .output 結合可將數據庫以sql語句的形式導出到文件中)
// .nullvalue STRING 查詢時用指定的串代替輸出的NULL串 默認爲.nullvalue ''
//
//
// 字段類型:
//
//
// 數據庫中存儲的每個值都有一個類型,都屬於下面所列類型中的一種,(被數據庫引擎所控制)
// NULL: 這個值爲空值
// INTEGER: 值被標識爲整數,依據值的大小可以依次被存儲爲1,2,3,4,5,6,7,8個字節
// REAL: 所有值都是浮動的數值,被存儲爲8字節的IEEE浮動標記序號.
// TEXT: 文本. 值爲文本字符串,使用數據庫編碼存儲(TUTF-8, UTF-16BE or UTF-16-LE).
// BLOB: 值是BLOB數據,如何輸入就如何存儲,不改變格式.
//
//
// 值被定義爲什麼類型只和值自身有關,和列沒有關係,和變量也沒有關係.所以sqlite被稱作 弱類型 數據庫
// 數據庫引擎將在執行時檢查、解析類型,並進行數字存儲類型(整數和實數)和文本類型之間的轉換.
// SQL語句中部分的帶雙引號或單引號的文字被定義爲文本,
// 如果文字沒帶引號並沒有小數點或指數則被定義爲整數,
// 如果文字沒帶引號但有小數點或指數則被定義爲實數,
// 如果值是空則被定義爲空值.
// BLOB數據使用符號X'ABCD'來標識.
//
//
// 但實際上,sqlite3也接受如下的數據類型:
// smallint 16位的整數。
// interger 32位的整數。
// decimal(p,s) 精確值p是指全部有幾個十進制數,s是指小數點後可以有幾位小數。如果沒有特別指定,則系統會默認爲p=5 s=0 。
// float 32位元的實數。
// double 64位元的實數。
// char(n) n 長度的字串,n不能超過 254。
// varchar(n) 長度不固定且其最大長度爲 n 的字串,n不能超過 4000。
// graphic(n) 和 char(n) 一樣,不過其單位是兩個字節, n不能超過127。這個形態是爲了支持兩個字節長度的字體,如中文字。
// vargraphic(n) 可變長度且其最大長度爲n的雙字元字串,n不能超過2000
// date 包含了 年份、月份、日期。
// time 包含了 小時、分鐘、秒。
// timestamp 包含了 年、月、日、時、分、秒、千分之一秒。
//
//
// SQLite包含了如下時間/日期函數:
// datetime() 產生日期和時間 無參數表示獲得當前時間和日期
// sqlite> select datetime();
// 2012-01-07 12:01:32
// 有字符串參數則把字符串轉換成日期
// sqlite> select datetime('2012-01-07 12:01:30');
// 2012-01-07 12:01:30
//
//
// select date('2012-01-08','+1 day','+1 year');
// 2013-01-09
//
//
// select datetime('2012-01-08 00:20:00','+1 hour','-12 minute');
// 2012-01-08 01:08:00
//
//
// select datetime('now','start of year');
// 2012-01-01 00:00:00
//
//
// select datetime('now','start of month');
// 2012-01-01 00:00:00
//
//
// select datetime('now','start of day');
// 2012-01-08 00:00:00
//
//
// select datetime('now','start of week');錯誤
//
//
// select datetime('now','localtime');
// 結果:2006-10-17 21:21:47
//
//
// date()產生日期
// sqlite> select date('2012-01-07 12:01:30');
// 2012-01-07
// 同理 有參和無參
// select date('now','start of year');
// 2012-01-01
//
//
// select date('2012-01-08','+1 month');
// 2012-02-08
//
//
// time() 產生時間
// select time();
// 03:14:30
//
//
// select time('23:18:59');
// 23:18:59
//
//
// select time('23:18:59','start of day');
// 00:00:00
//
//
// select time('23:18:59','end of day');錯誤
//
//
// 在時間/日期函數裏可以使用如下格式的字符串作爲參數:
// YYYY-MM-DD
// YYYY-MM-DD HH:MM
// YYYY-MM-DD HH:MM:SS
// YYYY-MM-DD HH:MM:SS.SSS
// HH:MM
// HH:MM:SS
// HH:MM:SS.SSS
// now
// 其中now是產生現在的時間。
//
//
// 日期不能正確比較大小,會按字符串比較,日期默認格式 dd-mm-yyyy
// select hiredate from emp order by hiredate;
//
//
// 17-11-1981
// 17-12-1980
// 19-04-1987
// 20-02-1981
// 22-02-1981
//
//
// strftime() 對以上三個函數產生的日期和時間進行格式化
// strftime()函數可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉換成其它形式的字符串。 strftime(格式, 日期/時間, 修正符, 修正符, …) select strftime('%d',datetime());
// 它可以用以下的符號對日期和時間進行格式化:
// %d 在該月中的第幾天, 01-31
// %f 小數形式的秒,SS.SSS
// %H 小時, 00-23
// %j 算出某一天是該年的第幾天,001-366
// %m 月份,00-12
// %M 分鐘, 00-59
// %s 從1970年1月1日到現在的秒數
// %S 秒, 00-59
// %w 星期, 0-6 (0是星期天)
// %W 算出某一天屬於該年的第幾周, 01-53
// %Y 年, YYYY
// %% 百分號
//
//
// select strftime('%Y.%m.%d %H:%M:%S','now');
// select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
// 結果:2006.10.17 21:41:09
//
//
// select hiredate from emp
// order by strftime('%Y.%m.%d %H:%M:%S',hiredate); 正確
//
//
// select strftime('%Y.%m.%d %H:%M:%S',hiredate) from emp
// order by strftime('%Y.%m.%d %H:%M:%S',hiredate); 錯誤
//
//
//
//
// 算術函數
// abs(X) 返回給定數字表達式的絕對值。
// max(X,Y[,...]) 返回表達式的最大值。 組函數 max(列名)
// sqlite> select max(2,3,4,5,6,7,12);
// 12
//
//
// min(X,Y[,...]) 返回表達式的最小值。
// random() 返回隨機數。
// sqlite> select random();
// 3224224213599993831
//
// round(X[,Y]) 返回數字表達式並四捨五入爲指定的長度或精度。
//
//
// 字符處理函數
// length(X) 返回給定字符串表達式的字符個數。
// lower(X) 將大寫字符數據轉換爲小寫字符數據後返回字符表達式。
// upper(X) 返回將小寫字符數據轉換爲大寫的字符表達式。
// substr(X,Y,Z) 返回表達式的一部分。 從Y開始讀Z個字符 Y最小值1
// sqlite> select substr('abcdef',3,3);
// cde
//
//
// quote(A) 給字符串加引號
// sqlite> select quote('aaa');
// 'aaa'
//
//
// 條件判斷函數
// ifnull(X,Y) 如果X爲null 返回Y
// select ifnull(comm,0) from emp;
// 0
// 300
// 500
// 0
// 1400
//
//
//
//
// 集合函數
// avg(X) 返回組中值的平均值。
// count(X) 返回組中項目的數量。
// max(X) 返回組中值的最大值。
// min(X) 返回組中值的最小值。
// sum(X) 返回表達式中所有值的和。
//
//
// 其他函數
// typeof(X) 返回數據的類型。
// sqlite> select typeof(111);
// integer
// sqlite> select typeof('233');
// text
// sqlite> select typeof('2012-12-12');
// text
// sqlite> select typeof('223.44');
// text
// sqlite> select typeof(223.44);
// real
//
//
// last_insert_rowid() 返回最後插入的數據的ID。
// sqlite_version() 返回SQLite的版本。
// sqlite> select sqlite_version();
// 3.7.9
//
//
// change_count() 返回受上一語句影響的行數。
// last_statement_change_count()
//
//
// create table emp_bak select * from EMP;不能在sqlite中使用
//
//
// 插入記錄
// insert into table_name values (field1, field2, field3...);
// 查詢
// select * from table_name;查看table_name表中所有記錄;
// select * from table_name where field1='xxxxx'; 查詢符合指定條件的記錄;
//
//
// select .....
// from table_name[,table_name2,...]
// where .....
// group by....
// having ....
// order by ...
//
//
// select .....
// from table_name inner join | left outer join | right outer join table_name2
// on ...
// where .....
// group by....
// having ....
// order by ...
//
//
// 子查詢:
// select *
// from EMP m
// where SAL>
// (select avg(SAL) from EMP where DEPTNO=m.DEPTNO);
//
//
// 支持case when then 語法
// update EMP
// set SAL=
// (
// case
// when DEPTNO=10 and JOB='MANAGER' then SAL*1.1
// when DEPTNO=20 and JOB='CLERK' then SAL*1.2
// when DEPTNO=30 then SAL*1.1
// when DEPTNO=40 then SAL*1.2
// else SAL
// END
// );
//
//
// select ENAME,
// case DEPTNO
// when 10 then '後勤部'
// when 20 then '財務部'
// when 30 then '內務部門'
// else '其他部門'
// end as dept
// from EMP;
//
//
// 支持關聯子查詢 in後面的語法中可以有limit(mysql不可以)
// select *
// from emp e
// where e.EMPNO in
// (
// select empno
// from EMP
// where deptno=e.DEPTNO
// order by SAL desc
// limit 0,2
// );
//
//
// 支持表和表之間的數據合併等操作
// union 去重複 union all 不去掉重複
// select deptno from emp
// union
// select deptno from dept;
//
//
// select deptno from emp
// union all
// select deptno from dept;
//
//
// 在列名前加distinct也是去重複
// sqlite> select distinct deptno from emp;
//
//
//
//
// 刪除
// delete from table_name where ...
//
//
// 刪除表
// drop table_name; 刪除表;
// drop index_name; 刪除索引;
//
//
// 修改
// update table_name
// set xxx=value[, xxx=value,...]
// where ...
//
//
// 建立索引
//
//
// 如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:
//
//
// create index film_title_index on film(title);
// 意思是針對film資料表的name字段,建立一個名叫film_name_index的索引。這個指令的語法爲
//
//
// CREATE [ UNIQUE ] NONCLUSTERED INDEX index_name
// ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
// create index index_name on table_name(field_to_be_indexed);
// 一旦建立了索引,sqlite3會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕後自動發生的,無須使用者特別指令。
//
//
// 其他sqlite的特別用法
//
//
// sqlite可以在shell底下直接執行命令:
// sqlite3 film.db "select * from emp;"
//
//
// 輸出 HTML 表格:
// sqlite3 -html film.db "select * from film;"
// 將數據庫「倒出來」:
//
//
// sqlite3 film.db ".dump" > output.sql
// 利用輸出的資料,建立一個一模一樣的數據庫(加上以上指令,就是標準的SQL數據庫備份了):
//
//
// sqlite3 film.db < output.sql
// 在大量插入資料時,你可能會需要先打這個指令:
//
//
// begin;
// 插入完資料後要記得打這個指令,資料纔會寫進數據庫中:
// commit;
//
//
// sqlite> begin;
// sqlite> insert into aaaa values('aaa','333');
// sqlite> select * from aaaa;
// 2|sdfds
// sdfsd|9
// 2012-12-12|13:13:13
// aaa|333
// sqlite> rollback;
// sqlite> select * from aaaa;
// 2|sdfds
// sdfsd|9
// 2012-12-12|13:13:13
//
//
// 創建和刪除視圖
// CREATE VIEW view_name AS
// SELECT column_name(s)
// FROM table_name
// WHERE condition
// DROP VIEW view_name
//
//
// create view e as
// select avg(SAL) avgsal,DEPTNO
// from EMP
// group by DEPTNO;
//
//
// select ENAME,EMP.DEPTNO,SAL,avgsal
// from EMP inner join e
// on EMP.DEPTNO=e.DEPTNO
// where SAL>avgsal;
// 練習員工表:
// PRAGMA foreign_keys=OFF;
// BEGIN TRANSACTION;
// CREATE TABLE DEPT
// (
// DEPTNO int(2) not null,
// DNAME varchar(14),
// LOC varchar(13)
// );
// INSERT INTO "DEPT" VALUES(10,'ACCOUNTING','NEW YORK');
// INSERT INTO "DEPT" VALUES(20,'RESEARCH','DALLAS');
// INSERT INTO "DEPT" VALUES(30,'SALES','CHICAGO');
// INSERT INTO "DEPT" VALUES(40,'OPERATIONS','BOSTON');
// CREATE TABLE EMP
// (
// EMPNO int(4) not null,
// ENAME varchar(10),
// JOB varchar(9),
// MGR int(4),
// HIREDATE date,
// SAL int(7 ),
// COMM int(7 ),
// DEPTNO int(2)
// );
// INSERT INTO "EMP" VALUES(7369,'SMITH','CLERK',7902,'17-12-1980',800,NULL,20);
// INSERT INTO "EMP" VALUES(7499,'ALLEN','SALESMAN',7698,'20-02-1981',1600,300,30);
// INSERT INTO "EMP" VALUES(7521,'WARD','SALESMAN',7698,'22-02-1981',1250,500,30);
// INSERT INTO "EMP" VALUES(7566,'JONES','MANAGER',7839,'02-04-1981',2975,NULL,20);
// INSERT INTO "EMP" VALUES(7654,'MARTIN','SALESMAN',7698,'28-09-1981',1250,1400,30);
// INSERT INTO "EMP" VALUES(7698,'BLAKE','MANAGER',7839,'01-05-1981',2850,NULL,30);
// INSERT INTO "EMP" VALUES(7782,'CLARK','MANAGER',7839,'09-06-1981',2450,NULL,10);
// INSERT INTO "EMP" VALUES(7788,'SCOTT','ANALYST',7566,'19-04-1987',3000,NULL,20);
// INSERT INTO "EMP" VALUES(7839,'KING','PRESIDENT',NULL,'17-11-1981',5000,NULL,10);
// INSERT INTO "EMP" VALUES(7844,'TURNER','SALESMAN',7698,'08-09-1981',1500,0,30);
// INSERT INTO "EMP" VALUES(7876,'ADAMS','CLERK',7788,'23-05-1987',1100,NULL,20);
// INSERT INTO "EMP" VALUES(7900,'JAMES','CLERK',7698,'03-12-1981',950,NULL,30);
// INSERT INTO "EMP" VALUES(7902,'FORD','ANALYST',7566,'03-12-1981',3000,NULL,20);
// INSERT INTO "EMP" VALUES(7934,'MILLER','CLERK',7782,'23-01-1982',1300,NULL,10);
// CREATE TABLE SALGRADE
// (
// GRADE int,
// LOSAL int,
// HISAL int
// );
// INSERT INTO "SALGRADE" VALUES(1,700,1200);
// INSERT INTO "SALGRADE" VALUES(2,1201,1400);
// INSERT INTO "SALGRADE" VALUES(3,1401,2000);
// INSERT INTO "SALGRADE" VALUES(4,2001,3000);
// INSERT INTO "SALGRADE" VALUES(5,3001,9999);
// COMMIT;
#endregion