浮點型變數/常量
阿新 • • 發佈:2020-12-06
一、資料庫級及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 表名 ADD [CONSTRAINT 約束標識名稱] 約束型別(欄位名稱);
- 刪除約束:
- 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、比較操作符:比較操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS 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-12 與 2012-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.985,2)=89.98 TRUNC(89.985)=89 TRUNC(89.985,-1)=80 2、常用的字元函式: -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 3、數字函式: ceil:往上取整,與小數位的大小無關 floor:往下取整,與小數位的大小無關. mod:取餘。求模。 round:四捨五入。 trunc(m,n): 4、 轉換函式: -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:把某種型別轉換為數字型別。 注意:如果字元型別的內容是資料,則可以實現自動轉換為數字型別 5、 其它函式: -NUL函式:把數字型別為null的值轉換為0; 結構: nvl(欄位名稱,0); nvl(comm,0); 轉換之後,可以實現算術運算。 -decode函式: decode(引數一,引數二,引數三,....); 引數一:欄位名稱 引數二:引數一欄位對應的內容。 引數三:把引數一欄位對應的內容替換成其它的內容。 示例:select decode(JOB,'CLERK','業務員') from emp; 6、聚合函式:MAX、MIN、SUM、AVG、COUNT -AVG :返回指定組中的平均值。 -COUNT:返回指定組中專案的數量。 -MAX:返回指定資料的最大值。 -MIN:返回指定資料的最小值。 -SUM:返回指定資料的和,只能用於數字列。