39,數據庫(01)

/*
 達內學習 Oracle day38 2013-10-24
*/
oracle -sql (structed query language)
數據的存儲
file
dbms(數據庫管理系統)  管理的文件就是db  
主流的數據庫:FDB  關係型數據庫(基於二維表的數據庫) 有行有列組成的表
數據庫管理的基本單位是表
RDBMS 關係型數據庫管理系統

Oracle甲骨文  50%
 版本9i,10g,11g
DB2  IBM (國際商務機器)20%
sqlserver microsoft  15%

開源數據庫:
mysql sun(斯坦福大學網絡實驗室)甲骨文

嵌入式數據庫
sqllite 文本型數據庫
//==================================================
SQL 語言的分類
1 查詢語句
 select
2 數據定義語言 DDL
 create table
 drop table
 alter table
3 數據操作語言 DML
 insert
 delete
 update
4 事務控制語言 TCL
 commit
 rollback
 savepoint
5 grant revoke
//---------------------------------------------------------------
遠程登陸
telnet 192.168.0.23/26
openlab open123
window: telnet IP
ubuntu: 相同

登陸數據庫 sqlplus openlab/open123  sqlplus openlab open123
//-----------
察看 一張表結構
SQL>desc 表名;
SQL> desc s_emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID             編號                           NOT NULL NUMBER(7)
 LAST_NAME      姓氏                           NOT NULL VARCHAR2(25)
 FIRST_NAME     名                           VARCHAR2(25)
 USERID         員工編號                       VARCHAR2(8)
 START_DATE                入職日期         DATE
 COMMENTS                    備註           VARCHAR2(255)
 MANAGER_ID                     領導編號   NUMBER(7)
 TITLE                          職位       VARCHAR2(25)
 DEPT_ID                                 NUMBER(7)
 SALARY                           工資     NUMBER(11,2)
 COMMISSION_PCT                   提成     NUMBER(4,2)

name 就是表頭中的字段
null? 字段能不能不填寫
type 字段的類型
 數字:number
 字符串:varchar2
 日期類型:date
//----------
基本概念:
 選擇:所有列被選擇部分行被選中
 投影:所有行被選中,部分列被選擇
 表連接:把所有表組織起來

select 語句
A,from
 數據從哪裏來
 1,怎麼從一張表查詢一個字段
  select 字段名 from 表;
  查詢 s_emp 表中的 salary;
 select salary from s_emp;
 2,怎麼從一張表中查詢多個字段
  select 字段名,字段名…… from 表; //同級別的東西用逗號隔開
  查詢 s_emp 表中 名 和對應的 工資
  select first_name,salary from s_emp;
 3,查詢一個表中所有字段
  select * from 表;
 4,sql中的數學運算 + - * /
  要求把每個人的工資 加100以後顯示
  select salary,salary+100 from s_emp;
 5,字段和表達式別名
  select first_name name,salary*12 'yearsal' from s_emp;
  字段 和表達式的別名。 字段或者表達式後面 起另一個名字(別名只能有一個並且別名處理成大寫) 原樣顯示用單引號
 6,sql中的字符串
  在一串字符的兩端 加上單引號
  例如:'' 'a' 'hello'
  字符串的拼接 ||
  select last_name||'_'||first_name name ,salary*12 yearsal from s_emp;
  col 字段名 for a+數字; 設置字段名最多顯示多少個字符,超了折行
  col name for a25
  姓名之間加入單引號
  select last_name||''''||first_name name from s_emp;
 7,空值處理
  重新計算年薪,要求年薪是 工資*12*(1+提成/100)
  select salary*12,salary*12*(1+nvl(commission_pct,0)/100) byearsa from s_emp
  任何值 和 NULL 做運算結果都是NULL
  nvl(par1,par2)
  par1 爲NULL時返回par2的值,當par1的值不爲NULL就返回par1的值
 8,數據的排重顯示
  select distinct salary from s_emp ;
  只管做什麼,不管在怎麼做。
  select distinct salary,title from s_emp; //工資和職位都相同
B,where
 限定表中數據返回,符合where條件的數據被選中,不符合where條件的數據被過濾掉
 1,特殊的where條件
  select id,salary from s_emp where 1=1;
 2,數字型的數據的限制
  列出工資大於1400的員工的id, first_name salary
  select id,first_name,salary from s_emp where salary>1400;
       select id,first_name,salary from s_emp where salary!=1400;
 3,字符串類型的數據的判斷
  找出first_name 叫Mai的員工的id
  select id from s_emp where first_name = 'Mai';
  字符串值區分大小寫,sql語句不區分大小寫
 4,常見的運算符
  = != < > >= <=
 5,sql提供的元算符
  a,表達一個閉區間
  [a,b]
   where 字段 between a and b;
  查詢工資在 1500 到 2000 之間的id
  select id from s_emp where salary between 1500 and 2000;
  b,表達一個值 出現在一個列表中
  where 字段 in(值1,值2,……);
  查詢部門編號是 50,31,32 的員工ID
  select id, first_name,dept_id from s_emp where dept_id in(50,31,32);
  改變括號內順序對查詢結果沒有影響。但是可能對查詢效率有影響。應該把概率高的放在前面。
  c,模糊查詢關鍵字。 關鍵字 like
  where 字段 like '通配串'
  數據庫中代表0-n個任意字符的是 %,代表一個任意字符的是 _
  查詢s_emp中first_name 帶a的
      select id,first_name from s_emp where first_name like '%a%';
  查詢所有S_開頭的表明
  select table_name from user_tables where table_name like 'S\_%' escape '\';
    '\'  '後面的字符轉義 ,只有下劃線和%需要轉義
  d,如何判斷一個字段的值是否是NULL值
   where 字段 is NULL;
   找出manager_id是null的人的id
   select id from s_emp where manager_id is NULL;
  6,邏輯條件運算符
  and  or   not
  對立面 
  between a and b -> not between a and b
  in -> not in(注意NULL)
  like -> not like
  is null -> is not null
  7,條件組合順序
   爲了清楚加()
C,order by
 數據排序
  order by  位置在語句最後面
  order by 排序標準 排序方式
  升序(自然排序,字典排序) asc  降序(反自然,反字典) desc
  按照工資排序 顯示 id first_name salary
  select id,first_name,salary form s_emp order by salary desc;
  按照manmager_id 排序
  顯示id first_name,manager_id
  select id,first_name,manager_id from s_emp order by manager_id;
  NULL 在排序中當最大值處理
  當按照第一個排序時,如果第一個字一樣,按照第二排序字段。
  select id,first_name,salary from s_emp order by salary asc,first_name desc;
D,單行函數
  1  概念
單行函數:針對sql影響的每一行數據都做處理,每一行都會返回一個結果
  sql語句影響多少行 就返回多少個結果
  組函數:針對一組數據做處理,返回一個結果。無論sql語句影響多少行都返回一個結果。
  2  舉例  組函數 count
  select count(id) from s_emp
  where id>1;   
  select upper(first_name) from s_emp where id = 1;
  3 爲了測試單行函數  引入了一張表 dual
   select * from dual;
  4 處理字符串的單行函數
   upper(par1) 轉化大寫
   lower(par2) 轉化小寫
   select lower('HELLO')from dual;
   initcap(par1) 把每個單詞的首字母變大寫
   select initcap('one world one dream') from dual;
   length(par1) 求字符串的長度
   select length('hello') from dual;
   把s_emp表中所有first_name 和first_name的長度列出來
   select first_name,length(first_name) from s_emp;
  
E,多表查詢
F,組函數和分組
G,子查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章