<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 4  文章 - 10  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     目前常用的數據庫有 Oracle 公司的 Oracle Microsoft 公司的 SQL Server IBM 公司的 DB2 MySql 公司的 MySql, 而免費的數據庫目前只有 MySql ,當然盜版的不算。

      SQL (Structured Query Language) 結構化查詢語言是目前一個國際上標準的數據庫專用語言。

    不過不同的數據庫所使用的 SQL 語句都會稍有一些不同,但基本的標準還是會遵循 SQL ,例如:

    用與 SQL Server 的叫做 PL-SQL ,用于 Oracle 的叫做 T-SQL ,它們都是 SQL 的子類,或者說是派生類。用于 MySql 的我還不知道它叫做什么 SQL ,不過個人覺得它反而最接近標準的 SQL 語言,不過,從另一方面來說,它對 SQL 所做的擴展最少。

      就我現在的理解 SQL 語言就是用來使用數據庫和操作數據用的,不包括操作數據庫,那些操作數據庫的代碼應該叫做命令,如:啟動,關閉數據庫,設置字符集,設置訪問連接用戶數等,這些不屬于 SQL 語言,不同的數據庫都有自己的命令,這些命令是生產企業制定的。下面,我大概來說一下 SQL 所做的事情創建數據庫,創建表,插入、修改、刪除數據,

    查詢數據(最主要的是這個功能,方便數據的儲存和查詢是人們發明數據庫的理由)。

    當然,我下面介紹的 SQL 都是用于 MySql 的。

                                  SQL 基礎知識

    一、 數據類型

    INT [ 常用 ] 整數 BIGIN 大整數 FLOAT ( 單精密 ) 浮點數字 DOUBLE [ 常用 ] ( 雙精密 ) 浮點數字

    NUMERIC(M,D) [ 常用 ] 未壓縮 (unpack) 的浮點數字, 未壓縮 意味著數字作為一個字符串被存儲,值的每一位使用一個字符。例: NUMERIC(16,2) 表示這個 浮點數字的儲存空間為 16 個字節,精度為 2 (即小數點后保留 2 位數字)。

    DATE [ 常用 ] 日期   DATETIME [ 常用 ] 日期和時間組合   CHAR(M) 一個定長字符串

    TIMESTAMP(M) [ 常用 ] 時間戳記。以 YYYYMMDDHHMMSS YYMMDDHHMMSS YYYYMMDD YYMMDD 格式來顯示 TIMESTAMP 值,例: TIMESTAMP(14) 格式為YYYYMMDDHHMMSSTIMESTAMP(8) 格式為YYYYMMDD

    VARCHAR(M) [ 常用 ] 可變長度的字符串   BLOB 大對象存儲類型

    TEXT [ 常用 ] 大文本存儲類型, 最大長度為 65535(2^16-1) 個字符

    我覺得用的多的類型用 [ 常用 ] 標記了一下,相關時間的那幾個各有各的優點,就看你的需要了。

    二、 變量

    declare @iAge int -- 聲明變量

    set @iAge = 12 -- 給變量附值

    print @iAge -- 打印變量

    select @ iAge:= ’iage’ from employe where name=’Bill’ ; 將查詢到字段給變量附值

    注意 : 這里, select 語句中我們不得不使用 := 句法,因為 = 是為比較保留的

    三、 邏輯控制

    -- IF 條件判斷

    declare @i int

    set @i = 12

    if (@i > 10)

           begin                           

                  print 'Dadadada!'

                  print 'Dadadada!'

           end                      

    else

           begin

                  print 'XiaoXiao!'

                  print 'XiaoXiao!'

           end

     

    -- While 循環控制

    declare @i int;

    set @i = 12;

    print @i

    return;

    while (@i < 18)

    begin

           print @i;

           set @i = @i + 1;

           if @i < 17

                  continue;

           if @i > 15

                  break;

    end;

     

    -- CASE 分支判斷

    select au_lname, state, ' 猶他州 ' from authors where state = 'UT'

    select au_lname, state, ' 密西西比州 ' from authors where state = 'MI'

    select au_lname, state, ' 肯塔基州 ' from authors where state = 'KS'

     

    select au_lname, state,

           case state

           when 'UT' then ' 猶他州 '

           when 'MI' then ' 密西西比州 '

           when 'KS' then ' 肯塔基州 '

           when 'CA' then ' 加利福利亞 '

           else state

           end

    from authors

    四、 函數

    這部分的內容很多 , 我也不是很熟這里就我所知道的列一點 :

    -- 獲取給定字符串的長度

    print length('abcdef')

    -- 大小寫轉換

    print lower('ABCDEF')

    print upper('abcdef')

    -- 去空格

    print ltrim('    abcd  dfd  df  ')

    print rtrim('    abcd  dfd  df  ')

    -- 求絕對值

    print abs(-12)

    --

    -- 3 2 次方

    print power(3,2)

    -- 隨機數

    -- 0 - 1000 之間的隨機數

    print rand() * 1000

    -- 獲取圓周率

    print pi()

    -- 獲取系統時間

    print now()

    -- 獲取指定時間之間相隔多少年

    print datediff(year, '2005-01-01', '2008-01-01')

    -- 字符串合并

    print 'abc' + 'def'

    print 'abc' + '456'

    -- 獲取指定時間的特定部分

    print datepart(year, now())

    -- 獲取字符串中的一段

    print SUBSTRING( abcdef ,1,3)

    -- 獲取紀錄個數

    select count(*) from employe;

    -- 獲取指定工資的和

    select sum(salary) from employe;

    -- 獲取年齡大于 30 歲員工的最高工資

    select max(salary) from employe where iage>30;

    等等

    五、 注釋

      # 單行注釋   -- 單行注視   /* 內容 */ 多行注釋

     

    SQL 常規應用

    一、 創建數據庫

    用給定的名字創建一個數據庫

    CREATE DATABASE db_name

    刪除數據庫中給定名字的數據庫(慎重使用)

    DROP DATABASE [IF EXISTS] db_name

    調出要用的數據庫

    USE db_name

    下面是一個完整的創建例子,同時創建了一個數據庫 log 文件

    -- 指定數據庫名稱

    -- ( 注:如果數據庫名中包含空格可以使用 [] 將其標示 )

    create database [Super WC]

    -- 關于數據文件的定義

    on

    (

    name = Super_WC_Data,                       -- 邏輯名

    filename = 'C:\Super_WC_Data.MDF',            -- 物理路徑以及物理名

    size = 2MB,                                   -- 初始大小

    maxsize = 4MB,                             -- 最大限制

    filegrowth = 1MB                                                                            -- 增長大小

    )

    -- 關于日志文件的定義

    log on

    (

    name = Super_WC_Log,

    filename = 'C:\Super_WC_Log.LDF',

    size = 3MB,

    maxsize = 7MB,

    filegrowth = 20%                                                                            -- 增長比例

    )

    二、 創建表

    drop table if exists auto_incr_test; -- 先把以前數據庫中有可能存在的表刪除

    create table auto_incr_test (

    id int not null auto_increment,  -- 這里的 not null 代表這一列的值不能為空默認是 null

    name char(40),

    timestamp timestamp,

    primary key (id)  -- 創建主鍵

    foreign key (name) references students (no),  -- 創建外鍵

    )

    /* 上面出現的 auto_increment 代表了 id 這個列是一個自動增長列 */

    要刪除這個表就用 drop table auto_incr_test; 就可以了 .

     

    下面是包含約束的情況(設置約束可以增強數據庫的完整性,但需要事先精確的設計,因為改動起來實在是太麻煩了):

    create table students

    (

    no        char(4)      not null   auto_increment primary key,

    name      nvarchar(8)   not null,

    birthday  datetime           check(datediff(year, birthday, now()) >= 18),

    age       as datediff(year, birthday, now ()),

    sex        nchar(1)            not null default(' ') check(sex = ' ' or sex = ' '),

    phone     char(11)               check((phone is null) or (length(phone) = 11)),

    address   nvarchar(24)

    )

    注意:表創建后修改起來比較麻煩,如果不是一定要修改的話可以刪了再創建,盡量設計時就把握好需求,設計完美一點。

    三、 數據操作 ( 添、刪、改、查 ) ß 傳說中著名的添刪改查

    添加操作 (insert) 的語法格式:

    Insert [into] 數據表 ( 字段 ) values ( 數據 )  -- [into] 可以省略
    例:INSERT tbl_name (col1,col2) VALUES(15, ’abc’ );
     

    修改操作 (update) 的語法格式:

    Update 數據表 set 字段 = 新值 where 條件
    例:UPDATE tbl_name SET col2=  ’BBB’ WHERE col2=’abc’;

    刪除操作 (delete) 的語法格式:

    Delete [from] 數據表 where 條件   -- [] 內的可寫可不寫,最好是寫,不過懶人都不寫
    例:DELETE tbl_name  WHERE col2=’abc’  ;
     

      查詢操作 (select) 的語法格式:

    select 字段 from 數據表 where 條件 order by 字段 desc/asc

    /* 這里的 order by 是用來指定排序依賴列, desc 是指以降序排列(默認的是 asc 升序) */
    例:SELECT col1,col2 FROM tbl_name  WHERE col2=’abc’ ORDER BY col1 DESC ;
        

    注意:方便數據的儲存和查詢是人們發明數據庫的理由,所以查詢操作是 SQL 中的精髓之一,我上面的格式只是列出了較常用的格式,但只要是程序功能要求稍微復雜點的就要用到許多查詢語句的高級特性了,我會在后面介紹我所能了解的。

     

    SQL 高級應用

    一、 高級查詢

    1 .高級查詢(就是把 SQL 定義的 SELECT 語句的語法都用到了的)
    SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]  
    [DISTINCT | DISTINCTROW | ALL]
    select_expression,...
    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
    [FROM table_references
    [WHERE where_definition]
    [GROUP BY col_name,...]
    [HAVING where_definition]
    [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
    [LIMIT [offset,] rows]
    [PROCEDURE procedure_name] ]
    GROUP BY 用于分組查詢
    HAVING 用于聚合函數的查詢條件
    LIMIT 用于限制SELECT語句返回的行數

    2 .多表查詢(又叫聯合查詢)

    查找與多個表相關的數據,例:

    Select name,iage,city from students a inner join address b where a.addressid=b.id and name= ’Bill’ ;

    3 .子查詢(很多內容,我不能盡舉)

    有兩種類型的子查詢:“嵌套”子查詢和“相關”子查詢。

    例:

    -- 子查詢

    -- 根據作者的名查找其編寫的書籍

    -- 先通過子查詢獲取作者編號

    -- 然后,將其作為查詢條件,找出相應的書籍編號

    -- 最后,在利用所得到的書籍編號來得到書籍信息

    select au_id, title_id from titleauthor

    where au_id =

           (select au_id from authors where au_lname = 'Green')

     

    select * from titles

    where title_id in

           (

           select title_id from titleauthor

                  where au_id =

                  (select au_id from authors where au_lname = 'Green')

           )

    二、 視圖

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

        VIEW view_name [(column_list)]

        AS select_statement

        [WITH [CASCADED | LOCAL] CHECK OPTION]

    例:

    CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;

    三、 存儲過程

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])

        [characteristic ...] routine_body

    例:

    create procedure proGetJobsByPage

    @CurrentPageSize int,

    @PageSize int,

    @CurrentPage int

    as

    Declare @strSql nvarchar(400)

    set @strSql = 'select * from

                  (select top ' + convert(nvarchar(4), @CurrentPageSize) + ' *

                  from (select top ' + convert(nvarchar(4),(@PageSize * @CurrentPage)) + ' * from jobs) as tt

                  order by job_id desc) as stt

                  order by job_id'

    exec sp_executesql @strSql

     

    四、 觸發器

    CREATE TRIGGER trigger_nametrigger_timetrigger_event

    ON tbl_name FOR EACH ROW trigger_stmt

    例:

    -- 創建插入觸發器

    create trigger emp_marins

    on emp_mgr

    for insert

    as

    declare @e char(30),@m char(30)

    declare cur_mgr cursor for

           select emp_mgr.emp

           from emp_mgr,inserted

           where emp_mgr.emp = inserted.mgr

     

    open  cur_mgr

     

    fetch next from cur_mgr into @e

     

    while @@fetch_status = 0

    begin

           update emp_mgr

           set emp_mgr.NoOfReports = emp_mgr.NoOfReports + 1

           where emp_mgr.emp = @e

          

           fetch next from cur_mgr into @e

    end

     

    close cur_mgr

     

    deallocate cur_mgr

     

    五、 索引(很有用,可以提高查詢語句的執行效率)

    CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

        [USING index_type]

        ON tbl_name (index_col_name,...)

    例:

    此處展示的語句用于創建一個索引,索引使用列 name

    CREATE INDEX part_of_name ON customer (name);

     

    OK ,先些這些啦,累死了,呵呵

    (如有錯誤,請大家不吝賜教

    posted on 2007-08-13 15:41 冬天出走的豬 閱讀(273) 評論(0)  編輯  收藏 所屬分類: Database
    主站蜘蛛池模板: 四虎影视在线永久免费观看| 亚洲热妇无码AV在线播放| 一级片在线免费看| 亚洲va无码手机在线电影| 9久9久女女免费精品视频在线观看| 国产AV无码专区亚洲AV麻豆丫| 国产亚洲精品看片在线观看| 亚欧人成精品免费观看| 在线观看亚洲专区| 老汉色老汉首页a亚洲| 国产成人一区二区三区免费视频| 在线观看片免费人成视频无码| 亚洲1区1区3区4区产品乱码芒果 | 亚洲欧洲第一a在线观看| 免费人成在线视频| a级毛片100部免费观看| 亚洲AV男人的天堂在线观看| 亚洲色无码专区在线观看| 国产精品成人免费视频网站京东| 国产伦精品一区二区免费| 亚洲一区二区无码偷拍| 亚洲精品免费视频| 三上悠亚亚洲一区高清| 久久电影网午夜鲁丝片免费| 特级精品毛片免费观看| 免费夜色污私人影院网站电影| 亚洲精品在线视频观看| 中文字幕日韩亚洲| 国产无遮挡裸体免费视频| 日本片免费观看一区二区| 99久久免费国产特黄| 无码天堂亚洲国产AV| 中中文字幕亚洲无线码| 午夜亚洲国产理论秋霞| 亚洲国产精品尤物yw在线| 最新中文字幕免费视频| 毛片免费全部播放无码| 成人无码区免费A∨直播| 狠狠入ady亚洲精品| 亚洲熟妇av午夜无码不卡| 亚洲精品国产手机|