捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
SQL基本要領
关键字:SQL 语言 基本要領 参考
来 自:转载,未知
平 台:Win9x,Win2k/NT,WinXP 下载所需:0 火柴
深浅度:初级 完成时间:2003/6/24
发布者:boy 发布时间:2003/9/1
编辑器:TXT 语  种:繁体中文
分 类:数据库 下载浏览:648/18546
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
SQL基本要領

SQL(Structured Query Language)資料型態(SQL Data Type)
    資料型態代表資料放在資料中的格式,Local Interbase 資料型態共有十種

◆SMALLINT:為2Bytes的整數(16 位元的整數),其範圍值為  -32768~32767
    使用於較小的整數欄位以省硬碟空間,並可加快資料理的度
  例 貨品編號(goods_no) 為 SMALLINT
    goods_no  SMALLINT
◆INTEGER:為4Bytes的整數(32 位元的整數),其範圍值為   
          -2147483648~2147483647
    使用於較大的整數欄位,改善 SMALLINT 存放整數值大的缺點
    若在貨品編號大於32767,無法以 SMALLINT表示則可訂貨品編號為INTEGER
  例 goods_no INTEGER 
◆NUMERIC:數值資料可指定整數及小數位數
    p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)
    大小值,s是指小數後有幾位數。如果沒有特別指定,則繫統會設為 
    p=5; s=0 
  NUMERIC及DECIMAL可儲放190 進位的數值資料
  例 NUMERIC[precision[,scale]]
    若小數未指定,則內定值為0;
    若未指定精確度(整數位數)及小數點位數,則NUMERIC將自動轉為INTEGER
    例員工薪資欄位為15位整數,2位小數如下
      salary NUMERIC(15,2)
◆DECIMAL:數值資料可指定整數及小數位數
  例 DECIMAL[precision[,scale]]
    若小數未指定,則內定值為0;
    若未指定精確度(整數位數)及小數點位數,則NUMERIC將自動轉為INTEGER
    例員工薪資欄位為15位整數,2位小數如下
      salary NUMERIC(15,2)
◆DOUBLE PRECISION:64位元雙精確變數其範圍值1.7x10-3808~1.7x10308
◆CHAR:固定長度的字串型態,長度限制為值1~32767位元組
  固定長度資料型態,存放的資料為系統採用的字元集(ASCII及EBCDIC)中的任意 
  字元,使用CHAR的資料型態時必須指定字元資料長度
  例 部門編號欄位
     DEPT_NO CHAR(3)
     當字元資料宣告為固定長度時,
     若輸入的資料小於資料欄位長度,將自動以空白字元補滿欄位;
     若輸入的資料大於資料欄位長度,超過部份將自動被捨去
◆VARCHAR:變數長度的字串,長度限制為值1~32765★★★★★★(書D_6 15_7)
  存放變數長度的字元資料,宣告時必須指定欄位可能的最大長度,當輸入者的
  資料小於欄位長度時,只存放輸入的字元,故佔用較少的空間
  例 員工的國別(job_country)為VARCHAR(15)
     job_country VARCHAR(15)
  註:CHAR 較浪費磁碟空間,但執行效率高
     VARCHAR:較節省磁碟空間,但執行效率低
◆DATE:日期型態,其範圍值為  Jan 1, 100~Dec 11,5941
    存放日期格式資料(包含了 年份、月份、日期)
    例員工雇用日期(hire_date)
       hire_date Date Default 'Now' Not Null
       Default 設欄位的初值 
       Now為 Interbase 的特殊用法,代表系統日期,也就是hire_date 的
              初始值系統日期;
       Not Null 代表欄位新增資料時,必須指定欄位值

◆FLOAT:存放浮點數,同REAL型態(32位元的實數)
  Interbase 的FLOAT資料型態最大8位有效數字,超過有效數字時,則以科學
    符號表示
  例  1.23456789e+08
◆BLOB大型物件資料型態,通常用以存放備忘資料,聲音 影像等多媒體資料
  可儲存大型物件的資料型態備忘資料(memo)聲音(Wave)影像(image/picture)
  例 CREATE TABLE IMAGE_PRODUCT
     (FILENAME CHAR(12) NOT NULL PRIMARY KEY,
      MEMO BOLOB SUB_TYPE 1,
      BITMAP BOLOB SUB_TYPE -1,
      EXEjob_BOLOB SUB_TYPE -2)
  Interbase 將BOLOB欄位分為數種子型態(SUB_TYPE),子型態
    1代表備忘資料欄,負整數的子型態為使用者定義的子型態
   -1為可存放點陣圖的欄位型態
   -2可存放像執行檔的資料型態

建立資料庫(Create Table)
  1、建資料表:
    create table table_name(column1_name data_type [DEFAULT data_value]                             
                            [null | not null [,...] )
      說明:table_type 資料表這資料表包含一個或多個指定資料型態的欄位
        DEFAULT 指定欄位初始值data_value 
        null表示是否允許資料的值為null當指定欄位not null時,資料庫系統將
        拒絕新增 null 資料至該欄位
      例 CREATE TABLE customer(First_Name char(50),Last_Name char(50),
      Address char(50),City char(50),Country char(25),Birth_Date date) 
  2、更改資料表  
    alter table table_name add column column_name datatype 
    說明:增加一個欄位(沒有刪除某個欄位的語法。)
    lter table table_name add primary key (column_name)
    說明:更改表得的定義把某個欄位設為主鍵。
    alter table table_name drop primary key (column_name)
    說明:把主鍵的定義刪除。
  3、建立索引  
    create UNIQUE index empno_idx on table_name(emp_no)
    說明:對某個表格的欄位建立索引以增加查詢時的速度。
  4、刪除  
    drop Table table_name //刪除資料表 
    drop Table temp       //刪除temp資料表
    drop Index index_name //刪除索引

資料操作語言 DQL(Data Manipulation Language)

常用、主要的SQL指令:
●Select(選取資料,屬DQL)
  資料查詢
     SELCET * FROM Table                    //過濾顯示所有資料庫
     SELCET Name, Tel FROM Table            //過濾顯示 Name Tel 資料
     SELCET DISTINCT dept_no FROM table_name //DISTINCT 取消重復部份
     SELCET DISTINCT au_lname FROM authors WHERE au_lname="Ringer"  
     SELCET full_name, salsry*12 FROM table_name //全名及計算年薪
     SELCET full_name, salsry*12 AS year_salary FROM table_name
      //在ISO 的SQL 語法標準中允許使用AS子句重新命名欄位名稱 
     SELCET * FROM table_name WHERE column1 = xxx [and column2 > yyy] 
              [or column3 <> zzz]
------------------------------------------------------------------
  整合性的查詢:
    SELCET count (*) FROM table_name WHERE column_name = xxx
      //查詢符合條件的資料共有幾筆。
    SELCET SUM(column1) FROM table_name
      說明:
      1.計算出總和,所選的欄位必須是可數的數字形態。
      2.除此以外還有 avg() 是計算平均、max()、min()計算最大最小值的
        整合性查詢。
------------------------------------------------------------------
  組合查詢
    組合查詢是指所查詢得資料來源並不隻有單一的表格,而是聯合一個以上
        的表格纔能夠得到結果的。
    SELCET * FROM table1,table2 WHERE table1.colum1=table2.column1
      說明:
      1.查詢兩個表格中其中 column1 值相同的資料。
      2.當然兩個表格相互比較的欄位,其資料形態必須相同。
      3.一個復雜的查詢其動用到的表格可能會很多個。
------------------------------------------------------------------
  復合性的查詢
    SELCET * FROM table_name1 WHERE exists ( SELCET * FROM 
            table_name2 WHERE conditions )
      說明:1.where 的 conditions 可以是另外一個的 query。
            2.exists 在此是指存在與否。
    SELCET * FROM table_name1 WHERE column1 IN ( SELCET column1 
             FROM table_name2 WHERE conditions )
      說明:1. in 後面接的是一個集合,表示column1 存在集合裡面。
            2. select 出來的資料形態必須符合 column1。 
------------------------------------------------------------------
  其他查詢
    SELCET * FROM table_name1 WHERE column1 LIKE 'x%' 
      //說明:like 必須和後面的'x%' 相呼應表示以 x為開頭的字串。
    SELCET * FROM table_name1 WHERE column1 IN ('xxx','yyy',..)
      //說明:in 後面接的是一個集合,表示column1 存在集合裡面。
    SELCET * FROM table_name1 WHERE column1 BETWEEN xx AND yy
      //說明:between 表示 column1 的值介於 xx 和 yy 之間。 
    SELCET * FROM 程式基本資料 WHERE 陽上姓名 LIKE "% 楊 %";
      //過濾不特定"徐"的資料
    SELCET * FROM Table WHERE Name LIKE "*徐*" 
      //過濾特定"徐"之中的資料
    SELCET full_name,hire_dat,phone_exit FROM table_name
       WHERE lase_name LIKE 'Le#%' ESCAPE '#';
      //ESCAPE 比對符號要檢查lase_name是否內含'Le#% 的字串
    SELCET full_name,hire_dat,phone_exit FROM table_name
       WHERE lase_name LIKE 'L%';    
    //lase_name LIKE 'L%' 代表第一個字母須以L字母為開頭其餘可任意字串

    //lase_name NOT LIKE 'L%' 代表第一個字母不得為L字母 
    //lase_name LIKE 'L%' 代表第一個字母須以L字母為開頭其餘可任意字串
    //lase_name LIKE 'L__' 姓氏須三個字元第一個字元為 L
                           (底線字元'_'類似DOS下的'?'字元)  
    //lase_name LIKE '%ee%'代表任何內含'ee'字串 
    //lase_name LIKE '%e'最後一個字元須為'e'
------------------------------------------------------------------
  資料篩選
   資7料單一搜尋
     SELCET full_name, hire_date,phone_exit FROM table_name 
            WHERE dept_no=600 //顯示部門代號等於600的所有員工....
     SELCET full_name,hire_dat,phone_exit FROM table_name
            WHERE phone_exit IS NULL 
        //列出所有沒有分機號碼的員工姓名(雇員)  
     SELCET full_name,hire_dat,phone_exit FROM table_name
            WHERE phone_exit IS NOT NULL 
        //列出所有有分機號碼的員工姓名<非NULL值>
------------------------------------------------------------------
   資料多重搜尋
     SELCET full_name,phone_exit FROM table_name
            WHERE phone_exit IS NULL AND hire_date > '20-jan-1992';
             //未有分機且進入公司(雇員)日期之後員工
     <多資料表連結>
     SELCET full_name, job_country, currency FROM table_name,             
            table_name1 WHERE job_country = table_name1
     SELCET full_name, job_country, currency FROM table_name,             
            LEFT JOIN country ON job_country = table_name1
------------------------------------------------------------------
   搜尋資料範圍
     SELCET full_name,salary FROM table_name 
            WHERE salary BETWEEN 100000 AND 200000; 
             //列出薪資在100000至200000的員工
     SELCET full_name,salary FROM table_name 
            WHERE salary >= 100000 AND salary <= 200000;
             //比較運算的查詢語言
     SELCET full_name,job_country FROM table_name//集合成員運算(IN子句)
            WHERE job_country IN('Italy France')//義大利及法國員工
------------------------------------------------------------------
 資料排序結果
  單一排序資料
    SELCET full_name,salary,dept_no FROM table_name ORDER BY dept_no
      //依各部門代號順序列出員工姓名及薪資
    SELCET column1,column2 FROM table_name order by column2 [desc]
      //說明:order by 是指定以某個欄位做排序,[desc]是指從大到小排列,
          若沒有指明,則是從小到大排列
    SELCET * FROM Table Order By Age Desc;  
      //以年齡欄反排序
  多欄排序資料
    SELCET full_name,salary,dept_no FROM table_name ORDER BY 
           dept_no, salary DESC;
      //部門代號由小而大,薪資由大而小輸出所有員工姓名
------------------------------------------------------------------
 SQL合計函數(aggregate function)
    AVG  :平均值
    COUNT:筆數
    MIN  :最小值
    MAX  :最大值
    SUM  :加總值
    SELECT dept_no COUNT(salary)FROM table_name //錯誤的
    SELECT dept_no MAX(salary)FROM table_name   //錯誤的
    SELECT dept_no MAX(salary)FROM table_name GROUP BY dept_no//正確的 
    < COUNT 的應用 >
    SELECT COUNT(*)FROM table_name WHERE dept_no = 100
       //合計代號100的部門中有幾位員工
    < COUNT(DISTINCT) 的應用 >
    SELECT COUNT(DISTINCT dept_no) FROM table_name 
       //公司共有幾個部門
    < COUNT及SUM 的應用 >
    SELECT COUNT(*),SUM(salsry)FROM table_name WHERE dept_no = 100
       //部門代號為100的員工人數及薪資總數
    < MIN,MAX,AVG 的應用 >
    SELECT MIN(salsry),MAX(salsry),AVG(salsry)FROM table_name 
           WHERE dept_no = 100
       //部門代號為100的員工的最低薪資和最高薪資及平均薪資
    < GROUP BY子句應用 >
    SELECT COUNT(*),MIN(salsry),MAX(salsry),SUM(salsry)
           FROM table_name GROUP BY dept_no 
       //找出所有部門的人數最低薪資  最高薪資  薪資總數
    < HAVING子句應用 >
    SELECT COUNT(*),MIN(salsry),MAX(salsry),SUM(salsry)
           FROM table_name GROUP BY dept_no HAVING COUNT(dept_no)>2
       //找出所有部門的人數大於2個人的最低薪資  最高薪資  薪資總數
------------------------------------------------------------------
●Insert(新增資料,屬DML)
  INSERT INTO 資料表名稱 Values (欄位1, 欄位2,...);
  INSERT INTO table_name VALUES('Taiwan','NTD');
  INSERT INTO table_name(country,currency)VALUES('Taiwan','NTD');
     //table_name中有country,currency 兩個欄位 
  INSERT INTO table_name[(column_list)] SELECT column_list FROM 
         another_table_name...... 
     //複製多筆資料至另一資料表
  INSERT INTO table_name1 SELECT *  FROM table_name 
           //table_name 資料表所有資料加入table_name1中
  INSERT INTO Table Values ("陳建中","037-271135","苗市中路","40");
  INSERT INTO table_name(column1,column2,...)values(value1,value2,...)
    說明:1.若沒有指定column 繫統則會按表格內的欄位順序填入資料。
          2.欄位的資料形態和所填入的資料必須吻合。
          3.table_name 也可以是景觀 view_name。
  INSERT INTO table_name (column1,column2,...) select 
             columnx,columny,... from another_table
    說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。

●Update(更新資料,屬DML)
    < 允許更新己存在的資料表資料>
    UPDATE table_name SET coumn_name1=data_value1[,coumn_name2 
               =data_value2,.........] WHERE search_condition]
      //table_name 須為資料表或可更新的view名稱
      //SET 欲更新欄位名稱
      //WHERE 子句用指定更條件(可省略)WHERE 子句中search_condition
        條件符合會更新資料;更新的欄位值須以欄位所定義的資料型庇相容 
    < 更新所有資料>
    UPDATE table_name SET salary =salary*1.05;
      //員工薪資依物價上漲年增率5%調整  
    < 更新指定資料>
    UPDATE table_name SET salary =salary*1.1 WHERE dept_no=100;
      //所有部門代號100的員工薪資調升 1.1
    < 更新多個欄位> 
    UPDATE table_name SET job_grade=1 =salary= 11000 WHERE emp_no=2;
      //編號2號員工職級2級晉升為1級 ,薪資並調升110000
    UPDATE table_name SET column1='xxx' WHERE conditoins
    說明:
      1.更改某個欄位設定其值為'xxx'。
      2.conditions 是所要符合的條件、若沒有 where 則整個 table 的那個
        欄位都會全部被更改。
●Delete(刪除資料,屬DML)
    < 刪除指定的資料>
    DELETE FROM table_name WHERE dept_no=621;
       //部門代號621被裁撤
    < 刪除所有的資料>
    DELETE FROM table_name
    DELETE * FROM table_name//錯誤的
    DELETE FROM table_name WHERE conditions
      說明:刪除符合條件的資料。
      說明:關於where條件後面如果包含有日期的比較,不同數據庫有不同的
            表達式。具體如下:
       (1)如果是access數據庫,則為:where mydate>#2000-01-01# 
       (2)如果是oracle數據庫,則為:where mydate>cast('2000-01-01' 
          as date) 或:where mydate>to_date('2000-01-01','yyyy-mm-dd')
   在delphi中寫成:
    thedate='2000-01-01';
    query1.sql.add('select * from abc where 
                    mydate>cast('+''+thedate+''+' as date)'); 
    如果比較日期時間型,則為:
    query1.sql.add('select * from abc 
    where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd 
                              hh24:mi:ss')
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论15条 当前显示最后6条评论
iliyaku 2004/7/3 12:59:21
一个字, 强!
kevinphoenix 2004/7/25 13:12:04
这种东西也拿得出手?!!!
tim001 2004/8/27 13:35:45
共享精神已经很不错了
smartroses 2004/9/22 15:44:57
very good!
aasxn 2005/6/30 11:11:38
怎么了? 我喜欢!
dglianda 2006/1/29 1:21:53
谢谢!
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表