1. 程式人生 > 實用技巧 >浮點型變數/常量

浮點型變數/常量

一、資料庫級及SQL語言簡介

1、目前主流資料庫
微軟:sql server、access
瑞典:mysql
ibm: db2
sybase:sybase
ibm: informix
oracle: oracle

2、SQL語言
DQL-------------資料查詢語言
select … From … Where
DML-------------資料操縱語言
insert、update、delete
DDL-------------資料定義語言
create、alter、drop
DCL-------------資料控制語言
commit、rollback、savepoint

二、資料庫的資料型別(MySQL)

1、字元型別:

  • char型別:固定長度的內容,效率高。儲存空間範圍(1-2000)位元組。
  • varchar型別:動態長度的字元型別,儲存空間範圍(1-4000)位元組。
  • long型別:儲存2G的檔案大小。

2、數值數字型別:

3、日期型別:

三、基本Sql語句

1、表設計
  • 建立表:create table 表名 (欄位 欄位型別);
  • 複製表結構及資料:create table 新表 as select * from 舊錶
  • 複製表結構不需要資料:create table 新表 as select * from 舊錶 where 2<>2
  • 複製表資料:insert into 目標表 select * from 參考表
  • 偽表:系統中保留的虛擬表,不能更改,也不能刪除。名稱:dual 通過偽表顯示當前系統時間:select sysdate from dual;
  • 檢視指定使用者下所有的表:SELECT table_name FROM all_tables WHERE owner = upper('使用者名稱');
2、操作欄位
  • 增加欄位:alter table 表名 add (欄位名稱 欄位型別)
  • 修改欄位:alter table 表名 modify (欄位名稱 欄位型別) 注意:實際上大部分時間我們修改的是欄位型別的大小,而不是型別本身,如果非在改成其它型別,則需要滿足相容性。或者把對應這列資料全部清除。
  • alter table 表名 drop column 欄位名稱
3、表約束
  • 約束說明
    •   NOT NULL指定欄位不能包含空值
    • UNIQUE指定欄位的值(或欄位組合的值)表中所有的行必須唯一
    • PRIMARY KEY表的每行的唯一標識,即主鍵
    • FOREIGN KEY在欄位和引用表的一個欄位之間建立並且強制外來鍵關係,即外來鍵
    • CHECK指定一個必須為真的條件
  • 主鍵與唯一約束的區別:
    • 主鍵只能有一個,而唯一約束可以有多個;
    • 主鍵可以由一列或多列充當,但唯一約束只能一列一列建立;
    • 主鍵不允許為空,而唯一約束在Oracle中可以多次為空,在SQL中唯一約束只能一次為空;
    • NOT NULL:此約束為行級約束,不在能表級約束中定義。
  • 新增約束:
    • ALTER TABLE 表名 ADD [CONSTRAINT 約束標識名稱] 約束型別(欄位名稱);
      • 例:ALTER TABLE stu ADD CONSTRAINT stuid_pk PRIMARY KEY(stuid);
  • 刪除約束:
    • ALTER TABLE table
    • DROP PRIMARY KEY | UNIQUE(欄位名) | CONSTRAINT 約束名 [CASCADE]
    • 例:ALTER TABLE stu DROP PRIMARY KEY;
  • 示例一:【建立表的同時指定約束】
    create table 表(
    欄位 欄位型別 CONSTRAINT 約束標識名稱 約束型別;
    );
    示例二:【先建立表,後建立約束】
    ALTER TABLE 表名 ADD CONSTRAINT 約束標識名稱 約束型別(欄位);
    外來鍵約束的建立:
    alter table table_name add constraint cid_fk foreign key(cid) references classes(cid) 【on delete cascade】

    (主-從)建表規則:
    1.先create父表(要有pk或uk),再create子表(FK)
    2.先insert父表,然後insert子表。
    3.先delete子表,在delete父表。
    4.先drop子表,在drop父表。
    父表先於子表存在,子表比父表先消亡。

4、表查詢
  • 基本查詢:select [列名],... from 表名
  • 條件查詢(where):select [列名],... from 表名 where 條件
  • 邏輯運算
    •   
      操作符包括如下幾種:
           1、算術操作符:算術操作符包括加(+)、減(-)、乘(*)、除(/)
           2、比較操作符:比較操作符包括 =!=<><=>=BETWEENANDINLIKEIS NULL等
           3、邏輯操作符:邏輯操作符包括與(AND)、或(OR)和非(NOT)。 
           4、集合操作符:集合操作符包括凍並集(UNION)、交集(INTERSECT)、剪集(MINUS)
           5、連線操作符:||   例:SELECT ename || ' is a ' || job FROM emp;
           集合操作符:多用於資料量比較大的資料局庫,執行速度快。
           1). union
               該操作符用於取得兩個結果集的並集。當使用該操作符時,會自動去掉結果集中重複行。
               SELECT ename, sal, job FROM emp WHERE sal >3000
               UNION
               SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
               
           2).union all
               該操作符與union 相似,但是它不會取消重複行,而且不會排序。
               SELECT ename, sal, job FROM emp WHERE sal >2500
               UNION ALL
               SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
               
           3). intersect
               使用該操作符用於取得兩個結果集的交集。
               SELECT ename, sal, job FROM emp WHERE sal >2500
               INTERSECT
               SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
               
           4). minus
               使用改操作符用於取得兩個結果集的差集,他只會顯示存在第一個集合中,而不
               存在第二個集合中的資料。
               SELECT ename, sal, job FROM emp WHERE sal >2500
               MINUS
               SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
               (MINUS 就是減法的意思)
               
       注意: 集合運算中各個集合必須有相同的列數,且型別一致,集合運算的結
              果將採用第一個集合的表頭作為最終的表頭,order by
              必須放在每個集合後

  • 排序
  •  語法格式:
     select [列名],... from 表名  where 條件 order by 欄位 (desc | asc)
     說明:
     DESC:表示按降序排序(即:從大到小排序)
     ACS:表示按升序排序(即:從小到大排序)
  • 函式
  • 1、常用的系統函式
         1.1 日期函式:
             -ADD_MONTHS(d,f):指定時間d,推移f月,得到推移後的時間
                 d:指定一個時間(需要使用to_date函式轉換)
                 f:在指定時間上推移多少個月
                 例:在“2010-05-12”時間上推移3個月後的時間
                 select ADD_MONTHS(to_date('2012-05-12','yyyy-mm-dd'),3) from dual;
                 
             -Months_between(d1,d2):顯示兩個時間相差的月份
                 d1:第一個時間
                 d2:第二個時間
                 
                 注意:必須注意的是,d1與d2都為Date型別,不然會出現錯誤。
                  須用to_date('','')     來轉換為日期格式,才能參加計算。
                 
                 例:計算 2012-12-122012-2-12 相差的月份。
                 SELECT MONTHS_BETWEEN(to_date('2012-12-12','yyyy-MM-dd'),to_date('2012-2-12','yyyy-MM-dd'))
                 FROM dual;
                 
                 
             -last_day(m):返回特定日期所在月份的最後一天
                 m:時間
                 
                 例:計算“2010-10-12”所在月份的最後一天
                 SELECT last_day(to_date('2010-10-12','yyyy-mm-dd')) FROM dual;
             
             -next_day(x,y)用於計算x時間後第一個星期y的時間。
                 例子,當前時間是2014-08-15 
                 select next_day(to_date('2014-08-15','yyyy-mm-dd'),'星期二'from dual;
                 返回的結果是: 2014-08-19
             
             -trunc(date,[fmt]):處理時間
                 date:一個日期值
                 fmt :日期格式,該日期將由指定的元素格式所截去。忽略它則由最近的日期截去
                 
                 例:
                     trunc(sysdate,'yyyy') --返回當年第一天.
                     trunc(sysdate,'mm') --返回當月第一天.
                     trunc(sysdate,'d') --返回當前星期的第一天.
                     trunc(sysdate,'dd')--返回當前年月日
                     trunc(sysdate, 'hh')--返回當前小時
                     trunc(sysdate, 'mi')--返回當前分鐘
             
             -trunc(number,[decimals]):處理數字
                 number:     待做擷取處理的數值
                 decimals:指明需保留小數點後面的位數。可選項,忽略它則截去所有的小數部分
                 例:
                     TRUNC(89.9852=89.98
                     TRUNC(89.985=89
                     TRUNC(89.985-1=80
    
    
     、常用的字元函式:
             -lower(string):轉小寫
                 用法:比如將字元“ABC”轉為小寫 
                 select lower('ABC') from dual;
                 結果:abc
                 
             -upper:轉大寫
                 用法:比如將字元“abc”轉為大寫 
                 select upper('abc') from dual;
                 結果:ABC
                 
             -length():長度函式
                 用法:獲取字元“abc”的長度
                 select  length('abc') from dual;
                 結果:3
                 注:長度是指字串的長度 如“中國”為2 “ab”也為2
    
             -substr(char,m,n):擷取字串
                 用法:將字元“abcde”中的“cd”進行擷取
                 select substr('abcde', 3 ,2 ) from dual;
                 結果:cd
                 
             -replace(s1,s2):替換
                 用法:將字元“abcde”中的“c”替換為“123”;
                 select replace('abcde', 'c' ,'123' ) from dual;
                 結果:ab123de
                 
             -concat(s1,s2):拼接
                 用法:將字元“abc”與字元“de”拼接顯示
                 select concat('abc','de') from dual; 
                 結果:abcde
                 等價於: 'abc'||'de'
    
             lpad( string, padded_length, [ pad_string ] ):指定長度,不夠則填充
                 用法:將字元“abcde”以10個長度顯示,左側用“X”填充
                 select lpad('abcde',10,'x') from dual;
                 結果:xxxxxabcde
    
     、數字函式:
             ceil:往上取整,與小數位的大小無關
             floor:往下取整,與小數位的大小無關.
             mod:取餘。求模。
             round:四捨五入。
             trunc(m,n):
             
     、 轉換函式:
             -to_char:日期轉化為字串  
             例:
             select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;    
             select to_char(sysdate,'yyyy') as nowYear   from dual;   //獲取時間的年   
             select to_char(sysdate,'mm')    as nowMonth from dual;   //獲取時間的月   
             select to_char(sysdate,'dd')    as nowDay    from dual;   //獲取時間的日   
             select to_char(sysdate,'hh24') as nowHour   from dual;   //獲取時間的時   
             select to_char(sysdate,'mi')    as nowMinute from dual;   //獲取時間的分   
             select to_char(sysdate,'ss')    as nowSecond from dual;   //獲取時間的秒
             select to_char(sysdate,'day')    as nowSecond from dual;   //獲取時間的星期
             
             
             -to_date:把字串型別日期轉換為date型別日期。
             例:
             select to_date('2014-02-11','yyyy-mm-dd') from dual
             
             sysdata當前日期
    
             -to_number:把某種型別轉換為數字型別。
             注意:如果字元型別的內容是資料,則可以實現自動轉換為數字型別
         
     、 其它函式:
                 -NUL函式:把數字型別為null的值轉換為0;
                     結構:
                         nvl(欄位名稱,0);
                         nvl(comm,0);
                     轉換之後,可以實現算術運算。
                     
                 -decode函式:
                     decode(引數一,引數二,引數三,....);
                     引數一:欄位名稱
                     引數二:引數一欄位對應的內容。
                     引數三:把引數一欄位對應的內容替換成其它的內容。
                     示例:select decode(JOB,'CLERK','業務員') from emp;
                     
     、聚合函式:MAXMINSUMAVGCOUNT
         -AVG :返回指定組中的平均值。
         -COUNT:返回指定組中專案的數量。 
         -MAX:返回指定資料的最大值。
         -MIN:返回指定資料的最小值。
         -SUM:返回指定資料的和,只能用於數字列。